diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product.php b/app/code/Magento/Catalog/Block/Adminhtml/Product.php
index cad79a874c4ff2ca10d9669431f1a41e08411499..5d44134b06e440504342d4878293575b4e4d7fd1 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product.php
@@ -13,11 +13,6 @@ namespace Magento\Catalog\Block\Adminhtml;
 
 class Product extends \Magento\Backend\Block\Widget\Container
 {
-    /**
-     * @var string
-     */
-    protected $_template = 'catalog/product.phtml';
-
     /**
      * @var \Magento\Catalog\Model\Product\TypeFactory
      */
@@ -63,10 +58,6 @@ class Product extends \Magento\Backend\Block\Widget\Container
         ];
         $this->buttonList->add('add_new', $addButtonProps);
 
-        $this->setChild(
-            'grid',
-            $this->getLayout()->createBlock('Magento\Catalog\Block\Adminhtml\Product\Grid', 'product.grid')
-        );
         return parent::_prepareLayout();
     }
 
@@ -111,16 +102,6 @@ class Product extends \Magento\Backend\Block\Widget\Container
         );
     }
 
-    /**
-     * Render grid
-     *
-     * @return string
-     */
-    public function getGridHtml()
-    {
-        return $this->getChildHtml('grid');
-    }
-
     /**
      * Check whether it is single store mode
      *
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Collection.php b/app/code/Magento/Catalog/Model/Resource/Product/Collection.php
index f3bc63e905322f5dc120ac64d88ae8045582b254..91b866faf47fa5498bd19adfff72f28acc5fdb0a 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Collection.php
+++ b/app/code/Magento/Catalog/Model/Resource/Product/Collection.php
@@ -725,7 +725,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
         if ($this->isLoaded()) {
             return $this;
         }
-        parent::load($printQuery = false, $logQuery = false);
+        parent::load($printQuery, $logQuery);
 
         if ($this->needToAddWebsiteNamesToResult) {
             $this->doAddWebsiteNamesToResult();
diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
index 18e1461d8687717710370494869e361b11d3302c..128e757ab53eb8ef66a5c16930cf9061381566ea 100644
--- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
+++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
@@ -7,6 +7,11 @@ namespace Magento\Catalog\Ui\Component;
 
 class ColumnFactory
 {
+    /**
+     * @var int
+     */
+    private $columnSortOrder = 0;
+
     /**
      * @var \Magento\Framework\View\Element\UiComponentFactory
      */
@@ -44,10 +49,12 @@ class ColumnFactory
     /**
      * @param \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute
      * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
+     * @param int $columnsAmount
      * @return \Magento\Ui\Component\Listing\Columns\ColumnInterface
      */
-    public function create($attribute, $context)
+    public function create($attribute, $context, $columnsAmount)
     {
+        $this->columnSortOrder += 1;
         $columnName = $attribute->getAttributeCode();
         $config = [
             'label' => __($attribute->getDefaultFrontendLabel()),
@@ -56,6 +63,7 @@ class ColumnFactory
             'align' => 'left',
             'add_field' => true,
             'visible' => $attribute->getIsVisibleInGrid(),
+            'sortOrder' => $this->columnSortOrder + $columnsAmount,
         ];
 
         if ($attribute->usesSource()) {
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
index a660d54191ee45f9b156f62717236e8847d4d3d7..68d9866733af053ae83cf7a92d0bd8c9964ac0af 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
@@ -31,9 +31,10 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
      */
     public function prepare()
     {
+        $columnsAmount = count($this->components);
         foreach ($this->attributeRepository->getList() as $attribute) {
             if (!isset($this->components[$attribute->getAttributeCode()])) {
-                $column = $this->columnFactory->create($attribute, $this->getContext());
+                $column = $this->columnFactory->create($attribute, $this->getContext(), $columnsAmount);
                 $column->prepare();
                 $this->addComponent($attribute->getAttributeCode(), $column);
             }
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/ProductActions.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/ProductActions.php
index 4a9b0b3d503d6d604b374ac3c8bfb6e6f96fbbab..586ed53cd90f6862c32e0460c6ceebaa6f01a5e5 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/ProductActions.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/ProductActions.php
@@ -49,7 +49,7 @@ class ProductActions extends Column
         if (isset($dataSource['data']['items'])) {
             foreach ($dataSource['data']['items'] as &$item) {
                 $item[$this->getData('name')]['edit'] = [
-                    'href' => $this->urlBuilder->getUrl('catalog/*/edit', ['id' => $item['entity_id']]),
+                    'href' => $this->urlBuilder->getUrl('catalog/product/edit', ['id' => $item['entity_id']]),
                     'label' => __('Edit'),
                     'hidden' => false,
                 ];
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Websites.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Websites.php
index e5f53b3676d0ea731c21649367455e7a64914905..5282a3e03ce8ab0e00272a95408c2945e9393ab9 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Websites.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Websites.php
@@ -41,6 +41,27 @@ class Websites extends \Magento\Ui\Component\Listing\Columns\Column
         $this->storeManager = $storeManager;
      }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function prepareDataSource(array & $dataSource)
+    {
+        $websiteNames = [];
+        foreach ($this->getData('options') as $website) {
+            $websiteNames[$website->getWebsiteId()] = $website->getName();
+        }
+        if (isset($dataSource['data']['items'])) {
+            $fieldName = $this->getData('name');
+            foreach ($dataSource['data']['items'] as & $item) {
+                $websites = [];
+                foreach ($item[$fieldName] as $websiteId) {
+                    $websites[] = $websiteNames[$websiteId];
+                }
+                $item[$fieldName] = implode(', ', $websites);
+            }
+        }
+    }
+
     /**
      * Prepare component configuration
      */
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php
index c0fcad416b0d927977cee511e9443bff015b2c0f..38c5698027281a5d5c21ffddc8f1cf3c548f3a51 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php
@@ -5,16 +5,11 @@
  */
 namespace Magento\Catalog\Ui\DataProvider\Product;
 
-use Magento\Framework\App\RequestInterface;
 use Magento\Framework\Data\Collection;
-use Magento\Store\Model\Store;
 use Magento\Store\Model\StoreManagerInterface;
-use Magento\Ui\DataProvider\AddFieldToCollectionInterface;
+use Magento\Ui\DataProvider\AddFilterToCollectionInterface;
 
-/**
- * Class AddStoreFieldToCollection
- */
-class AddStoreFieldToCollection implements AddFieldToCollectionInterface
+class AddStoreFieldToCollection implements AddFilterToCollectionInterface
 {
     /**
      * Store manager
@@ -23,45 +18,24 @@ class AddStoreFieldToCollection implements AddFieldToCollectionInterface
      */
     protected $storeManager;
 
-    /**
-     * Request
-     *
-     * @var RequestInterface
-     */
-    protected $request;
-
     /**
      * Construct
      *
      * @param StoreManagerInterface $storeManager
-     * @param RequestInterface $request
      */
-    public function __construct(
-        StoreManagerInterface $storeManager,
-        RequestInterface $request
-    ) {
+    public function __construct(StoreManagerInterface $storeManager)
+    {
         $this->storeManager = $storeManager;
-        $this->request = $request;
     }
 
     /**
      * {@inheritdoc}
      */
-    public function addField(Collection $collection, $field, $alias = null)
+    public function addFilter(Collection $collection, $field, $condition = null)
     {
-        $store = $this->getStore();
-        if ($store->getId()) {
-            $collection->addStoreFilter($store);
+        $storeId = isset($condition['eq'])  ? $condition['eq'] : null;
+        if ($storeId) {
+            $collection->addStoreFilter($this->storeManager->getStore($storeId));
         }
     }
-
-    /**
-     * Get store
-     *
-     * @return Store
-     */
-    protected function getStore()
-    {
-        return $this->storeManager->getStore($this->request->getParam('store', Store::DEFAULT_STORE_ID));
-    }
 }
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php
index 81394864eddf697712e0e49bc20f4c2505755760..f4f8e690aeb3f0711b769fd71da87d8067e85014 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php
@@ -24,6 +24,11 @@ class ProductDataProvider extends \Magento\Ui\DataProvider\AbstractEavDataProvid
      */
     protected $addFieldStrategies;
 
+    /**
+     * @var \Magento\Ui\DataProvider\AddFilterToCollectionInterface[]
+     */
+    protected $addFilterStrategies;
+
     /**
      * Construct
      *
@@ -32,6 +37,7 @@ class ProductDataProvider extends \Magento\Ui\DataProvider\AbstractEavDataProvid
      * @param string $requestFieldName
      * @param CollectionFactory $collectionFactory
      * @param \Magento\Ui\DataProvider\AddFieldToCollectionInterface[] $addFieldStrategies
+     * @param \Magento\Ui\DataProvider\AddFilterToCollectionInterface[] $addFilterStrategies
      * @param array $meta
      * @param array $data
      */
@@ -41,12 +47,14 @@ class ProductDataProvider extends \Magento\Ui\DataProvider\AbstractEavDataProvid
         $requestFieldName,
         CollectionFactory $collectionFactory,
         array $addFieldStrategies,
+        array $addFilterStrategies,
         array $meta = [],
         array $data = []
     ) {
         parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
         $this->collection = $collectionFactory->create();
         $this->addFieldStrategies = $addFieldStrategies;
+        $this->addFilterStrategies = $addFilterStrategies;
     }
 
     /**
@@ -91,4 +99,16 @@ class ProductDataProvider extends \Magento\Ui\DataProvider\AbstractEavDataProvid
             $this->addFieldStrategies['default']->addField($this->getCollection(), $field, $alias = null);
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function addFilter($field, $condition = null)
+    {
+        if (isset($this->addFilterStrategies[$field])) {
+            $this->addFilterStrategies[$field]->addFilter($this->getCollection(), $field, $condition);
+        } else {
+            parent::addFilter($field, $condition);
+        }
+    }
 }
diff --git a/app/code/Magento/Catalog/etc/adminhtml/di.xml b/app/code/Magento/Catalog/etc/adminhtml/di.xml
index c29f0652811a1f4e8e44cf17c064c9459ad9b5ef..a1b392c9586666ac5dbe7002ce2fa588b34f23ab 100644
--- a/app/code/Magento/Catalog/etc/adminhtml/di.xml
+++ b/app/code/Magento/Catalog/etc/adminhtml/di.xml
@@ -71,7 +71,9 @@
             <argument name="addFieldStrategies" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Ui\DataProvider\AddFieldToEavCollection</item>
                 <item name="websites" xsi:type="object">Magento\Catalog\Ui\DataProvider\Product\AddWebsitesFieldToCollection</item>
-                <item name="store" xsi:type="object">Magento\Catalog\Ui\DataProvider\Product\AddStoreFieldToCollection</item>
+            </argument>
+            <argument name="addFilterStrategies" xsi:type="array">
+                <item name="store_id" xsi:type="object">Magento\Catalog\Ui\DataProvider\Product\AddStoreFieldToCollection</item>
             </argument>
         </arguments>
     </type>
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_index.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_index.xml
index 14d34d03d4bb488004be22ff5f6c1d407450ce1f..c61f287a6aad330814187a7d8cdac4d982e276df 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_index.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_index.xml
@@ -6,6 +6,7 @@
  */
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
+    <update handle="styles"/>
     <body>
         <referenceBlock name="menu">
             <action method="setActive">
@@ -17,21 +18,9 @@
                 <argument name="class" xsi:type="string">complex</argument>
             </action>
         </referenceBlock>
-        <referenceContainer name="page.main.actions">
-            <block class="Magento\Backend\Block\Store\Switcher" name="store_switcher">
-                <action method="setUseConfirm">
-                    <argument name="params" xsi:type="string">1</argument>
-                </action>
-            </block>
-        </referenceContainer>
         <referenceContainer name="content">
             <uiComponent name="product_listing"/>
             <block class="Magento\Catalog\Block\Adminhtml\Product" name="products_list"/>
         </referenceContainer>
-        <referenceContainer name="product.grid">
-            <block class="Magento\Framework\View\Element\Text\ListText" name="grid.bottom.links">
-                <block class="Magento\Catalog\Block\Adminhtml\Rss\Grid\Link" name="grid.rss.link"/>
-            </block>
-        </referenceContainer>
     </body>
 </page>
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 075ff83d009bc1ef4fdca9fe6a89982afedfe45f..08590256e9dbc571e64591a0077a988c70b3a9f6 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
@@ -113,6 +113,9 @@
                         <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 name="imports" xsi:type="array">
+                            <item name="visible" xsi:type="string"></item>
+                        </item>
                     </item>
                 </argument>
             </filterSelect>
@@ -199,7 +202,7 @@
                 </item>
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="appendTo" xsi:type="string"></item>
+                    <item name="sortOrder" xsi:type="number">0</item>
                 </item>
             </argument>
         </column>
@@ -213,6 +216,7 @@
                     <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">1</item>
                 </item>
             </argument>
         </column>
@@ -230,6 +234,7 @@
                     <item name="sorting" xsi:type="string">asc</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">2</item>
                 </item>
             </argument>
         </column>
@@ -244,6 +249,7 @@
                     <item name="sorting" xsi:type="string">asc</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">3</item>
                 </item>
             </argument>
         </column>
@@ -257,6 +263,7 @@
                     <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">4</item>
                 </item>
             </argument>
         </column>
@@ -270,6 +277,7 @@
                     <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">5</item>
                 </item>
             </argument>
         </column>
@@ -283,6 +291,7 @@
                     <item name="sorting" xsi:type="string">asc</item>
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
+                    <item name="sortOrder" xsi:type="number">6</item>
                 </item>
             </argument>
         </column>
@@ -297,6 +306,7 @@
                     <item name="sorting" xsi:type="string">asc</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">7</item>
                 </item>
             </argument>
         </column>
@@ -311,6 +321,7 @@
                     <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">8</item>
                 </item>
             </argument>
         </column>
@@ -325,6 +336,7 @@
                     <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">9</item>
                 </item>
             </argument>
         </column>
@@ -332,34 +344,21 @@
             <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/select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/sortable</item>
                 </item>
                 <item name="config" xsi:type="array">
                     <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>
-            </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/sortable</item>
-                </item>
-                <item name="config" xsi:type="array">
-                    <item name="add_field" xsi:type="boolean">true</item>
-                    <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 name="sortOrder" xsi:type="number">10</item>
                 </item>
             </argument>
         </column>
         <column name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <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>
diff --git a/app/code/Magento/Ui/DataProvider/AddFilterToCollectionInterface.php b/app/code/Magento/Ui/DataProvider/AddFilterToCollectionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc52878544d28bee3f83733eaba21b03873e274d
--- /dev/null
+++ b/app/code/Magento/Ui/DataProvider/AddFilterToCollectionInterface.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Ui\DataProvider;
+
+use Magento\Framework\Data\Collection;
+
+/**
+ * AddFilterToCollection interface
+ */
+interface AddFilterToCollectionInterface
+{
+    /**
+     * @param Collection $collection
+     * @param $field
+     * @param null $condition
+     * @return mixed
+     */
+    public function addFilter(Collection $collection, $field, $condition = null);
+}