diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0fe6136eae11b77787726d44f517df9e536c0cdb..a1d98332be0d5c39a997f7ce570933320e08c8e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,42 @@
+0.74.0-beta14
+=============
+* Framework improvements:
+    * Introduced an ability to uninstall modules which were installed via composer (bin/magento module:uninstall <moduleName>)
+    * Introduced an ability to uninstall themes (bin/magento theme:uninstall <themeName>)
+    * Introduced an ability to backup and rollback DB and Media via CLI (bin/magento setup:backup, options are --code, --db or --media)
+    * Introduced an ability to uninstall language packages (bin/magento i18n:uninstall <languagePack>)
+    * Introduced API notation for the following modules: Backend, Backup, Cron, Log, PageCache 
+    * Added join processors to search services, joined config for services with extension attributes
+    * Renamed hidden_tax to discount_tax_compensation 
+    * The customer address entity table was transformed from EAV into a flat model to minimize database operations
+* Fixed bugs:
+    * Fixed an issue where Setup Wizard failed on readiness check when Magento was deployed by composer create-project
+    * Fixed the local file path disclosure when trying to browse image cache directory  
+    * Fixed an issue where development errors resulted in too many redirects 
+    * Fixed an integration test failure in Reports ViewedTest 
+    * Fixed an issue where it was impossible to save existent Grouped Product with no child items 
+    * Fixed an issue where message "We don't have as many "conf1" as you requested" appeared 
+    * Fixed an issue where second product from bundle product was ordered as separate item after checkout 
+    * Fixed an issue where configs for payments and shippings were not encrypted 
+    * Fixed an issue where Table Rates shipping method did not work 
+    * Fixed an issue where admin could not set locale properly on Account page 
+    * Fixed incomplete generated results of single tenant compiler 
+    * Fixed an issue with full page caching where one set of prices was cached for all customers 
+    * Fixed incorrect urls for private content 
+    * Fixed an issue where it was not possible to assign a product link to another product using API 
+    * Fixed an issue where zipcode was not displayed as required field on Create New Order page 
+    * Fixed the Sample Data re-installation 
+    * Fixed random fails on inventory tab for test CreateSimpleProductEntityTest
+* Tests:
+    * Covered various modules with unit tests 
+    * Functional tests fixed and maintained
+* GitHub issues:
+    * [#1156](https://github.com/magento/magento2/pull/1156) -- Moves common code to all auto-generated Interceptor classes into a trait
+    * [#1206](https://github.com/magento/magento2/pull/1206) -- Allow modules to live outside of app/code directory
+    * [#1245](https://github.com/magento/magento2/pull/1245) -- Unable to save product per website wise
+    * [#1347](https://github.com/magento/magento2/pull/1347) -- Fixed failing Install during integration tests (MAGETWO-38482)
+    * [#1368](https://github.com/magento/magento2/pull/1368) -- Fix typo in getCurrentCategoryKey
+    
 0.74.0-beta13
 =============
 * Framework improvements:
diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json
index d26dfd7372721000e9973b16a3ea720e1e09a6e5..5ae1d3e4e2009835a572a2c9081ee74619532b51 100644
--- a/app/code/Magento/AdminNotification/composer.json
+++ b/app/code/Magento/AdminNotification/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json
index c8b52c1509eb996357137da8f799be5d85c864d7..3e7abff2e19eca58d7d762c6f90932188af3aef6 100644
--- a/app/code/Magento/AdvancedPricingImportExport/composer.json
+++ b/app/code/Magento/AdvancedPricingImportExport/composer.json
@@ -3,16 +3,16 @@
   "description": "N/A",
   "require": {
     "php": "~5.5.0|~5.6.0",
-    "magento/module-catalog": "0.74.0-beta13",
-    "magento/module-import-export": "0.74.0-beta13",
-    "magento/module-catalog-import-export": "0.74.0-beta13",
-    "magento/module-customer": "0.74.0-beta13",
-    "magento/module-store": "0.74.0-beta13",
-    "magento/framework": "0.74.0-beta13",
+    "magento/module-catalog": "0.74.0-beta14",
+    "magento/module-import-export": "0.74.0-beta14",
+    "magento/module-catalog-import-export": "0.74.0-beta14",
+    "magento/module-customer": "0.74.0-beta14",
+    "magento/module-store": "0.74.0-beta14",
+    "magento/framework": "0.74.0-beta14",
     "magento/magento-composer-installer": "*"
   },
   "type": "magento2-module",
-  "version": "0.74.0-beta13",
+  "version": "0.74.0-beta14",
   "license": [
     "OSL-3.0",
     "AFL-3.0"
diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json
index 9225d004e7ce2f5753e0f21d8f95ca2fb7cbe9cf..9ce77947a0b214ceb0d0dd04c9e35f6e6c602ca2 100644
--- a/app/code/Magento/Authorization/composer.json
+++ b/app/code/Magento/Authorization/composer.json
@@ -3,12 +3,12 @@
     "description": "Authorization module provides access to Magento ACL functionality.",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json
index b7e2b7bc15ba6f54e72cc1d6b084c18876592c52..b2b20216cf652a430d51f44492332e150011cd7d 100644
--- a/app/code/Magento/Backend/composer.json
+++ b/app/code/Magento/Backend/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-developer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-cron": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-reports": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-user": "0.74.0-beta13",
-        "magento/module-backup": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-translation": "0.74.0-beta13",
-        "magento/module-require-js": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-developer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-cron": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-reports": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-user": "0.74.0-beta14",
+        "magento/module-backup": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-translation": "0.74.0-beta14",
+        "magento/module-require-js": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json
index 30ca528748ce5de5d93f6cf933d2b5bc8bc24cd1..74b0a704e1de9374392c01a64e69b075fc416fde 100644
--- a/app/code/Magento/Backup/composer.json
+++ b/app/code/Magento/Backup/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-cron": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-cron": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json
index ddc09411834f50f6715db4ad8103539915f34a44..f3017a3a8dda032fb32a79cff12622d3cb601bc2 100644
--- a/app/code/Magento/Bundle/composer.json
+++ b/app/code/Magento/Bundle/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-catalog-rule": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-gift-message": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-catalog-rule": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-gift-message": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-webapi": "0.74.0-beta13"
+        "magento/module-webapi": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/BundleImportExport/composer.json b/app/code/Magento/BundleImportExport/composer.json
index ddbc85cb67cb1d20f44a4bdb9c64ab3bf44f0127..78b23b0ff876b31caff7359c35e625ee986e6100 100755
--- a/app/code/Magento/BundleImportExport/composer.json
+++ b/app/code/Magento/BundleImportExport/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/module-catalog-import-export": "0.74.0-beta13",
-        "magento/module-bundle": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/module-catalog-import-export": "0.74.0-beta14",
+        "magento/module-bundle": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CacheInvalidate/composer.json b/app/code/Magento/CacheInvalidate/composer.json
index 5045f5b065cb0b6b80ecc9810dd84ed828bc7c26..5f5a8b2ce39bfa5fff3162892d333dcbd8c1659f 100644
--- a/app/code/Magento/CacheInvalidate/composer.json
+++ b/app/code/Magento/CacheInvalidate/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json
index 8e61f79ac764e5f722d5de600b515d27f5abc4be..044ade39edc271c3b8d5d1b4f9aebcb1cc740e90 100644
--- a/app/code/Magento/Captcha/composer.json
+++ b/app/code/Magento/Captcha/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
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 54a51a1a55148aee7edeb0d7fb509d7175b408e4..ee730b9be8157e2d794ff954d9e173676cf4b32b 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
@@ -132,7 +132,7 @@ class Category extends \Magento\Framework\Data\Form\Element\Multiselect
                     'id' => 'add_category_button',
                     'label' => $newCategoryCaption,
                     'title' => $newCategoryCaption,
-                    'onclick' => 'jQuery("#new-category").trigger("openModal")',
+                    'onclick' => 'jQuery("#new-category").modal("openModal")',
                     'disabled' => $this->getDisabled(),
                 ]
             );
diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json
index 2c1ac69b4bbf736b53a62ea9d6387171ece6e7f4..7c1d49431e273833b821bae24c446d3364c6b458 100644
--- a/app/code/Magento/Catalog/composer.json
+++ b/app/code/Magento/Catalog/composer.json
@@ -3,37 +3,37 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-indexer": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-log": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-msrp": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-catalog-rule": "0.74.0-beta13",
-        "magento/module-product-alert": "0.74.0-beta13",
-        "magento/module-url-rewrite": "0.74.0-beta13",
-        "magento/module-catalog-url-rewrite": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-indexer": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-log": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-msrp": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-catalog-rule": "0.74.0-beta14",
+        "magento/module-product-alert": "0.74.0-beta14",
+        "magento/module-url-rewrite": "0.74.0-beta14",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta13"
+        "magento/module-cookie": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
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 552e6a3a70ee729d5bcc8367b3f50312d5061adf..d70f2e17193afe202495b505a22cf26416dbdae7 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
@@ -111,7 +111,7 @@ define([
                                 $('#new_category_name, #new_category_parent-suggest').val('');
                                 $suggest.val('');
                                 clearParentCategory();
-                                widget.element.trigger('closeModal');
+                                $(widget.element).modal('closeModal');
                             } else {
                                 $('#new_category_messages').html(data.messages);
                             }
diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json
index fe82fc10d1355d83dbc6a71cbe7ec882504f4f0d..ca381cabc50404db10ec64a2c7e635b69124c128 100644
--- a/app/code/Magento/CatalogImportExport/composer.json
+++ b/app/code/Magento/CatalogImportExport/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/module-indexer": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/module-indexer": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json
index 17807abf00284e37befeee24f9146e7822ab1675..fa1c799fe739d3bcf87ca6f916bcde0962624808 100644
--- a/app/code/Magento/CatalogInventory/composer.json
+++ b/app/code/Magento/CatalogInventory/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-indexer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-indexer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json
index 3611281f1c69d49dd4efc8f6044045e0f33614c9..539ca4af208560e40d7f890c9550308bde89485e 100644
--- a/app/code/Magento/CatalogRule/composer.json
+++ b/app/code/Magento/CatalogRule/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-rule": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-indexer": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-rule": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-indexer": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json
index 307467c3c6217b54f23acdee9766524ef5817723..1d8292288c1c06458eea32cb0b3985d82f3147a4 100644
--- a/app/code/Magento/CatalogSearch/composer.json
+++ b/app/code/Magento/CatalogSearch/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-search": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-indexer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-search": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-indexer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json
index a4fdb35d55615c085511be97e462cfba358b6794..764fb5ed8db3fc88023dba3f275a543386e34315 100644
--- a/app/code/Magento/CatalogUrlRewrite/composer.json
+++ b/app/code/Magento/CatalogUrlRewrite/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-catalog-import-export": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-url-rewrite": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-catalog-import-export": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-url-rewrite": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogWidget/composer.json b/app/code/Magento/CatalogWidget/composer.json
index 633cc2a7cc48e4ab5bcf48ef3a976ae1bbb6302f..a1708c5aa5d6b1c14848114666f7bb6e520eaa00 100644
--- a/app/code/Magento/CatalogWidget/composer.json
+++ b/app/code/Magento/CatalogWidget/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-rule": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-rule": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json
index db8918bca762e2ed96a00a597bc0291a0138e96e..7aac4e4eeb32402cdcf6a15b14a9a2488203b5a7 100644
--- a/app/code/Magento/Checkout/composer.json
+++ b/app/code/Magento/Checkout/composer.json
@@ -3,32 +3,32 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-gift-message": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-msrp": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-gift-message": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-msrp": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta13"
+        "magento/module-cookie": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json
index bea7e49ea19fc077686d3e7ba0e73bec7beb2978..28936c416e31dc474a95b0687d98edef469ba886 100644
--- a/app/code/Magento/CheckoutAgreements/composer.json
+++ b/app/code/Magento/CheckoutAgreements/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
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 a3a2fbda293c06f45808c5087ec56c5d1eeb45de..21c1d2ec4994eac7671fd832e4c5e3e0751313d4 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
@@ -5,56 +5,84 @@
  */
 namespace Magento\Cms\Test\Unit\Ui\Component\Listing\Column;
 
+use Magento\Cms\Ui\Component\Listing\Column\PageActions;
+
 class PageActionsTest extends \PHPUnit_Framework_TestCase
 {
     public function testPrepareItemsByPageId()
     {
+        $pageId = 1;
         // Create Mocks and SUT
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         /** @var \PHPUnit_Framework_MockObject_MockObject $urlBuilderMock */
         $urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $inputUrl = 'href/url/for/edit/action';
 
         /** @var \Magento\Cms\Ui\Component\Listing\Column\PageActions $model */
         $model = $objectManager->getObject(
             'Magento\Cms\Ui\Component\Listing\Column\PageActions',
             [
                 'urlBuilder' => $urlBuilderMock,
-                'url' => $inputUrl
             ]
         );
 
         // Define test input and expectations
-        $items = ['data' => ['items' => [['page_id' => 1]]]];
-        $fullUrl = 'full-url-including-base.com/href/url/for/edit/action';
-        $name = 'item_name';
-
-        $editArray = [
-            'href' => $fullUrl,
-            'label' => __('Edit'),
-            'hidden' => true
+        $items = [
+            'data' => [
+                'items' => [
+                    [
+                        'page_id' => $pageId
+                    ]
+                ]
+            ]
         ];
+        $name = 'item_name';
         $expectedItems = [
             [
-                'page_id' => 1,
-                $name => ['edit' => $editArray]
+                'page_id' => $pageId,
+                $name => [
+                    'edit' => [
+                        'href' => 'test/url/edit',
+                        'label' => __('Edit'),
+                    ],
+                    'delete' => [
+                        'href' => 'test/url/delete',
+                        'label' => __('Delete'),
+                        'confirm' => [
+                            'title' => __('Delete "${ $.$data.title }"'),
+                            'message' => __('Are you sure you wan\'t to delete a "${ $.$data.title }" record?')
+                        ],
+                    ]
+                ],
             ]
         ];
 
         // Configure mocks and object data
-        $urlBuilderMock->expects($this->once())
+        $urlBuilderMock->expects($this->any())
             ->method('getUrl')
-            ->with($inputUrl, ['page_id' => 1])
-            ->willReturn($fullUrl);
+            ->willReturnMap(
+                [
+                    [
+                        PageActions::CMS_URL_PATH_EDIT,
+                        [
+                            'page_id' => $pageId
+                        ],
+                        'test/url/edit',
+                    ],
+                    [
+                        PageActions::CMS_URL_PATH_DELETE,
+                        [
+                            'page_id' => $pageId
+                        ],
+                        'test/url/delete',
+                    ],
+                ]
+            );
 
         $model->setName($name);
         $model->prepareDataSource($items);
         // Run test
-        $this->assertEquals(
-            $expectedItems,
-            $items['data']['items']
-        );
+        $this->assertEquals($expectedItems, $items['data']['items']);
     }
 }
diff --git a/app/code/Magento/Cms/Ui/Component/Listing/Column/BlockActions.php b/app/code/Magento/Cms/Ui/Component/Listing/Column/BlockActions.php
index d93cc635d9e8b716382fd682929cefc4d6e24049..617af42cb6122136cf933ade622dc169846d075b 100644
--- a/app/code/Magento/Cms/Ui/Component/Listing/Column/BlockActions.php
+++ b/app/code/Magento/Cms/Ui/Component/Listing/Column/BlockActions.php
@@ -18,7 +18,9 @@ class BlockActions extends Column
     /**
      * Url path
      */
-    const URL_PATH = 'cms/block/edit';
+    const URL_PATH_EDIT = 'cms/block/edit';
+    const URL_PATH_DELETE = 'cms/block/delete';
+    const URL_PATH_DETAILS = 'cms/block/details';
 
     /**
      * @var UrlInterface
@@ -45,6 +47,10 @@ class BlockActions extends Column
         parent::__construct($context, $uiComponentFactory, $components, $data);
     }
 
+    /**
+     * @param array $items
+     * @return array
+     */
     /**
      * Prepare Data Source
      *
@@ -58,8 +64,35 @@ class BlockActions extends Column
                 if (isset($item['block_id'])) {
                     $item[$this->getData('name')] = [
                         'edit' => [
-                            'href' => $this->urlBuilder->getUrl(static::URL_PATH, ['block_id' => $item['block_id']]),
-                            'label' => __('Edit'),
+                            'href' => $this->urlBuilder->getUrl(
+                                static::URL_PATH_EDIT,
+                                [
+                                    'block_id' => $item['block_id']
+                                ]
+                            ),
+                            'label' => __('Edit')
+                        ],
+                        'details' => [
+                            'href' => $this->urlBuilder->getUrl(
+                                static::URL_PATH_DETAILS,
+                                [
+                                    'block_id' => $item['block_id']
+                                ]
+                            ),
+                            'label' => __('Details')
+                        ],
+                        'delete' => [
+                            'href' => $this->urlBuilder->getUrl(
+                                static::URL_PATH_DELETE,
+                                [
+                                    'block_id' => $item['block_id']
+                                ]
+                            ),
+                            'label' => __('Delete'),
+                            'confirm' => [
+                                'title' => __('Delete "${ $.$data.title }"'),
+                                'message' => __('Are you sure you wan\'t to delete a "${ $.$data.title }" record?')
+                            ]
                         ]
                     ];
                 }
diff --git a/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php b/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php
index 59edfeded291c2bd809dfa28f4ee9bf0d3a3b1ff..c28a8d4d07093cbd44506b57a0688615e18e78fe 100644
--- a/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php
+++ b/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php
@@ -17,7 +17,8 @@ use Magento\Framework\UrlInterface;
 class PageActions extends Column
 {
     /** Url path */
-    const CMS_URL_PATH = 'cms/page/edit';
+    const CMS_URL_PATH_EDIT = 'cms/page/edit';
+    const CMS_URL_PATH_DELETE = 'cms/page/delete';
 
     /** @var UrlBuilder */
     protected $actionUrlBuilder;
@@ -25,10 +26,6 @@ class PageActions extends Column
     /** @var UrlInterface */
     protected $urlBuilder;
 
-    /** @var string */
-    private $url;
-
-
     /**
      * @param ContextInterface $context
      * @param UiComponentFactory $uiComponentFactory
@@ -36,7 +33,6 @@ class PageActions extends Column
      * @param UrlInterface $urlBuilder
      * @param array $components
      * @param array $data
-     * @param string $url
      */
     public function __construct(
         ContextInterface $context,
@@ -44,12 +40,10 @@ class PageActions extends Column
         UrlBuilder $actionUrlBuilder,
         UrlInterface $urlBuilder,
         array $components = [],
-        array $data = [],
-        $url = self::CMS_URL_PATH
+        array $data = []
     ) {
         $this->urlBuilder = $urlBuilder;
         $this->actionUrlBuilder = $actionUrlBuilder;
-        $this->url = $url;
         parent::__construct($context, $uiComponentFactory, $components, $data);
     }
 
@@ -63,15 +57,23 @@ class PageActions extends Column
     {
         if (isset($dataSource['data']['items'])) {
             foreach ($dataSource['data']['items'] as & $item) {
+                $name = $this->getData('name');
                 if (isset($item['page_id'])) {
-                    $item[$this->getData('name')]['edit'] = [
-                        'href' => $this->urlBuilder->getUrl($this->url, ['page_id' => $item['page_id']]),
-                        'label' => __('Edit'),
-                        'hidden' => true
+                    $item[$name]['edit'] = [
+                        'href' => $this->urlBuilder->getUrl(self::CMS_URL_PATH_EDIT, ['page_id' => $item['page_id']]),
+                        'label' => __('Edit')
+                    ];
+                    $item[$name]['delete'] = [
+                        'href' => $this->urlBuilder->getUrl(self::CMS_URL_PATH_DELETE, ['page_id' => $item['page_id']]),
+                        'label' => __('Delete'),
+                        'confirm' => [
+                            'title' => __('Delete "${ $.$data.title }"'),
+                            'message' => __('Are you sure you wan\'t to delete a "${ $.$data.title }" record?')
+                        ]
                     ];
                 }
                 if (isset($item['identifier'])) {
-                    $item[$this->getData('name')]['preview'] = [
+                    $item[$name]['preview'] = [
                         'href' => $this->actionUrlBuilder->getUrl(
                             $item['identifier'],
                             isset($item['_first_store_id']) ? $item['_first_store_id'] : null,
diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json
index 73cbc55bc1d1818796bc345b579f2eb594d2d192..74159635377d7d0ac47f23cd8474b47b4415610b 100644
--- a/app/code/Magento/Cms/composer.json
+++ b/app/code/Magento/Cms/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-email": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
-        "magento/module-variable": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-email": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-variable": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
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 44f4c1deea21702fdaca687e632e77d087536173..2936cb163fc6f91713a4ebeaa1ae0650b8976702 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
@@ -61,6 +61,9 @@
         <container name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsData" xsi:type="array">
+                        <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns</item>
+                    </item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
@@ -225,13 +228,17 @@
         <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="actions" xsi:type="array">
                         <item name="delete" xsi:type="array">
-                            <item name="confirm" xsi:type="string" translate="true">Are you sure you want to perform this action?</item>
                             <item name="type" xsi:type="string">delete</item>
                             <item name="label" xsi:type="string" translate="true">Delete</item>
                             <item name="url" xsi:type="string">cms/block/massDelete</item>
+                            <item name="confirm" xsi:type="array">
+                                <item name="title" xsi:type="string" translate="true">Delete items</item>
+                                <item name="message" xsi:type="string" translate="true">Are you sure you wan't to delete selected items?</item>
+                            </item>
                         </item>
                     </item>
                     <item name="indexField" xsi:type="string">block_id</item>
@@ -245,6 +252,7 @@
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item>
                         <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 name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
@@ -275,10 +283,14 @@
     <columns name="cms_block_columns">
         <argument name="data" xsi:type="array">
             <item name="config" xsi:type="array">
+                <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</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">edit</item>
-                    <item name="appendTo" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.columns_controls</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>
@@ -294,14 +306,14 @@
                 </item>
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">block_id</item>
-                    <item name="appendTo" xsi:type="boolean">false</item>
+                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <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/sortable</item>
+                    <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>
@@ -314,7 +326,7 @@
         <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/sortable</item>
+                    <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>
@@ -326,7 +338,7 @@
         <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/sortable</item>
+                    <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>
@@ -397,7 +409,9 @@
         <column 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>
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 7d154b524cdacc874bbf5a52daf8dc7dcda81d65..5df70e67bcf95379186052a5575a0793fbf0ede3 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
@@ -61,6 +61,9 @@
         <container name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsData" xsi:type="array">
+                        <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns</item>
+                    </item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
@@ -237,13 +240,17 @@
         <massaction name="listing_massaction">
             <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="actions" xsi:type="array">
                         <item name="delete" xsi:type="array">
-                            <item name="confirm" xsi:type="string" translate="true">Delete selected items?</item>
                             <item name="type" xsi:type="string">delete</item>
                             <item name="label" xsi:type="string" translate="true">Delete</item>
                             <item name="url" xsi:type="string">cms/page/massDelete</item>
+                            <item name="confirm" xsi:type="array">
+                                <item name="title" xsi:type="string" translate="true">Delete items</item>
+                                <item name="message" xsi:type="string" translate="true">Are you sure you wan't to delete selected items?</item>
+                            </item>
                         </item>
                         <item name="disable" xsi:type="array">
                             <item name="type" xsi:type="string">disable</item>
@@ -267,6 +274,7 @@
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item>
                         <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 name="options" xsi:type="array">
                         <item name="20" xsi:type="array">
@@ -297,10 +305,14 @@
     <columns name="cms_page_columns">
         <argument name="data" xsi:type="array">
             <item name="config" xsi:type="array">
+                <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</item>
+                </item>
                 <item name="childDefaults" xsi:type="array">
                     <item name="actionField" xsi:type="string">actions</item>
                     <item name="clickAction" xsi:type="string">edit</item>
-                    <item name="appendTo" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.columns_controls</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>
@@ -315,15 +327,16 @@
                     <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">page_id</item>
-                    <item name="appendTo" xsi:type="string"></item>
+                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
         <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/sortable</item>
+                    <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>
@@ -336,7 +349,7 @@
         <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/sortable</item>
+                    <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>
@@ -348,7 +361,7 @@
         <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/sortable</item>
+                    <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>
@@ -373,7 +386,7 @@
         <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 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>
@@ -480,7 +493,7 @@
         <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/sortable</item>
+                    <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>
@@ -493,7 +506,7 @@
         <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/sortable</item>
+                    <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>
@@ -506,7 +519,9 @@
         <column 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="dataType" xsi:type="string">actions</item>
+                    <item name="indexField" xsi:type="string">page_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>
diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json
index f469ccf9a8a16e50c34bcc66cac4a59c1dc7df58..c5d23577dd32064af54e69ea0c18bf918232f32a 100644
--- a/app/code/Magento/CmsUrlRewrite/composer.json
+++ b/app/code/Magento/CmsUrlRewrite/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-url-rewrite": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-url-rewrite": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json
index 99e065fbf08f55ac4666e3c27b6944de65d9f4e0..cc83e07515d7c6e3f56c531d84d10edcceb1226e 100644
--- a/app/code/Magento/Config/composer.json
+++ b/app/code/Magento/Config/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-cron": "0.74.0-beta13",
-        "magento/module-email": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-cron": "0.74.0-beta14",
+        "magento/module-email": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json
index 54fb284e622096d698a49ea4154a0ad47fe4f037..8d04a7bae07ab90d74604415193102a43f299075 100644
--- a/app/code/Magento/ConfigurableImportExport/composer.json
+++ b/app/code/Magento/ConfigurableImportExport/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-catalog-import-export": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/module-configurable-product": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-catalog-import-export": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/module-configurable-product": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json
index a59d294e11653be15c3407afdddc78db584f82eb..d67c88a3d956bb5c369acb68c95818f9d10047c2 100644
--- a/app/code/Magento/ConfigurableProduct/composer.json
+++ b/app/code/Magento/ConfigurableProduct/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-msrp": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-catalog-rule": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-msrp": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-catalog-rule": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-      "magento/module-webapi": "0.74.0-beta13"
+      "magento/module-webapi": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json
index 855dc95f1b15efa4b57d63915006bfb38028b121..b439ea140c197b1ed56baf1e2d815da1401ad79b 100644
--- a/app/code/Magento/Contact/composer.json
+++ b/app/code/Magento/Contact/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cookie/composer.json b/app/code/Magento/Cookie/composer.json
index f407a5b8678efc0b356538691028f981353d3ba4..544fd07a9c3789660daca22b02bfc19ba3f3aef5 100644
--- a/app/code/Magento/Cookie/composer.json
+++ b/app/code/Magento/Cookie/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-backend": "0.74.0-beta13"
+        "magento/module-backend": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json
index 2b1ebf6e958d6c4629e5205532dfc0b182d8d6a6..6399fb6b9e9020bfbbdcd39b429d38acd51db867 100644
--- a/app/code/Magento/Cron/composer.json
+++ b/app/code/Magento/Cron/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json
index 87a1ae6197aed04f3647858aaf8ae5c6c3b727f7..84def1d3cbe14acfc288d09d027e68ac7ef0514f 100644
--- a/app/code/Magento/CurrencySymbol/composer.json
+++ b/app/code/Magento/CurrencySymbol/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json
index 69fc3efec3823f3e47c02b91eb7c6dc6d3a9a20e..0eece788e93cecb4c80b798123ea44284882baca 100644
--- a/app/code/Magento/Customer/composer.json
+++ b/app/code/Magento/Customer/composer.json
@@ -3,33 +3,33 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-newsletter": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-review": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
-        "magento/module-integration": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-newsletter": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-review": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-integration": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta13"
+        "magento/module-cookie": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
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 0f86b821eeed054a234713c3db93a056fedeb4ab..21762022d84e565b42a9808389c03c6777d0d5ae 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
@@ -413,18 +413,6 @@
                 </item>
             </argument>
         </field>
-        <field name="country_id">
-            <argument name="data" xsi:type="array">
-                <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="formElement" xsi:type="string">select</item>
-                    <item name="source" xsi:type="string">address</item>
-                    <item name="validation" xsi:type="array">
-                        <item name="required-entry" xsi:type="boolean">true</item>
-                    </item>
-                </item>
-            </argument>
-        </field>
         <field name="region">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -437,7 +425,6 @@
         </field>
         <field name="region_id">
             <argument name="data" xsi:type="array">
-                <item name="customEntry" xsi:type="string">region</item>
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">text</item>
                     <item name="formElement" xsi:type="string">select</item>
diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json
index 0fca4e85cc1316d04098a0685fdc613ab7af42c1..b6a1e407f40a90d40681457f8b3c44f71a51810b 100644
--- a/app/code/Magento/CustomerImportExport/composer.json
+++ b/app/code/Magento/CustomerImportExport/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/DesignEditor/composer.json b/app/code/Magento/DesignEditor/composer.json
index c74e983baf4c68378fe6735571211cdf05e11cb0..b1da5a0bdcd348ed89d44f6c55133d29d268e728 100644
--- a/app/code/Magento/DesignEditor/composer.json
+++ b/app/code/Magento/DesignEditor/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-translation": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-translation": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json
index 159132b761c1f3ac35336599634434a2cf489651..a48bb0105867b156433a4addf530adbefcf87e48 100644
--- a/app/code/Magento/Developer/composer.json
+++ b/app/code/Magento/Developer/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json
index 844caf08a5f13cf23065ae0ed66adcc52014cb3b..02b7d41aa6e9cb7951f25396c7d440274d5b0d56 100644
--- a/app/code/Magento/Dhl/composer.json
+++ b/app/code/Magento/Dhl/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json
index bc48bec5995d1768c6b6963bd2d72689a5bca4cf..23ab56ed5a4f107e2748d9c98f7a78fe3b762bc4 100644
--- a/app/code/Magento/Directory/composer.json
+++ b/app/code/Magento/Directory/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json
index 15f14f91214a75f64c9e6493480b1d972d830b95..fb54763027f3ed9b61617b4c2e2ae63a92ddab6a 100644
--- a/app/code/Magento/Downloadable/composer.json
+++ b/app/code/Magento/Downloadable/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/module-gift-message": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-msrp": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/module-gift-message": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-msrp": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json
index 5f243b8986208869e385aebfcbb4b57e28615de6..27a79fab2f4a2d182e3df0749481b2877d6eb5cf 100644
--- a/app/code/Magento/Eav/composer.json
+++ b/app/code/Magento/Eav/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json
index e1be936adc070dc4d55a948b467c7e147cd8193d..337caab036bcf8efe39b14f1d7d22bf534a38f02 100644
--- a/app/code/Magento/Email/composer.json
+++ b/app/code/Magento/Email/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-variable": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-variable": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json
index 2fe10a640638848100355b7e0b1c66a8b5244292..63f7f335ce91ef6b55f722c63265ca6cc57f560a 100644
--- a/app/code/Magento/Fedex/composer.json
+++ b/app/code/Magento/Fedex/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json
index 2e2e4b6a8e46e6c2d9cb6a63e3b6a69c5ef0c69d..6159ad811b2306d08af85bd45cd0475e3ca56cfe 100644
--- a/app/code/Magento/GiftMessage/composer.json
+++ b/app/code/Magento/GiftMessage/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-multishipping": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-multishipping": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json
index 304cc1bf791158d545194f29f2c3be44a9b8c097..5cc77002b47154ceced14a609d6e0d41282926d7 100644
--- a/app/code/Magento/GoogleAdwords/composer.json
+++ b/app/code/Magento/GoogleAdwords/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json
index 92aee5dbd021df882f73761a6b368c905fdcc83e..09c1724be6bc16c662205bef182abc2a677a37b0 100644
--- a/app/code/Magento/GoogleAnalytics/composer.json
+++ b/app/code/Magento/GoogleAnalytics/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-cookie": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-cookie": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json
index f046d154cbcf7acf581a241c374e026df489efc2..97573703a09a74e685922b0b3948f6af8e30aa73 100644
--- a/app/code/Magento/GoogleOptimizer/composer.json
+++ b/app/code/Magento/GoogleOptimizer/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-google-analytics": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-google-analytics": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleShopping/composer.json b/app/code/Magento/GoogleShopping/composer.json
index 564c50bd7a9c4929da303ab754797a91b5c26994..1e2387799214e5b48fe356487cc1ea18ce2d030f 100644
--- a/app/code/Magento/GoogleShopping/composer.json
+++ b/app/code/Magento/GoogleShopping/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json
index d17ec6ec9e8dfa34f60b13a34725d2c7fea5abca..33a57b24cb7193f6bb5f3b2f0eef591837005946 100644
--- a/app/code/Magento/GroupedImportExport/composer.json
+++ b/app/code/Magento/GroupedImportExport/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-import-export": "0.74.0-beta13",
-        "magento/module-catalog-import-export": "0.74.0-beta13",
-        "magento/module-grouped-product": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-import-export": "0.74.0-beta14",
+        "magento/module-catalog-import-export": "0.74.0-beta14",
+        "magento/module-grouped-product": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json
index d108bccbced3c09fa8991ae13fbf15296e7075f4..4ee6e8762d9b6760ce1ad74e9978af483e913f0d 100644
--- a/app/code/Magento/GroupedProduct/composer.json
+++ b/app/code/Magento/GroupedProduct/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/module-msrp": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/module-msrp": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/web/js/grouped-product.js b/app/code/Magento/GroupedProduct/view/adminhtml/web/js/grouped-product.js
index c5437123aea58b42d4c3cb41d21a076709d3a7eb..b7badba6e79c142c8c1a92e0d60cdb41500507d4 100644
--- a/app/code/Magento/GroupedProduct/view/adminhtml/web/js/grouped-product.js
+++ b/app/code/Magento/GroupedProduct/view/adminhtml/web/js/grouped-product.js
@@ -7,6 +7,7 @@ define([
     'jquery',
     'mage/template',
     'jquery/ui',
+    'Magento_Ui/js/modal/modal',
     'mage/translate',
     'mage/adminhtml/grid'
 ], function ($, mageTemplate) {
@@ -94,7 +95,7 @@ define([
         },
 
         /**
-         * Create dialog for show product
+         * Create modal for show product
          *
          * @private
          */
@@ -103,30 +104,14 @@ define([
                 selectedProductList = {},
                 popup = $('[data-role=add-product-dialog]');
 
-            popup.dialog({
+            popup.modal({
+                type: 'slide',
+                innerScroll: true,
                 title: $.mage.__('Add Products to Group'),
-                autoOpen: false,
-                minWidth: 980,
-                width: '75%',
-                modal: true,
-                resizable: true,
-                dialogClass: 'grouped',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
+                modalClass: 'grouped',
                 open: function () {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 55;
-                    $(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: [{
                     id: 'grouped-product-dialog-apply-button',
                     text: $.mage.__('Add Selected Products'),
@@ -137,14 +122,7 @@ define([
                         });
                         widget._resort();
                         widget._updateGridVisibility();
-                        $(this).dialog('close');
-                    }
-                }, {
-                    id: 'grouped-product-dialog-cancel-button',
-                    text: $.mage.__('Cancel'),
-                    'class': 'action-close',
-                    click: function () {
-                        $(this).dialog('close');
+                        popup.modal('closeModal');
                     }
                 }]
             });
@@ -186,7 +164,7 @@ define([
 
             $('[data-role=add-product]').on('click', function (event) {
                 event.preventDefault();
-                popup.dialog('open');
+                popup.modal('openModal');
                 gridPopup.reload();
                 selectedProductList = {};
             });
diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json
index e7cbb957d07e0c2be37df045848e2ba04994930c..e5e58f1eeb8b2d8329b2789124b0a372ca75ef3a 100644
--- a/app/code/Magento/ImportExport/composer.json
+++ b/app/code/Magento/ImportExport/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-indexer": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-indexer": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json
index 5334b4ad74bf65576c1ccec4ad8f4294e9dddf87..5c2d70fd3ba1f4706522b5534b358eed397bb3d7 100644
--- a/app/code/Magento/Indexer/composer.json
+++ b/app/code/Magento/Indexer/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json
index e7522cbdd35551484344ff6d2e89df0259344269..71e7696d8ef28184f8fd128d60231cac19b28ca4 100644
--- a/app/code/Magento/Integration/composer.json
+++ b/app/code/Magento/Integration/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-user": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-user": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json
index bdc20c0270c5158053c633cfcfad014a842cbcb3..5fb0f54db609de19157dbbe5a22daf6d3025c950 100644
--- a/app/code/Magento/LayeredNavigation/composer.json
+++ b/app/code/Magento/LayeredNavigation/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Log/composer.json b/app/code/Magento/Log/composer.json
index 1e5b22c27320a7ab072789131a4b60f59b9dbdac..226458dacc1e2acfe398cfea0d658fb0ec2ab22e 100644
--- a/app/code/Magento/Log/composer.json
+++ b/app/code/Magento/Log/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json
index d6eb3484a3966987d8d3278506a3ba04abba6b52..da20bf9f3dc3d8790f4710a3027cbd22335b0d34 100644
--- a/app/code/Magento/MediaStorage/composer.json
+++ b/app/code/Magento/MediaStorage/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json
index 264b8eb51dba8d26cd6487ab3a4c05374119152b..552af5d5da3518251046821ba504ab4608661fd3 100644
--- a/app/code/Magento/Msrp/composer.json
+++ b/app/code/Magento/Msrp/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-bundle": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-downloadable": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-grouped-product": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-bundle": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-downloadable": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-grouped-product": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json
index 1d8a0325c2eb0998dc4e53af4125e2204ad25f50..3f6d9e22a139d0932d538424871afc49b49baa40 100644
--- a/app/code/Magento/Multishipping/composer.json
+++ b/app/code/Magento/Multishipping/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json
index 5e9806a6fab8fd93f56c0a0ccca0256ca1771bc6..1ac1fb8c9d929acbe852fb2c8c0fa93ee1e42409 100644
--- a/app/code/Magento/Newsletter/composer.json
+++ b/app/code/Magento/Newsletter/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-email": "0.74.0-beta13",
-        "magento/module-cron": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-require-js": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-email": "0.74.0-beta14",
+        "magento/module-cron": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-require-js": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json
index 90045a9378f6e5f6b38fe5824ccfb2deea5770b6..5118d798b7ee7a9f2a5c5f1291afd3a9f9ade93d 100644
--- a/app/code/Magento/OfflinePayments/composer.json
+++ b/app/code/Magento/OfflinePayments/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json
index 9e6c4caa47f24bf81041f76336168cdaf9256b15..5a4bc6de203315f49cc562f6c3561279bc5febe8 100644
--- a/app/code/Magento/OfflineShipping/composer.json
+++ b/app/code/Magento/OfflineShipping/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-sales-rule": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-sales-rule": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json
index bc812b12e6d5c3b4ed3047b46623a6a0b2fb5f19..ce7896f50957edfc63dc32ca1c2b335c880bd0d9 100644
--- a/app/code/Magento/PageCache/composer.json
+++ b/app/code/Magento/PageCache/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json
index 87f3a9ef1cd080f2b0da3e1e42532f71dc39d4b4..b78f45d789049bbd5d2a03a892e688dbd0d40535 100644
--- a/app/code/Magento/Payment/composer.json
+++ b/app/code/Magento/Payment/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json
index 379f16a66b2f4879c1c315c5a33c6d93cd69f64b..b81c38561e3dfc1e24c9565dec1988e79ff43715 100644
--- a/app/code/Magento/Persistent/composer.json
+++ b/app/code/Magento/Persistent/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-cron": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-cron": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json
index 3e993546d08a901e3e7f7feda86c18e19e2cfd7e..715f9607506075b3e7fd70a2f1f691c63f78f3f5 100644
--- a/app/code/Magento/ProductAlert/composer.json
+++ b/app/code/Magento/ProductAlert/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json
index f58331308612ac84cf4b8e0e7a42328671b2450e..05d09f86f706c1689b7d04bf1f05527d584c2ff2 100644
--- a/app/code/Magento/Quote/composer.json
+++ b/app/code/Magento/Quote/composer.json
@@ -3,26 +3,26 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-catalog-rule": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-sales-sequence": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-catalog-rule": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-sales-sequence": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json
index 099550f07e1ea5ec1812cf7466c1f75732a52e60..89ac5cea8d624dd0d8c836196cda54c80b9daa21 100644
--- a/app/code/Magento/Reports/composer.json
+++ b/app/code/Magento/Reports/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-log": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/module-review": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-downloadable": "0.74.0-beta13",
-        "magento/module-sales-rule": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-log": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/module-review": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-downloadable": "0.74.0-beta14",
+        "magento/module-sales-rule": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json
index c921a04022f146ff8fe438985fd98d93ef9c3fbe..f36ff58438ce0c1b827ee011308bdf0710623bf6 100644
--- a/app/code/Magento/RequireJs/composer.json
+++ b/app/code/Magento/RequireJs/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json
index 45201df67e97c0cfec3850649adf2b8fdcfbfa74..b8bb07beb0f6fc1ba9a59a47a57b2329e504a074 100644
--- a/app/code/Magento/Review/composer.json
+++ b/app/code/Magento/Review/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-newsletter": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-newsletter": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta13"
+        "magento/module-cookie": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json
index 9e085b9677094ac04fb063a23147c319500255be..ca4231a1f2e5bd6127a2792c31677aca56da011a 100644
--- a/app/code/Magento/Rss/composer.json
+++ b/app/code/Magento/Rss/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json
index d6e66b999c893133d222d72c447801d2b2bff85e..5d0a656ebc0bb6db836a97268ddecc99906ad595 100644
--- a/app/code/Magento/Rule/composer.json
+++ b/app/code/Magento/Rule/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json
index 7f07de89e05f1b012a4d782d2828f7f86dd127eb..e9850b28b5ebbefd68476b14a55a1ea6f8bb63af 100644
--- a/app/code/Magento/Sales/composer.json
+++ b/app/code/Magento/Sales/composer.json
@@ -3,35 +3,35 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-sales-rule": "0.74.0-beta13",
-        "magento/module-sales-sequence": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-gift-message": "0.74.0-beta13",
-        "magento/module-reports": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-wishlist": "0.74.0-beta13",
-        "magento/module-email": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-sales-rule": "0.74.0-beta14",
+        "magento/module-sales-sequence": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-gift-message": "0.74.0-beta14",
+        "magento/module-reports": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-wishlist": "0.74.0-beta14",
+        "magento/module-email": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/edit/message.js b/app/code/Magento/Sales/view/adminhtml/web/order/edit/message.js
index 5479b72127223e2f0b98730a965e94a97c845f9d..13511e83106674b301a992ca6a360e69c6c2b7b2 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/edit/message.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/edit/message.js
@@ -7,7 +7,7 @@
 define([
     "jquery",
     "jquery/ui",
-    'Magento_Ui/js/dialog/dialog',
+    'Magento_Ui/js/modal/modal',
     "mage/translate"
 ], function($){
     "use strict";
@@ -15,7 +15,7 @@ define([
         options: {
             url:     null,
             message: null,
-            dialog:  null
+            modal:  null
         },
 
         /**
@@ -26,10 +26,10 @@ define([
         },
 
         /**
-         * Show dialog
+         * Show modal
          */
         showDialog: function() {
-            this.options.dialog.html(this.options.message).trigger('openDialog');
+            this.options.dialog.html(this.options.message).modal('openModal');
         },
 
         /**
@@ -40,11 +40,24 @@ define([
         },
 
         /**
-         * Prepare dialog
+         * Prepare modal
          * @protected
          */
         _prepareDialog: function() {
-            this.options.dialog = $('<div class="ui-dialog-content ui-widget-content"></div>').dialog();
+            var self = this;
+
+            this.options.dialog = $('<div class="ui-dialog-content ui-widget-content"></div>').modal({
+                type: 'popup',
+                modalClass: 'edit-order-popup',
+                title: $.mage.__('Edit Order'),
+                buttons: [{
+                    text: $.mage.__('Ok'),
+                    'class': 'action-primary',
+                    click: function(){
+                        self.redirect();
+                    }
+                }]
+            });
         }
     });
 
diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json
index 73ca3c6e1d876da3377b77cc31d0a0a61b398a5a..e842b73e7b207cacc55274b6f11cb78df5d008ab 100644
--- a/app/code/Magento/SalesRule/composer.json
+++ b/app/code/Magento/SalesRule/composer.json
@@ -3,26 +3,26 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-rule": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/module-reports": "0.74.0-beta13",
-        "magento/module-catalog-rule": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-rule": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/module-reports": "0.74.0-beta14",
+        "magento/module-catalog-rule": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/SalesSequence/composer.json b/app/code/Magento/SalesSequence/composer.json
index 15ce9855deb2e50bac1d6261380f653585182cfc..825a8e16713a027df4ea0dd1da8d58e2af16c7ea 100644
--- a/app/code/Magento/SalesSequence/composer.json
+++ b/app/code/Magento/SalesSequence/composer.json
@@ -3,11 +3,11 @@
   "description": "N/A",
   "require": {
     "php": "~5.5.0|~5.6.0",
-    "magento/framework": "0.74.0-beta13",
+    "magento/framework": "0.74.0-beta14",
     "magento/magento-composer-installer": "*"
   },
   "type": "magento2-module",
-  "version": "0.74.0-beta13",
+  "version": "0.74.0-beta14",
   "license": [
     "OSL-3.0",
     "AFL-3.0"
diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json
index d0eea2c18d8d8791e84e4b2b396f714ccedd2388..98e1ce97eda1a03ced7574846f0a8d0d3efc2722 100644
--- a/app/code/Magento/Search/composer.json
+++ b/app/code/Magento/Search/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog-search": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-reports": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog-search": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-reports": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/SendFriend/composer.json b/app/code/Magento/SendFriend/composer.json
index f8e2a4f687541841f0942de6a0805271b6dac339..b6712222a0c651e7a30e4186b029c40789fd30ae 100644
--- a/app/code/Magento/SendFriend/composer.json
+++ b/app/code/Magento/SendFriend/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json
index 1960a285405d0b1fb9159a8cbb6905f4b27b57e8..26e8e039f88d70c2292afe9ffeae4601a4f1ea4a 100644
--- a/app/code/Magento/Shipping/composer.json
+++ b/app/code/Magento/Shipping/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-contact": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-payment": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-contact": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-payment": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "ext-gd": "*",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-fedex": "0.74.0-beta13",
-        "magento/module-ups": "0.74.0-beta13"
+        "magento/module-fedex": "0.74.0-beta14",
+        "magento/module-ups": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json
index 7c7137e8db82477d6c3ded19a28dd6969b68fc42..6e9cd7ca7d1d8f9a280952fcccdd76c9b45a844c 100644
--- a/app/code/Magento/Sitemap/composer.json
+++ b/app/code/Magento/Sitemap/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog-url-rewrite": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json
index e8a224d7a443669cfe35054a4ebb9af15f6138fe..3bb80c7c21ec85900b2c9c7ec5b15ce3a6c99176 100644
--- a/app/code/Magento/Store/composer.json
+++ b/app/code/Magento/Store/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json
index 3ef7c5e73fc4cd09ad9f1ff4cca1b0b5f56ed1d6..b2d4d6faad79318556340971f6dd6d832e89af6c 100644
--- a/app/code/Magento/Tax/composer.json
+++ b/app/code/Magento/Tax/composer.json
@@ -3,24 +3,24 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-reports": "0.74.0-beta13",
-        "magento/module-page-cache": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-reports": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json
index 0cebf5d7d3360dba867fee97e90b3a9d2336ad91..2642b8587938955bd7b651a9485560794002064f 100644
--- a/app/code/Magento/TaxImportExport/composer.json
+++ b/app/code/Magento/TaxImportExport/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json
index 7e2129cc460bb0145f4cf7dacf63bb226e4bb049..9fbb0bd754d2cc08791507e25ca35d5d013776d9 100644
--- a/app/code/Magento/Theme/composer.json
+++ b/app/code/Magento/Theme/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-widget": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/module-media-storage": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-require-js": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-widget": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-require-js": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-translation": "0.74.0-beta13"
+        "magento/module-translation": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json
index 05ce2874e8b195cefb7355cb2208a5ca59b6208d..7de19b36d8a93d4c6640246a5098e529c27e1860 100644
--- a/app/code/Magento/Translation/composer.json
+++ b/app/code/Magento/Translation/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-developer": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-developer": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Ui/Component/Bookmark.php b/app/code/Magento/Ui/Component/Bookmark.php
index cbb66e064806e28cfc15de7e9dcba59448b2d13c..7c8d54889f13ae6a1028dc2d61e6544f5ba464f1 100644
--- a/app/code/Magento/Ui/Component/Bookmark.php
+++ b/app/code/Magento/Ui/Component/Bookmark.php
@@ -75,12 +75,17 @@ class Bookmark extends AbstractComponent
             $bookmarks = $this->bookmarkManagement->loadByNamespace($namespace);
             /** @var \Magento\Ui\Api\Data\BookmarkInterface $bookmark */
             foreach ($bookmarks->getItems() as $bookmark) {
-                $config['activeIndex'] = ($bookmark->isCurrent() ? $bookmark->getIdentifier() : 'default');
+                $activeIndex = ($bookmark->isCurrent() ? $bookmark->getIdentifier() : false);
+
                 if ($bookmark->getIdentifier() == 'current') {
                     $config['current'] = $bookmark->getConfig();
                 } else {
                     $config['views'][$bookmark->getIdentifier()] = $bookmark->getConfig();
                 }
+
+                if ($activeIndex !== false) {
+                    $config['activeIndex'] = $activeIndex;
+                }
             }
         }
 
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php b/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php
index f959e11ae83c85cf64e9e9502279005e44c2b738..2128543535b2b0d6823d60046ef60c21001913ce 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php
@@ -23,6 +23,10 @@ class Save extends AbstractAction
      */
     const CURRENT_IDENTIFIER = 'current';
 
+    const ACTIVE_IDENTIFIER = 'activeIndex';
+
+    const VIEWS_IDENTIFIER = 'views';
+
     /**
      * @var BookmarkRepositoryInterface
      */
@@ -75,30 +79,37 @@ class Save extends AbstractAction
     {
         $bookmark = $this->bookmarkFactory->create();
         $data = $this->_request->getParam('data');
-        if (isset($data['views'])) {
-            foreach ($data['views'] as $identifier => $data) {
-                $updateBookmark = $this->checkBookmark($identifier);
-                if ($updateBookmark !== false) {
-                    $bookmark = $updateBookmark;
-                }
+        $action = key($data);
+        switch($action) {
+            case self::ACTIVE_IDENTIFIER:
+                $this->updateCurrentBookmark($data[$action]);
+                break;
 
+            case self::CURRENT_IDENTIFIER:
                 $this->updateBookmark(
                     $bookmark,
-                    $identifier,
-                    (isset($data['label']) ? $data['label'] : ''),
-                    $data
+                    $action,
+                    $bookmark->getTitle(),
+                    $data[$action]
                 );
-            }
-        } else {
-            $identifier = isset($data['activeIndex'])
-                ? $data['activeIndex']
-                : (isset($data[self::CURRENT_IDENTIFIER]) ? self::CURRENT_IDENTIFIER : '');
-            $updateBookmark = $this->checkBookmark($identifier);
-            if ($updateBookmark !== false) {
-                $bookmark = $updateBookmark;
-            }
 
-            $this->updateBookmark($bookmark, $identifier, '', $data[$identifier]);
+                break;
+
+            case self::VIEWS_IDENTIFIER:
+                foreach ($data[$action] as $identifier => $data) {
+                    $this->updateBookmark(
+                        $bookmark,
+                        $identifier,
+                        isset($data['label']) ? $data['label'] : '',
+                        $data
+                    );
+                    $this->updateCurrentBookmark($identifier);
+                }
+
+                break;
+
+            default:
+                throw new \LogicException(__('Unsupported bookmark action.'));
         }
     }
 
@@ -114,20 +125,35 @@ class Save extends AbstractAction
     protected function updateBookmark(BookmarkInterface $bookmark, $identifier, $title, array $config = [])
     {
         $this->filterVars($config);
+
+        $updateBookmark = $this->checkBookmark($identifier);
+        if ($updateBookmark !== false) {
+            $bookmark = $updateBookmark;
+        }
+
         $bookmark->setUserId($this->userContext->getUserId())
             ->setNamespace($this->_request->getParam('namespace'))
             ->setIdentifier($identifier)
             ->setTitle($title)
-            ->setConfig($config)
-            ->setCurrent($identifier !== self::CURRENT_IDENTIFIER);
+            ->setConfig($config);
         $this->bookmarkRepository->save($bookmark);
+    }
 
+    /**
+     * Update current bookmark
+     *
+     * @param string $identifier
+     * @return void
+     */
+    protected function updateCurrentBookmark($identifier)
+    {
         $bookmarks = $this->bookmarkManagement->loadByNamespace($this->_request->getParam('namespace'));
         foreach ($bookmarks->getItems() as $bookmark) {
             if ($bookmark->getIdentifier() == $identifier) {
-                continue;
+                $bookmark->setCurrent(true);
+            } else {
+                $bookmark->setCurrent(false);
             }
-            $bookmark->setCurrent(false);
             $this->bookmarkRepository->save($bookmark);
         }
     }
diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json
index edb3157e7aab2160a922d9f80b68fe3674e946ed..35d8c625925fde44598e7b8524c3e574d51f309e 100644
--- a/app/code/Magento/Ui/composer.json
+++ b/app/code/Magento/Ui/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
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 882fd49f464af70702a9db2372a988a9462ab35c..4a0ceedf00035b14483671a2ec5caece43324907 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
@@ -122,6 +122,10 @@ define([
             delete node.type;
             delete node.config;
 
+            if (children) {
+                node.initChildCount = _.size(children);
+            }
+
             if (node.isTemplate) {
                 node.isTemplate = false;
 
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 84ea34f88934be1e8bc349a149482e3f297b49ee..14ba3ef49693ef7615b5d9052a94a2e60dbed5d2 100644
--- 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
@@ -47,8 +47,7 @@ define([
             _.bindAll(this, 'reset');
 
             this._super();
-
-            this.initialValue = this.getInititalValue();
+            this.initialValue = this.getInitialValue();
 
             this.value(this.initialValue);
 
@@ -97,7 +96,7 @@ define([
          *
          * @returns {*} Elements' value.
          */
-        getInititalValue: function () {
+        getInitialValue: function () {
             var values = [this.value(), this.default],
                 value;
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/boolean.js b/app/code/Magento/Ui/view/base/web/js/form/element/boolean.js
index 4782c853d210b11696c71f31d8d855a8e64eb4b0..efe82b0a13a1c4ee16cb71b7581e77ee41393fc8 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/boolean.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/boolean.js
@@ -13,7 +13,7 @@ define([
          *
          * @return {Boolean}
          */
-        getInititalValue: function () {
+        getInitialValue: function () {
             return !!+this._super();
         },
 
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 140f063a315d00b0dd47a5c144503eb28c75b9cd..08f28b0c63722c92fb0e3b9cc580b1eaa1c3d107 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
@@ -26,7 +26,7 @@ define([
          *
          * @returns {String}
          */
-        getInititalValue: function () {
+        getInitialValue: function () {
             var value = this._super();
 
             if (value) {
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 a6dc9e3b3afe600527a5b0fd470b05547b955789..6e7b2ac69a4ff61d6617faf2d0226084660890d5 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
@@ -20,7 +20,7 @@ define([
          *
          * @returns {Number|String}
          */
-        getInititalValue: function () {
+        getInitialValue: function () {
             var value = this._super();
 
             return _.isString(value) ? value.split(',') : value;
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 3034df1e2c67ad8154be1caa055fd97e0a45bbf2..225a6a3250d350bb55b90b4caeb5f8abc1ae9fa8 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
@@ -14,9 +14,9 @@ define([
     var inputNode = {
         parent: '${ $.$data.parentName }',
         type: 'form.input',
-        name: '<%= $data.index %>_input',
-        dataScope: '<%= $data.customEntry %>',
-        customScope: '<%= $data.customScope %>',
+        name: '${ $.$data.index }_input',
+        dataScope: '${ $.$data.customEntry }',
+        customScope: '${ $.$data.customScope }',
         sortOrder: {
             after: '${ $.$data.name }'
         },
@@ -157,6 +157,7 @@ define([
         initFilter: function () {
             var filter = this.filterBy;
 
+            this.filter(this.default, filter.field);
             this.setLinks({
                 filter: filter.target
             }, 'imports');
@@ -181,7 +182,7 @@ define([
          *
          * @returns {Number|String}
          */
-        getInititalValue: function () {
+        getInitialValue: function () {
             var value = this._super();
 
             if (value !== '') {
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 33a095e64e806024affa49638b9fe8bb40566e79..e0b7525f007128ec86e7409519c1df011081aa63 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
@@ -4,24 +4,282 @@
  */
 define([
     'underscore',
-    './column'
-], function (_, Column) {
+    'mageUtils',
+    'uiRegistry',
+    './column',
+    'Magento_Ui/js/modal/confirm'
+], function (_, utils, registry, Column, confirm) {
     'use strict';
 
     return Column.extend({
         defaults: {
-            headerTmpl: 'ui/grid/columns/actions',
-            bodyTmpl: 'ui/grid/cells/actions'
+            bodyTmpl: 'ui/grid/cells/actions',
+            actions: [],
+            rows: [],
+            templates: {
+                actions: {}
+            },
+            rowsProvider: '${ $.parentName }',
+            imports: {
+                rows: '${ $.rowsProvider }:rows'
+            },
+            listens: {
+                rows: 'updateActions'
+            }
         },
 
-        getDisplayed: function (actions) {
-            actions = _.filter(actions, function (action) {
-                return !('hidden' in action) || !action.hidden;
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {ActionsColumn} Chainable.
+         */
+        initObservable: function () {
+            this._super()
+                .observe('actions opened');
+
+            return this;
+        },
+
+        /**
+         * Returns specific action of a specified row
+         * or all action objects associated with it.
+         *
+         * @param {Number} rowIndex - Index of a row.
+         * @param {String} [actionIndex] - Action identifier.
+         * @returns {Array|Object}
+         */
+        getAction: function (rowIndex, actionIndex) {
+            var rowActions = this.actions()[rowIndex];
+
+            return rowActions && actionIndex ?
+                rowActions[actionIndex] :
+                rowActions;
+        },
+
+        /**
+         * Returns visible actions for a specified row.
+         *
+         * @param {Number} rowIndex - Index of a row.
+         * @returns {Array} Visible actions.
+         */
+        getVisibleActions: function (rowIndex) {
+            var rowActions = this.getAction(rowIndex);
+
+            return _.filter(rowActions, this.isActionVisible, this);
+        },
+
+        /**
+         * Adds new action. If action with a specfied identifier
+         * already exists, than the original will be overrided.
+         *
+         * @param {String} index - Actions' identifier.
+         * @param {Object} action - Actions' data.
+         * @returns {ActionsColumn} Chainable.
+         */
+        addAction: function (index, action) {
+            var actionTmpls = this.templates.actions;
+
+            actionTmpls[index] = action;
+
+            this.updateActions();
+
+            return this;
+        },
+
+        /**
+         * Recreates actions for each row.
+         *
+         * @returns {ActionsColumn} Chainable.
+         */
+        updateActions: function () {
+            var rows = this.rows,
+                actions = rows.map(this._formatActions, this);
+
+            this.actions(actions);
+
+            return this;
+        },
+
+        /**
+         * Processes actions, setting additional information to them and
+         * evaluating ther properties as a string templates.
+         *
+         * @private
+         * @param {Object} row - Row object.
+         * @param {Number} rowIndex - Index of a row.
+         * @returns {Array}
+         */
+        _formatActions: function (row, rowIndex) {
+            var rowActions      = row[this.index] || {},
+                recordId        = row[this.indexField],
+                customActions   = this.templates.actions;
+
+            /**
+             * Actions iterator.
+             */
+            function iterate(action, index) {
+                action = utils.extend({
+                    index: index,
+                    rowIndex: rowIndex,
+                    recordId: recordId
+                }, action);
+
+                return utils.template(action, row, true);
+            }
+
+            rowActions      = _.mapObject(rowActions, iterate);
+            customActions   = _.map(customActions, iterate);
+
+            customActions.forEach(function (action) {
+                rowActions[action.index] = action;
+            });
+
+            return rowActions;
+        },
+
+        /**
+         * Applies specified action.
+         *
+         * @param {String} actionIndex - Actions' identifier.
+         * @param {Number} rowIndex - Index of a row.
+         * @returns {ActionsColumn} Chainable.
+         */
+        applyAction: function (actionIndex, rowIndex) {
+            var action = this.getAction(rowIndex, actionIndex),
+                callback;
+
+            if (!action.href && !action.callback) {
+                return this;
+            }
+
+            callback = this._getCallback(action);
+
+            action.confirm ?
+                this._confirm(action, callback) :
+                callback();
+
+            return this;
+        },
+
+        /**
+         * Creates action callback based on its' data. If action doesn't spicify
+         * a callback function than the default one will be used.
+         *
+         * @private
+         * @param {Object} action - Actions' object.
+         * @returns {Function} Callback function.
+         */
+        _getCallback: function (action) {
+            var args = [action.index, action.recordId, action],
+                callback = action.callback;
+
+            if (utils.isObject(callback)) {
+                args.unshift(callback.target);
+
+                callback = registry.async(callback.provider);
+            } else if (typeof callback != 'function') {
+                callback = this.defaultCallback.bind(this);
+            }
+
+            return function () {
+                callback.apply(null, args);
+            };
+        },
+
+        /**
+         * Default action callback. Redirects to
+         * the specified in actions' data url.
+         *
+         * @param {String} actionIndex - Actions' identifier.
+         * @param {(Number|String)} recordId - Id of the record accociated
+         *      with a specfied action.
+         * @param {Object} action - Actions' data.
+         */
+        defaultCallback: function (actionIndex, recordId, action) {
+            window.location.href = action.href;
+        },
+
+        /**
+         * Shows actions' confirmation window.
+         *
+         * @param {Object} action - Actions' data.
+         * @param {Function} callback - Callback that will be
+         *      invoked if action is confirmed.
+         */
+        _confirm: function (action, callback) {
+            var confirmData = action.confirm;
+
+            confirm({
+                title: confirmData.title,
+                content: confirmData.message,
+                actions: {
+                    confirm: callback
+                }
             });
+        },
+
+        /**
+         * Checks if row has only one visible action.
+         *
+         * @param {Number} rowIndex - Row index.
+         * @returns {Boolean}
+         */
+        isSingle: function (rowIndex) {
+            return this.getVisibleActions(rowIndex).length === 1;
+        },
+
+        /**
+         * Checks if row has more than one visible action.
+         *
+         * @param {Number} rowIndex - Row index.
+         * @returns {Boolean}
+         */
+        isMultiple: function (rowIndex) {
+            return this.getVisibleActions(rowIndex).length > 1;
+        },
+
+        /**
+         * Checks if action should be displayed.
+         *
+         * @param {Object} action - Action object.
+         * @returns {Boolean}
+         */
+        isActionVisible: function (action) {
+            return action.hidden !== true;
+        },
+
+        /**
+         * Opens or closes specific actions list.
+         *
+         * @param {Number} rowIndex - Index of a row,
+         *      where actions are displayed.
+         * @returns {ActionsColumn} Chainable.
+         */
+        toggleList: function (rowIndex) {
+            var state = false;
+
+            if (rowIndex !== this.opened()) {
+                state = rowIndex;
+            }
+
+            this.opened(state);
+
+            return this;
+        },
 
-            this.displayed = actions;
+        /**
+         * Closes actions list.
+         *
+         * @param {Number} rowIndex - Index of a row,
+         *      where actions are displayed.
+         * @returns {ActionsColumn}
+         */
+        closeList: function (rowIndex) {
+            if (this.opened() === rowIndex) {
+                this.opened(false);
+            }
 
-            return actions;
+            return this;
         }
     });
 });
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 f0d3202c7f6822eb2c97aa3f89499f18a7048c32..1eb359826b1cff89f423be340531dd34d52c8157 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
@@ -13,37 +13,111 @@ define([
         defaults: {
             headerTmpl: 'ui/grid/columns/text',
             bodyTmpl: 'ui/grid/cells/text',
-            sortable: false,
+            sortable: true,
+            sorting: false,
             visible: true,
+            draggable: true,
             links: {
-                visible: '${ $.storageConfig.path }.visible'
+                visible: '${ $.storageConfig.path }.visible',
+                sorting: '${ $.storageConfig.path }.sorting'
+            },
+            imports: {
+                exportSorting: 'sorting'
+            },
+            listens: {
+                '${ $.provider }:params.sorting.field': 'onSortChange'
+            },
+            modules: {
+                source: '${ $.provider }'
             }
         },
 
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {Column} Chainable.
+         */
         initObservable: function () {
             this._super()
-                .observe('visible');
+                .observe('visible dragging dragover sorting');
 
             return this;
         },
 
-        applyState: function (property, state) {
-            var storage = this.storage(),
-                namespace = this.storageConfig.root + '.' + property,
-                data,
-                value;
+        /**
+         * Applies specified stored state of a column or one of its' properties.
+         *
+         * @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, than all collumns stored properties will be used.
+         * @returns {Column} Chainable.
+         */
+        applyState: function (state, property) {
+            var namespace = this.storageConfig.root;
 
-            if (state === 'default') {
-                data = storage.getDefault();
-            } else if (state === 'last') {
-                data = storage.getSaved();
+            if (property) {
+                namespace += '.' + property;
             }
 
-            value = utils.nested(data, namespace);
+            this.storage('applyState', state, namespace);
 
-            if (!_.isUndefined(value)) {
-                this.set(property, value);
+            return this;
+        },
+
+        /**
+         * Sets columns' sorting. If column is currently sorted,
+         * than its' direction will be toggled.
+         *
+         * @param {*} [enable=true] - If false, than sorting will
+         *      be removed from a column.
+         * @returns {Column} Chainable.
+         */
+        sort: function (enable) {
+            var direction;
+
+            if (!this.sortable) {
+                return this;
+            }
+
+            enable = enable !== false ? true : false;
+
+            direction = enable ?
+                this.sorting() ?
+                    this.toggleDirection() :
+                    'asc' :
+                false;
+
+            this.sorting(direction);
+
+            return this;
+        },
+
+        /**
+         * Exports sorting data to the dataProvider if
+         * sorting of a column is enabled.
+         *
+         * @param {(String|Boolean)} sorting - Columns' sorting state.
+         */
+        exportSorting: function (sorting) {
+            if (!sorting) {
+                return;
             }
+
+            this.source('set', 'params.sorting', {
+                field: this.index,
+                direction: sorting
+            });
+        },
+
+        /**
+         * Toggles sorting direcction.
+         *
+         * @returns {String} New direction.
+         */
+        toggleDirection: function () {
+            return this.sorting() === 'asc' ?
+                'desc' :
+                'asc';
         },
 
         getClickUrl: function (row) {
@@ -61,16 +135,43 @@ define([
             window.location.href = url;
         },
 
+        /**
+         * Ment to preprocess data associated with a current columns' field.
+         *
+         * @param {*} data - Data to be preprocessed.
+         * @returns {String}
+         */
         getLabel: function (data) {
             return data;
         },
 
+        /**
+         * Returns path to the columns' header template.
+         *
+         * @returns {String}
+         */
         getHeader: function () {
             return this.headerTmpl;
         },
 
+        /**
+         * Returns path to the columns' body template.
+         *
+         * @returns {String}
+         */
         getBody: function () {
             return this.bodyTmpl;
+        },
+
+        /**
+         * Listener of the providers' sorting state changes.
+         *
+         * @param {Srting} field - Field by which current sorting is performed.
+         */
+        onSortChange: function (field) {
+            if (field !== this.index) {
+                this.sort(false);
+            }
         }
     });
 });
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 3393c0094a8e8853a5a95b18de6e4805a92ac723..90ace7d79af6ad4eb96d1c0bceb5140ccdc7afe1 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
@@ -5,23 +5,40 @@
 define([
     'mageUtils',
     'moment',
-    './sortable'
-], function (utils, moment, Sortable) {
+    './column'
+], function (utils, moment, Column) {
     'use strict';
 
-    return Sortable.extend({
+    return Column.extend({
         defaults: {
             dateFormat: 'MMM D, YYYY h:mm:ss A'
         },
 
+        /**
+         * Initializes components' static properties.
+         *
+         * @returns {DateColumn} Chainable.
+         */
         initProperties: function () {
             this.dateFormat = utils.normalizeDate(this.dateFormat);
 
             return this._super();
         },
 
-        getLabel: function (data) {
-            return moment(data).isValid() ? moment(data).format(this.dateFormat) : '';
+        /**
+         * 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);
+
+            date = date.isValid() ?
+                date.format(this.dateFormat) :
+                '';
+
+            return date;
         }
     });
 });
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 e6b33d1e62854e72ea6d8ed311317140cf4ad11b..7ced03bfba9256fd0fa18591e4042f2018339d53 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,13 +13,13 @@ define([
         defaults: {
             headerTmpl: 'ui/grid/columns/multiselect',
             bodyTmpl: 'ui/grid/cells/multiselect',
+            sortable: false,
             menuVisible: false,
             excludeMode: false,
             allSelected: false,
             indetermine: false,
             selected: [],
             excluded: [],
-            ns: '${ $.provider }:params',
             actions: [{
                 value: 'selectAll',
                 label: $t('Select all')
@@ -40,13 +40,9 @@ define([
             },
 
             listens: {
-                '${ $.ns }.filters': 'deselectAll',
+                '${ $.provider }:params.filters': 'deselectAll',
                 selected: 'onSelectedChange',
                 rows: 'onRowsChange'
-            },
-
-            modules: {
-                source: '${ $.provider }'
             }
         },
 
@@ -87,7 +83,10 @@ define([
         },
 
         /**
-         * Selects all grid records, even those that are not visible on the page.
+         * Selects all grid records, even those that
+         * are not visible on the page.
+         *
+         * @returns {Multiselect} Chainable.
          */
         selectAll: function () {
             this.excludeMode(true);
@@ -100,44 +99,54 @@ define([
 
         /**
          * Deselects all grid records.
+         *
+         * @returns {Multiselect} Chainable.
          */
         deselectAll: function () {
             this.excludeMode(false);
 
             this.clearExcluded()
-                .deselectPage();
-            this.selected.removeAll();
+                .selected.removeAll();
 
             return this;
         },
 
         /**
          * Selects or deselects all records.
+         *
+         * @returns {Multiselect} Chainable.
          */
         toggleSelectAll: function () {
-            return this.allSelected() ?
-                    this.deselectAll() :
-                    this.selectAll();
+            this.allSelected() ?
+                this.deselectAll() :
+                this.selectAll();
+
+            return this;
         },
 
         /**
          * Selects all records on the current page.
+         *
+         * @returns {Multiselect} Chainable.
          */
         selectPage: function () {
-            this.selected(
-                _.union(this.selected(), this.getIds())
-            );
+            var selected = _.union(this.selected(), this.getIds());
+
+            this.selected(selected);
 
             return this;
         },
 
         /**
          * Deselects all records on the current page.
+         *
+         * @returns {Multiselect} Chainable.
          */
         deselectPage: function () {
-            var currentPageIds = this.getIds();
+            var pageIds = this.getIds();
+
             this.selected.remove(function (value) {
-                return currentPageIds.indexOf(value) !== -1;
+                return !!~pageIds.indexOf(value);
             });
 
             return this;
@@ -209,18 +218,17 @@ define([
         },
 
         /**
-         * Exports selections to the data provider.
+         * Returns selections data.
+         *
+         * @returns {Object}
          */
-        exportSelections: function () {
-            var data = {},
-                type;
-
-            type = this.excludeMode() ? 'excluded' : 'selected';
-
-            data[type] = this[type]();
-            data.total = this.totalSelected();
-
-            this.source('set', 'config.multiselect', data);
+        getSelections: function () {
+            return {
+                excluded: this.excluded(),
+                selected: this.selected(),
+                total: this.totalSelected(),
+                excludeMode: this.excludeMode()
+            };
         },
 
         /**
@@ -231,27 +239,27 @@ define([
          */
         isActionRelevant: function (actionId) {
             var pageIds = this.getIds().length,
-                multiplePages = pageIds < this.totalRecords();
+                multiplePages = pageIds < this.totalRecords(),
+                result = true;
 
             switch (actionId) {
                 case 'selectPage':
-
-                    return multiplePages && !this.isPageSelected(true);
+                    result = multiplePages && !this.isPageSelected(true);
+                    break;
 
                 case 'deselectPage':
-
-                    return multiplePages && this.isPageSelected();
+                    result =  multiplePages && this.isPageSelected();
+                    break;
 
                 case 'selectAll':
-
-                    return !this.allSelected();
+                    result = !this.allSelected();
+                    break;
 
                 case 'deselectAll':
-
-                    return this.totalSelected() > 0;
+                    result = this.totalSelected() > 0;
             }
 
-            return true;
+            return result;
         },
 
         /**
@@ -286,6 +294,8 @@ define([
         /**
          * Updates values of the 'allSelected'
          * and 'indetermine' properties.
+         *
+         * @returns {Multiselect} Chainable.
          */
         updateState: function () {
             var selected        = this.selected().length,
@@ -309,15 +319,14 @@ define([
         },
 
         /**
-         * Callback method to handle change of the selected items.
+         * Callback method to handle changes of selected items.
          *
-         * @param {Array} selected - List of the currently selected items.
+         * @param {Array} selected - An array of currently selected items.
          */
         onSelectedChange: function (selected) {
             this.updateExcluded(selected)
                 .countSelected()
-                .updateState()
-                .exportSelections();
+                .updateState();
         },
 
         /**
@@ -325,12 +334,12 @@ define([
          * based on "selectMode" property.
          */
         onRowsChange: function () {
-            var newSelected;
+            var newSelections;
 
             if (this.excludeMode()) {
-                newSelected = _.union(this.getIds(true), this.selected());
+                newSelections = _.union(this.getIds(true), this.selected());
 
-                this.selected(newSelected);
+                this.selected(newSelections);
             }
         }
     });
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 54185ef6617aa82740e0bb7f76f1650798361f93..46cbff1cf1dfd610ea5a3cd016304493cf880fde 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,21 +3,30 @@
  * See COPYING.txt for license details.
  */
 define([
-    './sortable'
-], function (Sortable) {
+    './column'
+], function (Column) {
     'use strict';
 
-    return Sortable.extend({
-        getLabel: function (data) {
+    return Column.extend({
+        /**
+         * Retrieves label associated with a provided value.
+         *
+         * @param {(String|Number)} value - Value of the option.
+         * @returns {String}
+         */
+        getLabel: function (value) {
             var options = this.options || [],
                 label = '';
-            data = data || '';
 
+            value = value || '';
+
+            /*eslint-disable eqeqeq*/
             options.some(function (item) {
                 label = item.label;
 
-                return item.value == data;
+                return item.value == value;
             });
+            /*eslint-enable eqeqeq*/
 
             return label;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/sortable.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/sortable.js
deleted file mode 100644
index d54971607c37b33ce3a56455d7b7f8bb18aef05b..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/sortable.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    './column'
-], function (Column) {
-    'use strict';
-
-    return Column.extend({
-        defaults: {
-            sortable: true,
-            sorting: false,
-            classes: {
-                'asc': '_ascend',
-                'desc': '_descend'
-            },
-            links: {
-                sorting: '${ $.storageConfig.path }.sorting'
-            },
-            imports: {
-                setSortClass: 'sorting',
-                push: 'sorting'
-            },
-            listens: {
-                '${ $.provider }:params.sorting.field': 'onSortChange'
-            },
-            modules: {
-                source: '${ $.provider }'
-            }
-        },
-
-        initObservable: function () {
-            this._super()
-                .observe('sorting sortClass');
-
-            return this;
-        },
-
-        sort: function (enabled) {
-            var direction;
-
-            direction = enabled !== false ?
-                this.sorting() ?
-                    this.toggleDirection() :
-                    'asc' :
-                false;
-
-            this.sorting(direction);
-        },
-
-        push: function (sorting) {
-            if (!sorting) {
-                return;
-            }
-
-            this.source('set', 'params.sorting', {
-                field: this.index,
-                direction: sorting
-            });
-        },
-
-        toggleDirection: function () {
-            return this.sorting() === 'asc' ?
-                'desc' :
-                'asc';
-        },
-
-        setSortClass: function (sorting) {
-            var sortClass = this.classes[sorting] || '';
-
-            this.sortClass(sortClass);
-        },
-
-        onSortChange: function (field) {
-            if (field !== this.index) {
-                this.sort(false);
-            }
-        }
-    });
-});
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 78a115f2498a3068ca02baa8e07922013a91424a..286fe4307408feeaf678c3e778af0adf6a539edb 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
@@ -12,6 +12,22 @@ define([
 ], function (_, utils, registry, Storage, Collapsible, layout) {
     'use strict';
 
+    /**
+     * Removes 'current' namespace from a 'path' string.
+     *
+     * @param {String} path
+     * @returns {String} Path without namespace.
+     */
+    function removeStateNs(path) {
+        path = typeof path == 'string' ? path.split('.') : '';
+
+        if (path[0] === 'current') {
+            path.shift();
+        }
+
+        return path.join('.');
+    }
+
     return Collapsible.extend({
         defaults: {
             template: 'ui/grid/controls/bookmarks/bookmarks',
@@ -29,7 +45,7 @@ define([
                 },
                 newView: {
                     label: 'New View',
-                    index: '${ Date.now() }',
+                    index: '_${ Date.now() }',
                     editing: true,
                     isNew: true
                 }
@@ -59,8 +75,8 @@ define([
          */
         initialize: function () {
             utils.limit(this, 'saveSate', 2000);
-            utils.limit(this, 'checkChanges', 200);
             utils.limit(this, '_defaultPolyfill', 1000);
+            utils.limit(this, 'checkChanges', 50);
 
             this._super()
                 .initViews();
@@ -223,7 +239,9 @@ define([
          */
         applyView: function (view) {
             if (typeof view === 'string') {
-                view = this.elems.findWhere({index: view});
+                view = this.elems.findWhere({
+                    index: view
+                });
             }
 
             view.active(true);
@@ -234,6 +252,34 @@ define([
             return this;
         },
 
+        /**
+         * Applies specified views' data on a current data object.
+         *
+         * @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.
+         */
+        applyState: function (state, path) {
+            var view,
+                value;
+
+            view = state === 'default' ?
+                this.defaultView :
+                this.activeView();
+
+            path  = removeStateNs(path);
+            value = view.getData(path);
+
+            if (!_.isUndefined(value)) {
+                path = path ? 'current.' + path : 'current';
+
+                this.set(path, value);
+            }
+
+            return this;
+        },
+
         /**
          * Saves current data state.
          *
@@ -260,24 +306,6 @@ define([
             return this;
         },
 
-        /**
-         * Retrieves last saved data of a current view.
-         *
-         * @returns {Object}
-         */
-        getSaved: function () {
-            return this.activeView().getData();
-        },
-
-        /**
-         * Retrieves default data.
-         *
-         * @returns {Object}
-         */
-        getDefault: function () {
-            return this.defaultView.getData();
-        },
-
         /**
          * Defines default data if it wasn't gathered previously.
          * Assumes that if theres is no views available,
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
index b42fedfe78dd725567fbb7ed3f7f48b196533af5..afd5d4276de442947da6755cf208f191268226d3 100644
--- 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
@@ -58,12 +58,19 @@ define([
         },
 
         /**
-         * Retrieves current data.
+         * Retrieves copied views' data.
          *
-         * @returns {Object}
+         * @param {String} [path] - Path to the specific property.
+         * @returns {*}
          */
-        getData: function () {
-            return utils.copy(this.data.items);
+        getData: function (path) {
+            var data = this.data.items;
+
+            if (path) {
+                data = utils.nested(data, path);
+            }
+
+            return utils.copy(data);
         },
 
         /**
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 f48a86abab1c2937c1a0076137fa7539fc41f2ca..765e437334285090378e1db15d8ac33753da9ab8 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
@@ -3,10 +3,11 @@
  * See COPYING.txt for license details.
  */
 define([
+    'underscore',
     'mageUtils',
     'mage/translate',
     'Magento_Ui/js/lib/collapsible'
-], function (utils, $t, Collapsible) {
+], function (_, utils, $t, Collapsible) {
     'use strict';
 
     return Collapsible.extend({
@@ -15,32 +16,59 @@ define([
             minVisible: 1,
             maxVisible: 30,
             viewportSize: 18,
+            columnsData: {
+                container: 'elems'
+            },
+            imports: {
+                addColumns: '${ $.columnsData.provider }:${ $.columnsData.container }'
+            },
             templates: {
                 headerMsg: $t('${ $.visible } out of ${ $.total } visible')
             }
         },
 
         /**
-         * Action Reset
+         * Resets columns visibility to theirs default state.
+         *
+         * @returns {Columns} Chainable.
          */
         reset: function () {
-            this.elems.each('applyState', 'visible', 'default');
+            this.elems.each('applyState', 'default', 'visible');
 
             return this;
         },
 
         /**
-         * Action Cancel
+         * Applies last saved state of columns visibility.
+         *
+         * @returns {Columns} Chainable.
          */
         cancel: function () {
-            this.elems.each('applyState', 'visible', 'last');
+            this.elems.each('applyState', 'saved', 'visible');
 
             return this;
         },
 
         /**
-         * Helper, which helps to stop resizing.
-         * viewportSize limits number of elements.
+         * Adds columns whose visibility can be controlled to the component.
+         *
+         * @param {Array} columns - Elements array that will be added to component.
+         * @returns {Columns} Chainable.
+         */
+        addColumns: function (columns) {
+            columns = _.where(columns, {
+                controlVisibility: true
+            });
+
+            this.insertChild(columns);
+
+            return this;
+        },
+
+        /**
+         * Defines whether child elements array length
+         * is greater than the 'viewportSize' property.
+         *
          * @returns {Boolean}
          */
         hasOverflow: function () {
@@ -51,6 +79,7 @@ define([
          * Helper, checks
          *  - if less than one item choosen
          *  - if more then viewportMaxSize choosen
+         *
          * @param {Object} elem
          * @returns {Boolean}
          */
@@ -63,7 +92,8 @@ define([
         },
 
         /**
-         * Helper, returns number of visible checkboxes
+         * Counts number of visible columns.
+         *
          * @returns {Number}
          */
         countVisible: function () {
@@ -72,8 +102,7 @@ define([
 
         /**
          * Compile header message from headerMessage setting.
-         * Expects Underscore template format
-         * @param {String} text - underscore-format template
+         *
          * @returns {String}
          */
         getHeaderMessage: function () {
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
new file mode 100644
index 0000000000000000000000000000000000000000..d1eb5ee827c40825b4f7df3620bb7215d4e21b68
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
@@ -0,0 +1,473 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'ko',
+    'jquery',
+    'underscore',
+    'Magento_Ui/js/lib/class'
+], function (ko, $, _, Class) {
+    'use strict';
+
+    var isTouchDevice = typeof document.ontouchstart !== 'undefined',
+        transformProp;
+
+    /**
+     * Defines supported css 'transform' property.
+     *
+     * @returns {String|Undefined}
+     */
+    transformProp = (function () {
+        var style = document.body.style,
+            base = 'Transform',
+            vendors = ['webkit', 'moz', 'ms', 'o'],
+            vi = vendors.length,
+            property;
+
+        if (typeof style.transform != 'undefined') {
+            return 'transform';
+        }
+
+        while (vi--) {
+            property = vendors[vi] + base;
+
+            if (typeof style[property] != 'undefined') {
+                return property;
+            }
+        }
+    })();
+
+    /**
+     * Returns first touch data if it's available.
+     *
+     * @param {(MouseEvent|TouchEvent)} e - Event object.
+     * @returns {Object}
+     */
+    function getTouch(e) {
+        return e.touches ? e.touches[0] : e;
+    }
+
+    /**
+     * Moves specified DOM element to the x and y coordinates.
+     *
+     * @param {HTMLElement} elem - Element to be relocated.
+     * @param {Number} x - X coordinate.
+     * @param {Number} y - Y coordinate.
+     */
+    function locate(elem, x, y) {
+        var value = 'translate(' + x + 'px,' + y + 'px)';
+
+        elem.style[transformProp] = value;
+    }
+
+    /*eslint-disable no-extra-parens*/
+    /**
+     * Checks if specified coordinate is inside of the provided area.
+     *
+     * @param {Number} x - X coordinate.
+     * @param {Number} y - Y coordinate.
+     * @param {Object} area - Object which represents area.
+     * @returns {Boolean}
+     */
+    function isInside(x, y, area) {
+        return (
+            area &&
+            x >= area.left && x <= area.right &&
+            y >= area.top && y <= area.bottom
+        );
+    }
+    /*eslint-enable no-extra-parens*/
+
+    /**
+     * Calculates distance between two points.
+     *
+     * @param {Number} x1 - X coordinate of a first point.
+     * @param {Number} y1 - Y coordinate of a first point.
+     * @param {Number} x2 - X coordinate of a second point.
+     * @param {Number} y2 - Y coordinate of a second point.
+     * @returns {Number} Distance between points.
+     */
+    function distance(x1, y1, x2, y2) {
+        var dx = x2 - x1,
+            dy = y2 - y1;
+
+        dx *= dx;
+        dy *= dy;
+
+        return Math.sqrt(dx + dy);
+    }
+
+    /**
+     * Returns viewModel associated with a provided DOM element.
+     *
+     * @param {HTMLElement} elem
+     * @returns {Object|Array}
+     */
+    function getModel(elem) {
+        return ko.contextFor(elem).$data;
+    }
+
+    return Class.extend({
+        defaults: {
+            noSelectClass: '_no-select',
+            hiddenClass: '_hidden',
+            fixedX: false,
+            fixedY: true,
+            minDistance: 2,
+            columns: []
+        },
+
+        /**
+         * Initializes Dnd component.
+         *
+         * @returns {Dnd} Chainable.
+         */
+        initialize: function () {
+            _.bindAll(this, 'onMouseMove', 'onMouseUp', 'onMouseDown');
+
+            this.$body = $('body');
+
+            this._super()
+                .initListeners();
+
+            return this;
+        },
+
+        /**
+         * Binds necessary events listeners.
+         *
+         * @returns {Dnd} Chainbale.
+         */
+        initListeners: function () {
+            var addListener = document.addEventListener;
+
+            if (isTouchDevice) {
+                addListener('touchmove', this.onMouseMove, false);
+                addListener('touchend', this.onMouseUp, false);
+                addListener('touchleave', this.onMouseUp, false);
+            } else {
+                addListener('mousemove', this.onMouseMove, false);
+                addListener('mouseup', this.onMouseUp, false);
+            }
+
+            return this;
+        },
+
+        /**
+         * Sets specified column as a draggable element.
+         *
+         * @param {HTMLTableHeaderCellElement} column - Columns header element.
+         * @returns {Dnd} Chainable.
+         */
+        addColumn: function (column) {
+            this.columns.push(column);
+
+            isTouchDevice ?
+                column.addEventListener('touchstart', this.onMouseDown, false) :
+                column.addEventListener('mousedown', this.onMouseDown, false);
+
+            return this;
+        },
+
+        /**
+         * Defines specified table element as a main container.
+         *
+         * @param {HTMLTableElement} table
+         * @returns {Dnd} Chainable.
+         */
+        setTable: function (table) {
+            this.table = table;
+
+            return this;
+        },
+
+        /**
+         * Defines specified table element as a draggable table.
+         * Only this element will be moved across the screen.
+         *
+         * @param {HTMLTableElement} dragTable
+         * @returns {Dnd} Chainable.
+         */
+        setDragTable: function (dragTable) {
+            this.dragTable = dragTable;
+
+            return this;
+        },
+
+        /**
+         * Calculates coordinates of draggable elements.
+         *
+         * @returns {Dnd} Chainbale.
+         */
+        _cacheCoords: function () {
+            var container   = this.table.getBoundingClientRect(),
+                bodyRect    = document.body.getBoundingClientRect(),
+                grabbed     = this.grabbed,
+                dragElem    = grabbed.elem,
+                cells       = _.toArray(dragElem.parentNode.cells),
+                rect;
+
+            this.coords = this.columns.map(function (column) {
+                var data;
+
+                rect = column.getBoundingClientRect();
+
+                data = {
+                    index: cells.indexOf(column),
+                    target: column,
+                    orig: rect,
+                    left: rect.left - bodyRect.left,
+                    right: rect.right - bodyRect.left,
+                    top: rect.top - bodyRect.top,
+                    bottom: container.bottom - bodyRect.top
+                };
+
+                if (column === dragElem) {
+                    this.dragArea = data;
+
+                    grabbed.shiftX = rect.left - grabbed.x;
+                    grabbed.shiftY = rect.top - grabbed.y;
+                }
+
+                return data;
+            }, this);
+
+            return this;
+        },
+
+        /**
+         * Coppies dimensions of a grabbed column
+         * to a draggable grid.
+         *
+         * @param {HTMLTableHeaderCellElement} elem - Grabbed column.
+         * @returns {Dnd} Chainable.
+         */
+        _copyDimensions: function (elem) {
+            var dragTable   = this.dragTable,
+                dragBody    = dragTable.tBodies[0],
+                dragTrs     = dragBody ? dragBody.children : [],
+                origTrs     = _.toArray(this.table.tBodies[0].children),
+                columnIndex = _.toArray(elem.parentNode.cells).indexOf(elem),
+                origTd,
+                dragTr;
+
+            dragTable.style.width = elem.offsetWidth + 'px';
+            dragTable.tHead.firstElementChild.cells[0].style.height = elem.offsetHeight + 'px';
+
+            origTrs.forEach(function (origTr, rowIndex) {
+                origTd = origTr.cells[columnIndex];
+                dragTr = dragTrs[rowIndex];
+
+                if (origTd && dragTr) {
+                    dragTr.cells[0].style.height = origTd.offsetHeight + 'px';
+                }
+            });
+
+            return this;
+        },
+
+        /**
+         * Matches provided coordinates to available areas.
+         *
+         * @param {Number} x - X coordinate of a mouse pointer.
+         * @param {Number} y - Y coordinate of a mouse pointer.
+         * @returns {Object|Undefined} Matched area.
+         */
+        _getDropArea: function (x, y) {
+            return _.find(this.coords, function (area) {
+                return isInside(x, y, area);
+            });
+        },
+
+        /**
+         * Updates state of hovered areas.
+         *
+         * @param {Number} x - X coordinate of a mouse pointer.
+         * @param {Number} y - Y coordinate of a mouse pointer.
+         */
+        _updateAreas: function (x, y) {
+            var leavedArea = this.dropArea,
+                area = this.dropArea = this._getDropArea(x, y);
+
+            if (leavedArea) {
+                this.dragleave(leavedArea);
+            }
+
+            if (area && area.target !== this.dragArea.target) {
+                this.dragenter(area);
+            }
+        },
+
+        /**
+         * Grab action handler.
+         *
+         * @param {Number} x - X coordinate of a grabbed point.
+         * @param {Number} y - Y coordinate of a grabbed point.
+         * @param {HTMLElement} elem - Grabbed elemenet.
+         */
+        grab: function (x, y, elem) {
+            this.initDrag = true;
+            this.grabbed = {
+                x: x,
+                y: y,
+                elem: elem
+            };
+
+            this.$body.addClass(this.noSelectClass);
+        },
+
+        /**
+         * Dragstart action handler.
+         *
+         * @param {HTMLTableHeaderCellElement} elem - Element which is dragging.
+         */
+        dragstart: function (elem) {
+            this.initDrag = false;
+            this.dropArea = false;
+            this.dragging = true;
+
+            getModel(elem).dragging(true);
+
+            this._cacheCoords()
+                ._copyDimensions(elem);
+
+            $(this.dragTable).removeClass(this.hiddenClass);
+        },
+
+        /**
+         * Drag action handler. Locates draggable
+         * grid at a specified coordinates.
+         *
+         * @param {Number} x - X coordinate.
+         * @param {Number} y - Y coordinate.
+         */
+        drag: function (x, y) {
+            var grabbed  = this.grabbed,
+                dragArea = this.dragArea,
+                posX     = x + grabbed.shiftX,
+                posY     = y + grabbed.shiftY;
+
+            if (this.fixedX) {
+                x    = dragArea.left;
+                posX = dragArea.orig.left;
+            }
+
+            if (this.fixedY) {
+                y    = dragArea.top;
+                posY = dragArea.orig.top;
+            }
+
+            locate(this.dragTable, posX, posY);
+
+            if (!isInside(x, y, this.dropArea)) {
+                this._updateAreas(x, y);
+            }
+        },
+
+        /**
+         * Dragenter action handler.
+         *
+         * @param {Object} dropArea
+         */
+        dragenter: function (dropArea) {
+            var direction = this.dragArea.index < dropArea.index ?
+                'left' :
+                'right';
+
+            getModel(dropArea.target).dragover(direction);
+        },
+
+        /**
+         * Dragleave action handler.
+         *
+         * @param {Object} dropArea
+         */
+        dragleave: function (dropArea) {
+            getModel(dropArea.target).dragover(false);
+        },
+
+        /**
+         * Dragend action handler.
+         *
+         * @param {Object} dragArea
+         */
+        dragend: function (dragArea) {
+            var dropArea = this.dropArea,
+                dragElem = dragArea.target;
+
+            this.dragging = false;
+
+            $(this.dragTable).addClass(this.hiddenClass);
+
+            getModel(dragElem).dragging(false);
+
+            if (dropArea && dropArea.target !== dragElem) {
+                this.drop(dropArea, dragArea);
+            }
+        },
+
+        /**
+         * Drop action handler.
+         *
+         * @param {Object} dropArea
+         * @param {Object} dragArea
+         */
+        drop: function (dropArea, dragArea) {
+            var dropModel = getModel(dropArea.target),
+                dragModel = getModel(dragArea.target);
+
+            getModel(this.table).insertChild(dragModel, dropModel);
+            dropModel.dragover(false);
+        },
+
+        /**
+         * Documents' 'mousemove' event handler.
+         *
+         * @param {(MouseEvent|TouchEvent)} e - Event object.
+         */
+        onMouseMove: function (e) {
+            var grab    = this.grabbed,
+                touch   = getTouch(e),
+                x       = touch.pageX,
+                y       = touch.pageY;
+
+            if (this.initDrag || this.dragging) {
+                e.preventDefault();
+            }
+
+            if (this.initDrag && distance(x, y, grab.x, grab.y) >= this.minDistance) {
+                this.dragstart(grab.elem);
+            }
+
+            if (this.dragging) {
+                this.drag(x, y);
+            }
+        },
+
+        /**
+         * Documents' 'mouseup' event handler.
+         */
+        onMouseUp: function () {
+            if (this.initDrag || this.dragging) {
+                this.initDrag = false;
+                this.$body.removeClass(this.noSelectClass);
+            }
+
+            if (this.dragging) {
+                this.dragend(this.dragArea);
+            }
+        },
+
+        /**
+         * Columns' 'mousedown' event handler.
+         *
+         * @param {(MouseEvent|TouchEvent)} e - Event object.
+         */
+        onMouseDown: function (e) {
+            var touch = getTouch(e);
+
+            this.grab(touch.pageX, touch.pageY, e.currentTarget);
+        }
+    });
+});
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 bcd26c0f6fa5ed3f641f455747094a401641a5fd..558e6629a166b5e47676af7513415add275e54c6 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
@@ -5,8 +5,9 @@
 define([
     'underscore',
     'mageUtils',
+    'Magento_Ui/js/core/renderer/layout',
     'Magento_Ui/js/lib/collapsible'
-], function (_, utils, Collapsible) {
+], function (_, utils, layout, Collapsible) {
     'use strict';
 
     function extractPreview(elem) {
@@ -39,15 +40,15 @@ define([
             filters: {
                 placeholder: true
             },
-            listens: {
-                active: 'extractPreviews',
-                applied: 'cancel extractActive'
-            },
             links: {
                 applied: '${ $.storageConfig.path }'
             },
             exports: {
                 applied: '${ $.provider }:params.filters'
+            },
+            listens: {
+                active: 'updatePreviews',
+                applied: 'cancel extractActive'
             }
         },
 
@@ -57,6 +58,8 @@ define([
          * @returns {Filters} Chainable.
          */
         initialize: function () {
+            this._processedColumns = {};
+
             this._super()
                 .cancel()
                 .extractActive();
@@ -182,12 +185,12 @@ define([
         },
 
         /**
-         * Extract previews of a specified filters.
+         * Updates 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));
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 fd7d70f9f7fd13f62fb111a70eacc1957655017b..299560ba2bfe5eaa6a4e06319e7388135e6ee941 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
@@ -3,23 +3,54 @@
  * See COPYING.txt for license details.
  */
 define([
+    'underscore',
     'uiComponent',
-    'Magento_Ui/js/lib/spinner'
-], function (Component, loader) {
+    'Magento_Ui/js/lib/spinner',
+    'Magento_Ui/js/core/renderer/layout'
+], function (_, Component, loader, layout) {
     'use strict';
 
     return Component.extend({
         defaults: {
             template: 'ui/grid/listing',
+            positions: false,
+            storageConfig: {
+                positions: '${ $.storageConfig.path }.positions'
+            },
+            dndConfig: {
+                name: '${ $.name }_dnd',
+                component: 'Magento_Ui/js/grid/dnd',
+                containerTmpl: 'ui/grid/dnd/listing',
+                enabled: true
+            },
             imports: {
                 rows: '${ $.provider }:data.items'
             },
             listens: {
+                elems: 'setPositions',
                 '${ $.provider }:reload': 'showLoader',
                 '${ $.provider }:reloaded': 'hideLoader'
+            },
+            modules: {
+                dnd: '${ $.dndConfig.name }'
             }
         },
 
+        /**
+         * Initializes Listing component.
+         *
+         * @returns {Listing} Chainable.
+         */
+        initialize: function () {
+            this._super();
+
+            if (this.dndConfig.enabled) {
+                this.initDnd();
+            }
+
+            return this;
+        },
+
         /**
          * Initializes observable properties.
          *
@@ -32,6 +63,90 @@ define([
             return this;
         },
 
+        /**
+         * Creates drag&drop widget instance.
+         *
+         * @returns {Listing} Chainable.
+         */
+        initDnd: function () {
+            layout([this.dndConfig]);
+
+            return this;
+        },
+
+        /**
+         * Called when another element was added to current component.
+         *
+         * @returns {Listing} Chainable.
+         */
+        initElement: function () {
+            var currentCount = this.elems().length,
+                totalCount = this.initChildCount;
+
+            if (totalCount === currentCount) {
+                this.initPositions();
+            }
+
+            return this._super();
+        },
+
+        /**
+         * Defines initial order of child elements.
+         *
+         * @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');
+
+            return this;
+        },
+
+        /**
+         * Updates current state of child positions.
+         *
+         * @returns {Listing} Chainable.
+         */
+        setPositions: function () {
+            var positions = {};
+
+            this.elems.each(function (elem, index) {
+                positions[elem.index] = index;
+            });
+
+            this.set('positions', positions);
+
+            return this;
+        },
+
+        /**
+         * Reseorts child elements array according to provided positions.
+         *
+         * @param {Object} positions - Object where key represents child
+         *      index and value is its' position.
+         * @returns {Listing} Chainable.
+         */
+        applyPositions: function (positions) {
+            var sorting;
+
+            sorting = this.elems.map(function (elem) {
+                return {
+                    elem: elem,
+                    position: positions[elem.index]
+                };
+            });
+
+            this.insertChild(sorting);
+
+            return this;
+        },
+
         /**
          * Hides loader.
          */
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 35c792feaba23e40c19c68f2609171c798983297..21e86a6d640b2f43aab310774f09ce31d69583de 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
@@ -4,37 +4,178 @@
  */
 define([
     'underscore',
+    'uiRegistry',
     'mageUtils',
-    'Magento_Ui/js/lib/collapsible'
-], function (_, utils, Collapsible) {
+    'Magento_Ui/js/lib/collapsible',
+    'Magento_Ui/js/modal/confirm',
+    'Magento_Ui/js/modal/alert',
+    'mage/translate'
+], function (_, registry, utils, Collapsible, confirm, alert, $t) {
     'use strict';
 
     return Collapsible.extend({
         defaults: {
             template: 'ui/grid/actions',
-            noItems:  'You haven\'t selected any items!'
+            selectProvider: '',
+            actions: [],
+            noItemsMsg: $t('You haven\'t selected any items!'),
+            modules: {
+                selections: '${ $.selectProvider }'
+            }
         },
 
-        applyAction: function (action) {
-            var proceed = true,
-                selections = this.source.get('config.multiselect');
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {Massactions} Chainable.
+         */
+        initObservable: function () {
+            this._super()
+                .observe('actions');
+
+            return this;
+        },
 
-            if (!selections || !selections.total) {
-                proceed = false;
+        /**
+         * Applies specified action.
+         *
+         * @param {String} actionIndex - Actions' identifier.
+         * @returns {Massactions} Chainable.
+         */
+        applyAction: function (actionIndex) {
+            var data = this.getSelections(),
+                action,
+                callback;
 
-                alert(this.noItems);
-            }
+            if (!data.total) {
+                alert({
+                    content: this.noItemsMsg
+                });
 
-            if (proceed && action.confirm) {
-                proceed = window.confirm(action.confirm);
+                return this;
             }
 
-            if (proceed) {
-                utils.submit({
-                    url: action.url,
-                    data: selections
+            action   = this.getAction(actionIndex),
+            callback = this._getCallback(action, data);
+
+            action.confirm ?
+                this._confirm(action, callback) :
+                callback();
+
+            return this;
+        },
+
+        /**
+         * Retrieves selections data from the selections provider.
+         *
+         * @returns {Object|Undefined}
+         */
+        getSelections: function () {
+            var provider = this.selections(),
+                selections = provider && provider.getSelections();
+
+            return selections;
+        },
+
+        /**
+         * Retrieves action object associated with a specified index.
+         *
+         * @param {String} actionIndex - Actions' identifier.
+         * @returns {Object} Action object.
+         */
+        getAction: function (actionIndex) {
+            return _.findWhere(this.actions(), {
+                type: actionIndex
+            });
+        },
+
+        /**
+         * Adds new action. If action with a specfied identifier
+         * already exists, than the original one will be overrided.
+         *
+         * @param {Object} action - Action object.
+         * @returns {Massactions} Chainable.
+         */
+        addAction: function (action) {
+            var actions = this.actions(),
+                index = _.findIdnex(actions, {
+                    type: action.type
                 });
+
+            ~index ?
+                actions[index] = action :
+                actions.push(action);
+
+            this.actions(actions);
+
+            return this;
+        },
+
+        /**
+         * Creates action callback based on its' data. If action doesn't spicify
+         * a callback function than the default one will be used.
+         *
+         * @private
+         * @param {Object} action - Actions' object.
+         * @param {Object} selections - Selections data.
+         * @returns {Function} Callback function.
+         */
+        _getCallback: function (action, selections) {
+            var callback = action.callback,
+                args     = [action, selections];
+
+            if (utils.isObject(callback)) {
+                args.unshift(callback.target);
+
+                callback = registry.async(callback.provider);
+            } else if (typeof callback != 'function') {
+                callback = this.defaultCallback.bind(this);
             }
+
+            return function () {
+                callback.apply(null, args);
+            };
+        },
+
+        /**
+         * Default action callback. Sends selections data
+         * via POST request.
+         *
+         * @param {Object} data - Selections data.
+         * @param {Object} action - Action data.
+         */
+        defaultCallback: function (data, action) {
+            var selections = {};
+
+            if (data.excludeMode) {
+                selections.excluded = data.excluded;
+            } else {
+                selections.selected = data.selected;
+            }
+
+            utils.submit({
+                url: action.url,
+                data: selections
+            });
+        },
+
+        /**
+         * Shows actions' confirmation window.
+         *
+         * @param {Object} action - Actions' data.
+         * @param {Function} callback - Callback that will be
+         *      invoked if action is confirmed.
+         */
+        _confirm: function (action, callback) {
+            var confirmData = action.confirm;
+
+            confirm({
+                title: confirmData.title,
+                content: confirmData.message,
+                actions: {
+                    confirm: callback
+                }
+            });
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging.js b/app/code/Magento/Ui/view/base/web/js/grid/paging.js
index e04597379afa39323ca1a5700b7d5a14e06017c9..0fd512c3ffc48a3e3b840dbb2d8ef29d2ef0d829 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging.js
@@ -23,9 +23,10 @@ define([
             template: 'ui/grid/paging',
             pageSize: 20,
             current: 1,
+            selectProvider: '',
 
             imports: {
-                totalSelected: '${ $.provider }:config.multiselect.total',
+                totalSelected: '${ $.selectProvider }:totalSelected',
                 totalRecords: '${ $.provider }:data.totalRecords'
             },
 
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/component/links.js
index 94df6c5d22c3cecb1d53de18eca10c00c01e89b5..deecc3fa9a14acdaf5f59b073a7d0b067c90c7be 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/component/links.js
@@ -81,22 +81,19 @@ define([
     }
 
     function setLinked(map, data) {
-        var hasLink,
-            match;
-        
+        var match;
+
         if (!map) {
             return;
         }
 
-        hasLink = map.some(function (item) {
-            match = item;
-
-            return !item.linked &&
-                item.target === data.target &&
-                item.property === data.property;
+        match = _.findWhere(map, {
+            linked: false,
+            target: data.target,
+            property: data.property
         });
 
-        if (hasLink) {
+        if (match) {
             match.linked = data;
             data.linked = match;
         }
@@ -106,6 +103,8 @@ define([
         var direction = data.direction,
             map = maps[direction];
 
+        data.linked = false;
+
         (map[property] = map[property] || []).push(data);
 
         direction = direction === 'imports' ? 'exports' : 'imports';
@@ -165,7 +164,7 @@ define([
                     });
                 });
             });
-            
+
             return this;
         },
 
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
index cc82f645030e071a202ae68fca9ccb282ac27de6..a91b3cd38b611151d50068a2c41fc94a818e4085 100644
--- 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
@@ -10,45 +10,17 @@ define([
 ], function (ko, _, utils, registry) {
     'use strict';
 
-    function getIndex(container, target) {
-        var result;
-
-        container.some(function (item, index) {
-            result = index;
-
-            return item && (item.name === target || item === target);
-        });
-
-        return result;
-    }
-
     function compact(container) {
         return container.filter(utils.isObject);
     }
 
-    function reserve(container, elem, position) {
-        var offset = position,
-            target;
-
-        if (_.isObject(position)) {
-            target = position.after || position.before;
-            offset = getIndex(container, target);
-
-            if (position.after) {
-                ++offset;
-            }
-        }
-
-        offset = utils.formatOffset(container, offset);
-
-        container[offset] ?
-            container.splice(offset, 0, elem) :
-            container[offset] = elem;
-
-        return offset;
-    }
-
     return {
+        /**
+         * Retrieves requested region.
+         * Creates region if it was not created yet
+         *
+         * @returns {ObservableArray}.
+         */
         getRegion: function (name) {
             var regions = this.regions = this.regions || {};
 
@@ -59,23 +31,65 @@ define([
             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} elem - Name of the component to insert.
+         * @param {String} elems - Name of the component to insert.
          * @param {Number} [position=-1] - Position at which to insert elements.
          * @returns {Component} Chainable.
          */
-        insertChild: function (elem, position) {
-            reserve(this._elems, elem, position);
-            registry.get(elem, this._insert);
+        insertChild: function (elems, position) {
+            var container = this._elems,
+                update = false,
+                newItems = [],
+                newItem;
+
+            if (Array.isArray(elems)) {
+                newItems = elems.map(function (item) {
+                    newItem = item.elem ?
+                        utils.insert(item.elem, container, item.position) :
+                        utils.insert(item, container, position);
+
+                    return newItem;
+                });
+            } else {
+                newItems.push(utils.insert(elems, container, position));
+            }
+
+            newItems.forEach(function (item) {
+                if (!item) {
+                    return;
+                }
+
+                if (item === true) {
+                    update = true;
+                } else {
+                    _.isString(item) ?
+                        registry.get(item, this._insert) :
+                        this._insert(item);
+                }
+            }, this);
+
+            if (update) {
+                this._update();
+            }
 
             return this;
         },
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
new file mode 100644
index 0000000000000000000000000000000000000000..2297f2d5cf1764d0198b791ec6011f3b2debf2b8
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
@@ -0,0 +1,22 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'ko'
+], function (ko) {
+    'use strict';
+
+    ko.bindingHandlers.afterRender = {
+        /**
+         * Binding init callback.
+         */
+        init: function (element, valueAccessor, allBindings, viewModel) {
+            var callback = valueAccessor();
+
+            if (typeof callback === 'function') {
+                callback(element, viewModel);
+            }
+        }
+    };
+});
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 a8bb4a15077772cc66f78d7f85a00f1e94383161..2758b3f8c2391b60ff9fefa818279fc9af09a295 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
@@ -14,11 +14,11 @@ define([
     './bind/optgroup',
     './bind/fadeVisible',
     './bind/mage-init',
+    './bind/after-render',
     './extender/observable_array'
-], function(ko, templateEngine) {
+], function (ko, templateEngine) {
     'use strict';
 
     ko.setTemplateEngine(templateEngine);
     ko.applyBindings();
-
 });
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 adf6b9176b4004d6d55c52cffe1fc2398cb13207..4bf6b21f686f8365c90515b2919c108b5fda2d8d 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
@@ -7,23 +7,23 @@ define([
     'underscore',
     './storage',
     './events'
-], function(utils, _, Storage, Events) {
+], function (utils, _, Storage, Events) {
     'use strict';
 
-    function async(name, registry, method) { 
+    function async(name, registry, method) {
         var args = _.toArray(arguments).slice(3);
 
         if (_.isString(method)) {
             registry.get(name, function (component) {
-                component[method].apply(component, args); 
+                component[method].apply(component, args);
             });
         } else if (_.isFunction(method)) {
-            registry.get(name, method); 
+            registry.get(name, method);
         } else if (!args.length) {
             return registry.get(name);
         }
-    }  
-    
+    }
+
     function Registry() {
         this.storage = new Storage();
         this.events = new Events(this.storage);
@@ -35,9 +35,9 @@ define([
         /**
          * Retrieves data from registry.
          *
-         * @params {(String|Array)} elems -
+         * @param {(String|Array)} elems -
          *      An array of elements' names or a string of names divided by spaces.
-         * @params {Function} [callback] -
+         * @param {Function} [callback] -
          *      Callback function that will be triggered
          *      when all of the elements are registered.
          * @returns {Array|*|Undefined}
@@ -45,7 +45,7 @@ define([
          *      or an element itself if only is requested.
          *      If callback function is specified then returns 'undefined'.
          */
-        get: function(elems, callback) {
+        get: function (elems, callback) {
             var records;
 
             elems = utils.stringToArray(elems) || [];
@@ -64,8 +64,8 @@ define([
        /**
          * Sets data to registry.
          *
-         * @params {String} elems - Elements' name.
-         * @params {*} value - Value that will be assigned to the element.
+         * @param {String} elem - Elements' name.
+         * @param {*} value - Value that will be assigned to the element.
          * @returns {registry} Chainable.
          */
         set: function (elem, value) {
@@ -77,7 +77,7 @@ define([
 
         /**
          * Removes specified elements from a storage.
-         * @params {(String|Array)} elems -
+         * @param {(String|Array)} elems -
          *      An array of elements' names or a string of names divided by spaces.
          * @returns {registry} Chainable.
          */
@@ -92,7 +92,7 @@ define([
        /**
          * Checks whether specified elements has been registered.
          *
-         * @params {(String|Array)} elems -
+         * @param {(String|Array)} elems -
          *      An array of elements' names or a string of names divided by spaces.
          * @returns {Boolean}
          */
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
new file mode 100644
index 0000000000000000000000000000000000000000..33be3c8041dea6c2f0586124bc3f1e8120020cef
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
@@ -0,0 +1,40 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'underscore',
+    'jquery/ui',
+    'Magento_Ui/js/modal/confirm',
+    'mage/translate'
+], function ($, _) {
+    'use strict';
+
+    $.widget('mage.alert', $.mage.confirm, {
+        options: {
+            modalClass: 'confirm',
+            title: $.mage.__('Attention'),
+            actions: {
+                always: function () {}
+            },
+            buttons: [{
+                text: $.mage.__('OK'),
+                class: 'action-secondary',
+                click: function () {
+                    this.closeModal(true);
+                }
+            }]
+        },
+        closeModal: function () {
+            this.options.actions.always();
+            this.element.bind('confirmclosed', _.bind(this._remove, this));
+
+            return this._super();
+        }
+    });
+
+    return function (config) {
+        return $('<div></div>').html(config.content).alert(config);
+    };
+});
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
new file mode 100644
index 0000000000000000000000000000000000000000..7bad2023b649b18edeaf710780d8cf0e73a5f6b9
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -0,0 +1,66 @@
+/**
+ * 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.confirm', $.mage.modal, {
+        options: {
+            modalClass: 'confirm',
+            title: '',
+            actions: {
+                always: function(){},
+                confirm: function(){},
+                cancel: function(){}
+            },
+            buttons: [{
+                text: $.mage.__('Cancel'),
+                class: 'action-tertiary',
+                click: function(){
+                    this.closeModal();
+                }
+            }, {
+                text: $.mage.__('OK'),
+                class: 'action-secondary',
+                click: function() {
+                    this.closeModal(true);
+                }
+            }]
+        },
+        _create: function() {
+            this._super();
+            this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
+            this.openModal();
+        },
+        _remove: function() {
+            this.modal.remove();
+        },
+        openModal: function() {
+            return this._super();
+        },
+        closeModal: function(result) {
+            result = result || false;
+
+            if (result) {
+                this.options.actions.confirm();
+            } else {
+                this.options.actions.cancel();
+            }
+            this.options.actions.always();
+            this.element.bind('confirmclosed', _.bind(this._remove, this));
+
+            return this._super();
+        }
+    });
+
+    return function (config) {
+        return $('<div></div>').html(config.content).confirm(config);
+    };
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modalToggle.js b/app/code/Magento/Ui/view/base/web/js/modal/modalToggle.js
new file mode 100644
index 0000000000000000000000000000000000000000..65714ef029cf6ba25199057fc8b64ab03515b01f
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modalToggle.js
@@ -0,0 +1,28 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'Magento_Ui/js/modal/modal'
+], function($){
+    'use strict';
+
+    return function(config, el) {
+        var widget = $(config.content).modal(config);
+
+        $(el).on(config.toggleEvent, function() {
+            var state = widget.data('mage-modal').options.isOpen;
+
+            if (state) {
+                widget.modal('closeModal');
+            } else {
+                widget.modal('openModal');
+            }
+
+            return false;
+        });
+
+        return widget;
+    };
+});
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/actions.html b/app/code/Magento/Ui/view/base/web/templates/grid/actions.html
index 685936aa8430382b59ff1b065c74e244aadcd24a..89bf5ba4061d17358994f8a2c3cf9d8158d90d51 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/actions.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/actions.html
@@ -18,8 +18,8 @@
         <ul
             class="action-menu"
             data-bind="css: {'_active': opened},
-                       foreach: {data: actions, as: 'action'}">
-            <li data-bind="click: $parent.applyAction.bind($parent, action)">
+                       foreach: actions">
+            <li data-bind="click: $parent.applyAction.bind($parent, type)">
             <span
                 class="action-menu-item"
                 data-bind="text: label"></span>
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 67f195377c669e5ba824a8be13603c69fa2aa0bf..85fba7ed0c6c2d5c725486bd30bf69b65c4ea213 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
@@ -6,25 +6,47 @@
 -->
 
 <td data-bind="visible: visible" class="data-grid-actions-cell">
-    <!-- ko if: getDisplayed(row[field.index]).length > 1 -->
-    <div class="action-select-wrap _active">
-        <button class="action-select">
+    <!-- ko if: isSingle($parentContext.$index()) -->
+        <!-- ko foreach: getVisibleActions($parentContext.$index()) -->
+    <a
+        class="action-menu-item"
+        data-bind="
+            attr: {
+                href: $data.href
+            },
+            click: $parent.applyAction.bind($parent, index, rowIndex),
+            text: $data.label"></a>
+        <!-- /ko -->
+    <!-- /ko -->
+
+    <!-- ko if: isMultiple($parentContext.$index()) -->
+    <div
+        class="action-select-wrap"
+        data-bind="
+            css : {
+                '_active' : opened() === $parentContext.$index()
+            },
+            outerClick: closeList.bind($data, $parentContext.$index())">
+        <button class="action-select" data-bind="click: toggleList.bind($data, $parentContext.$index())">
             <span data-bind="text: $t('Select')"></span>
         </button>
-        <ul class="action-menu _active">
+        <ul
+            class="action-menu"
+            data-bind="
+                css: {'_active': opened() === $parentContext.$index()}">
+            <!-- ko foreach: getVisibleActions($parentContext.$index()) -->
             <li>
                 <a
                     class="action-menu-item"
-                    data-bind="attr: {href: displayed[0].href},
-                               text: displayed[0].label"></a>
+                    data-bind="
+                        attr: {
+                            href: $data.href
+                        },
+                        click: $parent.applyAction.bind($parent, index, rowIndex),
+                        text: $data.label"></a>
             </li>
+            <!-- /ko -->
         </ul>
     </div>
     <!-- /ko -->
-    <!-- ko ifnot: getDisplayed(row[field.index]).length > 1 -->
-    <a
-        class="action-menu-item"
-        data-bind="attr: {href: displayed[0].href},
-                               text: displayed[0].label"></a>
-    <!-- /ko -->
 </td>
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 27d6bfcf6216b5a5d6ace4d652e681814b99bcaf..166a4f1f9b7e9a7d25b6a973f95e462019e9234e 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
@@ -5,7 +5,9 @@
  */
 -->
 <td
-    data-bind="visible: visible,
-       click: isClickable(row) ? redirect.bind($data, getClickUrl(row)) : false,
-       html: getLabel(row[field.index])"
+    data-bind="
+        visible: visible,
+        css: { _dragging: dragging },
+        click: isClickable(row) ? redirect.bind($data, getClickUrl(row)) : false,
+        html: getLabel(row[field.index])"
     data-action="grid-row-edit"></td>
\ 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 81e6b2c5bc3706a042daf1f6e2b3725e84b681c4..c11acd1f36ecea301095cea6258c9b1a65c781e7 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
@@ -10,9 +10,12 @@
         <input
             class="admin__control-checkbox"
             type="checkbox"
-            data-bind="checked: selected,
-                   value: row[indexField],
-                   attr: {id: 'check' + row[indexField]}">
+            data-bind="
+                checked: selected,
+                value: row[indexField],
+                attr: {
+                    id: 'check' + row[indexField]
+                }">
         <label data-bind="attr: {for: 'check' + row[indexField]}"></label>
     </label>
 </td>
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 257b4b0585d45aec84541ae338780047e16e3852..09ecafbdfbab9bf193a52b0f28063a79693ba68d 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,8 +4,10 @@
  * See COPYING.txt for license details.
  */
 -->
-<td
-    data-bind="visible: visible,
-           click: isClickable(row) ? redirect.bind($data, getClickUrl(row)) : false,
-           text: getLabel(row[field.index])"
+<td 
+    data-bind="
+        visible: visible,
+        css: { _dragging: dragging },
+        click: isClickable(row) ? redirect.bind($data, getClickUrl(row)) : false,
+        text: getLabel(row[field.index])"
     data-action="grid-row-edit"></td>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/actions.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/actions.html
deleted file mode 100644
index 5d3aaa53d9bafc964ba9515d5fa6cb900de9c594..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/actions.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-
-<th class="data-grid-th data-grid-actions-cell" data-bind="visible: visible">
-    <span data-bind="text: label"></span>
-</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 dc7b883659adb7cc690246acbc840cc12520ef6d..41207503828c1221929d6b0eb96914dcd45b5b00 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
@@ -4,17 +4,21 @@
  * See COPYING.txt for license details.
  */
 -->
-
-<!-- ko if: sortable -->
-    <th
-        class="data-grid-th _sortable"
-        data-bind="css: sortClass, click: sort, visible: visible">
-        <span data-bind="text: label"></span>
-    </th>
-<!-- /ko -->
-
-<!-- ko ifnot: sortable -->
-    <th class="data-grid-th" data-bind="visible: visible">
-        <span data-bind="text: label"></span>
-    </th>
-<!-- /ko -->
+<th
+    class="data-grid-th"
+    data-bind="
+        afterRender: draggable && $parent.dndConfig.enabled ?
+            (function (elem) { $parent.dnd('addColumn', elem); }) :
+            false,
+        css: {
+            '_sortable': sortable,
+            '_draggable': draggable,
+            '_ascend': sorting() === 'asc',
+            '_descend': sorting() === 'desc',
+            '_dragover-left': dragover() === 'right',
+            '_dragover-right': dragover() === 'left'
+        },
+        click: sort,
+        visible: visible">
+    <span data-bind="text: label"></span>
+</th>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/dnd/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/dnd/listing.html
new file mode 100644
index 0000000000000000000000000000000000000000..38b622cdef6cfe21bfe25e9176b2ff90c8fe1a8b
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/dnd/listing.html
@@ -0,0 +1,42 @@
+
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<table 
+    class="data-grid _dragging-copy _hidden"
+    data-bind="
+        afterRender: function (elem) { dnd('setDragTable', elem); }
+    ">
+    <thead data-part="head">
+        <tr data-part="head.row">
+            <!-- ko foreach: elems -->
+                <!-- ko if: dragging -->
+                    <!-- ko template: getHeader() --><!-- /ko -->
+                <!-- /ko -->
+            <!-- /ko -->
+        </tr>
+    </thead>
+    <tbody data-part="body">
+        <!-- ko if: hasData() -->
+            <!-- ko foreach: { data: rows, as: 'row' } -->
+                <tr data-part="body.row">
+                    <!-- ko foreach: { data: $parent.elems, as: 'field' }  -->
+                        <!-- ko if: dragging -->
+                            <!-- ko template: getBody() --><!-- /ko -->
+                        <!-- /ko -->
+                    <!-- /ko -->
+                </tr>
+            <!-- /ko -->
+        <!-- /ko -->
+
+        <!-- ko ifnot: hasData() -->
+            <tr class="data-grid-tr-no-data">
+                <td data-bind="attr: { colspan: getColspan() },
+                               text: $t('We couldn\'t find any records.')"></td>
+            </tr>
+        <!-- /ko -->
+    </tbody>
+</table>
\ 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 c3de27d5c7e52f97647170b06fc6a3b1e8b67162..118136c29fd86c65a84adf1fc1b4cd676c67f2fc 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
@@ -4,15 +4,20 @@
  * See COPYING.txt for license details.
  */
 -->
-
 <div class="admin__data-grid-wrap">
-    <table class="data-grid">
+    <table
+        class="data-grid"
+        data-bind="
+            afterRender: dndConfig.enabled ?
+                function (elem) { dnd('setTable', elem); } :
+                false,
+            css: {
+                'data-grid-draggable': dndConfig.enabled
+            }">
         <thead data-part="head">
             <tr data-part="head.row">
                 <!-- ko foreach: elems -->
-                    <!-- ko if: visible -->
-                        <!-- ko template: getHeader() --><!-- /ko -->
-                    <!-- /ko -->
+                    <!-- ko template: getHeader() --><!-- /ko -->
                 <!-- /ko -->
             </tr>
         </thead>
@@ -21,9 +26,7 @@
                 <!-- ko foreach: { data: rows, as: 'row' } -->
                     <tr data-part="body.row">
                         <!-- ko foreach: { data: $parent.elems, as: 'field' }  -->
-                            <!-- ko if: visible -->
-                                <!-- ko template: getBody() --><!-- /ko -->
-                            <!-- /ko -->
+                            <!-- ko template: getBody() --><!-- /ko -->
                         <!-- /ko -->
                     </tr>
                 <!-- /ko -->
@@ -37,4 +40,7 @@
             <!-- /ko -->
         </tbody>
     </table>
+    <!-- ko if: dndConfig.enabled -->
+        <!-- ko template: dndConfig.containerTmpl --><!-- /ko -->
+    <!-- /ko -->
 </div>
\ No newline at end of file
diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json
index 29ec2510c07e79abb5e21f664e90c98db3554609..871fbcdc12c1d2a6a3055ac20e0b5370575a5489 100644
--- a/app/code/Magento/Ups/composer.json
+++ b/app/code/Magento/Ups/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json
index 91f18fbea4728a982a17dca4cd56a0ac9f5ab88e..24a2772e11a3c6bf97a534c2fa44c09e672e3d6d 100644
--- a/app/code/Magento/UrlRewrite/composer.json
+++ b/app/code/Magento/UrlRewrite/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog-url-rewrite": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-cms-url-rewrite": "0.74.0-beta13",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-cms-url-rewrite": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json
index 82c4b5609f4d62e0499e75a6a4f4147da21ebdf6..b16f88f04a4c5b9cec2efb70b688923490d10226 100644
--- a/app/code/Magento/User/composer.json
+++ b/app/code/Magento/User/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-integration": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-integration": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json
index 625a904edd642d843d9d02ec910e2616a242dd5f..59b75138b5be4d8cb021390eec32bc8747c00f8e 100644
--- a/app/code/Magento/Usps/composer.json
+++ b/app/code/Magento/Usps/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-shipping": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-config": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-shipping": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json
index b61f8fe802c68ffa61e53966cb117e1f439a4436..58eb8dbd4b6c0be1e41c82dd72972cde940dfe8c 100644
--- a/app/code/Magento/Variable/composer.json
+++ b/app/code/Magento/Variable/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-email": "0.74.0-beta13",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-email": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Version/composer.json b/app/code/Magento/Version/composer.json
index 4a3025af599865f283ba05b22341148d4412162e..07feda54cfd8fcfa810c79f28b9775b8abd4951b 100644
--- a/app/code/Magento/Version/composer.json
+++ b/app/code/Magento/Version/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json
index 94d5b769e85526178ded1e4a57d0488acccca8b6..7c018de1b3b051d135d1fe69741e44a94185723c 100644
--- a/app/code/Magento/Webapi/composer.json
+++ b/app/code/Magento/Webapi/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-authorization": "0.74.0-beta13",
-        "magento/module-integration": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-integration": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-user": "0.74.0-beta13"
+        "magento/module-user": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json
index ba0a615bab17ec2d4cd8221715dd418b87785220..7102e797d034a46b70b9724af86c42669e9a8d1b 100644
--- a/app/code/Magento/Weee/composer.json
+++ b/app/code/Magento/Weee/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-tax": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-directory": "0.74.0-beta13",
-        "magento/module-eav": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-quote": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta14",
+        "magento/module-eav": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json
index cfecd20e99f1b7ad876322a228f0868b448e1c05..53ed15c7b6fb5644a930350c0ef7825766161645 100644
--- a/app/code/Magento/Widget/composer.json
+++ b/app/code/Magento/Widget/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-cms": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-variable": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-cms": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-variable": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json
index 703058cbf5f90410d1631d2d9dedda1ad6c026f4..31d183b64bb0ae5cafd1f548adcc4c776cf12132 100644
--- a/app/code/Magento/Wishlist/composer.json
+++ b/app/code/Magento/Wishlist/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta13",
-        "magento/module-customer": "0.74.0-beta13",
-        "magento/module-catalog": "0.74.0-beta13",
-        "magento/module-checkout": "0.74.0-beta13",
-        "magento/module-theme": "0.74.0-beta13",
-        "magento/module-catalog-inventory": "0.74.0-beta13",
-        "magento/module-rss": "0.74.0-beta13",
-        "magento/module-backend": "0.74.0-beta13",
-        "magento/module-sales": "0.74.0-beta13",
-        "magento/module-grouped-product": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
-        "magento/module-ui": "0.74.0-beta13",
+        "magento/module-store": "0.74.0-beta14",
+        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta14",
+        "magento/module-theme": "0.74.0-beta14",
+        "magento/module-catalog-inventory": "0.74.0-beta14",
+        "magento/module-rss": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta14",
+        "magento/module-sales": "0.74.0-beta14",
+        "magento/module-grouped-product": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
+        "magento/module-ui": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-configurable-product": "0.74.0-beta13",
-        "magento/module-downloadable": "0.74.0-beta13",
-        "magento/module-bundle": "0.74.0-beta13",
-        "magento/module-cookie": "0.74.0-beta13"
+        "magento/module-configurable-product": "0.74.0-beta14",
+        "magento/module-downloadable": "0.74.0-beta14",
+        "magento/module-bundle": "0.74.0-beta14",
+        "magento/module-cookie": "0.74.0-beta14"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/header/actions-group/_search.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/header/actions-group/_search.less
index 27524d7d4d0854693596871cd21c5d8f05dd84b8..ff4c338c62faa30c58cd734cf4e1f0025fe74444 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/header/actions-group/_search.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/header/actions-group/_search.less
@@ -95,6 +95,9 @@
             display: block;
             font-size: @font-size__s;
             padding: @search-global-input__padding-top @search-global-input__padding-side @search-global-input__padding-bottom;
+            &._active {
+                background-color: @color-blue-clear-sky;
+            }
         }
         .title {
             display: block;
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 d3ef739a9435a77614ee1bcf3a302cfd274cc7ef..a243bf34f061e922823d54c49ac504676092250b 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
@@ -48,6 +48,10 @@
 
 @data-grid-row-parent-marker__size: 1rem;
 
+@data-grid-td__dragging__opacity: 95%;
+@data-grid-dragging-copy__border-color: @color-blue-pure;
+@data-grid-dragging-copy__border: 1px solid @data-grid-dragging-copy__border-color;
+
 //
 
 .admin__data-grid-outer-wrap {
@@ -106,6 +110,9 @@
         &:nth-child(even) {
             td {
                 background-color: @data-grid-td__even__background-color;
+                &._dragging {
+                    background-color: fade(@data-grid-td__even__background-color, @data-grid-td__dragging__opacity); 
+                }
             }
         }
         &.data-grid-tr-no-data {
@@ -154,7 +161,21 @@
         &:last-child {
             border-right-style: @data-grid-td__border-outer-style;
         }
+        &._dragging {
+            color: fade(@table__color, @data-grid-td__dragging__opacity);
+            background-color: fade(@data-grid-td__odd__background-color, @data-grid-td__dragging__opacity);
+            a {
+                color: fade(@link__color, @data-grid-td__dragging__opacity);
+                &:hover {
+                    color: fade(@link__hover__color, @data-grid-td__dragging__opacity);
+                }
+            }
+        }
+        
         //  Action select data grid styles (can be action-select-secondary in future)
+        .action-select-wrap {
+            position: static;
+        }
         .action-select {
             .link-pattern();
             background-color: transparent;
@@ -168,6 +189,9 @@
             }
             &:after {
                 border-color: @link__color transparent transparent transparent;
+                margin: .6rem 0 0 .7rem;
+                right: auto;
+                top: auto;
             }
             &:before {
                 display: none;
@@ -175,6 +199,8 @@
         }
         .action-menu {
             left: auto;
+            right: auto;
+            top: auto;
             z-index: 1;
         }
     }
@@ -189,11 +215,22 @@
         &:first-child {
             border-left-color: @data-grid-th__border-color;
         }
+        &._dragover-left {
+            box-shadow: inset 3px 0 0px 0px @color-white;
+        }
+        &._dragover-right {
+            box-shadow: inset -3px 0 0px 0px @color-white;
+        }
     }
     .data-grid-th {
         color: @data-grid-th__color;
         padding: @data-grid-th__padding-vertical @data-grid-th__padding-horizontal;
         vertical-align: middle;
+        &._draggable {
+            cursor: -webkit-grab;
+               cursor: -moz-grab;
+                    cursor: grab;
+        }
         &._sortable {
             background-clip: padding-box; // Fix for border overlay in Firefox
             cursor: pointer;
@@ -281,6 +318,45 @@
             }
         }
     }
+    //  Draggable columns
+    &._hidden {
+        display: none;
+    }
+    &.data-grid-draggable {
+        background-color: @color-black;
+    }
+    &._dragging-copy {
+        background-color: @color-white;
+        box-shadow: @component__box-shadow__base;
+        left: 0;
+        opacity: .95;
+        position: fixed;
+        top: 0;
+        z-index: @overlay__z-index;
+        .data-grid-th {
+            border: @data-grid-dragging-copy__border;
+            border-bottom: none;
+        }
+        .data-grid-th,
+        .data-grid-th._sortable {
+            cursor: -webkit-grabbing;
+               cursor: -moz-grabbing;
+                    cursor: grabbing;
+        }
+        tbody {
+            tr {
+                &:last-child {
+                    td {
+                        border-bottom: @data-grid-dragging-copy__border;
+                    }
+                }
+            }
+            td {
+                border-left: @data-grid-dragging-copy__border;
+                border-right: @data-grid-dragging-copy__border;
+            }
+        }
+    }
 }
 
 //  Ascend & Descend sort marker
@@ -349,4 +425,4 @@
     &._col-xs {
         width: 1%;
     }
-}
+}
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json
index 58fbb8be56c6018d058fc9797820f32babab0f07..a635d2f6368d6f8d066d468efc7a6056820e06e4 100644
--- a/app/design/adminhtml/Magento/backend/composer.json
+++ b/app/design/adminhtml/Magento/backend/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_classes.less b/app/design/adminhtml/Magento/backend/web/css/source/_classes.less
index 7562f5de527b2a29ee016193b59c95d76b0912d2..ef23f9abd3aba56beb7a5f80218731c402d0081e 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_classes.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_classes.less
@@ -19,3 +19,11 @@
 .a-center { //  ToDo UI: should be renamed to ._text-center
     text-align: center;
 }
+
+// No select
+._no-select {
+    -webkit-user-select: none;
+       -moz-user-select: none;
+        -ms-user-select: none;
+            user-select: none;
+}
diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json
index ed12dd50070e3732d4d1dad3ae1035b8452d9dc4..e715b5304c3a39ca06f52c98c37a438a68cf839d 100644
--- a/app/design/frontend/Magento/blank/composer.json
+++ b/app/design/frontend/Magento/blank/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json
index 84cbda7b1c907d6bc7262137162476f6a1d94ca3..011484f9abf79fb35ffa25a064e3debc221029ee 100644
--- a/app/design/frontend/Magento/luma/composer.json
+++ b/app/design/frontend/Magento/luma/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/theme-frontend-blank": "0.74.0-beta13",
-        "magento/framework": "0.74.0-beta13",
+        "magento/theme-frontend-blank": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/i18n/magento/de_de/composer.json b/app/i18n/magento/de_de/composer.json
index 8792a746870334173328153bee80077157349745..752d5584e51535511fc382bd1edfad901affa4fd 100644
--- a/app/i18n/magento/de_de/composer.json
+++ b/app/i18n/magento/de_de/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-de_de",
     "description": "German (Germany) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/app/i18n/magento/en_us/composer.json b/app/i18n/magento/en_us/composer.json
index 12f592f50bc7f6772183dc3e44a42ecb65fbfb05..4feb2ced23f3e909170d222c43410ff08edc5cd7 100644
--- a/app/i18n/magento/en_us/composer.json
+++ b/app/i18n/magento/en_us/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-en_us",
     "description": "English (United States) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/app/i18n/magento/es_es/composer.json b/app/i18n/magento/es_es/composer.json
index eec09e8483fbe8846f06947d7d8fef60d284d0d0..c2a70d39babadc84b11b03652e750d590ffd15fa 100644
--- a/app/i18n/magento/es_es/composer.json
+++ b/app/i18n/magento/es_es/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-es_es",
     "description": "Spanish (Spain) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/app/i18n/magento/fr_fr/composer.json b/app/i18n/magento/fr_fr/composer.json
index 7ff13b7e8f3aa58340613fe97806ecfcc1b174aa..b6c40d9c8fa9be5d193c4f81534ab9cf0bebdd89 100644
--- a/app/i18n/magento/fr_fr/composer.json
+++ b/app/i18n/magento/fr_fr/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-fr_fr",
     "description": "French (France) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/app/i18n/magento/nl_nl/composer.json b/app/i18n/magento/nl_nl/composer.json
index af92cc0e22f2de55041a7b8d0f6973cfa7244e09..c905b708215fd32745c8c1313fca3649c31f4c7c 100644
--- a/app/i18n/magento/nl_nl/composer.json
+++ b/app/i18n/magento/nl_nl/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-nl_nl",
     "description": "Dutch (Netherlands) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/app/i18n/magento/pt_br/composer.json b/app/i18n/magento/pt_br/composer.json
index ea475dfb76206af0453c1d37586d71107d2ea7bb..4f80afff03c0adbfab31185741fdb201c6391b50 100644
--- a/app/i18n/magento/pt_br/composer.json
+++ b/app/i18n/magento/pt_br/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-pt_br",
     "description": "Portuguese (Brazil) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/app/i18n/magento/zh_cn/composer.json b/app/i18n/magento/zh_cn/composer.json
index fe43b44fcdc7f9e7a3f2b31fa64b08e5bee94b3b..63c14d0af900801962fcaa32f179cf375fa451f9 100644
--- a/app/i18n/magento/zh_cn/composer.json
+++ b/app/i18n/magento/zh_cn/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-zh_cn",
     "description": "Chinese (China) language",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta13",
+        "magento/framework": "0.74.0-beta14",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/composer.json b/composer.json
index 94549cfd2878cbc97c0476f54c7a7f2d4f1b093f..2fca4d005a36670877caf6253c70e0bb38e92a90 100644
--- a/composer.json
+++ b/composer.json
@@ -2,7 +2,7 @@
     "name": "magento/magento2ce",
     "description": "Magento 2 (Community Edition)",
     "type": "project",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/composer.lock b/composer.lock
index 77a18945169153ccdfd51d970fdd2255c499d42b..4e3421ad6e05957d87c2807e67fe0152cbf10bac 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "daa84b5d3ea8eabcd1bb1f33c07e08dd",
+    "hash": "32f26595c37e07bb66613d23424788e0",
     "packages": [
         {
             "name": "composer/composer",
@@ -49,7 +49,7 @@
                     "Composer": "src/"
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -261,7 +261,7 @@
                 "ZF1",
                 "framework"
             ],
-            "time": "2015-06-02 08:04:41"
+            "time": "2015-02-06 17:25:45"
         },
         {
             "name": "monolog/monolog",
@@ -567,7 +567,7 @@
                     "Symfony\\Component\\Finder\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -616,7 +616,7 @@
                     "Symfony\\Component\\Process\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -684,12 +684,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-code.git",
-                "reference": "0ed94f842ba60cdc900c46a61bdbd7ac95a3e140"
+                "reference": "cfd5951ff4348e4430850560416c7ddb755f95d3"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-code/zipball/0ed94f842ba60cdc900c46a61bdbd7ac95a3e140",
-                "reference": "0ed94f842ba60cdc900c46a61bdbd7ac95a3e140",
+                "reference": "cfd5951ff4348e4430850560416c7ddb755f95d3",
                 "shasum": ""
             },
             "require": {
@@ -698,9 +698,6 @@
             },
             "require-dev": {
                 "doctrine/common": ">=2.1",
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-stdlib": "self.version"
             },
             "suggest": {
@@ -716,7 +713,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Code\\": "src/"
+                    "Zend\\Code\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -724,12 +721,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides facilities to generate arbitrary code using an object oriented interface",
-            "homepage": "https://github.com/zendframework/zend-code",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "code",
                 "zf2"
             ],
-            "time": "2015-03-31 15:39:14"
+            "time": "2015-04-01 17:59:08"
         },
         {
             "name": "zendframework/zend-config",
@@ -737,12 +734,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-config.git",
-                "reference": "95f3a4b3fa85d49e6f060183122de4596fa6d29d"
+                "reference": "8682fe4e2923b383bb6472fc84b5796a07589163"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-config/zipball/95f3a4b3fa85d49e6f060183122de4596fa6d29d",
-                "reference": "95f3a4b3fa85d49e6f060183122de4596fa6d29d",
+                "reference": "8682fe4e2923b383bb6472fc84b5796a07589163",
                 "shasum": ""
             },
             "require": {
@@ -750,9 +747,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-i18n": "self.version",
                 "zendframework/zend-json": "self.version",
@@ -773,7 +767,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Config\\": "src/"
+                    "Zend\\Config\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -781,12 +775,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides a nested object property based user interface for accessing this configuration data within application code",
-            "homepage": "https://github.com/zendframework/zend-config",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "config",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 17:59:31"
         },
         {
             "name": "zendframework/zend-console",
@@ -794,23 +788,18 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-console.git",
-                "reference": "54823d9ba6f8ce39046384ee5a043b5b3d5f56d7"
+                "reference": "94ab6663b07e19f20b3319ecf317bd72b6a72dca"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-console/zipball/54823d9ba6f8ce39046384ee5a043b5b3d5f56d7",
-                "reference": "54823d9ba6f8ce39046384ee5a043b5b3d5f56d7",
+                "reference": "94ab6663b07e19f20b3319ecf317bd72b6a72dca",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "suggest": {
                 "zendframework/zend-filter": "To support DefaultRouteMatcher usage",
                 "zendframework/zend-validator": "To support DefaultRouteMatcher usage"
@@ -824,19 +813,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Console\\": "src/"
+                    "Zend\\Console\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-console",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "console",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 17:59:48"
         },
         {
             "name": "zendframework/zend-di",
@@ -844,12 +833,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-di.git",
-                "reference": "b9f8de081adecf71a003a569e9ba76c0a4c00bf2"
+                "reference": "0811f2a67ad0b50dfb8d602ed67cde0b82249190"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-di/zipball/b9f8de081adecf71a003a569e9ba76c0a4c00bf2",
-                "reference": "b9f8de081adecf71a003a569e9ba76c0a4c00bf2",
+                "reference": "0811f2a67ad0b50dfb8d602ed67cde0b82249190",
                 "shasum": ""
             },
             "require": {
@@ -858,9 +847,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-servicemanager": "self.version"
             },
             "suggest": {
@@ -875,19 +861,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Di\\": "src/"
+                    "Zend\\Di\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-di",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "di",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:01:30"
         },
         {
             "name": "zendframework/zend-escaper",
@@ -895,22 +881,17 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-escaper.git",
-                "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97"
+                "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97",
-                "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97",
+                "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -920,19 +901,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Escaper\\": "src/"
+                    "Zend\\Escaper\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-escaper",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "escaper",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:02:07"
         },
         {
             "name": "zendframework/zend-eventmanager",
@@ -940,23 +921,18 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-eventmanager.git",
-                "reference": "58d21c95c7005a527262fd536499195f104e83f9"
+                "reference": "38df5b567d4ff4d22144745c503ba0502d0d5695"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/58d21c95c7005a527262fd536499195f104e83f9",
-                "reference": "58d21c95c7005a527262fd536499195f104e83f9",
+                "reference": "38df5b567d4ff4d22144745c503ba0502d0d5695",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23",
                 "zendframework/zend-stdlib": "self.version"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -966,19 +942,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\EventManager\\": "src/"
+                    "Zend\\EventManager\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-event-manager",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "eventmanager",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:05:26"
         },
         {
             "name": "zendframework/zend-filter",
@@ -986,12 +962,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-filter.git",
-                "reference": "6d8aed2da81b62a04747346c4370562cdbe34595"
+                "reference": "b13741a88553351fc52472de529b57b580b8f6f1"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/6d8aed2da81b62a04747346c4370562cdbe34595",
-                "reference": "6d8aed2da81b62a04747346c4370562cdbe34595",
+                "reference": "b13741a88553351fc52472de529b57b580b8f6f1",
                 "shasum": ""
             },
             "require": {
@@ -999,9 +975,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-crypt": "self.version",
                 "zendframework/zend-servicemanager": "self.version",
                 "zendframework/zend-uri": "self.version"
@@ -1021,7 +994,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Filter\\": "src/"
+                    "Zend\\Filter\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1029,12 +1002,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides a set of commonly needed data filters",
-            "homepage": "https://github.com/zendframework/zend-filter",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "filter",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:25"
         },
         {
             "name": "zendframework/zend-form",
@@ -1042,12 +1015,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-form.git",
-                "reference": "bca0db55718355d25c2c10fdd41a83561f1c94b3"
+                "reference": "09f5bd46ffbf783df22281898e2175b291bd43a3"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-form/zipball/bca0db55718355d25c2c10fdd41a83561f1c94b3",
-                "reference": "bca0db55718355d25c2c10fdd41a83561f1c94b3",
+                "reference": "09f5bd46ffbf783df22281898e2175b291bd43a3",
                 "shasum": ""
             },
             "require": {
@@ -1056,9 +1029,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-captcha": "self.version",
                 "zendframework/zend-code": "self.version",
                 "zendframework/zend-eventmanager": "self.version",
@@ -1089,19 +1059,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Form\\": "src/"
+                    "Zend\\Form\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-form",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "form",
                 "zf2"
             ],
-            "time": "2015-03-28 20:29:18"
+            "time": "2015-04-01 18:09:25"
         },
         {
             "name": "zendframework/zend-http",
@@ -1109,12 +1079,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-http.git",
-                "reference": "9c6047a0bdb3094d3ea07a215ff929cc47de4deb"
+                "reference": "ee6220609845b32d1b2873c9ac694aef56d508f5"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-http/zipball/9c6047a0bdb3094d3ea07a215ff929cc47de4deb",
-                "reference": "9c6047a0bdb3094d3ea07a215ff929cc47de4deb",
+                "reference": "ee6220609845b32d1b2873c9ac694aef56d508f5",
                 "shasum": ""
             },
             "require": {
@@ -1124,11 +1094,6 @@
                 "zendframework/zend-uri": "self.version",
                 "zendframework/zend-validator": "self.version"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1138,7 +1103,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Http\\": "src/"
+                    "Zend\\Http\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1146,12 +1111,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests",
-            "homepage": "https://github.com/zendframework/zend-http",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "http",
                 "zf2"
             ],
-            "time": "2015-03-27 15:46:30"
+            "time": "2015-04-01 18:09:25"
         },
         {
             "name": "zendframework/zend-i18n",
@@ -1159,12 +1124,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-i18n.git",
-                "reference": "9aebc5287373a802540d75fe5508417f866c2e52"
+                "reference": "33051775d9a8c341fe3b77d1f3daa0e921e2f4bd"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/9aebc5287373a802540d75fe5508417f866c2e52",
-                "reference": "9aebc5287373a802540d75fe5508417f866c2e52",
+                "reference": "33051775d9a8c341fe3b77d1f3daa0e921e2f4bd",
                 "shasum": ""
             },
             "require": {
@@ -1172,9 +1137,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-cache": "self.version",
                 "zendframework/zend-config": "self.version",
                 "zendframework/zend-eventmanager": "self.version",
@@ -1203,19 +1165,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\I18n\\": "src/"
+                    "Zend\\I18n\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-i18n",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "i18n",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:26"
         },
         {
             "name": "zendframework/zend-inputfilter",
@@ -1223,12 +1185,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-inputfilter.git",
-                "reference": "4b1398f3635fae3cc5e873c5bb067274f3d10a93"
+                "reference": "16856fec61f285e41e5492235220a4dec06ab90f"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/4b1398f3635fae3cc5e873c5bb067274f3d10a93",
-                "reference": "4b1398f3635fae3cc5e873c5bb067274f3d10a93",
+                "reference": "16856fec61f285e41e5492235220a4dec06ab90f",
                 "shasum": ""
             },
             "require": {
@@ -1238,9 +1200,6 @@
                 "zendframework/zend-validator": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-servicemanager": "self.version"
             },
             "suggest": {
@@ -1255,19 +1214,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\InputFilter\\": "src/"
+                    "Zend\\InputFilter\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-input-filter",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "inputfilter",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:09:26"
         },
         {
             "name": "zendframework/zend-json",
@@ -1275,12 +1234,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-json.git",
-                "reference": "2d845e151c1b9a237cf1899ac31e17fb10bd1e3f"
+                "reference": "76aeb27e4baf39799e5ca3cf6f2fdd6748ee930c"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-json/zipball/2d845e151c1b9a237cf1899ac31e17fb10bd1e3f",
-                "reference": "2d845e151c1b9a237cf1899ac31e17fb10bd1e3f",
+                "reference": "76aeb27e4baf39799e5ca3cf6f2fdd6748ee930c",
                 "shasum": ""
             },
             "require": {
@@ -1288,9 +1247,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-http": "self.version",
                 "zendframework/zend-server": "self.version"
             },
@@ -1308,7 +1264,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Json\\": "src/"
+                    "Zend\\Json\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1316,12 +1272,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
-            "homepage": "https://github.com/zendframework/zend-json",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "json",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:26"
         },
         {
             "name": "zendframework/zend-loader",
@@ -1329,22 +1285,17 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-loader.git",
-                "reference": "65de2c7a56f8eee633c6bf1cfab73e45648880d4"
+                "reference": "6868b8a0c346f17fb97724c3a63aa2cbf6b94865"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/65de2c7a56f8eee633c6bf1cfab73e45648880d4",
-                "reference": "65de2c7a56f8eee633c6bf1cfab73e45648880d4",
+                "reference": "6868b8a0c346f17fb97724c3a63aa2cbf6b94865",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1354,19 +1305,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Loader\\": "src/"
+                    "Zend\\Loader\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-loader",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "loader",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:09:26"
         },
         {
             "name": "zendframework/zend-log",
@@ -1374,12 +1325,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-log.git",
-                "reference": "002e3c810cad7e31e51c9895e9e3cb6fbd312cdd"
+                "reference": "2d5d20fd45470506bdaff727c46dc25fe953146e"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-log/zipball/002e3c810cad7e31e51c9895e9e3cb6fbd312cdd",
-                "reference": "002e3c810cad7e31e51c9895e9e3cb6fbd312cdd",
+                "reference": "2d5d20fd45470506bdaff727c46dc25fe953146e",
                 "shasum": ""
             },
             "require": {
@@ -1388,9 +1339,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-console": "self.version",
                 "zendframework/zend-db": "self.version",
                 "zendframework/zend-escaper": "self.version",
@@ -1414,7 +1362,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Log\\": "src/"
+                    "Zend\\Log\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1422,13 +1370,13 @@
                 "BSD-3-Clause"
             ],
             "description": "component for general purpose logging",
-            "homepage": "https://github.com/zendframework/zend-log",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "log",
                 "logging",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:26"
         },
         {
             "name": "zendframework/zend-math",
@@ -1436,22 +1384,17 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-math.git",
-                "reference": "f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73"
+                "reference": "634123f83ca90b6613f132d0d100e6b5e9890a29"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-math/zipball/f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73",
-                "reference": "f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73",
+                "reference": "634123f83ca90b6613f132d0d100e6b5e9890a29",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "suggest": {
                 "ext-bcmath": "If using the bcmath functionality",
                 "ext-gmp": "If using the gmp functionality",
@@ -1467,19 +1410,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Math\\": "src/"
+                    "Zend\\Math\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-math",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "math",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:09:27"
         },
         {
             "name": "zendframework/zend-modulemanager",
@@ -1487,12 +1430,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-modulemanager.git",
-                "reference": "af7ae3cd29a1efb73cc66ae1081e606039d5c20f"
+                "reference": "cbe16b0eafe734a062ed0182381e64b9c953dccf"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/af7ae3cd29a1efb73cc66ae1081e606039d5c20f",
-                "reference": "af7ae3cd29a1efb73cc66ae1081e606039d5c20f",
+                "reference": "cbe16b0eafe734a062ed0182381e64b9c953dccf",
                 "shasum": ""
             },
             "require": {
@@ -1501,9 +1444,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-config": "self.version",
                 "zendframework/zend-console": "self.version",
                 "zendframework/zend-loader": "self.version",
@@ -1525,19 +1465,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\ModuleManager\\": "src/"
+                    "Zend\\ModuleManager\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-module-manager",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "modulemanager",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:09:27"
         },
         {
             "name": "zendframework/zend-mvc",
@@ -1545,12 +1485,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-mvc.git",
-                "reference": "0b4a4a829b30be510a3f215c4ff00c703ee8b431"
+                "reference": "bfff0f5f9e4d925ee13b8c159c9d6ae7e0db5412"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/0b4a4a829b30be510a3f215c4ff00c703ee8b431",
-                "reference": "0b4a4a829b30be510a3f215c4ff00c703ee8b431",
+                "reference": "bfff0f5f9e4d925ee13b8c159c9d6ae7e0db5412",
                 "shasum": ""
             },
             "require": {
@@ -1561,9 +1501,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-authentication": "self.version",
                 "zendframework/zend-console": "self.version",
                 "zendframework/zend-di": "self.version",
@@ -1612,19 +1549,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Mvc\\": "src/"
+                    "Zend\\Mvc\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-mvc",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "mvc",
                 "zf2"
             ],
-            "time": "2015-03-26 18:55:14"
+            "time": "2015-04-01 18:09:27"
         },
         {
             "name": "zendframework/zend-serializer",
@@ -1632,12 +1569,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-serializer.git",
-                "reference": "3c531789a9882a5deb721356a7bd2642b65d4b09"
+                "reference": "a46960854d6326f0036d98c9abc7a79e36e25928"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/3c531789a9882a5deb721356a7bd2642b65d4b09",
-                "reference": "3c531789a9882a5deb721356a7bd2642b65d4b09",
+                "reference": "a46960854d6326f0036d98c9abc7a79e36e25928",
                 "shasum": ""
             },
             "require": {
@@ -1647,9 +1584,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-servicemanager": "self.version"
             },
             "suggest": {
@@ -1664,7 +1598,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Serializer\\": "src/"
+                    "Zend\\Serializer\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1672,12 +1606,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover",
-            "homepage": "https://github.com/zendframework/zend-serializer",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "serializer",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:28"
         },
         {
             "name": "zendframework/zend-server",
@@ -1685,12 +1619,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-server.git",
-                "reference": "d11ff0bd529d202022823d4accf5983cbd50fc49"
+                "reference": "fc73c34490908ba143af3c57c7e166b40c4b9f8e"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-server/zipball/d11ff0bd529d202022823d4accf5983cbd50fc49",
-                "reference": "d11ff0bd529d202022823d4accf5983cbd50fc49",
+                "reference": "fc73c34490908ba143af3c57c7e166b40c4b9f8e",
                 "shasum": ""
             },
             "require": {
@@ -1698,11 +1632,6 @@
                 "zendframework/zend-code": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1712,19 +1641,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Server\\": "src/"
+                    "Zend\\Server\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-server",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "server",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:28"
         },
         {
             "name": "zendframework/zend-servicemanager",
@@ -1732,21 +1661,18 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-servicemanager.git",
-                "reference": "57cf99fa5ac08c05a135a8d0d676c52a5e450083"
+                "reference": "d3c27c708a148a30608f313a5b7a61a531bd9cb9"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/57cf99fa5ac08c05a135a8d0d676c52a5e450083",
-                "reference": "57cf99fa5ac08c05a135a8d0d676c52a5e450083",
+                "reference": "d3c27c708a148a30608f313a5b7a61a531bd9cb9",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-di": "self.version"
             },
             "suggest": {
@@ -1762,19 +1688,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\ServiceManager\\": "src/"
+                    "Zend\\ServiceManager\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-service-manager",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "servicemanager",
                 "zf2"
             ],
-            "time": "2015-03-23 18:29:14"
+            "time": "2015-04-01 18:09:28"
         },
         {
             "name": "zendframework/zend-soap",
@@ -1782,12 +1708,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-soap.git",
-                "reference": "a599463aba97ce247faf3fb443e3c7858b46449b"
+                "reference": "e42b900798ea95a9063fa4922da976d8b3a8ab6f"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/a599463aba97ce247faf3fb443e3c7858b46449b",
-                "reference": "a599463aba97ce247faf3fb443e3c7858b46449b",
+                "reference": "e42b900798ea95a9063fa4922da976d8b3a8ab6f",
                 "shasum": ""
             },
             "require": {
@@ -1797,9 +1723,6 @@
                 "zendframework/zend-uri": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-http": "self.version"
             },
             "suggest": {
@@ -1814,19 +1737,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Soap\\": "src/"
+                    "Zend\\Soap\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-soap",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "soap",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:29"
         },
         {
             "name": "zendframework/zend-stdlib",
@@ -1834,21 +1757,18 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3"
+                "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
-                "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3",
+                "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-serializer": "self.version",
@@ -1869,19 +1789,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Stdlib\\": "src/"
+                    "Zend\\Stdlib\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-stdlib",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "stdlib",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:29"
         },
         {
             "name": "zendframework/zend-text",
@@ -1889,12 +1809,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-text.git",
-                "reference": "d962ea25647b20527f3ca34ae225bbc885dabfc7"
+                "reference": "35f519e20e575a331c2ee554e5a555a59ce4b9e2"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-text/zipball/d962ea25647b20527f3ca34ae225bbc885dabfc7",
-                "reference": "d962ea25647b20527f3ca34ae225bbc885dabfc7",
+                "reference": "35f519e20e575a331c2ee554e5a555a59ce4b9e2",
                 "shasum": ""
             },
             "require": {
@@ -1902,11 +1822,6 @@
                 "zendframework/zend-servicemanager": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1916,19 +1831,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Text\\": "src/"
+                    "Zend\\Text\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zend-text",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "text",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:29"
         },
         {
             "name": "zendframework/zend-uri",
@@ -1936,12 +1851,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-uri.git",
-                "reference": "bd9e625639415376f6a82551c73328448d7bc7d1"
+                "reference": "53f5b162b293f80de8b951eece8e08be83c4fe16"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/bd9e625639415376f6a82551c73328448d7bc7d1",
-                "reference": "bd9e625639415376f6a82551c73328448d7bc7d1",
+                "reference": "53f5b162b293f80de8b951eece8e08be83c4fe16",
                 "shasum": ""
             },
             "require": {
@@ -1949,11 +1864,6 @@
                 "zendframework/zend-escaper": "self.version",
                 "zendframework/zend-validator": "self.version"
             },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1963,7 +1873,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Uri\\": "src/"
+                    "Zend\\Uri\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1971,12 +1881,12 @@
                 "BSD-3-Clause"
             ],
             "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)",
-            "homepage": "https://github.com/zendframework/zend-uri",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "uri",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:29"
         },
         {
             "name": "zendframework/zend-validator",
@@ -1984,12 +1894,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-validator.git",
-                "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f"
+                "reference": "eb678d20256f120a72ca27276bbb2875841701ab"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/45fac2545a0f2eb66d71cb7966feee481e7c475f",
-                "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f",
+                "reference": "eb678d20256f120a72ca27276bbb2875841701ab",
                 "shasum": ""
             },
             "require": {
@@ -1997,9 +1907,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-db": "self.version",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-i18n": "self.version",
@@ -2027,7 +1934,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Validator\\": "src/"
+                    "Zend\\Validator\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2035,12 +1942,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides a set of commonly needed validators",
-            "homepage": "https://github.com/zendframework/zend-validator",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "validator",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:30"
         },
         {
             "name": "zendframework/zend-view",
@@ -2048,12 +1955,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-view.git",
-                "reference": "37beb1ad46e530f627b4b6c3716efd728e976ba9"
+                "reference": "e119b4b5f082af58a96eb206e782b62c193227bf"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-view/zipball/37beb1ad46e530f627b4b6c3716efd728e976ba9",
-                "reference": "37beb1ad46e530f627b4b6c3716efd728e976ba9",
+                "reference": "e119b4b5f082af58a96eb206e782b62c193227bf",
                 "shasum": ""
             },
             "require": {
@@ -2063,9 +1970,6 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-authentication": "self.version",
                 "zendframework/zend-escaper": "self.version",
                 "zendframework/zend-feed": "self.version",
@@ -2104,7 +2008,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\View\\": "src/"
+                    "Zend\\View\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2112,12 +2016,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides a system of helpers, output filters, and variable escaping",
-            "homepage": "https://github.com/zendframework/zend-view",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "view",
                 "zf2"
             ],
-            "time": "2015-03-25 20:55:48"
+            "time": "2015-04-01 18:09:30"
         }
     ],
     "packages-dev": [
@@ -2789,7 +2693,7 @@
                     "src/"
                 ]
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
@@ -3288,7 +3192,7 @@
                     "Symfony\\Component\\Config\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -3348,7 +3252,7 @@
                     "Symfony\\Component\\DependencyInjection\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -3406,7 +3310,7 @@
                     "Symfony\\Component\\EventDispatcher\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -3455,7 +3359,7 @@
                     "Symfony\\Component\\Filesystem\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -3504,7 +3408,7 @@
                     "Symfony\\Component\\Stopwatch\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
@@ -3553,7 +3457,7 @@
                     "Symfony\\Component\\Yaml\\": ""
                 }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "http://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
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 4188aef15cd0565a483f3a08e31fdaf7156cd429..53402d17d2a4654409dd5a2b7d6937ad7c58422f 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
@@ -6,8 +6,8 @@
 
 namespace Magento\Cms\Test\Block\Adminhtml\Page;
 
-use Magento\Ui\Test\Block\Adminhtml\DataGrid;
 use Magento\Mtf\Client\Locator;
+use Magento\Ui\Test\Block\Adminhtml\DataGrid;
 
 /**
  * Backend Data Grid for managing "CMS Page" entities.
@@ -66,8 +66,8 @@ class Grid extends DataGrid
      *
      * @var string
      */
-    protected $previewCmsPage = '.action-menu-item';
-
+    protected $previewCmsPage = ".//a[contains(@class, 'action-menu-item') and text() = '%s']";
+    
     /**
      * Search item and open it on Frontend.
      *
@@ -77,10 +77,12 @@ class Grid extends DataGrid
      */
     public function searchAndPreview(array $filter)
     {
+        $itemName = 'Preview';
         $this->search($filter);
         $rowItem = $this->_rootElement->find($this->rowItem);
         if ($rowItem->isVisible()) {
-            $rowItem->find($this->previewCmsPage)->click();
+            $rowItem->find('.action-select')->click();
+            $rowItem->find(sprintf($this->previewCmsPage, $itemName), Locator::SELECTOR_XPATH)->click();
         } else {
             throw new \Exception('Searched item was not found.');
         }
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Adminhtml/Product/Grouped/AssociatedProducts.php b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Adminhtml/Product/Grouped/AssociatedProducts.php
index d888fa31e8ef27194c3dfd21d829fb82223b2e1c..618e06a6391659476bd7fcf648193767afae8302 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Adminhtml/Product/Grouped/AssociatedProducts.php
+++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Adminhtml/Product/Grouped/AssociatedProducts.php
@@ -29,7 +29,7 @@ class AssociatedProducts extends Tab
      *
      * @var string
      */
-    protected $productSearchGrid = "./ancestor::body//div[div[contains(@data-role,'add-product-dialog')]]";
+    protected $productSearchGrid = './/*[@data-role="modal"][.//*[@data-role="add-product-dialog"]]';
 
     /**
      * Associated products list block
@@ -54,7 +54,7 @@ class AssociatedProducts extends Tab
     {
         return $this->blockFactory->create(
             'Magento\GroupedProduct\Test\Block\Adminhtml\Product\Grouped\AssociatedProducts\Search\Grid',
-            ['element' => $this->_rootElement->find($this->productSearchGrid, Locator::SELECTOR_XPATH)]
+            ['element' => $this->browser->find($this->productSearchGrid, Locator::SELECTOR_XPATH)]
         );
     }
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..331dbef78d040a791fd30f9f58efa2e5153164b8
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js
@@ -0,0 +1,100 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'underscore',
+    'Magento_Ui/js/grid/columns/actions'
+], function (_, Actions) {
+    'use strict';
+
+    describe('ui/js/grid/columns/actions', function () {
+        var model,
+            action;
+
+        beforeEach(function () {
+            model = new Actions({
+                index: 'actions',
+                name: 'listing_action',
+                indexField: 'id',
+                dataScope: '',
+                rows: [{
+                    identifier: 'row'
+                }]
+            });
+            action = {
+                index: 'delete',
+                hidden: true,
+                rowIndex: 0,
+                callback: function() {
+                    return true;
+                }
+            };
+        });
+
+        it('Check addAction function', function () {
+            expect(model.addAction('delete', action)).toBe(model);
+        });
+
+        it('Check getAction function', function () {
+            var someAction = _.clone(action);
+
+            someAction.index = 'edit';
+            model.addAction('edit', someAction);
+            expect(model.getAction(0, 'edit')).toEqual(someAction);
+        });
+
+        it('Check getVisibleActions function', function () {
+            var someAction = _.clone(action);
+
+            someAction.hidden = false;
+            someAction.index= 'view';
+            model.addAction('delete', action);
+            model.addAction('view', someAction);
+            expect(model.getVisibleActions('0')).toEqual([someAction]);
+        });
+
+        it('Check updateActions function', function () {
+            expect(model.updateActions()).toEqual(model);
+        });
+
+        it('Check applyAction function', function () {
+            model.addAction('delete', action);
+            expect(model.applyAction('delete', 0)).toEqual(model);
+        });
+
+        it('Check isSingle and isMultiple function', function () {
+            var someAction = _.clone(action);
+
+            action.hidden = false;
+            model.addAction('delete', action);
+            expect(model.isSingle(0)).toBeTruthy();
+            someAction.hidden = false;
+            someAction.index = 'edit';
+            model.addAction('edit', someAction);
+            expect(model.isSingle(0)).toBeFalsy();
+            expect(model.isMultiple(0)).toBeTruthy();
+        });
+
+        it('Check isActionVisible function', function () {
+            expect(model.isActionVisible(action)).toBeFalsy();
+            action.hidden = false;
+            expect(model.isActionVisible(action)).toBeTruthy();
+        });
+
+        it('Check toggleList function', function () {
+            model.toggleList(0);
+            expect(model.opened()).toEqual(0);
+            model.toggleList(0);
+            expect(model.opened()).toBeFalsy();
+        });
+
+        it('Check closeList function', function () {
+            model.toggleList(0);
+            expect(model.opened()).toEqual(0);
+            model.closeList(0);
+            expect(model.opened()).toBeFalsy();
+        });
+    });
+});
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dialog/dialog.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
similarity index 60%
rename from dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dialog/dialog.test.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
index be1e6dfa867088f6174526b3d41c6fade7276b8a..b5e2837467bebad4e5e15bea402121a1be7e96ae 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dialog/dialog.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
@@ -5,23 +5,23 @@
 
 define([
     'jquery',
-    'Magento_Ui/js/dialog/dialog'
+    'Magento_Ui/js/modal/modal'
 ], function ($) {
     'use strict';
 
-    describe('ui/js/dialog/dialog', function () {
+    describe('ui/js/modal/modal', function () {
         var element = $('<div>some element</div>'),
-            dialog = element.dialog({}).data('mage-dialog');
+            modal = element.modal({}).data('mage-modal');
 
-        it('Check for dialog definition', function () {
-            expect(dialog).toBeDefined();
+        it('Check for modal definition', function () {
+            expect(modal).toBeDefined();
         });
         it('Show/hide function check', function () {
             expect(element.trigger('openDialog')).toBe(element);
             expect(element.trigger('closeDialog')).toBe(element);
         });
         it('Check for transition support', function () {
-            expect(dialog.whichTransitionEvent()).toBe('webkitTransitionEnd');
+            expect(modal.whichTransitionEvent()).toBe('webkitTransitionEnd');
         });
     });
 });
\ No newline at end of file
diff --git a/lib/internal/Magento/Framework/AppInterface.php b/lib/internal/Magento/Framework/AppInterface.php
index b0b03dfcb471f368da7964d27b52ab16cae7f171..fb61d6803b3681c56a7af5ad3a29cc8468484e27 100644
--- a/lib/internal/Magento/Framework/AppInterface.php
+++ b/lib/internal/Magento/Framework/AppInterface.php
@@ -17,7 +17,7 @@ interface AppInterface
     /**
      * Magento version
      */
-    const VERSION = '0.74.0-beta13';
+    const VERSION = '0.74.0-beta14';
 
     /**
      * Launch application
diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json
index 1307d01001635ca7553aabcd9dcd94884d01801c..29ca6222b30be7c45122ac19c9f1c48c04c408fc 100644
--- a/lib/internal/Magento/Framework/composer.json
+++ b/lib/internal/Magento/Framework/composer.json
@@ -2,7 +2,7 @@
     "name": "magento/framework",
     "description": "N/A",
     "type": "magento2-library",
-    "version": "0.74.0-beta13",
+    "version": "0.74.0-beta14",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/lib/web/css/source/components/_modals.less b/lib/web/css/source/components/_modals.less
index c7776d6684e7e5880247625d2032f0cd4b33fc02..df5c973eef2de55b58b941178d1acf677ee0a219 100644
--- a/lib/web/css/source/components/_modals.less
+++ b/lib/web/css/source/components/_modals.less
@@ -28,6 +28,8 @@
 
 @modal-slide-header__padding-vertical: 2.1rem;
 
+@modal-popup-confirm__width: 50rem;
+
 //
 //  Utilities
 //  ---------------------------------------------
@@ -181,6 +183,16 @@
         padding-top: @modal-popup__padding;
         padding-bottom: @modal-popup__padding;
     }
+    &.confirm {
+        .modal-inner-wrap {
+            margin-left: -(@modal-popup-confirm__width/2);
+            left: 50%;
+            width: @modal-popup-confirm__width;
+        }
+        .modal-footer {
+            text-align: right;
+        }
+    }
 }
 
 //
diff --git a/lib/web/css/source/lib/_navigation.less b/lib/web/css/source/lib/_navigation.less
index 6bc9cb68b243392a50bf5026f8bc510146a1f71a..a0af0e4ebd85069255dd6e8c5d13c82206552855 100644
--- a/lib/web/css/source/lib/_navigation.less
+++ b/lib/web/css/source/lib/_navigation.less
@@ -329,7 +329,6 @@
                 margin: 0 !important;
                 position: absolute;
                 left: 0;
-                top: 100%;
                 z-index: 1;
                 .css(background, @_submenu-background-color);
                 .css(border, @_submenu-border-width @_submenu-border-style @_submenu-border-color);
@@ -370,6 +369,10 @@
                     top: 0 !important;
                     left: 100% !important;
                 }
+                .submenu-reverse{
+                    left: auto !important;
+                    right: 100%;
+                }
             }
             &.more {
                 position: relative;
diff --git a/lib/web/mage/backend/suggest.js b/lib/web/mage/backend/suggest.js
index dfb3ef72d8c4d8424c949ea44dfba20b3a8f01be..f4efd12693997985cdc08232778491db37a74848 100644
--- a/lib/web/mage/backend/suggest.js
+++ b/lib/web/mage/backend/suggest.js
@@ -178,16 +178,47 @@
         _bind: function () {
             this._on($.extend({
                 keydown: function (event) {
-                    var keyCode = $.ui.keyCode;
+                    var keyCode = $.ui.keyCode,
+                        suggestList,
+                        hasSuggestedItems,
+                        hasSelectedItems,
+                        selectedItem;
+
                     switch (event.keyCode) {
                         case keyCode.PAGE_UP:
-                        case keyCode.PAGE_DOWN:
                         case keyCode.UP:
+                            if (!event.shiftKey) {
+                                event.preventDefault();
+                                this._proxyEvents(event);
+                            }
+
+                            suggestList = event.currentTarget.parentNode.getElementsByTagName('ul')[0];
+                            hasSuggestedItems = event.currentTarget.parentNode.getElementsByTagName('ul')[0].children.length >= 0;
+                            if (hasSuggestedItems) {
+                                selectedItem =  $(suggestList.getElementsByClassName('_active')[0]).removeClass('_active').prev().addClass('_active');
+                                event.currentTarget.value = selectedItem.find("a").text();
+                            }
+
+                            break;
+                        case keyCode.PAGE_DOWN:
                         case keyCode.DOWN:
                             if (!event.shiftKey) {
                                 event.preventDefault();
                                 this._proxyEvents(event);
                             }
+
+                            suggestList = event.currentTarget.parentNode.getElementsByTagName('ul')[0];
+                            hasSuggestedItems = event.currentTarget.parentNode.getElementsByTagName('ul')[0].children.length >= 0;
+                            if(hasSuggestedItems){
+                                hasSelectedItems = suggestList.getElementsByClassName('_active').length === 0;
+                                if(hasSelectedItems) {
+                                    selectedItem = $(suggestList.children[0]).addClass('_active');
+                                    event.currentTarget.value = selectedItem.find("a").text();
+                                }else {
+                                    selectedItem = $(suggestList.getElementsByClassName('_active')[0]).removeClass('_active').next().addClass('_active');
+                                    event.currentTarget.value = selectedItem.find("a").text();
+                                }
+                            }
                             break;
                         case keyCode.TAB:
                             if (this.isDropdownShown()) {
@@ -197,6 +228,7 @@
                             break;
                         case keyCode.ENTER:
                         case keyCode.NUMPAD_ENTER:
+
                             if (this.isDropdownShown() && this._focused) {
                                 this._proxyEvents(event);
                                 event.preventDefault();
diff --git a/lib/web/mage/menu.js b/lib/web/mage/menu.js
index 94055ff0a1ddbda398323f9d8e31a9060ac7bfd3..925ae9df33791441a2e54ed6457753a62cba0751 100644
--- a/lib/web/mage/menu.js
+++ b/lib/web/mage/menu.js
@@ -8,7 +8,7 @@ define([
     "jquery/ui",
     "jquery/jquery.mobile.custom",
     "mage/translate"
-], function($, mediaCheck){
+], function ($, mediaCheck) {
     'use strict';
 
     /**
@@ -20,22 +20,30 @@ define([
             expanded: false,
             delay: 300
         },
+        _create: function () {
+            var self = this;
 
-        _init: function() {
+            this._super();
+            $(window).on('resize', function () {
+                self.element.find('.submenu-reverse').removeClass('submenu-reverse');
+            });
+        },
+
+        _init: function () {
             this._super();
             this.delay = this.options.delay;
 
-            if(this.options.expanded === true) {
+            if (this.options.expanded === true) {
                 this.isExpanded();
             }
 
-            if(this.options.responsive === true){
+            if (this.options.responsive === true) {
                 mediaCheck({
                     media: '(max-width: 640px)',
-                    entry: $.proxy(function() {
+                    entry: $.proxy(function () {
                         this._toggleMobileMode();
                     }, this),
-                    exit: $.proxy(function() {
+                    exit: $.proxy(function () {
                         this._toggleDesktopMode();
                     }, this)
                 });
@@ -44,7 +52,7 @@ define([
             this._assignControls()._listen();
         },
 
-        _assignControls: function() {
+        _assignControls: function () {
             this.controls = {
                 toggleBtn: $('[data-action="toggle-nav"]'),
                 swipeArea: $('.nav-sections')
@@ -53,125 +61,125 @@ define([
             return this;
         },
 
-        _listen: function() {
+        _listen: function () {
             var controls = this.controls;
             var toggle = this.toggle;
 
-            this._on(controls.toggleBtn, { 'click'    : toggle });
-            this._on(controls.swipeArea, { 'swipeleft': toggle });
+            this._on(controls.toggleBtn, {'click': toggle});
+            this._on(controls.swipeArea, {'swipeleft': toggle});
         },
 
-        toggle: function() {
+        toggle: function () {
             if ($('html').hasClass('nav-open')) {
                 $('html').removeClass('nav-open');
-                setTimeout(function() {
+                setTimeout(function () {
                     $('html').removeClass('nav-before-open');
-                },300);
+                }, 300);
             } else {
                 $('html').addClass('nav-before-open');
-                setTimeout(function() {
+                setTimeout(function () {
                     $('html').addClass('nav-open');
-                },42);
+                }, 42);
             }
         },
 
         //Add class for expanded option
-        isExpanded: function() {
-            var subMenus = this.element.find( this.options.menus ),
+        isExpanded: function () {
+            var subMenus = this.element.find(this.options.menus),
                 expandedMenus = subMenus.find('ul');
 
             expandedMenus.addClass('expanded');
         },
 
-        _activate: function( event ) {
+        _activate: function (event) {
             window.location.href = this.active.find('> a').attr('href');
             this.collapseAll(event);
         },
 
-        _keydown: function(event) {
+        _keydown: function (event) {
 
             var match, prev, character, skip, regex,
-            preventDefault = true;
+                preventDefault = true;
 
-            function escape( value ) {
-                return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+            function escape(value) {
+                return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
             }
 
-            if(this.active.closest('ul').attr('aria-expanded') != 'true') {
+            if (this.active.closest('ul').attr('aria-expanded') != 'true') {
 
-                switch ( event.keyCode ) {
+                switch (event.keyCode) {
                     case $.ui.keyCode.PAGE_UP:
-                        this.previousPage( event );
+                        this.previousPage(event);
                         break;
                     case $.ui.keyCode.PAGE_DOWN:
-                        this.nextPage( event );
+                        this.nextPage(event);
                         break;
                     case $.ui.keyCode.HOME:
-                        this._move( "first", "first", event );
+                        this._move("first", "first", event);
                         break;
                     case $.ui.keyCode.END:
-                        this._move( "last", "last", event );
+                        this._move("last", "last", event);
                         break;
                     case $.ui.keyCode.UP:
-                        this.previous( event );
+                        this.previous(event);
                         break;
                     case $.ui.keyCode.DOWN:
-                        if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
-                            this.expand( event );
+                        if (this.active && !this.active.is(".ui-state-disabled")) {
+                            this.expand(event);
                         }
                         break;
                     case $.ui.keyCode.LEFT:
-                        this.previous( event );
+                        this.previous(event);
                         break;
                     case $.ui.keyCode.RIGHT:
-                        this.next( event );
+                        this.next(event);
                         break;
                     case $.ui.keyCode.ENTER:
                     case $.ui.keyCode.SPACE:
-                        this._activate( event );
+                        this._activate(event);
                         break;
                     case $.ui.keyCode.ESCAPE:
-                        this.collapse( event );
+                        this.collapse(event);
                         break;
                     default:
                         preventDefault = false;
                         prev = this.previousFilter || "";
-                        character = String.fromCharCode( event.keyCode );
+                        character = String.fromCharCode(event.keyCode);
                         skip = false;
 
-                        clearTimeout( this.filterTimer );
+                        clearTimeout(this.filterTimer);
 
-                        if ( character === prev ) {
+                        if (character === prev) {
                             skip = true;
                         } else {
                             character = prev + character;
                         }
 
-                        regex = new RegExp( "^" + escape( character ), "i" );
-                        match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
-                            return regex.test( $( this ).children( "a" ).text() );
+                        regex = new RegExp("^" + escape(character), "i");
+                        match = this.activeMenu.children(".ui-menu-item").filter(function () {
+                            return regex.test($(this).children("a").text());
                         });
-                        match = skip && match.index( this.active.next() ) !== -1 ?
-                            this.active.nextAll( ".ui-menu-item" ) :
+                        match = skip && match.index(this.active.next()) !== -1 ?
+                            this.active.nextAll(".ui-menu-item") :
                             match;
 
                         // If no matches on the current filter, reset to the last character pressed
                         // to move down the menu to the first item that starts with that character
-                        if ( !match.length ) {
-                            character = String.fromCharCode( event.keyCode );
-                            regex = new RegExp( "^" + escape( character ), "i" );
-                            match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
-                                return regex.test( $( this ).children( "a" ).text() );
+                        if (!match.length) {
+                            character = String.fromCharCode(event.keyCode);
+                            regex = new RegExp("^" + escape(character), "i");
+                            match = this.activeMenu.children(".ui-menu-item").filter(function () {
+                                return regex.test($(this).children("a").text());
                             });
                         }
 
-                        if ( match.length ) {
-                            this.focus( event, match );
-                            if ( match.length > 1 ) {
+                        if (match.length) {
+                            this.focus(event, match);
+                            if (match.length > 1) {
                                 this.previousFilter = character;
-                                this.filterTimer = this._delay(function() {
+                                this.filterTimer = this._delay(function () {
                                     delete this.previousFilter;
-                                }, 1000 );
+                                }, 1000);
                             } else {
                                 delete this.previousFilter;
                             }
@@ -180,65 +188,65 @@ define([
                         }
                 }
             } else {
-                switch ( event.keyCode ) {
+                switch (event.keyCode) {
                     case $.ui.keyCode.DOWN:
-                        this.next( event );
+                        this.next(event);
                         break;
                     case $.ui.keyCode.UP:
-                        this.previous( event );
+                        this.previous(event);
                         break;
                     case $.ui.keyCode.RIGHT:
-                        if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
-                            this.expand( event );
+                        if (this.active && !this.active.is(".ui-state-disabled")) {
+                            this.expand(event);
                         }
                         break;
                     case $.ui.keyCode.ENTER:
                     case $.ui.keyCode.SPACE:
-                        this._activate( event );
+                        this._activate(event);
                         break;
                     case $.ui.keyCode.LEFT:
                     case $.ui.keyCode.ESCAPE:
-                        this.collapse( event );
+                        this.collapse(event);
                         break;
                     default:
                         preventDefault = false;
                         prev = this.previousFilter || "";
-                        character = String.fromCharCode( event.keyCode );
+                        character = String.fromCharCode(event.keyCode);
                         skip = false;
 
-                        clearTimeout( this.filterTimer );
+                        clearTimeout(this.filterTimer);
 
-                        if ( character === prev ) {
+                        if (character === prev) {
                             skip = true;
                         } else {
                             character = prev + character;
                         }
 
-                        regex = new RegExp( "^" + escape( character ), "i" );
-                        match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
-                            return regex.test( $( this ).children( "a" ).text() );
+                        regex = new RegExp("^" + escape(character), "i");
+                        match = this.activeMenu.children(".ui-menu-item").filter(function () {
+                            return regex.test($(this).children("a").text());
                         });
-                        match = skip && match.index( this.active.next() ) !== -1 ?
-                            this.active.nextAll( ".ui-menu-item" ) :
+                        match = skip && match.index(this.active.next()) !== -1 ?
+                            this.active.nextAll(".ui-menu-item") :
                             match;
 
                         // If no matches on the current filter, reset to the last character pressed
                         // to move down the menu to the first item that starts with that character
-                        if ( !match.length ) {
-                            character = String.fromCharCode( event.keyCode );
-                            regex = new RegExp( "^" + escape( character ), "i" );
-                            match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
-                                return regex.test( $( this ).children( "a" ).text() );
+                        if (!match.length) {
+                            character = String.fromCharCode(event.keyCode);
+                            regex = new RegExp("^" + escape(character), "i");
+                            match = this.activeMenu.children(".ui-menu-item").filter(function () {
+                                return regex.test($(this).children("a").text());
                             });
                         }
 
-                        if ( match.length ) {
-                            this.focus( event, match );
-                            if ( match.length > 1 ) {
+                        if (match.length) {
+                            this.focus(event, match);
+                            if (match.length > 1) {
                                 this.previousFilter = character;
-                                this.filterTimer = this._delay(function() {
+                                this.filterTimer = this._delay(function () {
                                     delete this.previousFilter;
-                                }, 1000 );
+                                }, 1000);
                             } else {
                                 delete this.previousFilter;
                             }
@@ -248,27 +256,27 @@ define([
                 }
             }
 
-            if ( preventDefault ) {
+            if (preventDefault) {
                 event.preventDefault();
             }
         },
 
-        _toggleMobileMode: function() {
+        _toggleMobileMode: function () {
             $(this.element).off('mouseenter mouseleave');
             this._on({
-                "click .ui-menu-item:has(a)": function( event ) {
+                "click .ui-menu-item:has(a)": function (event) {
                     event.preventDefault();
 
-                    var target = $( event.target ).closest( ".ui-menu-item" );
-                    
-                    if ( !target.hasClass('level-top') || !target.has( ".ui-menu" ).length ) {
+                    var target = $(event.target).closest(".ui-menu-item");
+
+                    if (!target.hasClass('level-top') || !target.has(".ui-menu").length) {
                         window.location.href = target.find('> a').attr('href');
                     }
                 }
             });
 
             var subMenus = this.element.find('.level-top');
-            $.each(subMenus, $.proxy(function(index, item) {
+            $.each(subMenus, $.proxy(function (index, item) {
                 var category = $(item).find('> a span').not('.ui-menu-icon').text(),
                     categoryUrl = $(item).find('> a').attr('href'),
                     menu = $(item).find('> .ui-menu');
@@ -281,58 +289,79 @@ define([
                     .addClass('ui-menu-item all-category')
                     .html(this.categoryLink);
 
-                if(menu.find('.all-category').length === 0) {
+                if (menu.find('.all-category').length === 0) {
                     menu.prepend(this.categoryParent);
                 }
 
             }, this));
         },
 
-        _toggleDesktopMode: function() {
+        _toggleDesktopMode: function () {
             this._on({
                 // Prevent focus from sticking to links inside menu after clicking
                 // them (focus should always stay on UL during navigation).
-                "mousedown .ui-menu-item > a": function( event ) {
+                "mousedown .ui-menu-item > a": function (event) {
                     event.preventDefault();
                 },
-                "click .ui-state-disabled > a": function( event ) {
+                "click .ui-state-disabled > a": function (event) {
                     event.preventDefault();
                 },
-                "click .ui-menu-item:has(a)": function( event ) {
-                    var target = $( event.target ).closest( ".ui-menu-item" );
-                    if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
-                        this.select( event );
+                "click .ui-menu-item:has(a)": function (event) {
+                    var target = $(event.target).closest(".ui-menu-item");
+                    if (!this.mouseHandled && target.not(".ui-state-disabled").length) {
+                        this.select(event);
 
                         // Only set the mouseHandled flag if the event will bubble, see #9469.
-                        if ( !event.isPropagationStopped() ) {
+                        if (!event.isPropagationStopped()) {
                             this.mouseHandled = true;
                         }
 
                         // Open submenu on click
-                        if ( target.has( ".ui-menu" ).length ) {
-                            this.expand( event );
-                        } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+                        if (target.has(".ui-menu").length) {
+                            this.expand(event);
+                        } else if (!this.element.is(":focus") && $(this.document[0].activeElement).closest(".ui-menu").length) {
 
                             // Redirect focus to the menu
-                            this.element.trigger( "focus", [ true ] );
+                            this.element.trigger("focus", [true]);
 
                             // If the active item is on the top level, let it stay active.
                             // Otherwise, blur the active item since it is no longer visible.
-                            if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
-                                clearTimeout( this.timer );
+                            if (this.active && this.active.parents(".ui-menu").length === 1) {
+                                clearTimeout(this.timer);
                             }
                         }
                     }
                 },
-                "mouseenter .ui-menu-item": function( event ) {
-                    var target = $( event.currentTarget );
+                "mouseenter .ui-menu-item": function (event) {
+                    var target = $(event.currentTarget),
+                        ulElement,
+                        ulElementWidth,
+                        width,
+                        targetPageX,
+                        rightBound;
+
+                    if (target.has('ul')) {
+                        ulElement = target.find('ul');
+                        ulElementWidth = target.find('ul').outerWidth(true);
+                        width = target.outerWidth() * 2;
+                        targetPageX = target.offset().left;
+                        rightBound = $(window).width();
+
+                        if ((ulElementWidth + width + targetPageX) > rightBound) {
+                            ulElement.addClass('submenu-reverse');
+                        }
+                        if ((targetPageX - ulElementWidth) < 0) {
+                            ulElement.removeClass('submenu-reverse');
+                        }
+                    }
+
                     // Remove ui-state-active class from siblings of the newly focused menu item
                     // to avoid a jump caused by adjacent elements both having a class with a border
-                    target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
-                    this.focus( event, target );
+                    target.siblings().children(".ui-state-active").removeClass("ui-state-active");
+                    this.focus(event, target);
                 },
-                "mouseleave": function( event ){
-                    this.collapseAll( event, true );
+                "mouseleave": function (event) {
+                    this.collapseAll(event, true);
                 },
                 "mouseleave .ui-menu": "collapseAll"
             });
@@ -349,11 +378,14 @@ define([
                 }, 300);
             }
         },
-
         _delay: function(handler, delay) {
-            handler.apply(this, arguments);
-
-            return setTimeout(function() {}, delay || 0);
+            var instance = this,
+                handlerProxy = function () {
+                return (typeof handler === "string" ? instance[handler] : handler)
+                    .apply(instance, arguments);
+            };
+            
+            return setTimeout(handlerProxy, delay || 0);
         }
     });
 
@@ -368,7 +400,7 @@ define([
             breakpoint: 768
         },
 
-        _init: function() {
+        _init: function () {
             this._super();
 
             var that = this,
@@ -383,24 +415,24 @@ define([
             this.setMaxItems();
 
             //check responsive option
-            if(responsive == "onResize") {
-                $(window).on('resize', function() {
-                    if($(window).width() > that.options.breakpoint) {
-                       that._responsive();
-                       $('[responsive=more]').show();
+            if (responsive == "onResize") {
+                $(window).on('resize', function () {
+                    if ($(window).width() > that.options.breakpoint) {
+                        that._responsive();
+                        $('[responsive=more]').show();
                     } else {
                         that.element.children().show();
                         $('[responsive=more]').hide();
                     }
                 });
-            } else if(responsive == "onReload") {
+            } else if (responsive == "onReload") {
                 this._responsive();
             }
         },
 
-        setupMoreMenu: function() {
+        setupMoreMenu: function () {
             var moreListItems = this.element.children().clone(),
-                moreLink = $('<a>'+ this.options.moreText +'</a>');
+                moreLink = $('<a>' + this.options.moreText + '</a>');
 
             moreListItems.hide();
 
@@ -418,15 +450,15 @@ define([
                 .attr('responsive', 'more')
                 .append(this.moreListContainer)
                 .menu({
-                    position : {
-                        my : "right top",
-                        at : "right bottom"
+                    position: {
+                        my: "right top",
+                        at: "right bottom"
                     }
                 })
                 .insertAfter(this.element);
         },
 
-        _responsive: function() {
+        _responsive: function () {
             var container = $(this.options.container),
                 containerSize = container.width(),
                 width = 0,
@@ -434,7 +466,7 @@ define([
                 more = $('.ui-menu-more > li > ul > li a');
 
 
-            items = items.map(function() {
+            items = items.map(function () {
                 var item = {};
 
                 item.item = $(this);
@@ -442,36 +474,36 @@ define([
                 return item;
             });
 
-            $.each(items, function(index, item){
+            $.each(items, function (index, item) {
                 var itemText = items[index].item
-                        .find('a:first')
-                        .text();
+                    .find('a:first')
+                    .text();
 
                 width += parseInt(items[index].itemSize, null);
 
-                if(width < containerSize) {
+                if (width < containerSize) {
                     items[index].item.show();
 
-                    more.each(function() {
-                       var text = $(this).text();
-                       if(text === itemText){
-                           $(this).parent().hide();
-                       }
-                   });
-                } else if(width > containerSize) {
+                    more.each(function () {
+                        var text = $(this).text();
+                        if (text === itemText) {
+                            $(this).parent().hide();
+                        }
+                    });
+                } else if (width > containerSize) {
                     items[index].item.hide();
 
-                    more.each(function() {
-                       var text = $(this).text();
-                       if(text === itemText){
-                           $(this).parent().show();
-                       }
-                   });
+                    more.each(function () {
+                        var text = $(this).text();
+                        if (text === itemText) {
+                            $(this).parent().show();
+                        }
+                    });
                 }
             });
         },
 
-        setMaxItems: function() {
+        setMaxItems: function () {
             var items = this.element.children('li'),
                 itemsCount = items.length,
                 maxItems = this.options.maxItems,
@@ -480,23 +512,23 @@ define([
 
             overflowItems.hide();
 
-            overflowItems.each(function(){
+            overflowItems.each(function () {
                 var itemText = $(this).find('a:first').text();
 
                 $(this).hide();
 
-                $('.ui-menu-more > li > ul > li a').each(function() {
-                   var text = $(this).text();
-                   if(text === itemText){
-                       $(this).parent().show();
-                   }
-               });
+                $('.ui-menu-more > li > ul > li a').each(function () {
+                    var text = $(this).text();
+                    if (text === itemText) {
+                        $(this).parent().show();
+                    }
+                });
             });
         }
     });
-    
+
     return {
-        menu:       $.mage.menu,
+        menu: $.mage.menu,
         navigation: $.mage.navigation
     };
 });
diff --git a/lib/web/mage/utils/arrays.js b/lib/web/mage/utils/arrays.js
index 54fb9a6189a8df0335808a989c5be5b859643ed8..d931fc1c7118a76ac5fe4f3b2dbc9cf4df9756a7 100644
--- a/lib/web/mage/utils/arrays.js
+++ b/lib/web/mage/utils/arrays.js
@@ -8,6 +8,25 @@ define([
 ], function (_, utils) {
     'use strict';
 
+    /**
+     * Defines index of an item in a specified container.
+     *
+     * @param {*} item - Item whose index should be defined.
+     * @param {Array} container - Container upon which to perform search.
+     * @returns {Number}
+     */
+    function getIndex(item, container) {
+        var index = container.indexOf(item);
+
+        if (~index) {
+            return index;
+        }
+
+        return _.findIndex(container, function (value) {
+            return value && value.name === item;
+        });
+    }
+
     return {
        /**
          * Facade method to remove/add value from/to array
@@ -62,21 +81,6 @@ define([
             return this;
         },
 
-        /**
-         * Extends an incoming array with a specified ammount of undefined values
-         * starting from a specified position.
-         *
-         * @param {Array} container - Array to be extended.
-         * @param {Number} size - Ammount of values to be added.
-         * @param {Number} [offset=0] - Position at which to start inserting values.
-         * @returns {Array} Modified array.
-         */
-        reserve: function (container, size, offset) {
-            container.splice(offset || 0, 0, new Array(size));
-
-            return _.flatten(container);
-        },
-
         /**
          * Compares multiple arrays without tracking order of their elements.
          *
@@ -93,7 +97,64 @@ define([
             });
         },
 
-        formatOffset: function(elems, offset) {
+        /**
+         * Inserts specified item into container at specified position.
+         *
+         * @param {*} item - Item to be inserted into container.
+         * @param {Array} container - Container of items.
+         * @param {*} [position=-1] - Position at which item should be inserted.
+         *      Position can represent:
+         *          - specific index in container
+         *          - item which might already be present in container
+         *          - structure with one of these properties: after, before
+         * @returns {Boolean|*}
+         *      - true if element has changed its' position
+         *      - false if nothing has changed
+         *      - inserted value if it wasn't present in container
+         */
+        insert: function (item, container, position) {
+            var currentIndex = getIndex(item, container),
+                newIndex,
+                target;
+
+            if (typeof position === 'undefined') {
+                position = -1;
+            } else if (typeof position === 'string') {
+                position = isNaN(+position) ? position : +position;
+            }
+
+            newIndex = position;
+
+            if (~currentIndex) {
+                target = container.splice(currentIndex, 1)[0];
+
+                if (typeof item === 'string') {
+                    item = target;
+                }
+            }
+
+            if (typeof position !== 'number') {
+                target = position.after || position.before || position;
+
+                newIndex = getIndex(target, container);
+
+                if (~newIndex && (position.after || newIndex >= currentIndex)) {
+                    newIndex++;
+                }
+            }
+
+            if (newIndex < 0) {
+                newIndex += container.length + 1;
+            }
+
+            container[newIndex] ?
+                container.splice(newIndex, 0, item) :
+                container[newIndex] = item;
+
+            return !~currentIndex ? item : currentIndex !== newIndex;
+        },
+
+        formatOffset: function (elems, offset) {
             if (utils.isEmpty(offset)) {
                 offset = -1;
             }
diff --git a/lib/web/mage/utils/objects.js b/lib/web/mage/utils/objects.js
index 7cd4924e492a39ee5609bb7e25c9bdef887c2ebb..4aa5d7216c6f3b4c4496071da48516e7d029e78b 100644
--- a/lib/web/mage/utils/objects.js
+++ b/lib/web/mage/utils/objects.js
@@ -207,7 +207,12 @@ define([
             return result;
         },
 
-        extend: function (target) {
+        /**
+         * Performs deep extend of specified objects.
+         *
+         * @returns {Object|Array} Extended object.
+         */
+        extend: function () {
             var args = _.toArray(arguments);
 
             args.unshift(true);
@@ -215,15 +220,36 @@ define([
             return $.extend.apply($, args);
         },
 
+        /**
+         * Performs a deep clone of a specified object.
+         *
+         * @param {(Object|Array)} data - Data that should be copied.
+         * @returns {Object|Array} Cloned object.
+         */
         copy: function (data) {
-            return this.extend({}, data);
+            var result  = data,
+                isArray = Array.isArray(data),
+                placeholder;
+
+            if (this.isObject(data) || isArray) {
+                placeholder = isArray ? [] : {};
+                result      = this.extend(placeholder, data);
+            }
+
+            return result;
         },
 
-        isObject: function (data) {
+        /**
+         * Checks if provided value is a plain object.
+         *
+         * @param {*} value - Value to be checked.
+         * @returns {Boolean}
+         */
+        isObject: function (value) {
             var objProto = Object.prototype;
 
-            return typeof data == 'object' ?
-                objProto.toString.call(data) === '[object Object]' :
+            return typeof value == 'object' ?
+                objProto.toString.call(value) === '[object Object]' :
                 false;
         }
     };
diff --git a/lib/web/mage/utils/strings.js b/lib/web/mage/utils/strings.js
index 185951886aaf3271e84cfc4d79d16016aec1d5ef..914ca72c1bdf63a6525eca1fc2c2c7372e60ade3 100644
--- a/lib/web/mage/utils/strings.js
+++ b/lib/web/mage/utils/strings.js
@@ -7,7 +7,29 @@ define([
 ], function (_) {
     'use strict';
 
+    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.
+         *
+         * @param {String} str - String to be processed.
+         * @returns {*}
+         */
+        castString: function (str) {
+            try {
+                str = str === 'true' ? true :
+                    str === 'false' ? false :
+                    str === 'null' ? null :
+                    +str + '' === str ? +str :
+                    jsonRe.test(str) ? JSON.parse(str) :
+                    str;
+            } catch (e) {}
+
+            return str;
+        },
+
         /**
          * Splits string by separator if it's possible,
          * otherwise returns the incoming value.
@@ -62,6 +84,13 @@ define([
             return value === '' || _.isUndefined(value) || _.isNull(value);
         },
 
+        /**
+         * Adds 'prefix' to the 'part' value if it was provided.
+         *
+         * @param {String} prefix
+         * @param {String} part
+         * @returns {String}
+         */
         fullPath: function (prefix, part) {
             return prefix ? prefix + '.' + part : part;
         }
diff --git a/lib/web/mage/utils/template.js b/lib/web/mage/utils/template.js
index a2b8cd462f6669405c84a39a89785cec54cb472b..d76f0e890f665582b06071a7ab1253717eb3656a 100644
--- a/lib/web/mage/utils/template.js
+++ b/lib/web/mage/utils/template.js
@@ -4,8 +4,9 @@
  */
 define([
     'underscore',
-    'mage/utils/objects'
-], function (_, utils) {
+    'mage/utils/objects',
+    'mage/utils/strings'
+], function (_, utils, stringUtils) {
     'use strict';
 
     var tmplSettings = _.templateSettings,
@@ -28,6 +29,7 @@ define([
     })();
 
     if (hasStringTmpls) {
+        /*eslint-disable no-unused-vars, no-eval*/
         /**
          * Evaluates template string using ES6 templates.
          *
@@ -38,6 +40,7 @@ define([
         template = function (tmpl, $) {
             return eval('`' + tmpl + '`');
         };
+        /*eslint-enable no-unused-vars, no-eval*/
     } else {
         /**
          * Fallback function used when ES6 templates are not supported.
@@ -52,7 +55,9 @@ define([
 
             tmplSettings.interpolate = interpolate;
 
-            tmpl = _.template(tmpl, {variable: '$'})(data);
+            tmpl = _.template(tmpl, {
+                variable: '$'
+            })(data);
 
             tmplSettings.interpolate = cached;
 
@@ -63,7 +68,7 @@ define([
     /**
      * Checks if provided value contains template syntax.
      *
-     * @param {*} value - Value to be check.
+     * @param {*} value - Value to be checked.
      * @returns {Boolean}
      */
     function isTemplate(value) {
@@ -76,9 +81,12 @@ define([
      *
      * @param {String} tmpl - Template string.
      * @param {Object} data - Data object used in a template.
-     * @returns {String} Compiled template.
+     * @param {Boolean} [castString=false] - Flag that indicates whether template
+     *      should be casted after evaluation to a value of another type or
+     *      that it should be leaved as a string.
+     * @returns {*} Compiled template.
      */
-    function render(tmpl, data) {
+    function render(tmpl, data, castString) {
         var last = tmpl;
 
         data = Object.create(data);
@@ -93,7 +101,9 @@ define([
             last = tmpl;
         }
 
-        return tmpl;
+        return castString ?
+            stringUtils.castString(tmpl) :
+            tmpl;
     }
 
     return {
@@ -102,7 +112,10 @@ define([
          *
          * @param {Object|String} tmpl
          * @param {Object} [data] - Data object to match with template.
-         * @returns {Object|String}
+         * @param {Boolean} [castString=false] - Flag that indicates whether template
+         *      should be casted after evaluation to a value of another type or
+         *      that it should be leaved as a string.
+         * @returns {*}
          *
          * @example Template defined as a string.
          *      var source = { foo: 'Random Stuff', bar: 'Some' };
@@ -114,6 +127,8 @@ define([
          *      var tmpl = {
          *              key: {'${ $.$data.bar }': '${ $.$data.foo }'},
          *              foo: 'bar',
+         *              x1: 2, x2: 5,
+         *              delta: '${ $.x2 - $.x1 }',
          *              baz: 'Upper ${ $.foo.toUpperCase() }'
          *      };
          *
@@ -121,19 +136,25 @@ define([
          *      => {
          *          key: {'Some': 'Random Stuff'},
          *          foo: 'bar',
+         *          x1: 2, x2: 5,
+         *          delta: 3,
          *          baz: 'Upper BAR'
          *      };
          */
-        template: function (tmpl, data) {
+        template: function (tmpl, data, castString) {
+            var iterate;
+
             if (typeof tmpl === 'string') {
-                return render(tmpl, data);
+                return render(tmpl, data, castString);
             }
 
-            tmpl = utils.extend({}, tmpl);
-
+            tmpl = utils.copy(tmpl);
             tmpl.$data = data || {};
 
-            _.each(tmpl, function iterate(value, key, list) {
+            /**
+             * Template iterator function.
+             */
+            iterate = function (value, key, list) {
                 if (key === '$data') {
                     return;
                 }
@@ -146,11 +167,13 @@ define([
                 }
 
                 if (isTemplate(value)) {
-                    list[key] = render(value, tmpl);
-                } else if (_.isObject(value)) {
+                    list[key] = render(value, tmpl, castString);
+                } else if (utils.isObject(value) || Array.isArray(value)) {
                     _.each(value, iterate);
                 }
-            });
+            };
+
+            _.each(tmpl, iterate);
 
             delete tmpl.$data;