diff --git a/.htaccess b/.htaccess
index 2998f48f7addce87c68296ed33d68837bd439b6b..404488eb7ff0ecc6197ab8c100555c79eb1cf0ce 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,3 +1,8 @@
+############################################
+## uncomment the line below to enable developer mode
+
+#   SetEnv MAGE_MODE developer
+
 ############################################
 ## uncomment these lines for CGI mode
 ## make sure to specify the correct cgi php binary file name
@@ -167,6 +172,8 @@
 ## http://developer.yahoo.com/performance/rules.html#expires
 
     ExpiresDefault "access plus 1 year"
+    ExpiresByType text/html A0
+    ExpiresByType text/plain A0
 
 </IfModule>
 
diff --git a/.htaccess.sample b/.htaccess.sample
index 3a19430211147f23f6e460addf435d771380b944..133ce7de2c59badd5df4a159bb921e8a99f05eb7 100644
--- a/.htaccess.sample
+++ b/.htaccess.sample
@@ -1,3 +1,8 @@
+############################################
+## uncomment the line below to enable developer mode
+
+#   SetEnv MAGE_MODE developer
+
 ############################################
 ## uncomment these lines for CGI mode
 ## make sure to specify the correct cgi php binary file name
@@ -164,6 +169,8 @@
 ## http://developer.yahoo.com/performance/rules.html#expires
 
     ExpiresDefault "access plus 1 year"
+    ExpiresByType text/html A0
+    ExpiresByType text/plain A0
 
 </IfModule>
 
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 31cb8dff708ee9dc46ba8a1d67159a8fe93f5269..72d11b49ba5d716aea1f9f023b77e8192cf59065 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,184 @@
+0.74.0-beta2
+=============
+* Fixed bugs
+    * Wrong capitalization of the label names (the sentence-style capitalization instead of the headline style)
+    * Inconsistency in the labels in the Admin panel
+    * Customer menu tabs aren't displayed as selected for the child pages
+    * An issue with the Active item in the navigation menu in the Blank and Luma themes
+    * Incorrect price alignment during checkout in the Blank and Luma themes
+    * Broken field "URL" in the Downloadable product in the Admin panel
+* GitHub issues and requests:
+    * [#1096] (https://github.com/magento/magento2/issues/1096) -- Customer model - getPrimaryAddresses without primary billing address
+    * [#1114] (https://github.com/magento/magento2/issues/1114) -- GA bug
+    * [#1116] (https://github.com/magento/magento2/issues/1116) -- Incorrect use of implode()
+    * [#1126] (https://github.com/magento/magento2/pull/1126) -- Fixed occurrences of implode with wrong argument order
+    * [#1128] (https://github.com/magento/magento2/pull/1128) -- Change wording for long operation warning
+
+0.74.0-beta1
+=============
+* Various
+    * Inline JS code was eliminated
+    * Fixed XSS vulnerability issues
+    * The "Last login time" functionality was moved from the `Magento_Log` module to the `Magento_Customer` module
+    * Implemented two-strategies JavaScript translation
+    * Improved backend menu keyboard accessibility
+    * Accessibility improvements: WAI-ARIA in a product item on a category page and related products
+    * Checkout flow code can work with a separate DB storage
+    * <a href="http://devdocs.magento.com/guides/v1.0/release-notes/changes.html#change-devrc-unit">Unit tests moved to module directories</a>
+    * Addressed naming inconsistencies in REST routes
+    * Added Advanced Developer workflow for frontend developers
+* Setup
+    * Utilized Magento error handler in the Setup application to convert errors and warnings to exceptions
+    * Fixed an issue when private content handling did not work with enabled HTML profiler and developer mode
+    * Fixed an issue where Magento Composer Installer failed to uninstall last package
+    * Fixed an issue where a fatal error was thrown in the Setup application after running composer install with the `--no-dev` option
+    * Fixed a JavaScript issue with expanding the list of modules on the  Customize Your Store step in the Setup Wizard
+    * Fixed a JavaScript issue with returning from the Create Admin Account step to the Customize Your Store step in the Setup Wizard
+* Framework
+    * Added a new `Magento_MediaStorage` module to store components of the `Magento_Core` module
+    * Implemented JavaScript resources bundling (server side pre-processing)
+    * Replaced `Zend_Locale` with native PHP implementation
+    * Replaced `Zend_Date` with native PHP `DateTime` object/functions
+    * Refactored Magento\Framework\Exception\LocalizedException
+    * Renamed Magento\Framework\Validator\ValidatorException
+    * Renamed Magento\Framework\Controller\Result\JSON to meet PSR standard
+    * Updated the oyejorge/less.php library to the latest version
+    * Refactored WebApi framework to support particular types for custom attributes
+    * Version used in SOAP declarations is now taken from routes declared in webapi.xml
+    * Added ability to extend API data interfaces using extension attributes
+    * Removed the `Magento_Core` module
+* Web API Framework
+    * Factories are used instead of builders
+    * Removed auto-generation of builders
+    * Made `interfaceName` a required parameter in `Magento\Framework\Api\DataObjectHelper::populateWithArray` method
+* Performance
+    * Increased caching coverage of Magento storefront pages: Cart, Register, Login, My Account
+    * Finished work around <a href="http://hhvm.com/" target="_blank">HHVM compatibility</a>
+    * Fixed EAV caching on storefront
+    * Optimized dependency injection compilation for interception
+* Design
+    * New design for the Magento Admin
+    * New message design in Setup Wizard
+    * New design for Minimum Advertised Price (MAP) on storefront catalog pages
+* Fixed bugs
+    * Catch syntax error in `module.xml` files
+    * Profiling of cache operations was permanently disabled
+    * Session was not cleared when layout is cached
+    * Page cache was invalidated by cron jobs after reindexing, even when nothing was changed
+    * Typo in method name in `Adminhtml/Index/Grid.php`
+    * Missing validation of table prefix in Step 2: Add a Database in the Setup wizard
+    * User hint of password strength validator in Web Setup wizard now consistent with the algorithm used
+    * New Logger did not format exception and debug info correctly
+    * Wrong styles structure
+    * Customer is redirected to shopping cart by clicking on mini-shopping cart after adding product
+    * Gift Message information for Order level is not presented on storefront or Admin orders
+    * Wrong `customer_id` value for GiftMessages created using API service
+    * No ability to place order for guest customer using API service
+    * Shopping Cart displayed partly broken if it contained a Product with an image as a custom option
+    * Impossible to add product to the shopping cart with Custom option of `type="file"`
+    * Adding to cart dialog widget with MSRP price on product page was broken
+    * Copy and paste detector is run against test files that are blacklisted
+    * Displayed the wrong price on product page when selecting an option for configurable product
+    * Tax amount (tax on full shipping) is refunded when partial shipping amount is refunded
+    * Price (including tax) is shown on product page when configuration is set to display excluding tax
+    * Fixed Product Tax (FPT) is not applied in shopping cart and orders for registered users
+    * FPT not applied for registered users when FPC is disabled
+    * "All categoryName" menu link is absent, subcategories are shown on hover of parent category
+    * Horizontal scrolling displays when browser width is resized to mobile size
+    * Broken design for "select store" element in CMS grid filter
+    * Attribute value uniqueness isn't checked for custom product template
+    * Category tree is not displayed in conditions for Catalog Price Rules
+    * Remove hard-coded IDs from catalog API code
+    * Bottom margin for "Wishlist Search" widget
+    * Custom option image with limits view for storefront
+    * Category page displayed outdated prices after catalog price rule was deleted
+    * Cart quantity is more than in-stock amount
+    * Page layout configuration cannot be extended or overridden by the theme
+    * Page layout with custom set of containers causing fatal error
+    * Reset password e-mails requested from second store view has link and name of the first main store
+    * Cannot place order for virtual product with customer address attribute from Admin
+    * Specified details for bundle product are lost after adding to wishlist
+    * Customer address is set to non-default after changing account information
+    * Unable to save newsletter subscription information of customer in Admin
+    * Guest can't add product to wishlist while registering
+    * Cron job for Shipping
+    * Solution for issue with attributes with list of countries
+    * Unable to generate variations while creating a configurable product
+    * Variations are created with out of stock status if configurable product has been switched from simple product
+    * Impossible to search Downloadable product using file title
+    * Change order of loading integration tests (load config annotations before fixtures)
+    * Impossible to upload files in configuration
+    * Price displaying on product page for bundle product
+    * Display bug for tier prices
+    * Required marker is displayed on wrong line in Admin
+    * Categories' titles in storefront navigation Menu overlap "expand" button on mobile
+    * Admin Login form alignment issues with IE9
+    * Display check boxes on Update Attributes page using a mass action
+    * Removed Test\Unit from cached dependency injection configuration for performance reasons
+    * Impossible to place order with DHL EU shipping method
+    * Updates while tables recreation in setup process
+    * Pagination issues in the Downloadable Products tab page in a customer account
+    * Adding existing attribute on New Product page
+    * "Manage Stock" is not saving for bundle product
+    * Filter did not work for Order Total report
+    * Error on reports for Order Totals if grouped by Year
+    * Customer can't find order on storefront
+    * Postal code is still mandatory for non-US addresses that don't use it
+    * Price of simple product isn't recalculated after selecting options on product page
+    * Don't load bundle quantity from options on bundle page
+    * Impossible to remove added row from "Minimum Qty Allowed in Shopping Cart"
+    * Impossible to add to the cart a product with required Custom Options of "Field" and/or "Area" type
+    * Syntax error in New Shipment email template
+    * Removed `adminhtml`-only web service route for using customer user password reset tokens and setting new passwords
+    * Removed the relevant URL Rewrites configuration after removing a category
+    * Static obsolete code test did not recognize partial namespaces
+    * Magento breaks when set specific locale
+    * Impossible to update Gift Message from Admin
+    * Impossible to create configurable product
+    * Impossible to create new attribute using the Product Creation page
+    * Product Template page did not work in IE9 and FF
+    * Product image could added only after double-click in IE9
+    * Inconsistent timestamp return for Admin timezone
+    * 404 page is displayed on any action with order that it viewed under guest
+    * "500 Internal Server Error" in case of excess "Maximum Qty Allowed in Shopping Cart" value
+    * MAP link is displayed for a product on category page after delete Catalog Price Rule
+    * Deploy script modifies LESS files with `@urls-resolved: true`
+    * Zip code field is missing in customer addresses in the Admin
+    * Impossible to add bundle product with required option to shopping cart without selecting all available options
+    * Empty email is sent when a registered user changes password in the storefront
+    * Tabs widget does not initialize sometimes on Product Creation page
+    * Fatal error when trying to send notify customer by email about shipment
+* Tests
+    * Fixed an issue with `WebDriverException` for iframes in functional tests
+    * Added functional test for Admin menu navigation
+    * Replaced end-to-end test for online one-page checkout with injectable test
+    * Replaced end-to-end test for administrator user with injectable test
+    * Replaced end-to-end test for catalog price rule with injectable test
+    * Replaced end-to-end test for store view with injectable test
+    * Increased integration tests coverage for `Magento_Indexer` module
+    * Increased unit test coverage for `Magento_Cms`, `Magento_Email`, and `Magento_Sales` modules
+* GitHub issues and requests:
+    * [#533] (https://github.com/magento/magento2/issues/533) -- Remove Allow all access in .htaccess
+    * [#850] (https://github.com/magento/magento2/issues/850) -- HTML Profiler and pub/static Resources
+    * [#919] (https://github.com/magento/magento2/issues/919) -- System information error when error is fixed but page wasn't refreshed
+    * [#987] (https://github.com/magento/magento2/pull/987) -- Fix mod_expires for dynamic content
+    * [#1004] (https://github.com/magento/magento2/issues/1004) -- Problem with template luma
+    * [#1014] (https://github.com/magento/magento2/issues/1014) -- php index.php update - Class Magento\Store\Model\StoreManagerInterface does not exist
+    * [#1015] (https://github.com/magento/magento2/issues/1015) -- After success setup/index.php update - "Missing required argument $engines of Magento\Framework\View\TemplateEngineFactory"
+    * [#1016] (https://github.com/magento/magento2/issues/1016) -- Backend Javascript Errors (new installation)
+    * [#1020] (https://github.com/magento/magento2/issues/1020) -- Bug generating Sitemap Cron expression
+    * [#1029] (https://github.com/magento/magento2/issues/1029) -- Admin dashboard Most Viewed Products Tab issue (without product list)
+    * [#1035] (https://github.com/magento/magento2/issues/1035) -- Bug in Magento\Framework\Simplexml\Element::appendChild
+    * [#1042] (https://github.com/magento/magento2/issues/1042) -- Lost catalog rewrite url after page/list-mode/limit changed
+    * [#1045] (https://github.com/magento/magento2/issues/1045) -- Bad rendering frontend category menu
+    * [#1048] (https://github.com/magento/magento2/pull/1048) -- Make possible to upload SVG logo by admin
+    * [#1052] (https://github.com/magento/magento2/pull/1052) -- Fix history cleanup for missed cron jobs
+    * [#1062] (https://github.com/magento/magento2/pull/1062) -- Add check to see if PHP > 5.6 and always_populate_raw_post_data = -1
+    * [#1082] (https://github.com/magento/magento2/pull/1082) -- Fix incorrect variable name ($schema -> $scheme)
+    * [#1086] (https://github.com/magento/magento2/issues/1086) -- Email message containing non English character is displayed incorrectly on the receiver
+    * [#1088] (https://github.com/magento/magento2/pull/1088) -- Add developer mode example to .htaccess
+    * [#1107] (https://github.com/magento/magento2/issues/1107) -- Serious security issue in Customer Address edit section
+
 0.42.0-beta11
 =============
 * Various improvements:
@@ -127,30 +308,30 @@
 0.42.0-beta7
 =============
 * Various improvements:
-    * Added Varnish 4 support 
-    * Added CSS minification 
-    * Improved the performance toolkit 
+    * Added Varnish 4 support
+    * Added CSS minification
+    * Improved the performance toolkit
 * Fixed bugs:
-    * Fixed an issue where the compiler for the single tenant mode did not resolve Repositories 
-    * Fixed an issue where the "Select all" mass action on the Customers page did not select all customers 
+    * Fixed an issue where the compiler for the single tenant mode did not resolve Repositories
+    * Fixed an issue where the "Select all" mass action on the Customers page did not select all customers
     * Fixed an issue where values for a customer  attribute of multiple-select type were not saved
     * Fixed an issue where the parental wakeup() method was not called in interceptors
-    * Fixed an issue where bundle products with the same configurations added from different pages were displayed in the wishlist as separate items 
+    * Fixed an issue where bundle products with the same configurations added from different pages were displayed in the wishlist as separate items
     * Fixed an issue where the number of items added to the wishlist was not displayed on certain pages
-    * Fixed an issue where logging was broken 
-    * Fixed an issue where it was impossible to use \Magento\Customer\Model\Resource\AddressRepository::getList with predefined direction(sortOrder) 
-    * Fixed an issue where editing a product from wishlist led caused a fatal error 
-    * Fixed an issue where the redirect link to continue shopping was absent in the success message after adding product to a wishlist 
+    * Fixed an issue where logging was broken
+    * Fixed an issue where it was impossible to use \Magento\Customer\Model\Resource\AddressRepository::getList with predefined direction(sortOrder)
+    * Fixed an issue where editing a product from wishlist led caused a fatal error
+    * Fixed an issue where the redirect link to continue shopping was absent in the success message after adding product to a wishlist
     * Fixed an issue where HTML tags where displayed in product prices on the Customer's Wishlist page in Admin
     * Fixed an issue where the Name and Email fields were not automatically when creating an email using the Email to Friend functionality
     * Fixed an issue with the redirect after searching product in a customer wishlist in Admin
     * Fixed an issue where a configurable product did not go out of stock when last subitem of some option was sold
     * Fixed an issue with varnish config generation for multiple IPs in access list field
     * Fixed the wrong di.xml in the Magento_Developer module
-    * Fixed an issue where changes were not saved when default billing/shipping address was not selected in customer addresses 
+    * Fixed an issue where changes were not saved when default billing/shipping address was not selected in customer addresses
     * Fixed the issue where the Update Qty button looked disabled during a partial invoice creation
     * Fixed an issue where the creation date was not displayed in invoices and credit memo grids
-    * Fixed an issue where it was impossible to install Magento_Quote on PHP 5.6 
+    * Fixed an issue where it was impossible to install Magento_Quote on PHP 5.6
     * Fixed an issue that changes are not saved when default billing/shipping address is unchecked in customer addresses
     * Fixed an issue where "Update Qty" button looks disabled while creating partial invoice
     * Fixed an issue where date created column is not populated in invoices and credit memo grid
@@ -158,9 +339,9 @@
     * Fixed an issue with wrong link "File Permission Help"
     * Fixed an issue where dev/tools are broken when DI compiler is used due to skipped by the compiler dev/tools/Magento folder
 * Framework improvements:
-    * JavaScript testsuites divided into frontend, backend and lib suites 
+    * JavaScript testsuites divided into frontend, backend and lib suites
     * Implemented image compression on server side upload
-    * Implemented frontend page resources sorting 
+    * Implemented frontend page resources sorting
     * Removed the Magic __call method usage in templates
     * Introduced Jasmine + PhantomJS JavaScript testing infrastructure
     * Removed support of PHP 5.4
@@ -170,30 +351,30 @@
 * GitHub requests :
     * [#593](https://github.com/magento/magento2/issues/593) -- Allow to use "0" as customer group
     * [#804](https://github.com/magento/magento2/issues/804) -- Comment about VAT number displayed under different field in Customer Configuration
-    
+
 0.42.0-beta6
 =============
 * Various improvements:
-    * Implemented caching for WebAPI configuration 
-    * Improved tests coverage of the CurrencySymbol module 
-    * Table catalogsearch_fulltext is setting up with ENGINE=InnoDB 
-    * Improved unit test coverage of the Catalog related functionality 
-    * Optimized JS dependencies 
-    * Refactored controller actions in the Sales module 
-    * Refactored controller actions in the Customer module 
-    * Removed the assertion for the exact number of attributes in API-functional tests for customer metadata. 
-    * Refactored API code for the CheckoutAgreements module 
-    * Refactored API code for the GiftMessage module 
-    * Refactored API for the Checkout module 
+    * Implemented caching for WebAPI configuration
+    * Improved tests coverage of the CurrencySymbol module
+    * Table catalogsearch_fulltext is setting up with ENGINE=InnoDB
+    * Improved unit test coverage of the Catalog related functionality
+    * Optimized JS dependencies
+    * Refactored controller actions in the Sales module
+    * Refactored controller actions in the Customer module
+    * Removed the assertion for the exact number of attributes in API-functional tests for customer metadata.
+    * Refactored API code for the CheckoutAgreements module
+    * Refactored API code for the GiftMessage module
+    * Refactored API for the Checkout module
 * Fixed bugs:
-    * Fixed an where issue were WebAPI generated the wrong WSDL 
-    * Fixed an issue where Catalog, Checkout, Customer API ACLs did not support AJAX use case(s) 
-    * Fixed an issue where SOAP tests failed after upgrading to ZF 1.12.9 
-    * Fixed an issue where the 'There is no data for export' message was displayed permanently after invalid search 
-    * Fixed an issue where there was no ability to set category position during creation it 
-    * Fixed a CSS issue where certain images were absent on banners () 
+    * Fixed an where issue were WebAPI generated the wrong WSDL
+    * Fixed an issue where Catalog, Checkout, Customer API ACLs did not support AJAX use case(s)
+    * Fixed an issue where SOAP tests failed after upgrading to ZF 1.12.9
+    * Fixed an issue where the 'There is no data for export' message was displayed permanently after invalid search
+    * Fixed an issue where there was no ability to set category position during creation it
+    * Fixed a CSS issue where certain images were absent on banners ()
     * Fixed an issue where the 'Date Of Birth' value was i reset to current date on the customer form)
-    * Fixed an issue where the behavior of the "Terms and Conditions" validation on multiple address checkout was different from the one for the onepage checkout 
+    * Fixed an issue where the behavior of the "Terms and Conditions" validation on multiple address checkout was different from the one for the onepage checkout
     * Fixed an issue where it was impossible to checkout with multiple addresses
     * Fixed an issue where the 'This is a required field ' message was not displayed for "Terms and Conditions" if the latter  was not selected
 * GitHub Requests:
@@ -202,9 +383,9 @@
     * [#866](https://github.com/magento/magento2/issues/866) -- Configurable product attribute scope
     * [#965](https://github.com/magento/magento2/pull/965) -- extra tests for current interception behavior
 * Service Contracts:
-    * The Downloadable module basic implementation 
+    * The Downloadable module basic implementation
 * Framework improvements:
-    * Refactored and covered with tests the classes with high CRAP value (>50) 
+    * Refactored and covered with tests the classes with high CRAP value (>50)
     * Moved Theme Management changes, Design changes, Design\Backend modules, and Observer components from the Core module to the Theme module
     * Moved Debug Hints models from the Core module to the newly added Developer module
     * Moved URL components, Factory, and EntityFactory from the Core module to the Magento Framework
@@ -212,14 +393,14 @@
     * Compressed and resized images
     * Added new base styles for the Admin re-design
     * Added the WAI-ARIA attributes are to the Search Autocomplete on the storefront
-    * Added visual style for the 'skip to content' attribute on the storefront 
-    * Fixed the style of persistent login messages on the storefront for all themes 
-    * Fixed the style of scrolling for Categories with long names in the Admin 
-    * Fixed the "css/print.css" file path on the storefront pages for all themes 
+    * Added visual style for the 'skip to content' attribute on the storefront
+    * Fixed the style of persistent login messages on the storefront for all themes
+    * Fixed the style of scrolling for Categories with long names in the Admin
+    * Fixed the "css/print.css" file path on the storefront pages for all themes
 * Tests improvements:
-    * Converted all fixtures/repositories for functional tests to .xml files 
+    * Converted all fixtures/repositories for functional tests to .xml files
     * Improved interaction between webdriver and the new Magento JS forms
-    * Increased unit and integration tests coverage 
+    * Increased unit and integration tests coverage
 
 0.42.0-beta5
 =============
diff --git a/Gruntfile.js b/Gruntfile.js
index 4c50be920fa914c5dd2605e0724abccc62e9a885..dbdca189e092fa0511bd2f2ca710b34cf7cfb2b5 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -8,18 +8,24 @@ module.exports = function (grunt) {
     'use strict';
 
     var _ = require('underscore'),
-        path = require('path');
+        path = require('path'),
+        configDir = './dev/tools/grunt/configs',
+        taskDir = './dev/tools/grunt/tasks';
 
-    require('./dev/tools/grunt/tasks/mage-minify')(grunt);
-    require('time-grunt')(grunt);
+    [
+        taskDir + '/mage-minify',
+        taskDir + '/deploy',
+        'time-grunt'
+    ].forEach(function (task) {
+        require(task)(grunt);
+    });
 
     require('load-grunt-config')(grunt, {
-        configPath: path.join(process.cwd(), 'dev/tools/grunt/configs'),
+        configPath: path.join(__dirname, configDir),
         init: true,
         loadGruntTasks: {
             pattern: [
-                'grunt-*',
-                '!grunt-template-jasmine-requirejs'
+                'grunt-*'
             ]
         }
     });
@@ -60,14 +66,6 @@ module.exports = function (grunt) {
             'less:luma',
             'less:backend'
         ],
-        /**
-         * Styles for backend theme
-         */
-        backend: [
-            'less:backend',
-            'replace:escapeCalc',
-            'less:override'
-        ],
         /**
          * Documentation
          */
@@ -78,24 +76,6 @@ module.exports = function (grunt) {
             'clean:pub'
         ],
 
-        spec: [
-            'specRunner:lib',
-            'specRunner:backend',
-            'specRunner:frontend'
-        ],
-
-        unit: [
-            'jasmine:lib-unit',
-            'jasmine:backend-unit',
-            'jasmine:frontend-unit'
-        ],
-
-        integration: [
-            'jasmine:lib-integration',
-            'jasmine:backend-integration',
-            'jasmine:frontend-integration'
-        ],
-
         'legacy-build': [
             'mage-minify:legacy'
         ],
@@ -104,7 +84,15 @@ module.exports = function (grunt) {
             'usebanner:documentationCss',
             'usebanner:documentationLess',
             'usebanner:documentationHtml'
-        ]
+        ],
+
+        spec: function (theme) {
+            var runner = require('./dev/tests/js/jasmine/spec_runner');
+
+            runner.init(grunt, { theme: theme });
+
+            grunt.task.run(runner.getTasks());
+        }
     }, function (task, name) {
         grunt.registerTask(name, task);
     });
diff --git a/README.md b/README.md
index 5ece86f880b60febb9f605232f351835ae8b28cf..a1f4a848d6cd7772805466cc1cbc4e117583acb5 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ Use the following table to verify you have the correct prerequisites to install
 		</tr>
 	<tr>
 		<td>Apache 2.2 or 2.4</td>
-		<td>Ubuntu: <code>apache -v</code><br>
+		<td>Ubuntu: <code>apache2 -v</code><br>
 		CentOS: <code>httpd -v</code></td>
 		<td><a href="http://devdocs.magento.com/guides/v1.0/install-gde/prereq/apache.html">Apache</a></td>
 	</tr>
@@ -57,3 +57,17 @@ After verifying your prerequisites, perform the following tasks in order to prep
 	*	<a href="http://devdocs.magento.com/guides/v1.0/install-gde/install/install-web.html">Install Magento software using the web interface</a>
 	*	<a href="http://devdocs.magento.com/guides/v1.0/install-gde/install/install-cli.html">Install Magento software using the command line</a>
 2.	<a href="http://devdocs.magento.com/guides/v1.0/install-gde/install/verify.html">Verify the installation</a>
+
+<h2>Contributing to the Magento 2 code base</h2>
+Contributions can take the form of new components or features, changes to existing features, tests, documentation (such as developer guides, user guides, examples, or specifications), bug fixes, optimizations, or just good suggestions.
+
+To make learn about how to make a contribution, click [here][1].
+
+To learn about issues, click [here][2]. To open an issue, click [here][3].
+
+To suggest documentation improvements, click [here][4].
+
+[1]: <http://devdocs.magento.com/guides/v1.0/contributor-guide/CONTRIBUTING.html>
+[2]: <http://devdocs.magento.com/guides/v1.0/contributor-guide/CONTRIBUTING.html#report>
+[3]: <https://github.com/magento/magento2/issues>
+[4]: <http://devdocs.magento.com>
diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json
index faf93f3ce5e415ba8c380067ee7504432d168f5c..4bdbc07cfbd7e9bb30713dafc8291546c9b0ea60 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml
index 86e2a73f94da5de9cfb192dc31dedd9ce1a70639..cfe907830dbc3ef629b28d5ae790d40024836cb8 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml
@@ -12,7 +12,7 @@
  * @see \Magento\AdminNotification\Block\Window
  */
 ?>
-<div data-mage-init='{"modalPopup": {}}' class="fade critical-notification admin__scope">
+<div data-mage-init='{"modalPopup": {}}' class="fade critical-notification">
     <div class="popup popup-<?php echo preg_replace('#[^a-z0-9]+#', '-', strtolower($block->getSeverityText())) ?>">
         <div class="popup-inner">
             <div class="popup-header">
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages.phtml
index 7526b9ae78842382b13b2986bfbdcca0800e582c..784e229f9a57f1f49ea4d29a244e3a4e97d2c551 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages.phtml
@@ -10,7 +10,7 @@
 <?php /** @var $block \Magento\AdminNotification\Block\System\Messages */ ?>
 
 <?php $lastCritical = $block->getLastCritical();?>
-<div id="system_messages" class="message-system<?php if ($lastCritical): ?> message-system-unread<?php endif; ?> admin__scope">
+<div id="system_messages" class="message-system<?php if ($lastCritical): ?> message-system-unread<?php endif; ?>">
     <div class="message-system-inner">
         <?php if ($lastCritical): ?>
             <ul class="message-system-list">
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
index 4bb035acbb5eec6c130ed20c2549d5710288831f..c0818bb7a81f90528bcc6d8093d4010b8e274f1b 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
@@ -9,7 +9,7 @@
 ?>
 <?php /** @var $block \Magento\AdminNotification\Block\System\Messages\UnreadMessagePopup */ ?>
 
-<div id="system_messages_list" class="admin__scope" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
+<div id="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
     <ul class="message-system-list">
         <?php foreach ($block->getUnreadMessages() as $message): ?>
             <li class="message message-warning <?php echo $block->getItemClass($message);?>">
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
index 9dcc83c737acfe83c6c7c32d84b4eb572da44a91..95a228c6fa99c671f144664535cc076d6923ff4b 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
@@ -20,9 +20,7 @@ define([
         },
 
         open: function (severity) {
-            var superMethod = $.proxy(this._super, this),
-                listTemplate,
-                fullTemplate;
+            var superMethod = $.proxy(this._super, this);
 
             $.ajax({
                 url: this.options.ajaxUrl,
@@ -38,12 +36,12 @@ define([
                 });
 
                 tmpl = $(tmpl);
-                listTemplate = $('<ul class="message-system-list"></ul>').append(tmpl);
-                fullTemplate = $('<div class="admin__scope"></div>').append(listTemplate);
 
-                this.element
-                    .html(fullTemplate)
-                    .trigger('contentUpdated');
+                this.element.html(
+                    $('<ul />', {
+                        'class': 'message-system-list'
+                    }).append(tmpl)
+                ).trigger('contentUpdated');
 
                 superMethod();
             }, this));
diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json
index d2a5c21759bde47605eacd07ab2ac6abe67e69ea..41cca87deaa066a7e119c190d49aa72f09d4d8a9 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.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backend/App/Action/Context.php b/app/code/Magento/Backend/App/Action/Context.php
index 0630d8213d2413e7ab3f9f75cd711206a47bc9ae..e6618170e4d6b72683ed960679575649e307dec4 100644
--- a/app/code/Magento/Backend/App/Action/Context.php
+++ b/app/code/Magento/Backend/App/Action/Context.php
@@ -61,6 +61,7 @@ class Context extends \Magento\Framework\App\Action\Context
      * @param \Magento\Framework\App\ActionFlag $actionFlag
      * @param \Magento\Framework\App\ViewInterface $view
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
+     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\Session $session
      * @param \Magento\Framework\AuthorizationInterface $authorization
      * @param \Magento\Backend\Model\Auth $auth
@@ -81,6 +82,7 @@ class Context extends \Magento\Framework\App\Action\Context
         \Magento\Framework\App\ActionFlag $actionFlag,
         \Magento\Framework\App\ViewInterface $view,
         \Magento\Framework\Message\ManagerInterface $messageManager,
+        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\Session $session,
         \Magento\Framework\AuthorizationInterface $authorization,
         \Magento\Backend\Model\Auth $auth,
@@ -99,7 +101,8 @@ class Context extends \Magento\Framework\App\Action\Context
             $redirect,
             $actionFlag,
             $view,
-            $messageManager
+            $messageManager,
+            $resultRedirectFactory
         );
 
         $this->_session = $session;
diff --git a/app/code/Magento/Backend/Block/Menu.php b/app/code/Magento/Backend/Block/Menu.php
index a8d6e31c13dd8cd54336a901599577625cf32b2a..6eaed8e5b16344608d8b4672b933ca2b013c284d 100644
--- a/app/code/Magento/Backend/Block/Menu.php
+++ b/app/code/Magento/Backend/Block/Menu.php
@@ -191,7 +191,7 @@ class Menu extends \Magento\Backend\Block\Template
         $output = ($this->_isItemActive(
             $menuItem,
             $level
-        ) ? '_active' : '') .
+        ) ? '_current _active' : '') .
             ' ' .
             ($menuItem->hasChildren() ? 'parent' : '') .
             ' ' .
diff --git a/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php b/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php
index ccd84b6474c572c64e21c0d04a2a840fef989b57..8faf54ba10bceb25a20fdd81e85c924bc1f72f84 100644
--- a/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php
+++ b/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php
@@ -100,7 +100,6 @@ class General extends \Magento\Backend\Block\Widget\Form\Generic
                 'label' => __('Date From'),
                 'title' => __('Date From'),
                 'name' => 'date_from',
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'date_format' => $dateFormat
                 //'required' => true
             ]
@@ -112,7 +111,6 @@ class General extends \Magento\Backend\Block\Widget\Form\Generic
                 'label' => __('Date To'),
                 'title' => __('Date To'),
                 'name' => 'date_to',
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'date_format' => $dateFormat
                 //'required' => true
             ]
diff --git a/app/code/Magento/Backend/Block/Widget/Form.php b/app/code/Magento/Backend/Block/Widget/Form.php
index ea31a1e977abc43380c65f169dba9f7575ceec67..7c3154c1ebcc8737ff5dd20b2c5754b9f25b1f31 100644
--- a/app/code/Magento/Backend/Block/Widget/Form.php
+++ b/app/code/Magento/Backend/Block/Widget/Form.php
@@ -226,7 +226,6 @@ class Form extends \Magento\Backend\Block\Widget
                 $element->setCanBeEmpty(true);
                 break;
             case 'date':
-                $element->setImage($this->getViewFileUrl('images/grid-cal.png'));
                 $element->setDateFormat($this->_localeDate->getDateFormatWithLongYear());
                 break;
             case 'multiline':
diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php
index f2def2a456fc56fd472e9a9d380057674be03327..9288cf5df470c94f2e56476e18c8152dab986d40 100644
--- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php
+++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Date.php
@@ -95,10 +95,6 @@ class Date extends \Magento\Backend\Block\Widget\Grid\Column\Filter\AbstractFilt
                     dateFormat: "' .
             $format .
             '",
-                    buttonImage: "' .
-            $this->getViewFileUrl(
-                'images/grid-cal.png'
-            ) . '",
                         buttonText: "' . $this->escapeHtml(__('Date selector')) .
             '",
                     from: {
diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php
index 3d2f0110dfc279e2cf8b6c04774db94d4f194cff..4d5255c93cd4187907d0873697444b7d2203af2f 100644
--- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php
+++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Datetime.php
@@ -129,7 +129,6 @@ class Datetime extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Date
                         dateFormat: "' . $format . '",
                         timeFormat: "' . $timeFormat . '",
                         showsTime: ' . ($this->getColumn()->getFilterTime() ? 'true' : 'false') . ',
-                        buttonImage: "' . $this->getViewFileUrl('images/grid-cal.png') . '",
                         buttonText: "' . $this->escapeHtml(__('Date selector')) . '",
                         from: {
                             id: "' . $htmlId . '_from"
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php
index b8e22be3ef59bd4a00529670c2e8fc31d5a7f345..6aed5e22c5282ed4e72790170da1323c3fbce78d 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php
@@ -13,25 +13,17 @@ class Login extends \Magento\Backend\Controller\Adminhtml\Auth
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * Constructor
      *
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php
index 0f632337827b1084a95a806dc6b79554a00a1962..098022bed0a8d7c764c9cf5fc66409f222bc6369 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php
@@ -8,23 +8,6 @@ namespace Magento\Backend\Controller\Adminhtml\Auth;
 
 class Logout extends \Magento\Backend\Controller\Adminhtml\Auth
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Administrator logout action
      *
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache.php
index f200ef062d37f9ef991f581fb20636b8677919b7..f7d1548519d70fdac4560ff7fcd3a399cf6a0db0 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache.php
@@ -25,11 +25,6 @@ class Cache extends Action
      */
     protected $_cacheFrontendPool;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\View\Result\PageFactory
      */
@@ -40,7 +35,6 @@ class Cache extends Action
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Cache\StateInterface $cacheState
      * @param \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
@@ -48,14 +42,12 @@ class Cache extends Action
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Cache\StateInterface $cacheState,
         \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context);
         $this->_cacheTypeList = $cacheTypeList;
         $this->_cacheState = $cacheState;
         $this->_cacheFrontendPool = $cacheFrontendPool;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
     }
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php
index 95c03bc8ccdc5605b06d11d871314712bbaf2907..23d056c9a208ade817db72fe6706ede3a2c0dfec 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php
@@ -14,19 +14,24 @@ class CleanImages extends \Magento\Backend\Controller\Adminhtml\Cache
      * Clean JS/css files cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws LocalizedException
      */
     public function execute()
     {
-        try {
-            $this->_objectManager->create('Magento\Catalog\Model\Product\Image')->clearCache();
-            $this->_eventManager->dispatch('clean_catalog_images_cache_after');
-            $this->messageManager->addSuccess(__('The image cache was cleaned.'));
-        } catch (LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('An error occurred while clearing the image cache.'));
-        }
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $this->_objectManager->create('Magento\Catalog\Model\Product\Image')->clearCache();
+        $this->_eventManager->dispatch('clean_catalog_images_cache_after');
+        $this->messageManager->addSuccess(__('The image cache was cleaned.'));
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('adminhtml/*');
     }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php
index 8133c1f530bb18d4f0a9eb428b549cd6756faf26..95af905952ce66e4c8cfc98e3979d241b6bc678e 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php
@@ -14,19 +14,24 @@ class CleanMedia extends \Magento\Backend\Controller\Adminhtml\Cache
      * Clean JS/css files cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws LocalizedException
      */
     public function execute()
     {
-        try {
-            $this->_objectManager->get('Magento\Framework\View\Asset\MergeService')->cleanMergedJsCss();
-            $this->_eventManager->dispatch('clean_media_cache_after');
-            $this->messageManager->addSuccess(__('The JavaScript/CSS cache has been cleaned.'));
-        } catch (LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('An error occurred while clearing the JavaScript/CSS cache.'));
-        }
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $this->_objectManager->get('Magento\Framework\View\Asset\MergeService')->cleanMergedJsCss();
+        $this->_eventManager->dispatch('clean_media_cache_after');
+        $this->messageManager->addSuccess(__('The JavaScript/CSS cache has been cleaned.'));
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('adminhtml/*');
     }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php
index 503637b67520dbd64329d97a5878390b87d7a220..a5f0d8d38ed8803e8c524b4025656f8e37ab88d4 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php
@@ -14,33 +14,38 @@ class MassDisable extends \Magento\Backend\Controller\Adminhtml\Cache
      * Mass action for cache disabling
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
-        try {
-            $types = $this->getRequest()->getParam('types');
-            $updatedTypes = 0;
-            if (!is_array($types)) {
-                $types = [];
-            }
-            $this->_validateTypes($types);
-            foreach ($types as $code) {
-                if ($this->_cacheState->isEnabled($code)) {
-                    $this->_cacheState->setEnabled($code, false);
-                    $updatedTypes++;
-                }
-                $this->_cacheTypeList->cleanType($code);
-            }
-            if ($updatedTypes > 0) {
-                $this->_cacheState->persist();
-                $this->messageManager->addSuccess(__("%1 cache type(s) disabled.", $updatedTypes));
+        $types = $this->getRequest()->getParam('types');
+        $updatedTypes = 0;
+        if (!is_array($types)) {
+            $types = [];
+        }
+        $this->_validateTypes($types);
+        foreach ($types as $code) {
+            if ($this->_cacheState->isEnabled($code)) {
+                $this->_cacheState->setEnabled($code, false);
+                $updatedTypes++;
             }
-        } catch (LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('An error occurred while disabling cache.'));
+            $this->_cacheTypeList->cleanType($code);
         }
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        if ($updatedTypes > 0) {
+            $this->_cacheState->persist();
+            $this->messageManager->addSuccess(__("%1 cache type(s) disabled.", $updatedTypes));
+        }
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('adminhtml/*');
     }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php
index 0125bdfd6aea8589f4ee98a2b82f3c4f08ff260a..597f6f13e0a70e1ae37f8f294b3e555126af9dcd 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php
@@ -14,32 +14,37 @@ class MassEnable extends \Magento\Backend\Controller\Adminhtml\Cache
      * Mass action for cache enabling
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
-        try {
-            $types = $this->getRequest()->getParam('types');
-            $updatedTypes = 0;
-            if (!is_array($types)) {
-                $types = [];
-            }
-            $this->_validateTypes($types);
-            foreach ($types as $code) {
-                if (!$this->_cacheState->isEnabled($code)) {
-                    $this->_cacheState->setEnabled($code, true);
-                    $updatedTypes++;
-                }
-            }
-            if ($updatedTypes > 0) {
-                $this->_cacheState->persist();
-                $this->messageManager->addSuccess(__("%1 cache type(s) enabled.", $updatedTypes));
+        $types = $this->getRequest()->getParam('types');
+        $updatedTypes = 0;
+        if (!is_array($types)) {
+            $types = [];
+        }
+        $this->_validateTypes($types);
+        foreach ($types as $code) {
+            if (!$this->_cacheState->isEnabled($code)) {
+                $this->_cacheState->setEnabled($code, true);
+                $updatedTypes++;
             }
-        } catch (LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('An error occurred while enabling cache.'));
         }
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        if ($updatedTypes > 0) {
+            $this->_cacheState->persist();
+            $this->messageManager->addSuccess(__("%1 cache type(s) enabled.", $updatedTypes));
+        }
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('adminhtml/*');
     }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php
index 7f9c0b2d3050deb3c2d18cb8f8638f5a2aabf590..78db76ec2d82d8029d2f8441cbb61661a367df13 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php
@@ -6,38 +6,41 @@
  */
 namespace Magento\Backend\Controller\Adminhtml\Cache;
 
-use Magento\Framework\Exception\LocalizedException;
-
 class MassRefresh extends \Magento\Backend\Controller\Adminhtml\Cache
 {
     /**
      * Mass action for cache refresh
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
-        try {
-            $types = $this->getRequest()->getParam('types');
-            $updatedTypes = 0;
-            if (!is_array($types)) {
-                $types = [];
-            }
-            $this->_validateTypes($types);
-            foreach ($types as $type) {
-                $this->_cacheTypeList->cleanType($type);
-                $this->_eventManager->dispatch('adminhtml_cache_refresh_type', ['type' => $type]);
-                $updatedTypes++;
-            }
-            if ($updatedTypes > 0) {
-                $this->messageManager->addSuccess(__("%1 cache type(s) refreshed.", $updatedTypes));
-            }
-        } catch (LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('An error occurred while refreshing cache.'));
+        $types = $this->getRequest()->getParam('types');
+        $updatedTypes = 0;
+        if (!is_array($types)) {
+            $types = [];
+        }
+        $this->_validateTypes($types);
+        foreach ($types as $type) {
+            $this->_cacheTypeList->cleanType($type);
+            $this->_eventManager->dispatch('adminhtml_cache_refresh_type', ['type' => $type]);
+            $updatedTypes++;
+        }
+        if ($updatedTypes > 0) {
+            $this->messageManager->addSuccess(__("%1 cache type(s) refreshed.", $updatedTypes));
         }
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('adminhtml/*');
     }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php
index 5172f791b6d021decee43a64baa44430b84acf94..7f4b2d919f3c06c82afbfab05a5e0a2af635dbdf 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php
@@ -11,36 +11,42 @@ class RefreshStatistics extends \Magento\Reports\Controller\Adminhtml\Report\Sta
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param array $reportTypes
      * @param \Psr\Log\LoggerInterface $logger
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         array $reportTypes,
         \Psr\Log\LoggerInterface $logger
     ) {
-        parent::__construct($context, $dateFilter, $resultRedirectFactory, $reportTypes);
+        parent::__construct($context, $dateFilter, $reportTypes);
         $this->logger = $logger;
     }
 
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
-        try {
-            $collectionsNames = array_values($this->reportTypes);
-            foreach ($collectionsNames as $collectionName) {
-                $this->_objectManager->create($collectionName)->aggregate();
-            }
-            $this->messageManager->addSuccess(__('We updated lifetime statistic.'));
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('We can\'t refresh lifetime statistics.'));
-            $this->logger->critical($e);
+        $collectionsNames = array_values($this->reportTypes);
+        foreach ($collectionsNames as $collectionName) {
+            $this->_objectManager->create($collectionName)->aggregate();
         }
-        return $this->resultRedirectFactory->create()->setPath('*/*');
+        $this->messageManager->addSuccess(__('We updated lifetime statistic.'));
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('*/*');
     }
 }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Denied.php b/app/code/Magento/Backend/Controller/Adminhtml/Denied.php
index 04c0cdf98cd4033cc2e607fa696750196d8837f2..c77bb09fb00548f52a0ad58f72c62acdb16d520b 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Denied.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Denied.php
@@ -8,11 +8,6 @@ namespace Magento\Backend\Controller\Adminhtml;
 
 class Denied extends \Magento\Backend\App\Action
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\View\Result\PageFactory
      */
@@ -20,16 +15,13 @@ class Denied extends \Magento\Backend\App\Action
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
     }
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php b/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php
index 4fca603999c5af054a81c89b413f9c0f8f1bbc9d..9505f4b1d6d2f33094558dfc448f664b201a3046 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php
@@ -8,25 +8,6 @@ namespace Magento\Backend\Controller\Adminhtml\Index;
 
 class ChangeLocale extends \Magento\Backend\Controller\Adminhtml\Index
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * Constructor
-     *
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context);
-    }
-
     /**
      * Change locale action
      *
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php
index da57138a8b57b15421e757e8741df0468f089b6c..0298a2b9d36b7c8dd7110cb24b34a8b71c17abfc 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php
@@ -8,23 +8,6 @@ namespace Magento\Backend\Controller\Adminhtml\Index;
 
 class Index extends \Magento\Backend\Controller\Adminhtml\Index
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Admin area entry point
      * Always redirects to the startup page url
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php
index 86ec95f344e19d2fade1d60582365ffa98bfedf3..06ade97d1e905424aba18f85c14b7a94db210ebd 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php
@@ -6,30 +6,15 @@
 namespace Magento\Backend\Controller\Adminhtml\System\Account;
 
 use Magento\Framework\Exception\AuthenticationException;
+use Magento\Framework\Exception\LocalizedException;
 
 class Save extends \Magento\Backend\Controller\Adminhtml\System\Account
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Saving edited user information
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws LocalizedException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     public function execute()
@@ -42,17 +27,11 @@ class Save extends \Magento\Backend\Controller\Adminhtml\System\Account
         /** @var $user \Magento\User\Model\User */
         $user = $this->_objectManager->create('Magento\User\Model\User')->load($userId);
 
-        $user->setId(
-            $userId
-        )->setUsername(
-            $this->getRequest()->getParam('username', false)
-        )->setFirstname(
-            $this->getRequest()->getParam('firstname', false)
-        )->setLastname(
-            $this->getRequest()->getParam('lastname', false)
-        )->setEmail(
-            strtolower($this->getRequest()->getParam('email', false))
-        );
+        $user->setId($userId)
+            ->setUsername($this->getRequest()->getParam('username', false))
+            ->setFirstname($this->getRequest()->getParam('firstname', false))
+            ->setLastname($this->getRequest()->getParam('lastname', false))
+            ->setEmail(strtolower($this->getRequest()->getParam('email', false)));
 
         if ($this->_objectManager->get('Magento\Framework\Locale\Validator')->isValid($interfaceLocale)) {
             $user->setInterfaceLocale($interfaceLocale);
@@ -83,13 +62,19 @@ class Save extends \Magento\Backend\Controller\Adminhtml\System\Account
             if ($e->getMessage()) {
                 $this->messageManager->addError($e->getMessage());
             }
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('An error occurred while saving account.'));
         }
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
-        return $resultRedirect->setPath("*/*/");
+        return $resultRedirect->setPath('*/*');
     }
 }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design.php
index 66e2b5739f6157d3da37d3ce4212b9d3956df2ff..fb5725b74bbf800d933b2e35f8cf8d4089c7ff08 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design.php
@@ -21,11 +21,6 @@ class Design extends Action
      */
     protected $dateFilter;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -45,7 +40,6 @@ class Design extends Action
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
@@ -54,7 +48,6 @@ class Design extends Action
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
@@ -62,7 +55,6 @@ class Design extends Action
         $this->_coreRegistry = $coreRegistry;
         $this->dateFilter = $dateFilter;
         parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultPageFactory = $resultPageFactory;
         $this->resultLayoutFactory = $resultLayoutFactory;
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php
index e9b7e2d6b7a0c11ddd96249a21da096fce97b32d..869f8af7923470767c96804afbd59e84266ffda8 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php
@@ -20,7 +20,7 @@ class Delete extends \Magento\Backend\Controller\Adminhtml\System\Design
             try {
                 $design->delete();
                 $this->messageManager->addSuccess(__('You deleted the design change.'));
-            } catch (\Magento\Framework\Exception $e) {
+            } catch (\Magento\Framework\Exception\LocalizedException $e) {
                 $this->messageManager->addError($e->getMessage());
             } catch (\Exception $e) {
                 $this->messageManager->addException($e, __("Cannot delete the design change."));
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store.php
index f17843629a420285506e3bd721979120809f8823..a6efb535ec2658ac32c0ef66f1a3472bcdeb322a 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store.php
@@ -36,11 +36,6 @@ class Store extends Action
      */
     protected $resultForwardFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\View\Result\PageFactory
      */
@@ -51,7 +46,6 @@ class Store extends Action
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
@@ -59,14 +53,12 @@ class Store extends Action
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         $this->_coreRegistry = $coreRegistry;
         $this->filterManager = $filterManager;
         parent::__construct($context);
         $this->resultForwardFactory = $resultForwardFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
     }
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php
index 4450de457669c7765dfd427fa61eca73453bb2d4..aa771ac2ec80ff9e92c92b5cba1ce30618387d44 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php
@@ -10,6 +10,7 @@ class DeleteGroupPost extends \Magento\Backend\Controller\Adminhtml\System\Store
 {
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -31,15 +32,8 @@ class DeleteGroupPost extends \Magento\Backend\Controller\Adminhtml\System\Store
             return $redirectResult->setPath('*/*/editGroup', ['group_id' => $itemId]);
         }
 
-        try {
-            $model->delete();
-            $this->messageManager->addSuccess(__('The store has been deleted.'));
-            return $redirectResult->setPath('adminhtml/*/');
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Unable to delete store. Please, try again later.'));
-        }
-        return $redirectResult->setPath('adminhtml/*/editGroup', ['group_id' => $itemId]);
+        $model->delete();
+        $this->messageManager->addSuccess(__('The store has been deleted.'));
+        return $redirectResult->setPath('adminhtml/*/');
     }
 }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php
index 0d325541d82df7d453f4fb3d3aa1b40dc673d5ef..1eca177ae08e90305c494f62845778be4a944af6 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php
@@ -12,6 +12,7 @@ class DeleteStorePost extends \Magento\Backend\Controller\Adminhtml\System\Store
      * Delete store view post action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -32,18 +33,11 @@ class DeleteStorePost extends \Magento\Backend\Controller\Adminhtml\System\Store
             return $redirectResult->setPath('*/*/editStore', ['store_id' => $itemId]);
         }
 
-        try {
-            $model->delete();
+        $model->delete();
 
-            $this->_eventManager->dispatch('store_delete', ['store' => $model]);
+        $this->_eventManager->dispatch('store_delete', ['store' => $model]);
 
-            $this->messageManager->addSuccess(__('The store view has been deleted.'));
-            return $redirectResult->setPath('adminhtml/*/');
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Unable to delete store view. Please, try again later.'));
-        }
-        return $redirectResult->setPath('adminhtml/*/editStore', ['store_id' => $itemId]);
+        $this->messageManager->addSuccess(__('The store view has been deleted.'));
+        return $redirectResult->setPath('adminhtml/*/');
     }
 }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php
index c1d1c98779e8e9cce5c8a3a369a375585a8bd943..09c9f363b8b54c0f76d6510069ef9c1e56607eab 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php
@@ -10,6 +10,7 @@ class DeleteWebsitePost extends \Magento\Backend\Controller\Adminhtml\System\Sto
 {
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -33,15 +34,8 @@ class DeleteWebsitePost extends \Magento\Backend\Controller\Adminhtml\System\Sto
             return $redirectResult->setPath('*/*/editWebsite', ['website_id' => $itemId]);
         }
 
-        try {
-            $model->delete();
-            $this->messageManager->addSuccess(__('The website has been deleted.'));
-            return $redirectResult->setPath('adminhtml/*/');
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Unable to delete website. Please, try again later.'));
-        }
-        return $redirectResult->setPath('*/*/editWebsite', ['website_id' => $itemId]);
+        $model->delete();
+        $this->messageManager->addSuccess(__('The website has been deleted.'));
+        return $redirectResult->setPath('adminhtml/*/');
     }
 }
diff --git a/app/code/Magento/Backend/Model/Auth.php b/app/code/Magento/Backend/Model/Auth.php
index 427ac932f515ff4ee9f90d0f09ef72d0b2983fc6..a15f8e1526e0708180402d9d9c9295d2b28ce890 100644
--- a/app/code/Magento/Backend/Model/Auth.php
+++ b/app/code/Magento/Backend/Model/Auth.php
@@ -93,6 +93,7 @@ class Auth
      * If auth storage was not defined outside - returns default object of auth storage
      *
      * @return \Magento\Backend\Model\Auth\StorageInterface
+     * @codeCoverageIgnore
      */
     public function getAuthStorage()
     {
@@ -126,6 +127,7 @@ class Auth
      * Return credential storage object
      *
      * @return null|\Magento\Backend\Model\Auth\Credential\StorageInterface
+     * @codeCoverageIgnore
      */
     public function getCredentialStorage()
     {
diff --git a/app/code/Magento/Backend/Model/Auth/Session.php b/app/code/Magento/Backend/Model/Auth/Session.php
index 6d0965dc1bbbefdb31093fceccc029e5c75d9d90..fec438f70c744d7b7cc9999d8574f3e4deef862c 100644
--- a/app/code/Magento/Backend/Model/Auth/Session.php
+++ b/app/code/Magento/Backend/Model/Auth/Session.php
@@ -253,6 +253,7 @@ class Session extends \Magento\Framework\Session\SessionManager implements \Mage
      * @param string $path
      * @return bool
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @codeCoverageIgnore
      */
     public function isValidForPath($path)
     {
diff --git a/app/code/Magento/Backend/Model/Menu/Config/Menu/Dom.php b/app/code/Magento/Backend/Model/Menu/Config/Menu/Dom.php
index 2b06e285b559f1f0a26680f79d05dfdb23c215dd..7dc805fa57f2d181e3ce715f16668e5acb3dda07 100644
--- a/app/code/Magento/Backend/Model/Menu/Config/Menu/Dom.php
+++ b/app/code/Magento/Backend/Model/Menu/Config/Menu/Dom.php
@@ -15,7 +15,8 @@ class Dom extends \Magento\Framework\Config\Dom
      *
      * @param string $nodePath
      * @return \DOMElement|null
-     * @throws \Magento\Framework\Exception an exception is possible if original document contains multiple fixed nodes
+     * @throws \Magento\Framework\Exception\LocalizedException an exception is possible if original document contains
+     * multiple fixed nodes
      */
     protected function _getMatchedNode($nodePath)
     {
diff --git a/app/code/Magento/Backend/Model/Search/Order.php b/app/code/Magento/Backend/Model/Search/Order.php
index f25de8f9881e108572b247ef3de2dbccaf4cd062..314b6a375ee686fcaa2a929aec29265ddafe4856 100644
--- a/app/code/Magento/Backend/Model/Search/Order.php
+++ b/app/code/Magento/Backend/Model/Search/Order.php
@@ -76,12 +76,7 @@ class Order extends \Magento\Framework\Object
                 'id' => 'order/1/' . $order->getId(),
                 'type' => __('Order'),
                 'name' => __('Order #%1', $order->getIncrementId()),
-                'description' => $order->getBillingFirstname() . ' ' . $order->getBillingLastname(),
-                'form_panel_title' => __(
-                    'Order #%1 (%2)',
-                    $order->getIncrementId(),
-                    $order->getBillingFirstname() . ' ' . $order->getBillingLastname()
-                ),
+                'description' => $order->getFirstname() . ' ' . $order->getLastname(),
                 'url' => $this->_adminhtmlData->getUrl('sales/order/view', ['order_id' => $order->getId()]),
             ];
         }
diff --git a/app/code/Magento/Backend/Model/View/Result/Redirect.php b/app/code/Magento/Backend/Model/View/Result/Redirect.php
index f8717a0b3e1fae060c0813ecb2ba8b1c09e314cc..2545f7e084a6a0e899db82068ea4dc4c3778e796 100644
--- a/app/code/Magento/Backend/Model/View/Result/Redirect.php
+++ b/app/code/Magento/Backend/Model/View/Result/Redirect.php
@@ -42,6 +42,17 @@ class Redirect extends \Magento\Framework\Controller\Result\Redirect
         parent::__construct($redirect, $urlBuilder);
     }
 
+    /**
+     * Set referer url or dashboard if referer does not exist
+     *
+     * @return $this
+     */
+    public function setRefererOrBaseUrl()
+    {
+        $this->url = $this->redirect->getRedirectUrl($this->urlBuilder->getUrl($this->urlBuilder->getStartupPageUrl()));
+        return $this;
+    }
+
     /**
      * {@inheritdoc}
      */
diff --git a/app/code/Magento/Backend/Model/View/Result/RedirectFactory.php b/app/code/Magento/Backend/Model/View/Result/RedirectFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..a848ed6ea46facb4e55f3b51be6040c550524a45
--- /dev/null
+++ b/app/code/Magento/Backend/Model/View/Result/RedirectFactory.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Backend\Model\View\Result;
+
+use Magento\Framework\ObjectManagerInterface;
+
+/**
+ * Factory class for \Magento\Backend\Model\View\Result\Redirect
+ */
+class RedirectFactory extends \Magento\Framework\Controller\Result\RedirectFactory
+{
+    /**
+     * Object Manager instance
+     *
+     * @var ObjectManagerInterface
+     */
+    protected $objectManager;
+
+    /**
+     * Instance name to create
+     *
+     * @var string
+     */
+    protected $instanceName;
+
+    /**
+     * @param ObjectManagerInterface $objectManager
+     * @param string $instanceName
+     */
+    public function __construct(
+        ObjectManagerInterface $objectManager,
+        $instanceName = 'Magento\Backend\Model\View\Result\Redirect'
+    ) {
+        $this->objectManager = $objectManager;
+        $this->instanceName = $instanceName;
+    }
+
+    /**
+     * Create class instance with specified parameters
+     *
+     * @param array $data
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function create(array $data = [])
+    {
+        return $this->objectManager->create($this->instanceName, $data);
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php b/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php
index 696120273cdbd2aaeded1dee977851cf5628ae41..87dad8b6edd4152ab5fba42b1ef5a06986c59e78 100644
--- a/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php
+++ b/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php
@@ -49,7 +49,7 @@ class MassactionKeyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundDispatch
+     * @covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundDispatch
      *
      * @param $postData array|string
      * @param array $convertedData
@@ -84,7 +84,7 @@ class MassactionKeyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundDispatch
+     * @covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundDispatch
      */
     public function testAroundDispatchWhenMassactionPrepareKeyRequestNotExists()
     {
diff --git a/app/code/Magento/Backend/Test/Unit/App/Router/NoRouteHandlerTest.php b/app/code/Magento/Backend/Test/Unit/App/Router/NoRouteHandlerTest.php
index af87476b315bccae72b57f5ce80edcbf0488d147..1414d0ec01d779f06fc766b5e33d98de2efcc157 100644
--- a/app/code/Magento/Backend/Test/Unit/App/Router/NoRouteHandlerTest.php
+++ b/app/code/Magento/Backend/Test/Unit/App/Router/NoRouteHandlerTest.php
@@ -37,7 +37,7 @@ class NoRouteHandlerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Backend\App\Router\NoRouteHandler::process
+     * @covers \Magento\Backend\App\Router\NoRouteHandler::process
      */
     public function testProcessWithBackendAreaFrontName()
     {
@@ -86,7 +86,7 @@ class NoRouteHandlerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Backend\App\Router\NoRouteHandler::process
+     * @covers \Magento\Backend\App\Router\NoRouteHandler::process
      */
     public function testProcessWithoutAreaFrontName()
     {
diff --git a/app/code/Magento/Backend/Test/Unit/Block/Page/System/Config/Robots/ResetTest.php b/app/code/Magento/Backend/Test/Unit/Block/Page/System/Config/Robots/ResetTest.php
index b710fd40ffaf9821c130165d08c6224be9c3ecb7..1c39c59e762d5ce8518e631b869c21235deb622b 100644
--- a/app/code/Magento/Backend/Test/Unit/Block/Page/System/Config/Robots/ResetTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Block/Page/System/Config/Robots/ResetTest.php
@@ -35,7 +35,7 @@ class ResetTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Page\System\Config\Robots\Reset::getRobotsDefaultCustomInstructions
+     * @covers \Magento\Backend\Block\Page\System\Config\Robots\Reset::getRobotsDefaultCustomInstructions
      */
     public function testGetRobotsDefaultCustomInstructions()
     {
diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/ButtonTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/ButtonTest.php
index f8b1f51ee95e08d27fac5811749ac36bade38dbe..08e12225518998f9811ea7d2852e07ef1a72f866 100644
--- a/app/code/Magento/Backend/Test/Unit/Block/Widget/ButtonTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/ButtonTest.php
@@ -51,7 +51,7 @@ class ButtonTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Button::getAttributesHtml
+     * @covers \Magento\Backend\Block\Widget\Button::getAttributesHtml
      * @dataProvider getAttributesHtmlDataProvider
      */
     public function testGetAttributesHtml($data, $expect)
diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/CurrencyTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/CurrencyTest.php
index d3c7b6f48ce8d04470a3c5caecafcef49cabf907..9f7571c5cb11378ac0fd9d906e5a11fecea8242e 100644
--- a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/CurrencyTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/CurrencyTest.php
@@ -109,7 +109,7 @@ class CurrencyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column\Renderer\Currency::render
+     * @covers \Magento\Backend\Block\Widget\Grid\Column\Renderer\Currency::render
      */
     public function testRenderWithDefaultCurrency()
     {
diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php
index ac33a6a8c08272c5f17bab81adf1295ff3992080..26dfaeb4ed974443cd7ba20b34164a256743d7a8 100644
--- a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php
@@ -97,8 +97,8 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
-     * covers \Magento\Backend\Block\Widget\Grid\Column::setFilterType
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::setFilterType
      */
     public function testGetFilterWithSetEmptyCustomFilterType()
     {
@@ -108,7 +108,7 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
      */
     public function testGetFilterWithInvalidFilterTypeWhenUseDefaultFilter()
     {
@@ -128,7 +128,7 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
      */
     public function testGetFilterWhenUseCustomFilter()
     {
@@ -149,8 +149,8 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
-     * covers \Magento\Backend\Block\Widget\Grid\Column::setFilter
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getFilter
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::setFilter
      */
     public function testGetFilterWhenFilterWasSetPreviously()
     {
@@ -213,7 +213,7 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getRenderer
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getRenderer
      */
     public function testGetRendererWheRendererSetFalse()
     {
@@ -235,8 +235,8 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getRenderer
-     * covers \Magento\Backend\Block\Widget\Grid\Column::setRendererType
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getRenderer
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::setRendererType
      */
     public function testGetRendererWhenUseCustomRenderer()
     {
@@ -259,8 +259,8 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Block\Widget\Grid\Column::getRenderer
-     * covers \Magento\Backend\Block\Widget\Grid\Column::setRenderer
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::getRenderer
+     * @covers \Magento\Backend\Block\Widget\Grid\Column::setRenderer
      */
     public function testGetRendererWhenRendererWasSetPreviously()
     {
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php
index 7fba92c348bdf0e006a3b52aed3313a3cc18b478..a61bd01156c9d81ba8d8684abcc433bbdd37e500 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php
@@ -32,7 +32,7 @@ class CleanMediaTest extends \PHPUnit_Framework_TestCase
         );
         $context = $this->getMock(
             'Magento\Backend\App\Action\Context',
-            ['getRequest', 'getResponse', 'getMessageManager', 'getSession'],
+            ['getRequest', 'getResponse', 'getMessageManager', 'getSession', 'getResultRedirectFactory'],
             $helper->getConstructArguments(
                 'Magento\Backend\App\Action\Context',
                 [
@@ -45,28 +45,26 @@ class CleanMediaTest extends \PHPUnit_Framework_TestCase
                 ]
             )
         );
-        $context->expects($this->once())->method('getRequest')->will($this->returnValue($request));
-        $context->expects($this->once())->method('getResponse')->will($this->returnValue($response));
-        $context->expects($this->once())->method('getSession')->will($this->returnValue($session));
-        $context->expects($this->once())->method('getMessageManager')->will($this->returnValue($messageManager));
-
-        $resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
-            ->disableOriginalConstructor()
-            ->getMock();
-
         $resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
+        $resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
         $resultRedirectFactory->expects($this->atLeastOnce())
             ->method('create')
             ->willReturn($resultRedirect);
+        $context->expects($this->once())->method('getRequest')->willReturn($request);
+        $context->expects($this->once())->method('getResponse')->willReturn($response);
+        $context->expects($this->once())->method('getSession')->willReturn($session);
+        $context->expects($this->once())->method('getMessageManager')->willReturn($messageManager);
+        $context->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
 
         $controller = $helper->getObject(
             'Magento\Backend\Controller\Adminhtml\Cache\CleanMedia',
             [
-                'context' => $context,
-                'resultRedirectFactory' => $resultRedirectFactory
+                'context' => $context
             ]
         );
 
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
index f13a680af4a3b0e8172a5f63ddbd1ce871d1ec9b..e1ac51552586ab6edf311aa3d8d4bd2750ef143b 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
@@ -93,12 +93,14 @@ class RefreshStatisticsTest extends \PHPUnit_Framework_TestCase
         $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
         $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
         $this->context->expects($this->any())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactory);
 
         $this->refreshStatisticsController = $objectManagerHelper->getObject(
             'Magento\Backend\Controller\Adminhtml\Dashboard\RefreshStatistics',
             [
                 'context' => $this->context,
-                'resultRedirectFactory' => $this->resultRedirectFactory,
                 'reportTypes' => $reportTypes
             ]
         );
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
index 49a1f4a21b24e25e45a50cb6efc9b509e989278c..012d90382443ebf785069ac2f8890267c72fd56d 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
@@ -94,35 +94,26 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $contextMock = $this->getMock('Magento\Backend\App\Action\Context', [], [], '', false);
-        $contextMock->expects($this->any())->method('getRequest')->will($this->returnValue($this->_requestMock));
-        $contextMock->expects($this->any())->method('getResponse')->will($this->returnValue($this->_responseMock));
-        $contextMock->expects($this->any())
-            ->method('getObjectManager')
-            ->will($this->returnValue($this->_objectManagerMock));
-        $contextMock->expects($this->any())
-            ->method('getFrontController')
-            ->will($this->returnValue($frontControllerMock));
-
-        $contextMock->expects($this->any())->method('getHelper')->will($this->returnValue($this->_helperMock));
-        $contextMock->expects($this->any())
-            ->method('getMessageManager')
-            ->will($this->returnValue($this->_messagesMock));
-        $contextMock->expects($this->any())->method('getTranslator')->will($this->returnValue($this->_translatorMock));
-
-        $resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
-            ->disableOriginalConstructor()
-            ->getMock();
-
         $resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $resultRedirectFactory->expects($this->atLeastOnce())
-            ->method('create')
-            ->willReturn($resultRedirect);
+        $resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $resultRedirectFactory->expects($this->atLeastOnce())->method('create')->willReturn($resultRedirect);
 
-        $args = ['context' => $contextMock, 'resultRedirectFactory' => $resultRedirectFactory];
+        $contextMock = $this->getMock('Magento\Backend\App\Action\Context', [], [], '', false);
+        $contextMock->expects($this->any())->method('getRequest')->willReturn($this->_requestMock);
+        $contextMock->expects($this->any())->method('getResponse')->willReturn($this->_responseMock);
+        $contextMock->expects($this->any())->method('getObjectManager')->willReturn($this->_objectManagerMock);
+        $contextMock->expects($this->any())->method('getFrontController')->willReturn($frontControllerMock);
+        $contextMock->expects($this->any())->method('getHelper')->willReturn($this->_helperMock);
+        $contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->_messagesMock);
+        $contextMock->expects($this->any())->method('getTranslator')->willReturn($this->_translatorMock);
+        $contextMock->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
+
+        $args = ['context' => $contextMock];
 
         $testHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_controller = $testHelper->getObject('Magento\Backend\Controller\Adminhtml\System\Account\Save', $args);
diff --git a/app/code/Magento/Backend/Test/Unit/Model/Auth/SessionTest.php b/app/code/Magento/Backend/Test/Unit/Model/Auth/SessionTest.php
index 68b5d21f85416fdd874179162000c651d3f91e5c..3e41177e72c0cae37f1f4324caa310d63e471e2c 100644
--- a/app/code/Magento/Backend/Test/Unit/Model/Auth/SessionTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Model/Auth/SessionTest.php
@@ -38,6 +38,11 @@ class SessionTest extends \PHPUnit_Framework_TestCase
      */
     protected $storage;
 
+    /**
+     * @var \Magento\Framework\Acl\Builder | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $aclBuilder;
+
     /**
      * @var Session
      */
@@ -61,7 +66,13 @@ class SessionTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->storage = $this->getMock('Magento\Framework\Session\Storage', ['getUser'], [], '', false);
+        $this->storage = $this->getMock(
+            'Magento\Framework\Session\Storage',
+            ['getUser', 'getAcl', 'setAcl'],
+            [],
+            '',
+            false
+        );
         $this->sessionConfig = $this->getMock(
             'Magento\Framework\Session\Config',
             ['getCookiePath', 'getCookieDomain', 'getCookieSecure', 'getCookieHttpOnly'],
@@ -69,6 +80,9 @@ class SessionTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $this->aclBuilder = $this->getMockBuilder('Magento\Framework\Acl\Builder')
+            ->disableOriginalConstructor()
+            ->getMock();
         $objectManager = new ObjectManager($this);
         $this->session = $objectManager->getObject(
             'Magento\Backend\Model\Auth\Session',
@@ -77,7 +91,8 @@ class SessionTest extends \PHPUnit_Framework_TestCase
                 'sessionConfig' => $this->sessionConfig,
                 'cookieManager' => $this->cookieManager,
                 'cookieMetadataFactory' => $this->cookieMetadataFactory,
-                'storage' => $this->storage
+                'storage' => $this->storage,
+                'aclBuilder' => $this->aclBuilder
             ]
         );
     }
@@ -89,6 +104,40 @@ class SessionTest extends \PHPUnit_Framework_TestCase
         $this->session = null;
     }
 
+    /**
+     * @dataProvider refreshAclDataProvider
+     * @param $isUserPassedViaParams
+     */
+    public function testRefreshAcl($isUserPassedViaParams)
+    {
+        $aclMock = $this->getMockBuilder('Magento\Framework\Acl')->disableOriginalConstructor()->getMock();
+        $this->aclBuilder->expects($this->any())->method('getAcl')->willReturn($aclMock);
+        $userMock = $this->getMockBuilder('Magento\User\Model\User')
+            ->setMethods(['getReloadAclFlag', 'setReloadAclFlag', 'unsetData', 'save'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $userMock->expects($this->any())->method('getReloadAclFlag')->willReturn(true);
+        $userMock->expects($this->once())->method('setReloadAclFlag')->with('0')->willReturnSelf();
+        $userMock->expects($this->once())->method('save');
+        $this->storage->expects($this->once())->method('setAcl')->with($aclMock);
+        $this->storage->expects($this->any())->method('getAcl')->willReturn($aclMock);
+        if ($isUserPassedViaParams) {
+            $this->session->refreshAcl($userMock);
+        } else {
+            $this->storage->expects($this->once())->method('getUser')->willReturn($userMock);
+            $this->session->refreshAcl();
+        }
+        $this->assertSame($aclMock, $this->session->getAcl());
+    }
+
+    public function refreshAclDataProvider()
+    {
+        return [
+            'User set via params' => [true],
+            'User set to session object' => [false]
+        ];
+    }
+
     public function testIsLoggedInPositive()
     {
         $lifetime = 900;
@@ -176,4 +225,58 @@ class SessionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertLessThanOrEqual(time(), $this->session->getUpdatedAt());
     }
+
+    /**
+     * @dataProvider isAllowedDataProvider
+     * @param bool $isUserDefined
+     * @param bool $isAclDefined
+     * @param bool $isAllowed
+     * @param true $expectedResult
+     */
+    public function testIsAllowed($isUserDefined, $isAclDefined, $isAllowed, $expectedResult)
+    {
+        $userAclRole = 'userAclRole';
+        if ($isAclDefined) {
+            $aclMock = $this->getMockBuilder('Magento\Framework\Acl')->disableOriginalConstructor()->getMock();
+            $this->storage->expects($this->any())->method('getAcl')->willReturn($aclMock);
+        }
+        if ($isUserDefined) {
+            $userMock = $this->getMockBuilder('Magento\User\Model\User')->disableOriginalConstructor()->getMock();
+            $this->storage->expects($this->once())->method('getUser')->willReturn($userMock);
+        }
+        if ($isAclDefined && $isUserDefined) {
+            $userMock->expects($this->any())->method('getAclRole')->willReturn($userAclRole);
+            $aclMock->expects($this->once())->method('isAllowed')->with($userAclRole)->willReturn($isAllowed);
+        }
+
+        $this->assertEquals($expectedResult, $this->session->isAllowed('resource'));
+    }
+
+    public function isAllowedDataProvider()
+    {
+        return [
+            "Negative: User not defined" => [false, true, true, false],
+            "Negative: Acl not defined" => [true, false, true, false],
+            "Negative: Permission denied" => [true, true, false, false],
+            "Positive: Permission granted" => [true, true, false, false],
+        ];
+    }
+
+    /**
+     * @dataProvider firstPageAfterLoginDataProvider
+     * @param bool $isFirstPageAfterLogin
+     */
+    public function testFirstPageAfterLogin($isFirstPageAfterLogin)
+    {
+        $this->session->setIsFirstPageAfterLogin($isFirstPageAfterLogin);
+        $this->assertEquals($isFirstPageAfterLogin, $this->session->isFirstPageAfterLogin());
+    }
+
+    public function firstPageAfterLoginDataProvider()
+    {
+        return [
+            'First page after login' => [true],
+            'Not first page after login' => [false],
+        ];
+    }
 }
diff --git a/app/code/Magento/Backend/Test/Unit/Model/Locale/ManagerTest.php b/app/code/Magento/Backend/Test/Unit/Model/Locale/ManagerTest.php
index 3afce6cc1c2417a3b185f21f1ac8033ea7b8020e..000c861f11d8eba4c098f8427df867287de61c2d 100644
--- a/app/code/Magento/Backend/Test/Unit/Model/Locale/ManagerTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Model/Locale/ManagerTest.php
@@ -67,7 +67,7 @@ class ManagerTest extends \PHPUnit_Framework_TestCase
     /**
      * @param string $locale
      * @dataProvider switchBackendInterfaceLocaleDataProvider
-     * covers \Magento\Backend\Model\Locale\Manager::switchBackendInterfaceLocale
+     * @covers \Magento\Backend\Model\Locale\Manager::switchBackendInterfaceLocale
      */
     public function testSwitchBackendInterfaceLocale($locale)
     {
@@ -81,7 +81,7 @@ class ManagerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Model\Locale\Manager::getUserInterfaceLocale
+     * @covers \Magento\Backend\Model\Locale\Manager::getUserInterfaceLocale
      */
     public function testGetUserInterfaceLocaleDefault()
     {
@@ -91,7 +91,7 @@ class ManagerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Backend\Model\Locale\Manager::getUserInterfaceLocale
+     * @covers \Magento\Backend\Model\Locale\Manager::getUserInterfaceLocale
      */
     public function testGetUserInterfaceLocale()
     {
diff --git a/app/code/Magento/Backend/Test/Unit/Model/Menu/ItemTest.php b/app/code/Magento/Backend/Test/Unit/Model/Menu/ItemTest.php
index 6b90cdc5f8248c21e7f775eb229f91776eebbc5a..2b450fd1a3bef37e8a2be372066869a5720525d5 100644
--- a/app/code/Magento/Backend/Test/Unit/Model/Menu/ItemTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Model/Menu/ItemTest.php
@@ -208,7 +208,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
         )->with(
             'Magento_Config::config'
         )->will(
-            $this->throwException(new \Magento\Framework\Exception())
+            $this->throwException(new \Magento\Framework\Exception\LocalizedException(__('Error')))
         );
         $this->assertFalse($this->_model->isAllowed());
     }
diff --git a/app/code/Magento/Backend/Test/Unit/Model/View/Result/RedirectTest.php b/app/code/Magento/Backend/Test/Unit/Model/View/Result/RedirectTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca51c9d8a2e288ddd0ff56ff1204b14483f8cfa2
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Model/View/Result/RedirectTest.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Backend\Test\Unit\Model\View\Result;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class RedirectTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Backend\Model\View\Result\Redirect */
+    protected $action;
+
+    /** @var ObjectManagerHelper */
+    protected $objectManagerHelper;
+
+    /** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */
+    protected $session;
+
+    /** @var \Magento\Framework\App\ActionFlag|\PHPUnit_Framework_MockObject_MockObject */
+    protected $actionFlag;
+
+    /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $urlBuilder;
+
+    /** @var \Magento\Framework\App\Response\RedirectInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $redirect;
+
+    protected $url = 'adminhtml/index';
+
+    protected function setUp()
+    {
+        $this->session = $this->getMock('Magento\Backend\Model\Session', [], [], '', false);
+        $this->actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', [], [], '', false);
+        $this->urlBuilder = $this->getMock('Magento\Backend\Model\UrlInterface', [], [], '', false);
+        $this->redirect = $this->getMock(
+            'Magento\Framework\App\Response\RedirectInterface',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->action = $this->objectManagerHelper->getObject(
+            'Magento\Backend\Model\View\Result\Redirect',
+            [
+                'session' => $this->session,
+                'actionFlag' => $this->actionFlag,
+                'redirect' => $this->redirect,
+                'urlBuilder' =>$this->urlBuilder,
+            ]
+        );
+    }
+
+    public function testSetRefererOrBaseUrl()
+    {
+        $this->urlBuilder->expects($this->once())->method('getUrl')->willReturn($this->url);
+        $this->redirect->expects($this->once())->method('getRedirectUrl')->with($this->url)->willReturn('test string');
+        $this->action->setRefererOrBaseUrl();
+    }
+}
diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json
index 33daed277cc4b124fdeedafb5f54564493ceadf4..639122ecc702064bc2ceda23e59f32b21fd19f8f 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.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-developer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-cron": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-reports": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-user": "0.42.0-beta11",
-        "magento/module-backup": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-translation": "0.42.0-beta11",
-        "magento/module-require-js": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-developer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-cron": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-reports": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-user": "0.74.0-beta2",
+        "magento/module-backup": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-translation": "0.74.0-beta2",
+        "magento/module-require-js": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backend/etc/config.xml b/app/code/Magento/Backend/etc/config.xml
index ea2586bae427a78a76e1fe2eb2e36077c8683824..d83c36cda31cc1936127d317ea7404fc911a6b6c 100644
--- a/app/code/Magento/Backend/etc/config.xml
+++ b/app/code/Magento/Backend/etc/config.xml
@@ -9,7 +9,7 @@
     <default>
         <dev>
             <template>
-                <minify_html>1</minify_html>
+                <minify_html>0</minify_html>
             </template>
         </dev>
         <system>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/admin/page.phtml b/app/code/Magento/Backend/view/adminhtml/templates/admin/page.phtml
index 1015ad460f45f306e85ef6dfc2fff114aadf9d79..6ace15eb6afff7f8698c8c26db70371e23706dce 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/admin/page.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/admin/page.phtml
@@ -27,10 +27,8 @@
 
         <main class="page-content" id="anchor-content">
             <?php echo $block->getChildHtml('main-top'); ?>
-            <div class="admin__scope">
-                <div class="messages" id="messages" data-container-for="messages">
-                    <?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml() ?>
-                </div>
+            <div class="messages" id="messages" data-container-for="messages">
+                <?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml() ?>
             </div>
             <?php echo $block->getChildHtml('page_main_actions'); ?>
             <?php if ($block->getChildHtml('left')): ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/grid.phtml b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/grid.phtml
index 966f1d251a519c782246764d100fd67127f6619f..f87b7ee84a1a475492ceaaf87f74c943a2749bc2 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/grid.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/grid.phtml
@@ -14,7 +14,7 @@ $numColumns = sizeof($block->getColumns());
 <?php if ($block->getCollection()): ?>
 <div class="dashboard-item-content">
     <?php if ($block->getCollection()->getSize()>0): ?>
-        <table class="dashboard-data" id="<?php echo $block->getId() ?>_table">
+        <table class="table dashboard-data" id="<?php echo $block->getId() ?>_table">
             <?php
             /* This part is commented to remove all <col> tags from the code. */
             /* foreach ($block->getColumns() as $_column): ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/js/calendar.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/js/calendar.phtml
index b99dd72072dba4f6fadde9c5e03a075018468762..8de8c93ee6391cb44406a0c2f611bb3712edc058 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/js/calendar.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/js/calendar.phtml
@@ -41,7 +41,8 @@ require([
             showAnim: "",
             changeMonth: true,
             changeYear: true,
-            buttonImageOnly: true,
+            buttonImageOnly: null,
+            buttonImage: null,
             showButtonPanel: true,
             showOtherMonths: true,
             showWeek: false,
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
index 03f4d7c5e2432f3237578d058cc9492fdc7252c1..59dfc9db6b35d6b50d2aa02b1d1ed8b0808cfa47 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
@@ -61,9 +61,13 @@ if ($isField) {
         <?php endif; ?>
     <?php endif; ?>
 
-    <?php if ($element->getComment() && !$isField): ?>
-        <div class="comment"><?php echo $block->escapeHtml($element->getComment()) ?></div>
-    <?php endif; ?>
+
+    <div class="messages">
+        <?php if ($element->getComment() && !$isField): ?>
+            <div class="message message-notice"><?php echo $block->escapeHtml($element->getComment()) ?></div>
+        <?php endif; ?>
+    </div>
+
 
     <?php echo($isField) ? '<div class="control">' : ''; ?>
 
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/tabs.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/tabs.phtml
index 764db4e07732c623a1f0458bbeefe6aed1c9b755..2b5d4b4b35892e66d774ebee5ba58ee99f54ad30 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/tabs.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/tabs.phtml
@@ -9,30 +9,57 @@
 /** @var $block \Magento\Backend\Block\Widget\Tabs */
 ?>
 <?php if (!empty($tabs)): ?>
-<div id="<?php echo $block->getId() ?>">
+
+<div class="admin__page-nav" data-role="container" id="<?php echo $block->getId() ?>">
     <?php if ($block->getTitle()): ?>
-    <h3 <?php echo $block->getUiId('title') ?>><?php echo $block->getTitle() ?></h3>
+        <div class="admin__page-nav-title" data-role="title" <?php echo $block->getUiId('title') ?>>
+            <strong><?php echo $block->getTitle() ?></strong>
+            <span data-role="title-messages" class="admin__page-nav-title-messages"></span>
+        </div>
     <?php endif ?>
-    <ul <?php echo $block->getUiId('tab', $block->getId()) ?> class="<?php echo $block->getIsHoriz() ? 'tabs-horiz' : 'tabs' ?>">
+    <ul <?php echo $block->getUiId('tab', $block->getId()) ?> class="<?php echo $block->getIsHoriz() ? 'tabs-horiz' : 'tabs admin__page-nav-items' ?>">
         <?php foreach ($tabs as $_tab): ?>
-        <?php if (!$block->canShowTab($_tab)): continue;  endif; ?>
-        <?php $_tabClass = 'tab-item-link ' . $block->getTabClass($_tab) . ' ' . (preg_match('/\s?ajax\s?/', $_tab->getClass()) ? 'notloaded' : '') ?>
-        <?php $_tabType = (!preg_match('/\s?ajax\s?/', $_tabClass) && $block->getTabUrl($_tab) != '#') ? 'link' : '' ?>
-        <?php $_tabHref = $block->getTabUrl($_tab) == '#' ? '#' . $block->getTabId($_tab) . '_content' : $block->getTabUrl($_tab) ?>
-        <li <?php if ($block->getTabIsHidden($_tab)): ?> style="display:none"<?php endif; ?><?php echo $block->getUiId('tab', 'item', $_tab->getId()) ?>>
-            <a href="<?php echo $_tabHref ?>" id="<?php echo $block->getTabId($_tab) ?>" name="<?php echo $block->getTabId($_tab, false) ?>" title="<?php echo $block->getTabTitle($_tab) ?>" class="<?php echo $_tabClass;?>" data-tab-type="<?php echo $_tabType;?>" <?php echo $block->getUiId('tab', 'link', $_tab->getId()) ?>>
-            <span>
-                <span class="changed" title="<?php echo __('The information in this tab has been changed.') ?>"></span>
-                <span class="error" title="<?php echo __('This tab contains invalid data. Please solve the problem before saving.') ?>"></span>
-                <span class="loader" title="<?php echo __('Loading...') ?>"></span>
-                <?php echo $block->getTabLabel($_tab); ?>
-            </span>
-            </a>
-            <div id="<?php echo $block->getTabId($_tab) ?>_content" style="display:none;"<?php echo $block->getUiId('tab', 'content', $_tab->getId()) ?>><?php echo $block->getTabContent($_tab) ?></div>
-        </li>
+
+            <?php if (!$block->canShowTab($_tab)): continue;  endif; ?>
+            <?php $_tabClass = 'tab-item-link ' . $block->getTabClass($_tab) . ' ' . (preg_match('/\s?ajax\s?/', $_tab->getClass()) ? 'notloaded' : '') ?>
+            <?php $_tabType = (!preg_match('/\s?ajax\s?/', $_tabClass) && $block->getTabUrl($_tab) != '#') ? 'link' : '' ?>
+            <?php $_tabHref = $block->getTabUrl($_tab) == '#' ? '#' . $block->getTabId($_tab) . '_content' : $block->getTabUrl($_tab) ?>
+
+            <li class="admin__page-nav-item" <?php if ($block->getTabIsHidden($_tab)): ?> style="display:none"<?php endif; ?><?php echo $block->getUiId('tab', 'item', $_tab->getId()) ?>>
+                <a href="<?php echo $_tabHref ?>" id="<?php echo $block->getTabId($_tab) ?>" name="<?php echo $block->getTabId($_tab, false) ?>" title="<?php echo $block->getTabTitle($_tab) ?>"
+                   class="admin__page-nav-link <?php echo $_tabClass;?>"
+                   data-tab-type="<?php echo $_tabType;?>"
+                   <?php echo $block->getUiId('tab', 'link', $_tab->getId()) ?>>
+
+                   <span><?php echo $block->getTabLabel($_tab); ?></span>
+
+                   <span class="admin__page-nav-item-messages" data-role="item-messages">
+                       <span class="admin__page-nav-item-message _changed">
+                           <span class="admin__page-nav-item-message-icon"></span>
+                           <span class="admin__page-nav-item-message-tooltip">
+                               <?php echo __('Changes have been made to this section that have not been saved.'); ?>
+                           </span>
+                       </span>
+                       <span class="admin__page-nav-item-message _error">
+                           <span class="admin__page-nav-item-message-icon"></span>
+                           <span class="admin__page-nav-item-message-tooltip">
+                               <?php echo __('This tab contains invalid data. Please solve the problem before saving.'); ?>
+                           </span>
+                       </span>
+                        <span class="admin__page-nav-item-message-loader">
+                           <span class="spinner">
+                               <span></span><span></span><span></span><span></span>
+                               <span></span><span></span><span></span><span></span>
+                           </span>
+                       </span>
+                   </span>
+                </a>
+                <div id="<?php echo $block->getTabId($_tab) ?>_content" style="display:none;"<?php echo $block->getUiId('tab', 'content', $_tab->getId()) ?>><?php echo $block->getTabContent($_tab) ?></div>
+            </li>
         <?php endforeach; ?>
     </ul>
 </div>
+
 <script>
 require(['jquery',"mage/backend/tabs"], function($){
     $(function() {
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php
index 52ad8d4ac6e96d985e5acc9658e6e524a9e98aec..c9fe2c5758624b59d19f5a8ec8deba05bcb6c11a 100755
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php
@@ -15,11 +15,6 @@ class Download extends \Magento\Backup\Controller\Adminhtml\Index
      */
     protected $resultRawFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
@@ -28,7 +23,6 @@ class Download extends \Magento\Backup\Controller\Adminhtml\Index
      * @param \Magento\Backup\Model\BackupFactory $backupModelFactory
      * @param \Magento\Framework\App\MaintenanceMode $maintenanceMode
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
@@ -37,8 +31,7 @@ class Download extends \Magento\Backup\Controller\Adminhtml\Index
         \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
         \Magento\Backup\Model\BackupFactory $backupModelFactory,
         \Magento\Framework\App\MaintenanceMode $maintenanceMode,
-        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
     ) {
         parent::__construct(
             $context,
@@ -49,7 +42,6 @@ class Download extends \Magento\Backup\Controller\Adminhtml\Index
             $maintenanceMode
         );
         $this->resultRawFactory = $resultRawFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
index ef03c35226aef73091e954a9e38aac1f0d16ef3a..d797caeebfb4d9ca9f2f93a1a1cf93d22b79798c 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
@@ -44,7 +44,7 @@ class Rollback extends \Magento\Backup\Controller\Adminhtml\Index
             }
 
             if (!$backup->getTime()) {
-                throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot();
+                throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot(__('Can\'t load snapshot archive'));
             }
 
             $type = $backup->getType();
diff --git a/app/code/Magento/Backup/Exception.php b/app/code/Magento/Backup/Exception.php
deleted file mode 100644
index 2f783199aa4a33488e755e10ca6a8c54efbac964..0000000000000000000000000000000000000000
--- a/app/code/Magento/Backup/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Backup;
-
-class Exception extends \Zend_Exception
-{
-}
diff --git a/app/code/Magento/Backup/Model/Backup.php b/app/code/Magento/Backup/Model/Backup.php
index be790f48ef99aefbd11467d8b6ce65b7bb5ab910..a19cf7091903b12ebf12db04d5919bbf84d4f8dc 100755
--- a/app/code/Magento/Backup/Model/Backup.php
+++ b/app/code/Magento/Backup/Model/Backup.php
@@ -273,20 +273,22 @@ class Backup extends \Magento\Framework\Object implements \Magento\Framework\Bac
      *
      * @param bool $write
      * @return $this
-     * @throws \Magento\Backup\Exception
+     * @throws \Magento\Framework\Exception\InputException
      * @throws \Magento\Framework\Backup\Exception\NotEnoughPermissions
      */
     public function open($write = false)
     {
         if ($this->getPath() === null) {
-            throw new \Magento\Backup\Exception(__('The backup file path was not specified.'));
+            throw new \Magento\Framework\Exception\InputException(__('The backup file path was not specified.'));
         }
 
         if ($write && $this->varDirectory->isFile($this->_getFilePath())) {
             $this->varDirectory->delete($this->_getFilePath());
         }
         if (!$write && !$this->varDirectory->isFile($this->_getFilePath())) {
-            throw new \Magento\Backup\Exception(__('The backup file "%1" does not exist.', $this->getFileName()));
+            throw new \Magento\Framework\Exception\InputException(
+                __('The backup file "%1" does not exist.', $this->getFileName())
+            );
         }
 
         $mode = $write ? 'wb' . self::COMPRESS_RATE : 'rb';
@@ -298,7 +300,7 @@ class Backup extends \Magento\Framework\Object implements \Magento\Framework\Bac
                 $this->_getFilePath(),
                 $mode
             );
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
                 __('Sorry, but we cannot read from or write to backup file "%1".', $this->getFileName())
             );
@@ -311,12 +313,12 @@ class Backup extends \Magento\Framework\Object implements \Magento\Framework\Bac
      * Get zlib handler
      *
      * @return \Magento\Framework\Filesystem\File\WriteInterface
-     * @throws \Magento\Backup\Exception
+     * @throws \Magento\Framework\Exception\InputException
      */
     protected function _getStream()
     {
         if ($this->_stream === null) {
-            throw new \Magento\Backup\Exception(__('The backup file handler was unspecified.'));
+            throw new \Magento\Framework\Exception\InputException(__('The backup file handler was unspecified.'));
         }
         return $this->_stream;
     }
@@ -347,14 +349,14 @@ class Backup extends \Magento\Framework\Object implements \Magento\Framework\Bac
      *
      * @param string $string
      * @return $this
-     * @throws \Magento\Backup\Exception
+     * @throws \Magento\Framework\Exception\InputException
      */
     public function write($string)
     {
         try {
             $this->_getStream()->write($string);
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
-            throw new \Magento\Backup\Exception(
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
+            throw new \Magento\Framework\Exception\InputException(
                 __('Something went wrong writing to the backup file "%1".', $this->getFileName())
             );
         }
diff --git a/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php b/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php
index bba764fa20551565dd69ab8eee775f287af82d35..4aaebd08b4addfa6e68ce88a044185dbbe09a7bb 100755
--- a/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php
+++ b/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php
@@ -126,7 +126,8 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
             [
                 'objectManager' => $this->objectManagerMock,
                 'request' => $this->requestMock,
-                'response' => $this->responseMock
+                'response' => $this->responseMock,
+                'resultRedirectFactory' => $this->resultRedirectFactoryMock
             ]
         );
         $this->downloadController = $this->objectManager->getObject(
@@ -136,7 +137,6 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
                 'backupModelFactory' => $this->backupModelFactoryMock,
                 'fileFactory' => $this->fileFactoryMock,
                 'resultRawFactory' => $this->resultRawFactoryMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock
             ]
         );
     }
diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json
index 73c91afc1ebc3f09dcb1224d12f2cebc5340f79a..2c9f59ec6320c18d224d40af33aa6d20c546a5d7 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-cron": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-cron": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index 9979827b852795b353efbbdb286cfd293fb9bbcd..ef121271e5ccda5a1c83ac7ba7f1ffb790878a2b 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -8,7 +8,7 @@
 
 ?>
 <!-- TODO: refactor form styles and js -->
-<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog admin__scope" id="rollback-warning" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="rollback-warning" style="display: none;">
     <div class="popup">
         <div class="popup-inner">
             <div class="popup-header">
@@ -31,7 +31,7 @@
     </div>
 </div>
 
-<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog admin__scope" id="backup-warning" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="backup-warning" style="display: none;">
     <div class="popup">
         <div class="popup-inner">
             <div class="popup-header">
@@ -53,7 +53,7 @@
     </div>
 </div>
 
-<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog admin__scope" id="backup-options" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="backup-options" style="display: none;">
     <div class="popup">
         <div class="popup-inner">
             <div class="popup-header">
@@ -103,7 +103,7 @@
     </div>
  </div>
 
-<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog admin__scope" id="rollback-request-password" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="rollback-request-password" style="display: none;">
     <div class="popup popup-notice">
         <div class="popup-inner">
             <div class="popup-header">
diff --git a/app/code/Magento/Bundle/Model/Resource/Indexer/Price.php b/app/code/Magento/Bundle/Model/Resource/Indexer/Price.php
index decc168ec2ffff14ec7b2e01ede79d020bf7baf2..e4a7ceb99903b0987bbd38eebc3464895efe4d25 100644
--- a/app/code/Magento/Bundle/Model/Resource/Indexer/Price.php
+++ b/app/code/Magento/Bundle/Model/Resource/Indexer/Price.php
@@ -529,27 +529,6 @@ class Price extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\Defaul
         $this->_prepareBundlePriceByType(\Magento\Bundle\Model\Product\Price::PRICE_TYPE_FIXED, $entityIds);
         $this->_prepareBundlePriceByType(\Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC, $entityIds);
 
-        /**
-         * Add possibility modify prices from external events
-         */
-        $select = $this->_getWriteAdapter()->select()->join(
-            ['wd' => $this->_getWebsiteDateTable()],
-            'i.website_id = wd.website_id',
-            []
-        );
-        $this->_eventManager->dispatch(
-            'prepare_catalog_product_price_index_table',
-            [
-                'index_table' => ['i' => $this->_getBundlePriceTable()],
-                'select' => $select,
-                'entity_id' => 'i.entity_id',
-                'customer_group_id' => 'i.customer_group_id',
-                'website_id' => 'i.website_id',
-                'website_date' => 'wd.website_date',
-                'update_fields' => ['price', 'min_price', 'max_price']
-            ]
-        );
-
         $this->_calculateBundleOptionPrice();
         $this->_applyCustomOption();
 
diff --git a/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php b/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php
index 41a19f62325b612620e0f3ec27bd5bb4d15674aa..78685f8da844d414d10f0d3410b06e37ca3e650f 100644
--- a/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php
@@ -70,7 +70,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Bundle\Helper\Catalog\Product\Configuration::getSelectionFinalPrice
+     * @covers \Magento\Bundle\Helper\Catalog\Product\Configuration::getSelectionFinalPrice
      */
     public function testGetSelectionFinalPrice()
     {
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
index b70c5fc5e730ecf9f83a7e9eb52e498b1d4f1182..a7595da535d5f9ac71bdad675f75a2ef4c47281b 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
@@ -58,7 +58,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Bundle\Model\Option::addSelection
+     * @covers \Magento\Bundle\Model\Option::addSelection
      */
     public function testAddSelection()
     {
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php
index fef8d5b8006ed4f72c2aaca91fbde4af0e2bd33b..584eb71c4893e98a3a88f86c8e6ec1d8aef2acb6 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php
@@ -68,7 +68,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Bundle\Model\Product\Attribute\Source\Price\View::getOptionText
+     * @covers \Magento\Bundle\Model\Product\Attribute\Source\Price\View::getOptionText
      */
     public function testGetOptionTextForExistLabel()
     {
@@ -78,7 +78,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Bundle\Model\Product\Attribute\Source\Price\View::getOptionText
+     * @covers \Magento\Bundle\Model\Product\Attribute\Source\Price\View::getOptionText
      */
     public function testGetOptionTextForNotExistLabel()
     {
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
index b9655df8181cc90bb13470f413b8b83ee5eceefb..8db5283f5b38d2b0048695c64c0897b33b2316b6 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
@@ -95,8 +95,8 @@ class PriceTest extends \PHPUnit_Framework_TestCase
      * @param bool $dateInInterval
      * @param float $expected
      *
-     * covers \Magento\Bundle\Model\Product\Price::calculateSpecialPrice
-     * covers \Magento\Bundle\Model\Product\Price::__construct
+     * @covers \Magento\Bundle\Model\Product\Price::calculateSpecialPrice
+     * @covers \Magento\Bundle\Model\Product\Price::__construct
      * @dataProvider calculateSpecialPrice
      */
     public function testCalculateSpecialPrice($finalPrice, $specialPrice, $callsNumber, $dateInInterval, $expected)
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/TierPriceTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/TierPriceTest.php
index 9a438011c6404c901720b09a3b591174528db63c..f1cbd5196abe41a5ed67980146da518d2a517eb3 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/TierPriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/TierPriceTest.php
@@ -74,7 +74,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Bundle\Pricing\Price\TierPrice::isFirstPriceBetter
+     * @covers \Magento\Bundle\Pricing\Price\TierPrice::isFirstPriceBetter
      * @dataProvider providerForGetterTierPriceList
      */
     public function testGetterTierPriceList($tierPrices, $basePrice, $expectedResult)
diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json
index 69d80ed65073ba0ddc4bdb03c5ed47f769b3e569..172bf912af2924d869d8f763c172729ae41920a6 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-catalog-rule": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-gift-message": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-catalog-rule": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-gift-message": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-webapi": "0.42.0-beta11"
+        "magento/module-webapi": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
index 079a9d89f37cb1a8fa8910f950a688b4906de5e1..5b6515db33fa5a13be2a3493cbd7588b36cda191 100644
--- a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
+++ b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
@@ -159,6 +159,8 @@ define([
 
                         var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45;
                         $(this).closest('.ui-dialog').css('margin-top', topMargin);
+
+                        $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                     },
                     close: function() {
                         $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
diff --git a/app/code/Magento/Bundle/view/frontend/templates/catalog/product/view/type/bundle/option/checkbox.phtml b/app/code/Magento/Bundle/view/frontend/templates/catalog/product/view/type/bundle/option/checkbox.phtml
index 00938f3c70c0f58427e5b1302dc9c77f3ee6ed0c..505a554fe65a1a36a891522dcbc8e9e505efb825 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/catalog/product/view/type/bundle/option/checkbox.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/catalog/product/view/type/bundle/option/checkbox.phtml
@@ -29,7 +29,7 @@
                         <input class="bundle-option-<?php echo $_option->getId() ?> checkbox product bundle option change-container-classname"
                                id="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>"
                                type="checkbox"
-                               <?php if ($_option->getRequired()) echo 'data-validate="{\'validate-one-required-by-name\':true}"'?>
+                               <?php if ($_option->getRequired()) echo 'data-validate="{\'validate-one-required-by-name\':\'input[name^=&quot;bundle_option[' . $_option->getId() . ']&quot;]:checked\'}"'?>
                                name="bundle_option[<?php echo $_option->getId() ?>][<?php echo $_selection->getId() ?>]"
                                <?php if ($block->isSelected($_selection)) echo ' checked="checked"' ?>
                                <?php if (!$_selection->isSaleable()) echo ' disabled="disabled"' ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml
index fdeaac8ee26557106b9de8418a9671ae7ac5c773..0caea13b65b5a392e18217bfa682c4a46e70c0d0 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml
@@ -17,7 +17,7 @@
 
 <?php foreach ($items as $_item): ?>
 
-<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
     <?php $_showlastRow = true ?>
 <?php else: ?>
     <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml
index cf6b520bcd00f4501b049b16a7ab8d1ba1df82cd..4aec9e983e7c5e86238ee178f30a331d77e3c907 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml
@@ -18,7 +18,7 @@
 
 <?php foreach ($items as $_item): ?>
 
-<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
     <?php $_showlastRow = true ?>
 <?php else: ?>
     <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml
index 876a77f7726ca088c68b7d713c25f701784ae431..c40ac91faf20a0c999997f46c23e9cec3403874e 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml
@@ -14,7 +14,7 @@
 <?php $parentItem = $block->getItem() ?>
 <?php $items = array_merge([$parentItem], $parentItem->getChildrenItems()); ?>
 
-<?php if ($block->getItemOptions() || $_item->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?>
+<?php if ($block->getItemOptions() || $_item->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $_item) && $_item->getGiftMessageId()): ?>
     <?php $_showlastRow = true ?>
 <?php else: ?>
     <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml
index 8b9c86c24780d8d2cf798a5798c9bdd20d52df06..c485ea7524906bce8ab030dbf5d8ff6263875b8e 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml
@@ -16,7 +16,7 @@
 
 <?php foreach ($items as $_item): ?>
 
-<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
     <?php $_showlastRow = true ?>
 <?php else: ?>
     <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml
index 92d5f48d962c250205098b11690e9c9ab43825fc..3d908583e199610eb48aad5ce83126bf957a9ca8 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml
@@ -19,7 +19,7 @@
 
 <?php foreach ($items as $_item): ?>
 
-    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
         <?php $_showlastRow = true ?>
     <?php else: ?>
         <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml
index ce6c827ab2475925de00c0d711b814175ba93fce..c7f4dd44bc08b82634ec14cbc2753806cb1fae3b 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml
@@ -18,7 +18,7 @@
 <?php $_prevOptionId = '' ?>
 <?php foreach ($items as $_item): ?>
 
-    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
         <?php $_showlastRow = true ?>
     <?php else: ?>
         <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml
index b4276aeaa7ba38fc5c5fe72c6fe3622a2f243a55..c50b8cfdac980447385bf4367eb3dfddbf07c789 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml
@@ -17,7 +17,7 @@
 
 <?php foreach ($items as $_item): ?>
 
-    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
         <?php $_showlastRow = true ?>
     <?php else: ?>
         <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml
index 1e02e1b887ad8f29e744f362cbad49440888fe75..15406932c1c3e8706afa0c13b58c5c717ddb3dca 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml
@@ -17,7 +17,7 @@
 
 <?php foreach ($items as $_item): ?>
 
-    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
+    <?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
         <?php $_showlastRow = true ?>
     <?php else: ?>
         <?php $_showlastRow = false ?>
diff --git a/app/code/Magento/Captcha/Model/DefaultModel.php b/app/code/Magento/Captcha/Model/DefaultModel.php
old mode 100644
new mode 100755
diff --git a/app/code/Magento/Captcha/Test/Unit/Helper/Adminhtml/DataTest.php b/app/code/Magento/Captcha/Test/Unit/Helper/Adminhtml/DataTest.php
index a073c452954efdb249a3c6660614c7a19b10f95e..8385a018b79910bee97da9b3e5686628290843e8 100644
--- a/app/code/Magento/Captcha/Test/Unit/Helper/Adminhtml/DataTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Helper/Adminhtml/DataTest.php
@@ -47,7 +47,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Helper\Adminhtml\Data::_getWebsiteCode
+     * @covers \Magento\Captcha\Helper\Adminhtml\Data::_getWebsiteCode
      */
     public function testGetWebsiteId()
     {
diff --git a/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php b/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php
index 032907fed83b71e815fc416c10dcea390458a93f..2e4452bc096686830b57a14f9293c0e1aed4e092 100644
--- a/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php
@@ -46,7 +46,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Helper\Data::getCaptcha
+     * @covers \Magento\Captcha\Helper\Data::getCaptcha
      */
     public function testGetCaptcha()
     {
@@ -81,7 +81,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Helper\Data::getConfig
+     * @covers \Magento\Captcha\Helper\Data::getConfig
      */
     public function testGetConfigNode()
     {
@@ -137,8 +137,8 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getImgDir
-     * covers \Magento\Captcha\Helper\Data::getImgDir
+     * @covers \Magento\Captcha\Model\DefaultModel::getImgDir
+     * @covers \Magento\Captcha\Helper\Data::getImgDir
      */
     public function testGetImgDir()
     {
@@ -177,8 +177,8 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getImgUrl
-     * covers \Magento\Captcha\Helper\Data::getImgUrl
+     * @covers \Magento\Captcha\Model\DefaultModel::getImgUrl
+     * @covers \Magento\Captcha\Helper\Data::getImgUrl
      */
     public function testGetImgUrl()
     {
diff --git a/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php b/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php
old mode 100644
new mode 100755
index e1c2b07fad3404a0253cfc49c8d6143f663672f7..2e82417babb2a1fa1f1132ca0b87c8b017ec3ad7
--- a/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php
@@ -7,6 +7,11 @@ namespace Magento\Captcha\Test\Unit\Model;
 
 class DefaultTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * Expiration frame
+     */
+    const EXPIRE_FRAME = 86400;
+
     /**
      * Captcha default config data
      * @var array
@@ -67,7 +72,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
-    protected $_session;
+    protected $session;
 
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
@@ -136,7 +141,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getBlockName
+     * @covers \Magento\Captcha\Model\DefaultModel::getBlockName
      */
     public function testGetBlockName()
     {
@@ -144,7 +149,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::isRequired
+     * @covers \Magento\Captcha\Model\DefaultModel::isRequired
      */
     public function testIsRequired()
     {
@@ -152,7 +157,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::isCaseSensitive
+     * @covers \Magento\Captcha\Model\DefaultModel::isCaseSensitive
      */
     public function testIsCaseSensitive()
     {
@@ -163,7 +168,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getFont
+     * @covers \Magento\Captcha\Model\DefaultModel::getFont
      */
     public function testGetFont()
     {
@@ -171,8 +176,8 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getTimeout
-     * covers \Magento\Captcha\Model\DefaultModel::getExpiration
+     * @covers \Magento\Captcha\Model\DefaultModel::getTimeout
+     * @covers \Magento\Captcha\Model\DefaultModel::getExpiration
      */
     public function testGetTimeout()
     {
@@ -180,20 +185,20 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::isCorrect
+     * @covers \Magento\Captcha\Model\DefaultModel::isCorrect
      */
     public function testIsCorrect()
     {
         self::$_defaultConfig['case_sensitive'] = '1';
         $this->assertFalse($this->_object->isCorrect('abcdef5'));
-        $sessionData = ['user_create_word' => ['data' => 'AbCdEf5', 'expires' => time() + 600]];
+        $sessionData = ['user_create_word' => ['data' => 'AbCdEf5', 'expires' => time() + self::EXPIRE_FRAME]];
         $this->_object->getSession()->setData($sessionData);
         self::$_defaultConfig['case_sensitive'] = '0';
         $this->assertTrue($this->_object->isCorrect('abcdef5'));
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getImgSrc
+     * @covers \Magento\Captcha\Model\DefaultModel::getImgSrc
      */
     public function testGetImgSrc()
     {
@@ -204,7 +209,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::logAttempt
+     * @covers \Magento\Captcha\Model\DefaultModel::logAttempt
      */
     public function testLogAttempt()
     {
@@ -221,7 +226,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Captcha\Model\DefaultModel::getWord
+     * @covers \Magento\Captcha\Model\DefaultModel::getWord
      */
     public function testGetWord()
     {
@@ -251,7 +256,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
         );
         $session->expects($this->any())->method('isLoggedIn')->will($this->returnValue(false));
 
-        $session->setData(['user_create_word' => ['data' => 'AbCdEf5', 'expires' => time() + 600]]);
+        $session->setData(['user_create_word' => ['data' => 'AbCdEf5', 'expires' => time() + self::EXPIRE_FRAME]]);
         return $session;
     }
 
diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json
index 8203866281b29e5ab54fd3ba2cc27d432c204766..ee220a5e9b3af383185d71694704c4cb25b72f53 100644
--- a/app/code/Magento/Captcha/composer.json
+++ b/app/code/Magento/Captcha/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
index 0e982417ed1bb3e40addfe6a6c73f8f42fbb1d68..1bb8e7e0005478395e7945e3b8673c85656c67e2 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
@@ -123,7 +123,6 @@ class Advanced extends Generic
                 'name' => 'default_value_date',
                 'label' => __('Default Value'),
                 'title' => __('Default Value'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'value' => $attributeObject->getDefaultValue(),
                 'date_format' => $dateFormat
             ]
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php
index 5c859b2f70ad6d749fe7fa3c21ae4f79e10684ca..2a35247de808bf4c4a618956d02c27bfb4b5f7ef 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php
@@ -56,7 +56,7 @@ class NewCategory extends \Magento\Backend\Block\Widget\Form\Generic
     protected function _prepareForm()
     {
         /** @var \Magento\Framework\Data\Form $form */
-        $form = $this->_formFactory->create(['data' => ['id' => 'new_category_form']]);
+        $form = $this->_formFactory->create(['data' => ['id' => 'new_category_form', 'class' => 'admin__scope-old']]);
         $form->setUseContainer($this->getUseContainer());
 
         $form->addField('new_category_messages', 'note', []);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category.php
index 048739d49b1dd0bc5f951492798bd95c7ff6061e..718bf23d4965f0315c00c29a00f9baf11731bae0 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category.php
@@ -10,23 +10,6 @@ namespace Magento\Catalog\Controller\Adminhtml;
  */
 class Category extends \Magento\Backend\App\Action
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Initialize requested category and put it into registry.
      * Root category can be returned, if inappropriate store/category is specified
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php
index 06bb17ec517b6aa3e872053720986f0acd6d4a5b..5cd9fffd001c469ca9276a706a71105206b70d1d 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php
@@ -15,15 +15,13 @@ class Add extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultForwardFactory = $resultForwardFactory;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php
index 5fec84fb27a853f3eccfccab7abd20425672dd7f..6f9cf5cc6e551509bb3eb6c33dbb55f90032761d 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php
@@ -20,17 +20,15 @@ class CategoriesJson extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\LayoutFactory $layoutFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultJsonFactory = $resultJsonFactory;
         $this->layoutFactory = $layoutFactory;
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
index e0a7db83c41fc61373fce8a2197f1d7549c4418c..cc0e60a82a3918825367c4a4b166c0bb0477c216 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
@@ -13,15 +13,13 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->categoryRepository = $categoryRepository;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php
index 0d0b763cfec6bc93832e2ebd25fff308328a3030..8834b03f6a8952c745c6459838f172e8dafbf53f 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php
@@ -20,17 +20,15 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultPageFactory = $resultPageFactory;
         $this->resultJsonFactory = $resultJsonFactory;
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php
index aa775168229db30f2971a603d59576850b34952a..fdecd7c3922901e0a4288d146219eeaadbd76e12 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php
@@ -20,17 +20,15 @@ class Grid extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
         \Magento\Framework\View\LayoutFactory $layoutFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultRawFactory = $resultRawFactory;
         $this->layoutFactory = $layoutFactory;
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php
index 3c395c8ff251409d285f615dd39846313a587f0e..1b0bbf347f509d852ee2ee713513a58de1e185a3 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php
@@ -15,15 +15,13 @@ class Index extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultForwardFactory = $resultForwardFactory;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php
index c35247eaacf7946444fb1fa0d89f1a47ff8a8a86..fb0d48aacc43c37800cf9f4745a777909eb6e44d 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php
@@ -25,19 +25,17 @@ class Move extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory,
      * @param \Psr\Log\LoggerInterface $logger,
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\LayoutFactory $layoutFactory,
         \Psr\Log\LoggerInterface $logger
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultJsonFactory = $resultJsonFactory;
         $this->layoutFactory = $layoutFactory;
         $this->logger = $logger;
@@ -72,7 +70,7 @@ class Move extends \Magento\Catalog\Controller\Adminhtml\Category
         } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $error = true;
             $this->messageManager->addError(__('There was a category move error.'));
-        } catch (\Magento\UrlRewrite\Model\Storage\DuplicateEntryException $e) {
+        } catch (\Magento\Framework\Exception\AlreadyExistsException $e) {
             $error = true;
             $this->messageManager->addError(__('There was a category move error. %1', $e->getMessage()));
         } catch (\Exception $e) {
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php
index 8b19840c3c083f0b8ec8554d7f48eb2133849583..150b0194664890a4de8f33bd33c82eaa9eddeb2e 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php
@@ -15,15 +15,13 @@ class RefreshPath extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultJsonFactory = $resultJsonFactory;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php
index 01f622f6996f39a791fa04ebc25eb16c4bce79a9..9949ffe5699e9f3d93a317a16b564d48cb191e74 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php
@@ -29,19 +29,17 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Category
      * Constructor
      *
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\LayoutFactory $layoutFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultRawFactory = $resultRawFactory;
         $this->resultJsonFactory = $resultJsonFactory;
         $this->layoutFactory = $layoutFactory;
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php
index 14d7bf780c053563758b86b5e8cd39a8fa3b519c..94c8010cc39809e7383ca98384e3c019a93304b0 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php
@@ -20,17 +20,15 @@ class SuggestCategories extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\LayoutFactory $layoutFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultJsonFactory = $resultJsonFactory;
         $this->layoutFactory = $layoutFactory;
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php
index 6604d3fc116a0b06793eece09e869076c6a663b6..9acd075bc827602e5839bfbf30ba2f1a1e00ab3c 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php
@@ -20,17 +20,15 @@ class Tree extends \Magento\Catalog\Controller\Adminhtml\Category
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\LayoutFactory $layoutFactory
     ) {
-        parent::__construct($context, $resultRedirectFactory);
+        parent::__construct($context);
         $this->resultJsonFactory = $resultJsonFactory;
         $this->layoutFactory = $layoutFactory;
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
index 4e114334b66f781f4a6c6c54fa7bc4fe271d7043..0b6377c4b470212590216a46f004a325a6e20653 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
@@ -13,26 +13,18 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Catalog\Helper\Product\Edit\Action\Attribute $attributeHelper
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Catalog\Helper\Product\Edit\Action\Attribute $attributeHelper,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context, $attributeHelper);
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php
index ef791cd838cdac322244ddead979da27b69c4f27..3661567d5fa0001cc9a0a051145f1c0b69e3f100 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php
@@ -43,11 +43,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
      */
     protected $_stockIndexerProcessor;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\Api\DataObjectHelper
      */
@@ -61,7 +56,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
      * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor
      * @param \Magento\Catalog\Helper\Product $catalogProduct
      * @param \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      */
     public function __construct(
@@ -72,7 +66,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
         \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor,
         \Magento\Catalog\Helper\Product $catalogProduct,
         \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
     ) {
         $this->_productFlatIndexerProcessor = $productFlatIndexerProcessor;
@@ -81,7 +74,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
         $this->_catalogProduct = $catalogProduct;
         $this->stockItemFactory = $stockItemFactory;
         parent::__construct($context, $attributeHelper);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->dataObjectHelper = $dataObjectHelper;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
index bcc311e379449f12037798963ab9a0a3febfff50..3fbda63630e30573e0c3e38dde53d8cf3b1d0a01 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
@@ -8,31 +8,6 @@ namespace Magento\Catalog\Controller\Adminhtml\Product\Attribute;
 
 class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * Constructor
-     *
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\Cache\FrontendInterface $attributeLabelCache
-     * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\Cache\FrontendInterface $attributeLabelCache,
-        \Magento\Framework\Registry $coreRegistry,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $attributeLabelCache, $coreRegistry, $resultPageFactory);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
index 7eee03d9f842eef0d0b3c1c3475644509c13c008..f149ff2506a6cdb51ecadac9f049774d645ad4da 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
@@ -6,37 +6,8 @@
  */
 namespace Magento\Catalog\Controller\Adminhtml\Product\Attribute;
 
-use Magento\Backend\App\Action;
-use Magento\Backend\Model\View\Result\RedirectFactory;
-use Magento\Framework\View\Result\PageFactory;
-
 class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * Constructor
-     *
-     * @param Action\Context $context
-     * @param \Magento\Framework\Cache\FrontendInterface $attributeLabelCache
-     * @param \Magento\Framework\Registry $coreRegistry
-     * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\Cache\FrontendInterface $attributeLabelCache,
-        \Magento\Framework\Registry $coreRegistry,
-        PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $attributeLabelCache, $coreRegistry, $resultPageFactory);
-    }
-
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      * @SuppressWarnings(PHPMD.NPathComplexity)
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
index c78d3aea2e0e6d512ad411c45a6dacc970088536..4faadeba7d39f5b3e5c5d5899ad8142f221d5681 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
@@ -46,11 +46,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
      */
     protected $groupCollectionFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Cache\FrontendInterface $attributeLabelCache
@@ -62,7 +57,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Catalog\Helper\Product $productHelper
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -75,8 +69,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
         \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory $validatorFactory,
         \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory,
         \Magento\Framework\Filter\FilterManager $filterManager,
-        \Magento\Catalog\Helper\Product $productHelper,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Catalog\Helper\Product $productHelper
     ) {
         parent::__construct($context, $attributeLabelCache, $coreRegistry, $resultPageFactory);
         $this->buildFactory = $buildFactory;
@@ -85,7 +78,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
         $this->attributeFactory = $attributeFactory;
         $this->validatorFactory = $validatorFactory;
         $this->groupCollectionFactory = $groupCollectionFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php
index 4e5ba91e5939287413890eaed444829fd0590f8e..d335b898f71ce1b455608d81f85f186f9d7af435 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php
@@ -16,26 +16,18 @@ class Duplicate extends \Magento\Catalog\Controller\Adminhtml\Product
      */
     protected $productCopier;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param Builder $productBuilder
      * @param \Magento\Catalog\Model\Product\Copier $productCopier
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         Product\Builder $productBuilder,
-        \Magento\Catalog\Model\Product\Copier $productCopier,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Catalog\Model\Product\Copier $productCopier
     ) {
         $this->productCopier = $productCopier;
         parent::__construct($context, $productBuilder);
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php
index 34d74da1fa0c07362963ab4a59a3505bee21af92..30e1299ca1749c93a6274425d0e2a3a1f3343637 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php
@@ -20,26 +20,18 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Catalog\Controller\Adminhtml\Product\Builder $productBuilder
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Catalog\Controller\Adminhtml\Product\Builder $productBuilder,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context, $productBuilder);
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
index bab900046dc23df9d6d3db911d8e058e3d42f3f2..19a6a11743b626fa0e6d079a8a0762de201bc37f 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
@@ -8,25 +8,6 @@ namespace Magento\Catalog\Controller\Adminhtml\Product;
 
 class MassDelete extends \Magento\Catalog\Controller\Adminhtml\Product
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Catalog\Controller\Adminhtml\Product\Builder $productBuilder
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Catalog\Controller\Adminhtml\Product\Builder $productBuilder,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $productBuilder);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
index 26665c88a5f2fef3e5f49a91dee577a14a0e6415..749b55d0ee127eff2573c555d035eda82d7cf8ad 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
@@ -16,26 +16,18 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
      */
     protected $_productPriceIndexerProcessor;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param Builder $productBuilder
      * @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         Product\Builder $productBuilder,
-        \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor
     ) {
         $this->_productPriceIndexerProcessor = $productPriceIndexerProcessor;
         parent::__construct($context, $productBuilder);
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
@@ -61,6 +53,7 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
      * Update product(s) status action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -68,20 +61,26 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
         $storeId = (int) $this->getRequest()->getParam('store', 0);
         $status = (int) $this->getRequest()->getParam('status');
 
-        try {
-            $this->_validateMassStatus($productIds, $status);
-            $this->_objectManager->get('Magento\Catalog\Model\Product\Action')
-                ->updateAttributes($productIds, ['status' => $status], $storeId);
-            $this->messageManager->addSuccess(__('A total of %1 record(s) have been updated.', count($productIds)));
-            $this->_productPriceIndexerProcessor->reindexList($productIds);
-        } catch (\Magento\Framework\Exception $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->_getSession()->addException($e, __('Something went wrong while updating the product(s) status.'));
-        }
+        $this->_validateMassStatus($productIds, $status);
+        $this->_objectManager->get('Magento\Catalog\Model\Product\Action')
+            ->updateAttributes($productIds, ['status' => $status], $storeId);
+        $this->messageManager->addSuccess(__('A total of %1 record(s) have been updated.', count($productIds)));
+        $this->_productPriceIndexerProcessor->reindexList($productIds);
+
+        return $this->getDefaultResult();
+    }
 
-        return $this->resultRedirectFactory->create()->setPath('catalog/*/', ['store' => $storeId]);
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath(
+            'catalog/*/',
+            ['store' => $this->getRequest()->getParam('store', 0)]
+        );
     }
 }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php
index 9a28b53da56483ae0f48a70bad0a39961b085800..1ef2d92da33a5b2fc44c7b49927f77be245a3737 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php
@@ -26,32 +26,24 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product
      */
     protected $productTypeManager;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param Builder $productBuilder
      * @param Initialization\Helper $initializationHelper
      * @param \Magento\Catalog\Model\Product\Copier $productCopier
      * @param \Magento\Catalog\Model\Product\TypeTransitionManager $productTypeManager
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         Product\Builder $productBuilder,
         Initialization\Helper $initializationHelper,
         \Magento\Catalog\Model\Product\Copier $productCopier,
-        \Magento\Catalog\Model\Product\TypeTransitionManager $productTypeManager,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Catalog\Model\Product\TypeTransitionManager $productTypeManager
     ) {
         $this->initializationHelper = $initializationHelper;
         $this->productCopier = $productCopier;
         $this->productTypeManager = $productTypeManager;
         parent::__construct($context, $productBuilder);
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
index 506552221c95b7f88973ebcc5076235f56bc7e1d..110cb1a5f752db557f1ee4e6d1c843714b6dc741 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
@@ -8,11 +8,6 @@ namespace Magento\Catalog\Controller\Adminhtml\Product\Set;
 
 class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Set
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Eav\Api\AttributeSetRepositoryInterface
      */
@@ -21,17 +16,14 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Set
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Eav\Api\AttributeSetRepositoryInterface $attributeSetRepository
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Registry $coreRegistry,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Eav\Api\AttributeSetRepositoryInterface $attributeSetRepository
     ) {
         parent::__construct($context, $coreRegistry);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->attributeSetRepository = $attributeSetRepository;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
index 1d124a7cd04c04cd0f9c1e85b69c0f7fb2773b9c..d40982a5d5641e8d2c3a3099015686f5435e52b8 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
@@ -13,26 +13,18 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Set
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Registry $coreRegistry,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context, $coreRegistry);
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
index fc228f2cf35d1670366467e4875aa21f4155a3ec..09e77fbdec769cacb87a69678ed41a40eeda0a5a 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
@@ -13,11 +13,6 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Set
      */
     protected $layoutFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\Controller\Result\JsonFactory
      */
@@ -27,19 +22,16 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Set
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\View\LayoutFactory $layoutFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
     ) {
         parent::__construct($context, $coreRegistry);
         $this->layoutFactory = $layoutFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultJsonFactory = $resultJsonFactory;
     }
 
diff --git a/app/code/Magento/Catalog/Controller/Category/View.php b/app/code/Magento/Catalog/Controller/Category/View.php
index 50c79ade7e64e44418d63e241a6497cbba49cd89..2941bf03189cd9b0e5c82ceed3f7355f220acf76 100644
--- a/app/code/Magento/Catalog/Controller/Category/View.php
+++ b/app/code/Magento/Catalog/Controller/Category/View.php
@@ -57,11 +57,6 @@ class View extends \Magento\Framework\App\Action\Action
      */
     protected $resultForwardFactory;
 
-    /**
-     * @var \Magento\Framework\Controller\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * Catalog Layer Resolver
      *
@@ -85,7 +80,6 @@ class View extends \Magento\Framework\App\Action\Action
      * @param \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @param \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param Resolver $layerResolver
      * @param CategoryRepositoryInterface $categoryRepository
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -99,7 +93,6 @@ class View extends \Magento\Framework\App\Action\Action
         \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator,
         PageFactory $resultPageFactory,
         \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         Resolver $layerResolver,
         CategoryRepositoryInterface $categoryRepository
     ) {
@@ -111,7 +104,6 @@ class View extends \Magento\Framework\App\Action\Action
         $this->categoryUrlPathGenerator = $categoryUrlPathGenerator;
         $this->resultPageFactory = $resultPageFactory;
         $this->resultForwardFactory = $resultForwardFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->layerResolver = $layerResolver;
         $this->categoryRepository = $categoryRepository;
     }
diff --git a/app/code/Magento/Catalog/Controller/Index/Index.php b/app/code/Magento/Catalog/Controller/Index/Index.php
index f90d14005efc69954d055e69750973b7d8a84fe7..5ea3a57caf483b4ad09f26d56ec28602a7c292fd 100644
--- a/app/code/Magento/Catalog/Controller/Index/Index.php
+++ b/app/code/Magento/Catalog/Controller/Index/Index.php
@@ -1,35 +1,12 @@
 <?php
 /**
- *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 namespace Magento\Catalog\Controller\Index;
 
-use Magento\Framework\App\Action\Context;
-use Magento\Framework\Controller\Result;
-
 class Index extends \Magento\Framework\App\Action\Action
 {
-    /**
-     * @var Result\Redirect
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * Constructor
-     *
-     * @param Context $context
-     * @param Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context);
-    }
-
     /**
      * Index action
      *
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare.php b/app/code/Magento/Catalog/Controller/Product/Compare.php
index 441646f6e71e181c1559ed9c751d39356f556123..89952430169bfb8f11be751843e8e318dfff7e02 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare.php
@@ -7,7 +7,6 @@ namespace Magento\Catalog\Controller\Product;
 
 use Magento\Catalog\Api\ProductRepositoryInterface;
 use Magento\Framework\Data\Form\FormKey\Validator;
-use Magento\Framework\Controller\Result;
 use Magento\Framework\View\Result\PageFactory;
 
 /**
@@ -77,11 +76,6 @@ class Compare extends \Magento\Framework\App\Action\Action
      */
     protected $_formKeyValidator;
 
-    /**
-     * @var Result\Redirect
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\View\Result\PageFactory
      */
@@ -104,7 +98,6 @@ class Compare extends \Magento\Framework\App\Action\Action
      * @param \Magento\Catalog\Model\Session $catalogSession
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Validator $formKeyValidator
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @param ProductRepositoryInterface $productRepository
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -119,7 +112,6 @@ class Compare extends \Magento\Framework\App\Action\Action
         \Magento\Catalog\Model\Session $catalogSession,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         Validator $formKeyValidator,
-        Result\RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         ProductRepositoryInterface $productRepository
     ) {
@@ -131,7 +123,6 @@ class Compare extends \Magento\Framework\App\Action\Action
         $this->_catalogProductCompareList = $catalogProductCompareList;
         $this->_catalogSession = $catalogSession;
         $this->_formKeyValidator = $formKeyValidator;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
         $this->productRepository = $productRepository;
         parent::__construct($context);
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php b/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
index 0a27a74c35267ec620232da8c1514640ed8f2da8..8c25b8c0e5d59ada33d8144155e6425358b0e64c 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
@@ -26,17 +26,10 @@ class Clear extends \Magento\Catalog\Controller\Product\Compare
             $items->setVisitorId($this->_customerVisitor->getId());
         }
 
-        try {
-            $items->clear();
-            $this->messageManager->addSuccess(__('You cleared the comparison list.'));
-            $this->_objectManager->get('Magento\Catalog\Helper\Product\Compare')->calculate();
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Something went wrong  clearing the comparison list.'));
-        }
+        $items->clear();
+        $this->messageManager->addSuccess(__('You cleared the comparison list.'));
+        $this->_objectManager->get('Magento\Catalog\Helper\Product\Compare')->calculate();
 
-        $resultRedirect = $this->resultRedirectFactory->create();
-        return $resultRedirect->setRefererOrBaseUrl();
+        return $this->getDefaultResult();
     }
 }
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Index.php b/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
index 93b985ec094a5bc6906255d46e6e4c8ebfaaba9d..954437bf09576e67e3029cac1ef059f25814b083 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
@@ -8,7 +8,6 @@ namespace Magento\Catalog\Controller\Product\Compare;
 
 use Magento\Catalog\Api\ProductRepositoryInterface;
 use Magento\Framework\Data\Form\FormKey\Validator;
-use Magento\Framework\Controller\Result;
 use Magento\Framework\View\Result\PageFactory;
 
 /**
@@ -31,7 +30,6 @@ class Index extends \Magento\Catalog\Controller\Product\Compare
      * @param \Magento\Catalog\Model\Session $catalogSession
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Validator $formKeyValidator
-     * @param Result\RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param ProductRepositoryInterface $productRepository
      * @param \Magento\Framework\Url\DecoderInterface $urlDecoder
@@ -48,7 +46,6 @@ class Index extends \Magento\Catalog\Controller\Product\Compare
         \Magento\Catalog\Model\Session $catalogSession,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         Validator $formKeyValidator,
-        Result\RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         ProductRepositoryInterface $productRepository,
         \Magento\Framework\Url\DecoderInterface $urlDecoder
@@ -63,7 +60,6 @@ class Index extends \Magento\Catalog\Controller\Product\Compare
             $catalogSession,
             $storeManager,
             $formKeyValidator,
-            $resultRedirectFactory,
             $resultPageFactory,
             $productRepository
         );
diff --git a/app/code/Magento/Catalog/Controller/Product/Gallery.php b/app/code/Magento/Catalog/Controller/Product/Gallery.php
index f5dcaa74f8a73a6ca0bdf5c8485b91d515873e44..b4e9c7480ba1de468cf4eb08f11d8478d91eb1a1 100644
--- a/app/code/Magento/Catalog/Controller/Product/Gallery.php
+++ b/app/code/Magento/Catalog/Controller/Product/Gallery.php
@@ -12,11 +12,6 @@ use Magento\Framework\View\Result\PageFactory;
 
 class Gallery extends \Magento\Catalog\Controller\Product
 {
-    /**
-     * @var Result\Redirect
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var Result\ForwardFactory
      */
@@ -31,17 +26,14 @@ class Gallery extends \Magento\Catalog\Controller\Product
      * Constructor
      *
      * @param Context $context
-     * @param Result\RedirectFactory $resultRedirectFactory
      * @param Result\ForwardFactory $resultForwardFactory
      * @param PageFactory $resultPageFactory
      */
     public function __construct(
         Context $context,
-        Result\RedirectFactory $resultRedirectFactory,
         Result\ForwardFactory $resultForwardFactory,
         PageFactory $resultPageFactory
     ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultPageFactory = $resultPageFactory;
         parent::__construct($context);
diff --git a/app/code/Magento/Catalog/Controller/Product/View.php b/app/code/Magento/Catalog/Controller/Product/View.php
index c9a9957da33c1cef4dc39d5788af1620da07f44d..9cdee4fc826f82591b0d48a87f118523312c6466 100644
--- a/app/code/Magento/Catalog/Controller/Product/View.php
+++ b/app/code/Magento/Catalog/Controller/Product/View.php
@@ -7,7 +7,6 @@
 namespace Magento\Catalog\Controller\Product;
 
 use Magento\Framework\App\Action\Context;
-use Magento\Framework\Controller\Result;
 use Magento\Framework\View\Result\PageFactory;
 
 class View extends \Magento\Catalog\Controller\Product
@@ -17,11 +16,6 @@ class View extends \Magento\Catalog\Controller\Product
      */
     protected $viewHelper;
 
-    /**
-     * @var \Magento\Framework\Controller\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\Controller\Result\ForwardFactory
      */
@@ -37,19 +31,16 @@ class View extends \Magento\Catalog\Controller\Product
      *
      * @param Context $context
      * @param \Magento\Catalog\Helper\Product\View $viewHelper
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory
      * @param PageFactory $resultPageFactory
      */
     public function __construct(
         Context $context,
         \Magento\Catalog\Helper\Product\View $viewHelper,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory,
         PageFactory $resultPageFactory
     ) {
         $this->viewHelper = $viewHelper;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultPageFactory = $resultPageFactory;
         parent::__construct($context);
diff --git a/app/code/Magento/Catalog/Exception.php b/app/code/Magento/Catalog/Exception.php
deleted file mode 100644
index e6beec63ca73960892bca6a8a39aea63acb3cc93..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Catalog;
-
-class Exception extends \Zend_Exception
-{
-}
diff --git a/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php b/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php
index cc6329800747bf920e016b132540dded47129af0..575afc4b97c2d1b5500fe26e173a2b9df4b7c7d8 100644
--- a/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php
+++ b/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php
@@ -53,8 +53,8 @@ class Customlayoutupdate extends \Magento\Eav\Model\Entity\Attribute\Backend\Abs
         if (!$validator->isValid($xml)) {
             $messages = $validator->getMessages();
             //Add first message to exception
-            $massage = array_shift($messages);
-            $eavExc = new Exception($massage);
+            $message = array_shift($messages);
+            $eavExc = new Exception(__($message));
             $eavExc->setAttributeCode($attributeName);
             throw $eavExc;
         }
diff --git a/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php b/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php
index a62537b88cc8707f2de132e3063d4a0bc3140b74..3cff2cc0941a3b7b0ee6febfa0c6fc4ebb3ca88b 100644
--- a/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php
+++ b/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Category\Attribute\Source;
 
-use Magento\Cms\Model\Resource\Block\Grid\CollectionFactory;
+use Magento\Cms\Model\Resource\Block\CollectionFactory;
 
 /**
  * Catalog category landing page attribute source
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Full.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Full.php
old mode 100644
new mode 100755
index 8c74ca3126cb3ba93bd2d0056eb595f6c590bd84..09733d3b8a0cbace2a1eb0b0f22ddb68af67eb7c
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Full.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Full.php
@@ -15,14 +15,15 @@ class Full extends \Magento\Catalog\Model\Indexer\Product\Eav\AbstractAction
      *
      * @param array|int|null $ids
      * @return void
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function execute($ids = null)
     {
         try {
             $this->reindex();
         } catch (\Exception $e) {
-            throw new \Magento\Catalog\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Row.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Row.php
old mode 100644
new mode 100755
index 2aad332960bc66caa53b7cf3d5cff722a409a250..cd367f0682f6e3b8f5ce09e95fd17b9b434e133d
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Row.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Row.php
@@ -15,17 +15,18 @@ class Row extends \Magento\Catalog\Model\Indexer\Product\Eav\AbstractAction
      *
      * @param int|null $id
      * @return void
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\InputException
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function execute($id = null)
     {
         if (!isset($id) || empty($id)) {
-            throw new \Magento\Catalog\Exception(__('Could not rebuild index for undefined product'));
+            throw new \Magento\Framework\Exception\InputException(__('Could not rebuild index for undefined product'));
         }
         try {
             $this->reindex($id);
         } catch (\Exception $e) {
-            throw new \Magento\Catalog\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Rows.php
old mode 100644
new mode 100755
index e05aa311a0f13041855fd900adb08bc32d1ed261..9414f898aeda4f603b852dfc08f5c3cc05296f17
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Rows.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Rows.php
@@ -15,17 +15,18 @@ class Rows extends \Magento\Catalog\Model\Indexer\Product\Eav\AbstractAction
      *
      * @param array $ids
      * @return void
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\InputException
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function execute($ids)
     {
         if (empty($ids)) {
-            throw new \Magento\Catalog\Exception(__('Bad value was supplied.'));
+            throw new \Magento\Framework\Exception\InputException(__('Bad value was supplied.'));
         }
         try {
             $this->reindex($ids);
         } catch (\Exception $e) {
-            throw new \Magento\Catalog\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Full.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Full.php
index 9860c748d27cdb5fd662e9c76bf7ef120186fc41..7a7f81a1091780070909de54e6cf61d89bb7530d 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Full.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Full.php
@@ -17,7 +17,7 @@ class Full extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction
      * @param null|array $ids
      *
      * @return \Magento\Catalog\Model\Indexer\Product\Flat\Action\Full
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @throws \Exception
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php
old mode 100644
new mode 100755
index 2f408c71ea765bc0e8567c8ca067173a0d8f009e..6e43b0666791cf26a65df23d3dbd6809bbc48b2f
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php
@@ -365,13 +365,13 @@ abstract class AbstractAction
      *
      * @param string $productTypeId
      * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\PriceInterface
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\InputException
      */
     protected function _getIndexer($productTypeId)
     {
         $this->getTypeIndexers();
         if (!isset($this->_indexers[$productTypeId])) {
-            throw new \Magento\Catalog\Exception(__('Unsupported product type "%1".', $productTypeId));
+            throw new \Magento\Framework\Exception\InputException(__('Unsupported product type "%1".', $productTypeId));
         }
         return $this->_indexers[$productTypeId];
     }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Full.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Full.php
old mode 100644
new mode 100755
index 835c7f3e15463295f41a37c2a02947d3bb19a06c..61700737da9d279d805533bc4421db2bbfb18182
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Full.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Full.php
@@ -16,7 +16,7 @@ class Full extends \Magento\Catalog\Model\Indexer\Product\Price\AbstractAction
      *
      * @param array|int|null $ids
      * @return void
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function execute($ids = null)
     {
@@ -32,7 +32,7 @@ class Full extends \Magento\Catalog\Model\Indexer\Product\Price\AbstractAction
             }
             $this->_syncData();
         } catch (\Exception $e) {
-            throw new \Magento\Catalog\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Row.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Row.php
old mode 100644
new mode 100755
index a5a629823c5894bf8dd14fe649b7d9015c66787b..8ba3086616817d0170aac3638e87eb4de5dd3005
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Row.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Row.php
@@ -16,17 +16,18 @@ class Row extends \Magento\Catalog\Model\Indexer\Product\Price\AbstractAction
      *
      * @param int|null $id
      * @return void
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\InputException
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function execute($id = null)
     {
         if (!isset($id) || empty($id)) {
-            throw new \Magento\Catalog\Exception(__('Could not rebuild index for undefined product'));
+            throw new \Magento\Framework\Exception\InputException(__('Could not rebuild index for undefined product'));
         }
         try {
             $this->_reindexRows([$id]);
         } catch (\Exception $e) {
-            throw new \Magento\Catalog\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Rows.php
old mode 100644
new mode 100755
index 962435d557d834a4fa33fedb598a8a0a4f550508..9a7daacc654d227e8f54bd75196a318e2cdd52a6
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Rows.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Action/Rows.php
@@ -16,17 +16,18 @@ class Rows extends \Magento\Catalog\Model\Indexer\Product\Price\AbstractAction
      *
      * @param array $ids
      * @return void
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\InputException
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function execute($ids)
     {
         if (empty($ids)) {
-            throw new \Magento\Catalog\Exception(__('Bad value was supplied.'));
+            throw new \Magento\Framework\Exception\InputException(__('Bad value was supplied.'));
         }
         try {
             $this->_reindexRows($ids);
         } catch (\Exception $e) {
-            throw new \Magento\Catalog\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Observer.php b/app/code/Magento/Catalog/Model/Observer.php
index dac92e427e266bdd07f63eb1e3ce3c5edf18c7dc..39e72883f68add9d3672497199eb7c744480a7db 100644
--- a/app/code/Magento/Catalog/Model/Observer.php
+++ b/app/code/Magento/Catalog/Model/Observer.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Catalog\Model;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class Observer
 {
     /**
@@ -62,16 +65,23 @@ class Observer
     protected $_productResourceFactory;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Category $categoryResource
-     * @param \Magento\Catalog\Model\Resource\Product $catalogProduct
+     * @var \Magento\Framework\Registry
+     */
+    protected $_registry;
+
+    /**
+     * @param \Magento\Framework\Registry $registry
+     * @param Resource\Category $categoryResource
+     * @param Resource\Product $catalogProduct
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
+     * @param Layer\Resolver $layerResolver
      * @param \Magento\Catalog\Helper\Category $catalogCategory
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param Indexer\Category\Flat\State $categoryFlatState
-     * @param \Magento\Catalog\Model\Resource\ProductFactory $productResourceFactory
+     * @param Resource\ProductFactory $productResourceFactory
      */
     public function __construct(
+        \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\Resource\Category $categoryResource,
         \Magento\Catalog\Model\Resource\Product $catalogProduct,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
@@ -81,6 +91,7 @@ class Observer
         \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState,
         \Magento\Catalog\Model\Resource\ProductFactory $productResourceFactory
     ) {
+        $this->_registry = $registry;
         $this->_categoryResource = $categoryResource;
         $this->_catalogProduct = $catalogProduct;
         $this->_storeManager = $storeManager;
@@ -137,11 +148,20 @@ class Observer
             $block->addIdentity(\Magento\Catalog\Model\Category::CACHE_TAG . '_' . $category->getId());
 
             $tree = $parentCategoryNode->getTree();
+
+            $isActiveCategory = false;
+            /** @var \Magento\Catalog\Model\Category $currentCategory */
+            $currentCategory = $this->_registry->registry('current_category');
+            if ($currentCategory && $currentCategory->getId() == $category->getId()) {
+                $isActiveCategory = true;
+            }
+
             $categoryData = [
                 'name' => $category->getName(),
                 'id' => $nodeId,
                 'url' => $this->_catalogCategory->getCategoryUrl($category),
-                'is_active' => $this->_isActiveMenuCategory($category),
+                'has_active' => $this->hasActive($category),
+                'is_active' => $isActiveCategory
             ];
             $categoryNode = new \Magento\Framework\Data\Tree\Node($categoryData, 'id', $tree, $parentCategoryNode);
             $parentCategoryNode->addChild($categoryNode);
@@ -162,7 +182,7 @@ class Observer
      * @param \Magento\Framework\Data\Tree\Node $category
      * @return bool
      */
-    protected function _isActiveMenuCategory($category)
+    protected function hasActive($category)
     {
         if (!$this->_catalogLayer) {
             return false;
diff --git a/app/code/Magento/Catalog/Model/Product/Copier.php b/app/code/Magento/Catalog/Model/Product/Copier.php
index a066164bd7aebfbef1cb91a7fc5f2f884a75d971..9e54f0e78ddab88f5c2a040d8720730cf014fb83 100644
--- a/app/code/Magento/Catalog/Model/Product/Copier.php
+++ b/app/code/Magento/Catalog/Model/Product/Copier.php
@@ -7,8 +7,6 @@
  */
 namespace Magento\Catalog\Model\Product;
 
-use Magento\UrlRewrite\Model\Storage\DuplicateEntryException;
-
 class Copier
 {
     /**
@@ -65,7 +63,7 @@ class Copier
             try {
                 $duplicate->save();
                 $isDuplicateSaved = true;
-            } catch (DuplicateEntryException $e) {
+            } catch (\Magento\Framework\Exception\AlreadyExistsException $e) {
             }
         } while (!$isDuplicateSaved);
 
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php
index b68f8f1bec8e78078d3e9601d11139dd15fcb1d9..f1f80f7701c0cf8e260892361e90110616656a31 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php
@@ -79,7 +79,7 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType
      * @param File\ValidatorInfo $validatorInfo
      * @param File\ValidatorFile $validatorFile
      * @param array $data
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function __construct(
         \Magento\Checkout\Model\Session $checkoutSession,
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php b/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php
index a8f61ba1e36335355c227c77d6fd107f0d57984b..beb1b3d2f8da1b5421b751aab1ee24d36de49c63 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php
@@ -61,7 +61,7 @@ class ValidatorFile extends Validator
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\File\Size $fileSize
      * @param \Magento\Framework\HTTP\Adapter\FileTransferFactory $httpFactory
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
diff --git a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php
index 2a59073ff7f5fb5cca087f9a331c2fd48c7fa013..94612dbf200a5f95fc003342e0c114d273366be1 100644
--- a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php
+++ b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php
@@ -488,7 +488,7 @@ abstract class AbstractType
                                 DirectoryList::ROOT
                             );
                             $rootDir->create($rootDir->getRelativePath($path));
-                        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+                        } catch (\Magento\Framework\Exception\FileSystemException $e) {
                             throw new \Magento\Framework\Exception\LocalizedException(
                                 __('We can\'t create writeable directory "%1".', $path)
                             );
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php b/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php
index 10c44850e0f7c4e3ceda09b1fabee2f8fe564651..6e6b4406d71d4ac4d6d1fcd8f71a97bd32b8f0b7 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php
+++ b/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php
@@ -15,16 +15,16 @@ class Page extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
     /**
      * Block collection factory
      *
-     * @var \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory
+     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory
      */
     protected $_blockCollectionFactory;
 
     /**
      * Construct
      *
-     * @param \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $blockCollectionFactory
+     * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory
      */
-    public function __construct(\Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $blockCollectionFactory)
+    public function __construct(\Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory)
     {
         $this->_blockCollectionFactory = $blockCollectionFactory;
     }
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php
old mode 100644
new mode 100755
index 6d97bd9583af83f82f7dc3a904b13a105d9a000b..7c488ecf2ec36d3bc050d1726df25a72d6d365fb
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php
+++ b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php
@@ -86,12 +86,14 @@ class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
      * Retrieve Product Type Code
      *
      * @return string
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getTypeId()
     {
         if ($this->_typeId === null) {
-            throw new \Magento\Catalog\Exception(__('A product type is not defined for the indexer.'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('A product type is not defined for the indexer.')
+            );
         }
         return $this->_typeId;
     }
@@ -318,28 +320,6 @@ class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
 
         $query = $select->insertFromSelect($this->_getDefaultFinalPriceTable(), [], false);
         $write->query($query);
-
-        /**
-         * Add possibility modify prices from external events
-         */
-        $select = $write->select()->join(
-            ['wd' => $this->_getWebsiteDateTable()],
-            'i.website_id = wd.website_id',
-            []
-        );
-        $this->_eventManager->dispatch(
-            'prepare_catalog_product_price_index_table',
-            [
-                'index_table' => ['i' => $this->_getDefaultFinalPriceTable()],
-                'select' => $select,
-                'entity_id' => 'i.entity_id',
-                'customer_group_id' => 'i.customer_group_id',
-                'website_id' => 'i.website_id',
-                'website_date' => 'wd.website_date',
-                'update_fields' => ['price', 'min_price', 'max_price']
-            ]
-        );
-
         return $this;
     }
 
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php
old mode 100644
new mode 100755
index d28536b4ebb77f11763951262c68f047f2ecf400..517b00635c2a532022e8f6a941bf721a0c719931
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php
+++ b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php
@@ -34,15 +34,15 @@ class Factory
      * @param string $className
      * @param array $data
      * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
-     * @throws \Magento\Catalog\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create($className, array $data = [])
     {
         $indexerPrice = $this->_objectManager->create($className, $data);
 
         if (!$indexerPrice instanceof \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice) {
-            throw new \Magento\Catalog\Exception(
-                $className . ' doesn\'t extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice'
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('%1 doesn\'t extend \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice', $className)
             );
         }
         return $indexerPrice;
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php
index f055d2ddad4fc32da1ea38876896fc51a78dc741..51ffc7e98d1be02fdcd1967fb027b3b79fe0010f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php
@@ -94,8 +94,8 @@ class AbstractCategoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory::getStore
-     * covers \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory::getSaveUrl
+     * @covers \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory::getStore
+     * @covers \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory::getSaveUrl
      */
     public function testGetSaveUrl()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/AbstractProductTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/AbstractProductTest.php
index 36c0b45138afb9fb2655757292778725d635ee85..3ccc88ca231410e3c7140b9f87f9c604bdd9dd38 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/AbstractProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/AbstractProductTest.php
@@ -74,8 +74,8 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method getProductPrice
      *
-     * covers \Magento\Catalog\Block\Product\AbstractProduct::getProductPriceHtml
-     * covers \Magento\Catalog\Block\Product\AbstractProduct::getProductPrice
+     * @covers \Magento\Catalog\Block\Product\AbstractProduct::getProductPriceHtml
+     * @covers \Magento\Catalog\Block\Product\AbstractProduct::getProductPrice
      */
     public function testGetProductPrice()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php
index f360e3a6c3ffd883b37310d6e20c7f7acf4d79ab..bec5548f8bbc374a6b7631d984f6517da430bcbc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php
@@ -98,6 +98,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
         $context->expects($this->any())
             ->method('getAuth')
             ->will($this->returnValue($auth));
+        $context->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
         $auth->expects($this->any())
             ->method('getAuthStorage')
             ->will($this->returnValue($this->authStorage));
@@ -109,7 +110,6 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             'Magento\Catalog\Controller\Adminhtml\Category\Delete',
             [
                 'context' => $context,
-                'resultRedirectFactory' => $resultRedirectFactory,
                 'categoryRepository' => $this->categoryRepository
             ]
         );
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
index 9b5bb8d759b6b78396f9bf4db5792c1259e3d56f..e903fbbfacebc9f8ace5301969167b4db8b01a14 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
@@ -94,7 +94,8 @@ class SaveTest extends \PHPUnit_Framework_TestCase
                 'getObjectManager',
                 'getEventManager',
                 'getResponse',
-                'getMessageManager'
+                'getMessageManager',
+                'getResultRedirectFactory'
             ],
             [],
             '',
@@ -165,30 +166,20 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ['addSuccess', 'getMessages']
         );
 
+        $this->contextMock->expects($this->any())->method('getTitle')->willReturn($this->titleMock);
+        $this->contextMock->expects($this->any())->method('getRequest')->willReturn($this->requestMock);
+        $this->contextMock->expects($this->any())->method('getObjectManager')->willReturn($this->objectManagerMock);
+        $this->contextMock->expects($this->any())->method('getEventManager')->willReturn($this->eventManagerMock);
+        $this->contextMock->expects($this->any())->method('getResponse')->willReturn($this->responseMock);
+        $this->contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManagerMock);
         $this->contextMock->expects($this->any())
-            ->method('getTitle')
-            ->will($this->returnValue($this->titleMock));
-        $this->contextMock->expects($this->any())
-            ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
-        $this->contextMock->expects($this->any())
-            ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
-        $this->contextMock->expects($this->any())
-            ->method('getEventManager')
-            ->will($this->returnValue($this->eventManagerMock));
-        $this->contextMock->expects($this->any())
-            ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
-        $this->contextMock->expects($this->any())
-            ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $this->save = $this->objectManager->getObject(
             'Magento\Catalog\Controller\Adminhtml\Category\Save',
             [
                 'context' => $this->contextMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultRawFactory' => $this->resultRawFactoryMock,
                 'resultJsonFactory' => $this->resultJsonFactoryMock,
                 'layoutFactory' => $this->layoutFactoryMock
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php
index dbe1bd83b11df585fdb5c48e939283d5699f8e8f..b83afa0e6361f9fbad7576e272ebfb75477391f7 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php
@@ -93,10 +93,13 @@ class SaveTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $stockItemRepository;
 
+    /**
+     * @var  \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirectFactory;
+
     protected function setUp()
     {
-        $this->prepareContext();
-
         $this->attributeHelper = $this->getMock(
             'Magento\Catalog\Helper\Product\Edit\Action\Attribute',
             ['getProductIds', 'getSelectedStoreId', 'getStoreWebsiteId'],
@@ -121,14 +124,16 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+        $this->resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $resultRedirectFactory->expects($this->atLeastOnce())
+        $this->resultRedirectFactory->expects($this->atLeastOnce())
             ->method('create')
             ->willReturn($resultRedirect);
 
+        $this->prepareContext();
+
         $this->object = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))->getObject(
             'Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute\Save',
             [
@@ -136,7 +141,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
                 'attributeHelper' => $this->attributeHelper,
                 'stockIndexerProcessor' => $this->stockIndexerProcessor,
                 'dataObjectHelper' => $this->dataObjectHelperMock,
-                'resultRedirectFactory' => $resultRedirectFactory
             ]
         );
     }
@@ -189,33 +193,32 @@ class SaveTest extends \PHPUnit_Framework_TestCase
                 'getFormKeyValidator',
                 'getTitle',
                 'getLocaleResolver',
+                'getResultRedirectFactory'
             ],
             [],
             '',
             false
         );
-        $this->context->expects($this->any())->method('getRequest')->will($this->returnValue($this->request));
-        $this->context->expects($this->any())->method('getResponse')->will($this->returnValue($this->response));
-        $this->context->expects($this->any())->method('getObjectManager')
-            ->will($this->returnValue($this->objectManager));
-        $this->context->expects($this->any())->method('getEventManager')->will($this->returnValue($this->eventManager));
-        $this->context->expects($this->any())->method('getUrl')->will($this->returnValue($this->url));
-        $this->context->expects($this->any())->method('getRedirect')->will($this->returnValue($this->redirect));
-        $this->context->expects($this->any())->method('getActionFlag')->will($this->returnValue($this->actionFlag));
-        $this->context->expects($this->any())->method('getView')->will($this->returnValue($this->view));
-        $this->context->expects($this->any())->method('getMessageManager')
-            ->will($this->returnValue($this->messageManager));
-        $this->context->expects($this->any())->method('getSession')->will($this->returnValue($this->session));
-        $this->context->expects($this->any())->method('getAuthorization')
-            ->will($this->returnValue($this->authorization));
-        $this->context->expects($this->any())->method('getAuth')->will($this->returnValue($this->auth));
-        $this->context->expects($this->any())->method('getHelper')->will($this->returnValue($this->helper));
-        $this->context->expects($this->any())->method('getBackendUrl')->will($this->returnValue($this->backendUrl));
-        $this->context->expects($this->any())->method('getFormKeyValidator')
-            ->will($this->returnValue($this->formKeyValidator));
-        $this->context->expects($this->any())->method('getTitle')->will($this->returnValue($this->title));
-        $this->context->expects($this->any())->method('getLocaleResolver')
-            ->will($this->returnValue($this->localeResolver));
+        $this->context->expects($this->any())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->any())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->any())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->any())->method('getEventManager')->willReturn($this->eventManager);
+        $this->context->expects($this->any())->method('getUrl')->willReturn($this->url);
+        $this->context->expects($this->any())->method('getRedirect')->willReturn($this->redirect);
+        $this->context->expects($this->any())->method('getActionFlag')->willReturn($this->actionFlag);
+        $this->context->expects($this->any())->method('getView')->willReturn($this->view);
+        $this->context->expects($this->any())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->any())->method('getSession')->willReturn($this->session);
+        $this->context->expects($this->any())->method('getAuthorization')->willReturn($this->authorization);
+        $this->context->expects($this->any())->method('getAuth')->willReturn($this->auth);
+        $this->context->expects($this->any())->method('getHelper')->willReturn($this->helper);
+        $this->context->expects($this->any())->method('getBackendUrl')->willReturn($this->backendUrl);
+        $this->context->expects($this->any())->method('getFormKeyValidator')->willReturn($this->formKeyValidator);
+        $this->context->expects($this->any())->method('getTitle')->willReturn($this->title);
+        $this->context->expects($this->any())->method('getLocaleResolver')->willReturn($this->localeResolver);
+        $this->context->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactory);
 
         $this->product = $this->getMock(
             'Magento\Catalog\Model\Product',
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php
index 8c3396eb54daaf0915b886c944c8b6d1c0d800cf..78cd0113a6afd567261cbfd3df05a8db1ec16500 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php
@@ -105,7 +105,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper::initialize
+     * @covers \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper::initialize
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testInitialize()
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/StockDataFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/StockDataFilterTest.php
index c04da2b78aefee6db05fbd3578eebfa92bac422a..605749f143b72f65a47d10c0e31ca12c509ddb02 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/StockDataFilterTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/StockDataFilterTest.php
@@ -51,7 +51,7 @@ class StockDataFilterTest extends \PHPUnit_Framework_TestCase
      * @param array $inputStockData
      * @param array $outputStockData
      *
-     * covers Magento\Catalog\Controller\Adminhtml\Product\Initialization\StockDataFilter::filter
+     * @covers \Magento\Catalog\Controller\Adminhtml\Product\Initialization\StockDataFilter::filter
      * @dataProvider filterDataProvider
      */
     public function testFilter(array $inputStockData, array $outputStockData)
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
index 0627241e28305cd00763e8d7fa03d5c079109ad4..438cec2b2d7cbf0297ee602172ab3eab3969a7b4 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
@@ -42,11 +42,11 @@ class MassStatusTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Pro
             ->method('create')
             ->willReturn($this->resultRedirect);
 
+        $additionalParams = ['resultRedirectFactory' => $resultRedirectFactory];
         $this->action = new \Magento\Catalog\Controller\Adminhtml\Product\MassStatus(
-            $this->initContext(),
+            $this->initContext($additionalParams),
             $productBuilder,
-            $this->priceProcessor,
-            $resultRedirectFactory
+            $this->priceProcessor
         );
     }
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php
index 77f31ab47a4f6636792d227686854e328e0ac3a2..17a99b3ab8f5210ca601190541b362d510372123 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php
@@ -90,14 +90,14 @@ class SaveTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\ProductTe
             false
         );
 
+        $additionalParams = ['resultRedirectFactory' => $this->resultRedirectFactory];
         $this->action = (new ObjectManagerHelper($this))->getObject(
             'Magento\Catalog\Controller\Adminhtml\Product\Save',
             [
-                'context' => $this->initContext(),
+                'context' => $this->initContext($additionalParams),
                 'productBuilder' => $this->productBuilder,
                 'resultPageFactory' => $resultPageFactory,
                 'resultForwardFactory' => $resultForwardFactory,
-                'resultRedirectFactory' => $this->resultRedirectFactory,
                 'initializationHelper' => $this->initializationHelper,
             ]
         );
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php
index 9c6a309197f2e790a373f98aea95fdd9b7ead69e..9c58d09dfe4434cef1a398214de2a3fb6082dc06 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php
@@ -111,14 +111,14 @@ class ValidateTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Produ
             ->getMock();
         $this->resultJsonFactory->expects($this->any())->method('create')->willReturn($this->resultJson);
 
+        $additionalParams = ['resultRedirectFactory' => $this->resultRedirectFactory];
         $this->action = (new ObjectManagerHelper($this))->getObject(
             'Magento\Catalog\Controller\Adminhtml\Product\Validate',
             [
-                'context' => $this->initContext(),
+                'context' => $this->initContext($additionalParams),
                 'productBuilder' => $this->productBuilder,
                 'resultPageFactory' => $resultPageFactory,
                 'resultForwardFactory' => $resultForwardFactory,
-                'resultRedirectFactory' => $this->resultRedirectFactory,
                 'initializationHelper' => $this->initializationHelper,
                 'resultJsonFactory' => $this->resultJsonFactory,
                 'productFactory' => $this->productFactory,
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/ProductTest.php
index 3e04c8a0c27f345cb2ef5892098f65a04f61b667..84ba97726acdfbf23f9f0835170cdc9f5b4ddc64 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/ProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/ProductTest.php
@@ -19,9 +19,12 @@ abstract class ProductTest extends \PHPUnit_Framework_TestCase
     protected $request;
 
     /**
-     *  Init context object
+     * Init context object
+     *
+     * @param array $additionalParams
+     * @return \PHPUnit_Framework_MockObject_MockObject
      */
-    protected function initContext()
+    protected function initContext(array $additionalParams = [])
     {
         $productActionMock = $this->getMock('Magento\Catalog\Model\Product\Action', [], [], '', false);
         $objectManagerMock = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
@@ -70,7 +73,8 @@ abstract class ProductTest extends \PHPUnit_Framework_TestCase
                 'getActionFlag',
                 'getHelper',
                 'getTitle',
-                'getView'
+                'getView',
+                'getResultRedirectFactory'
             ],
             [],
             '',
@@ -89,6 +93,10 @@ abstract class ProductTest extends \PHPUnit_Framework_TestCase
         $this->context->expects($this->any())->method('getActionFlag')->will($this->returnValue($actionFlagMock));
         $this->context->expects($this->any())->method('getHelper')->will($this->returnValue($helperDataMock));
 
+        foreach ($additionalParams as $property => $object) {
+            $this->context->expects($this->any())->method('get' . ucfirst($property))->willReturn($object);
+        }
+
         $this->session = $sessionMock;
         $this->request = $requestInterfaceMock;
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
index 1ee181ccdaec8a270fd21f1790bfad7d637518ac..81633cf019cbd49c1d607b432d63795f34631c38 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
@@ -70,19 +70,25 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->contextMock = $this->getMock('Magento\Framework\App\Action\Context',
-            ['getRequest', 'getResponse'],
+            ['getRequest', 'getResponse', 'getResultRedirectFactory'],
             [],
             '',
             false
         );
         $this->request = $this->getMock('Magento\Framework\App\RequestInterface', [], [], '', false);
         $this->response = $this->getMock('Magento\Framework\App\ResponseInterface', [], [], '', false);
+        $this->redirectFactoryMock = $this->getMock(
+            'Magento\Framework\Controller\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $this->contextMock->expects($this->any())->method('getRequest')->willReturn($this->request);
+        $this->contextMock->expects($this->any())->method('getResponse')->willReturn($this->response);
         $this->contextMock->expects($this->any())
-            ->method('getRequest')
-            ->willReturn($this->request);
-        $this->contextMock->expects($this->any())
-            ->method('getResponse')
-            ->willReturn($this->response);
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->redirectFactoryMock);
 
         $this->itemFactoryMock = $this->getMock('Magento\Catalog\Model\Product\Compare\ItemFactory', [], [], '', false);
         $this->collectionFactoryMock = $this->getMock(
@@ -100,13 +106,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->formKeyValidatorMock = $this->getMockBuilder('Magento\Framework\Data\Form\FormKey\Validator')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->redirectFactoryMock = $this->getMock(
-            'Magento\Framework\Controller\Result\RedirectFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
         $this->pageFactoryMock = $this->getMock('Magento\Framework\View\Result\PageFactory', [], [], '', false);
         $this->productRepositoryMock = $this->getMock('Magento\Catalog\Api\ProductRepositoryInterface');
         $this->decoderMock = $this->getMock('Magento\Framework\Url\DecoderInterface');
@@ -121,7 +120,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             $this->catalogSession,
             $this->storeManagerMock,
             $this->formKeyValidatorMock,
-            $this->redirectFactoryMock,
             $this->pageFactoryMock,
             $this->productRepositoryMock,
             $this->decoderMock
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php
index b55a39bce8812111d551e0833f73aa4adab27485..1086b9a0c28a189006cc0f248931ffc26c45917f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php
@@ -45,7 +45,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     {
         $mockedCollection = $this->getMockedCollection();
 
-        $mockBuilder = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Grid\CollectionFactory');
+        $mockBuilder = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\CollectionFactory');
         $mock = $mockBuilder->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php
index ad9c4980fd9bd63257aaaf1b0bed92ab08021c49..a74f7fef63ea8e4a917f7d57c2cc65e393b776c9 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php
@@ -9,7 +9,7 @@ namespace Magento\Catalog\Test\Unit\Model;
 class ConfigTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers Magento\Catalog\Model\Config::loadAttributeSets
+     * @covers \Magento\Catalog\Model\Config::loadAttributeSets
      * @return object
      */
     public function testLoadAttributeSets()
@@ -50,7 +50,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @depends testLoadAttributeSets
-     * covers Magento\Catalog\Model\Config::getAttributeSetName
+     * @covers \Magento\Catalog\Model\Config::getAttributeSetName
      */
     public function testGetAttributeSetName($model)
     {
@@ -59,7 +59,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
     /**
      * @depends testLoadAttributeSets
-     * covers Magento\Catalog\Model\Config::getAttributeSetId
+     * @covers \Magento\Catalog\Model\Config::getAttributeSetId
      */
     public function testGetAttributeSetId($model)
     {
@@ -68,7 +68,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Model\Config::loadAttributeGroups
+     * @covers \Magento\Catalog\Model\Config::loadAttributeGroups
      * @return object
      */
     public function testLoadAttributeGroups()
@@ -112,7 +112,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @depends testLoadAttributeGroups
-     * covers Magento\Catalog\Model\Config::getAttributeGroupName
+     * @covers \Magento\Catalog\Model\Config::getAttributeGroupName
      */
     public function testGetAttributeGroupName($model)
     {
@@ -121,7 +121,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
     /**
      * @depends testLoadAttributeGroups
-     * covers Magento\Catalog\Model\Config::getAttributeGroupId
+     * @covers \Magento\Catalog\Model\Config::getAttributeGroupId
      */
     public function testGetAttributeGroupId($model)
     {
@@ -130,7 +130,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Model\Config::loadProductTypes
+     * @covers \Magento\Catalog\Model\Config::loadProductTypes
      * @return object
      */
     public function testLoadProductTypes()
@@ -153,7 +153,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @depends testLoadProductTypes
-     * covers Magento\Catalog\Model\Config::getProductTypeId
+     * @covers \Magento\Catalog\Model\Config::getProductTypeId
      */
     public function testGetProductTypeId($model)
     {
@@ -163,7 +163,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @depends testLoadProductTypes
-     * covers Magento\Catalog\Model\Config::getProductTypeName
+     * @covers \Magento\Catalog\Model\Config::getProductTypeName
      */
     public function testGetProductTypeName($model)
     {
@@ -176,7 +176,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
      * @param $data
      * @param $search
      *
-     * covers Magento\Catalog\Model\Config::getSourceOptionId
+     * @covers \Magento\Catalog\Model\Config::getSourceOptionId
      * @dataProvider getSourceOptionIdDataProvider
      */
     public function testGetSourceOptionId($expected, $data, $search)
@@ -263,7 +263,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Model\Config::getAttributesUsedInProductListing
+     * @covers \Magento\Catalog\Model\Config::getAttributesUsedInProductListing
      * return object
      */
     public function testGetAttributesUsedInProductListing()
@@ -275,7 +275,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @depends testGetAttributesUsedInProductListing
-     * covers Magento\Catalog\Model\Config::getProductAttributes
+     * @covers \Magento\Catalog\Model\Config::getProductAttributes
      */
     public function testGetProductAttributes($model)
     {
@@ -283,7 +283,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Model\Config::getAttributesUsedForSortBy
+     * @covers \Magento\Catalog\Model\Config::getAttributesUsedForSortBy
      */
     public function testGetAttributesUsedForSortBy()
     {
@@ -292,7 +292,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Model\Config::getAttributeUsedForSortByArray
+     * @covers \Magento\Catalog\Model\Config::getAttributeUsedForSortByArray
      */
     public function testGetAttributeUsedForSortByArray()
     {
@@ -301,7 +301,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\Catalog\Model\Config::getProductListDefaultSortBy
+     * @covers \Magento\Catalog\Model\Config::getProductListDefaultSortBy
      */
     public function testGetProductListDefaultSortBy()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php
old mode 100644
new mode 100755
index 15ff5136c76caeb641f66081ebccee0ce0be471f..fc1a0758eecb9584031f95aa4c2d2248789496a8
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php
@@ -36,7 +36,7 @@ class FullTest extends \PHPUnit_Framework_TestCase
             $eavSourceFactory
         );
 
-        $this->setExpectedException('\Magento\Catalog\Exception', $exceptionMessage);
+        $this->setExpectedException('Magento\Framework\Exception\LocalizedException', $exceptionMessage);
 
         $model->execute();
     }
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowTest.php
old mode 100644
new mode 100755
index 80a1f2ea8c5e1d1a4494360bf2064e368bdc6c4e..b40ffc2e186c9746725e9999c8be987c8731371c
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowTest.php
@@ -21,7 +21,7 @@ class RowTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Catalog\Exception
+     * @expectedException \Magento\Framework\Exception\InputException
      * @expectedExceptionMessage Could not rebuild index for undefined product
      */
     public function testEmptyId()
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowsTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowsTest.php
old mode 100644
new mode 100755
index 994e561ade36f356935889eb59b33c3dbe7204dd..95577b9fcf1890402d9801427137d4f43705e756
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowsTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/RowsTest.php
@@ -21,7 +21,7 @@ class RowsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Catalog\Exception
+     * @expectedException \Magento\Framework\Exception\InputException
      * @expectedExceptionMessage Bad value was supplied.
      */
     public function testEmptyIds()
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowTest.php
old mode 100644
new mode 100755
index 0910824ecfe79052605601449db89ac599d4452a..27369edc624560bcd61ad2d9d6d85dbcf9e71f74
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowTest.php
@@ -21,7 +21,7 @@ class RowTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Catalog\Exception
+     * @expectedException \Magento\Framework\Exception\InputException
      * @expectedExceptionMessage Could not rebuild index for undefined product
      */
     public function testEmptyId()
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowsTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowsTest.php
old mode 100644
new mode 100755
index 5ab73e71e45932a1de40c93b59221e3750054b29..36814e3bf8df90407a95466a55a77948b01f7a7f
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowsTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Action/RowsTest.php
@@ -21,7 +21,7 @@ class RowsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Catalog\Exception
+     * @expectedException \Magento\Framework\Exception\InputException
      * @expectedExceptionMessage Bad value was supplied.
      */
     public function testEmptyIds()
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/AvailabilityFlagTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/AvailabilityFlagTest.php
index 2311783a0f141e231491b6e0a94a8b58f105e200..3871f40c01a21f9922229deccb683833c41b4015 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/AvailabilityFlagTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/AvailabilityFlagTest.php
@@ -54,8 +54,8 @@ class AvailabilityFlagTest extends \PHPUnit_Framework_TestCase
      * @param bool $expectedResult
      *
      * @dataProvider isEnabledDataProvider
-     * covers \Magento\Catalog\Model\Layer\Category\AvailabilityFlag::isEnabled
-     * covers \Magento\Catalog\Model\Layer\Category\AvailabilityFlag::canShowOptions
+     * @covers \Magento\Catalog\Model\Layer\Category\AvailabilityFlag::isEnabled
+     * @covers \Magento\Catalog\Model\Layer\Category\AvailabilityFlag::canShowOptions
      */
     public function testIsEnabled($itemsCount, $filters, $expectedResult)
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php
index 20cb2395e6469f95cd444da69527ff746686020d..96d02813542880d863c5919261778aae4b6d7ca4 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php
@@ -37,8 +37,8 @@ class CollectionFilterTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Model\Layer\Category\CollectionFilter::filter
-     * covers \Magento\Catalog\Model\Layer\Category\CollectionFilter::__construct
+     * @covers \Magento\Catalog\Model\Layer\Category\CollectionFilter::filter
+     * @covers \Magento\Catalog\Model\Layer\Category\CollectionFilter::__construct
      */
     public function testFilter()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/StateKeyTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/StateKeyTest.php
index 8a4018ef30ed4bf829c9b3976cedec7708c79131..58abff91ef06dae1938b4fabe5e89ffe7ec82d54 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/StateKeyTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/StateKeyTest.php
@@ -33,8 +33,8 @@ class StateKeyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Model\Layer\Category\StateKey::toString
-     * covers \Magento\Catalog\Model\Layer\Category\StateKey::__construct
+     * @covers \Magento\Catalog\Model\Layer\Category\StateKey::toString
+     * @covers \Magento\Catalog\Model\Layer\Category\StateKey::__construct
      */
     public function testToString()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php
index af5ae499c331d8e909babee29a10f834b108d927..e962c36145330fe6ba482c250232a56ab80a5dcf 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php
@@ -64,9 +64,9 @@ class FilterListTest extends \PHPUnit_Framework_TestCase
      * @param string $expectedClass
      * @dataProvider getFiltersDataProvider
      *
-     * covers \Magento\Catalog\Model\Layer\FilterList::getFilters
-     * covers \Magento\Catalog\Model\Layer\FilterList::createAttributeFilter
-     * covers \Magento\Catalog\Model\Layer\FilterList::__construct
+     * @covers \Magento\Catalog\Model\Layer\FilterList::getFilters
+     * @covers \Magento\Catalog\Model\Layer\FilterList::createAttributeFilter
+     * @covers \Magento\Catalog\Model\Layer\FilterList::__construct
      */
     public function testGetFilters($method, $value, $expectedClass)
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php
index ca0308fa8e077638d103a395514b025b1fe14fc8..1e9ac542cc1939d6c48d527aa3eed27616b8c024 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php
@@ -49,8 +49,8 @@ class CollectionFilterTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Model\Layer\Search\CollectionFilter::filter
-     * covers \Magento\Catalog\Model\Layer\Search\CollectionFilter::__construct
+     * @covers \Magento\Catalog\Model\Layer\Search\CollectionFilter::filter
+     * @covers \Magento\Catalog\Model\Layer\Search\CollectionFilter::__construct
      */
     public function testFilter()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php
index 4919c1d22ba2b2fbd3bb0664890b0866d81ce37b..74dee9e602128a7ede3d30010cc2c70111c2403f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php
@@ -61,7 +61,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Model\Layer\Search\FilterableAttributeList::_prepareAttributeCollection()
+     * @covers \Magento\Catalog\Model\Layer\Search\FilterableAttributeList::_prepareAttributeCollection()
      */
     public function testGetList()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/StateKeyTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/StateKeyTest.php
index c761c952c6ac46a112c0723f88398f3377615b13..bd90888a92adccef5e5e9d2fb7077496a500bdb7 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/StateKeyTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/StateKeyTest.php
@@ -46,8 +46,8 @@ class StateKeyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\CatalogSearch\Model\Layer\Search\StateKey::toString
-     * covers \Magento\CatalogSearch\Model\Layer\Search\StateKey::__construct
+     * @covers \Magento\CatalogSearch\Model\Layer\Search\StateKey::toString
+     * @covers \Magento\CatalogSearch\Model\Layer\Search\StateKey::__construct
      */
     public function testToString()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php
index ecf31cfb88d256ab5ff8df7ace922686b2fd10b2..4c26baf8f9b745c9bd3c2f2ad3381c56135cbe87 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php
@@ -42,7 +42,7 @@ class LogTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Model\Plugin\Log::afterClean
+     * @covers \Magento\Catalog\Model\Plugin\Log::afterClean
      */
     public function testAfterClean()
     {
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/ReservedAttributeListTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/ReservedAttributeListTest.php
index 7fbfe0432f332c2aa428bb0711d2c6c50967b8d9..b173820dcff05e7d57b9fd9f9f89a4fbecfbcf59 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/ReservedAttributeListTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/ReservedAttributeListTest.php
@@ -20,7 +20,7 @@ class ReservedAttributeListTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Model\Product\ReservedAttributeList::isReservedAttribute
+     * @covers \Magento\Catalog\Model\Product\ReservedAttributeList::isReservedAttribute
      * @dataProvider dataProvider
      */
     public function testIsReservedAttribute($isUserDefined, $attributeCode, $expected)
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/UrlTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/UrlTest.php
index 0f2c40e305d67c7496881ce3727c05ad888a37ef..473d3605648af8157546d6beb61c10127d52c331 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/UrlTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/UrlTest.php
@@ -103,9 +103,9 @@ class UrlTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @dataProvider getUrlDataProvider
-     * covers Magento\Catalog\Model\Product\Url::getUrl
-     * covers Magento\Catalog\Model\Product\Url::getUrlInStore
-     * covers Magento\Catalog\Model\Product\Url::getProductUrl
+     * @covers \Magento\Catalog\Model\Product\Url::getUrl
+     * @covers \Magento\Catalog\Model\Product\Url::getUrlInStore
+     * @covers \Magento\Catalog\Model\Product\Url::getProductUrl
      *
      * @param $getUrlMethod
      * @param $routePath
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php
index 8a7930bb0f6d7243e66fc68fcbc51751d517f6d5..bf60494dae2505f08654308ae2e512d75e277081 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php
@@ -334,7 +334,7 @@ class ProductRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->resourceModelMock->expects($this->once())->method('validate')->with($this->productMock)
             ->willReturn(true);
         $this->resourceModelMock->expects($this->once())->method('save')->with($this->productMock)
-            ->willThrowException(new \Magento\Eav\Model\Entity\Attribute\Exception('123'));
+            ->willThrowException(new \Magento\Eav\Model\Entity\Attribute\Exception(__('123')));
         $this->productMock->expects($this->never())->method('getId');
         $this->extensibleDataObjectConverterMock
             ->expects($this->once())
diff --git a/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php b/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php
index 0d37388ea0d8e7e59d5c662377a6b8844c520d79..bed320a21dc3c87a48fb29e9037c2a2ee8d62b96 100644
--- a/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php
@@ -110,10 +110,10 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
     /**
      * Test base initialization of tier price
      *
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getValue
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getStoredTierPrices
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::canApplyTierPrice
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getValue
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getStoredTierPrices
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::canApplyTierPrice
      * @dataProvider providerForBaseInitialization
      */
     public function testBaseInitialization($tierPrices, $expectedValue)
@@ -208,8 +208,8 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
     /**
      * Test getter stored tier prices from eav model
      *
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getStoredTierPrices
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getStoredTierPrices
      */
     public function testGetterStoredTierPrices()
     {
@@ -252,13 +252,13 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getTierPriceList
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getStoredTierPrices
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::applyAdjustment
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getTierPriceCount
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::filterTierPrices
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getBasePrice
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getTierPriceList
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getStoredTierPrices
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::applyAdjustment
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getTierPriceCount
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::filterTierPrices
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getBasePrice
      * @dataProvider providerForGetterTierPriceList
      */
     public function testGetterTierPriceList($tierPrices, $basePrice, $expectedResult)
@@ -358,9 +358,9 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getSavePercent
-     * covers \Magento\Catalog\Pricing\Price\TierPrice::getBasePrice
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getSavePercent
+     * @covers \Magento\Catalog\Pricing\Price\TierPrice::getBasePrice
      * @dataProvider dataProviderGetSavePercent
      */
     public function testGetSavePercent($basePrice, $tierPrice, $savedPercent)
diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json
index f6e7adcc008d5c41bcffa81f1aad61c587900316..b0605d9539855499da59d386f5e106fa32951c96 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.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-indexer": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-log": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-msrp": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-catalog-rule": "0.42.0-beta11",
-        "magento/module-product-alert": "0.42.0-beta11",
-        "magento/module-url-rewrite": "0.42.0-beta11",
-        "magento/module-catalog-url-rewrite": "0.42.0-beta11",
-        "magento/module-page-cache": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-indexer": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-log": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-msrp": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-catalog-rule": "0.74.0-beta2",
+        "magento/module-product-alert": "0.74.0-beta2",
+        "magento/module-url-rewrite": "0.74.0-beta2",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta2",
+        "magento/module-page-cache": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.42.0-beta11"
+        "magento/module-cookie": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Catalog/etc/webapi.xml b/app/code/Magento/Catalog/etc/webapi.xml
index a4fb44c7eae061b3547fee1c93d61889dd923b7a..88bc0f93a6ec32002356446962220f48422f1fce 100644
--- a/app/code/Magento/Catalog/etc/webapi.xml
+++ b/app/code/Magento/Catalog/etc/webapi.xml
@@ -82,7 +82,7 @@
             <resource ref="Magento_Catalog::attributes_attributes" />
         </resources>
     </route>
-    <route url="/V1/products/attributes/:attributeId" method="PUT">
+    <route url="/V1/products/attributes/:attributeCode" method="PUT">
         <service class="Magento\Catalog\Api\ProductAttributeRepositoryInterface" method="save"/>
         <resources>
             <resource ref="Magento_Catalog::attributes_attributes" />
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml
index 202ff06a2222cde22fff192b5687b184197c1642..b70f31162fff2fb5b377ac9c98a4831c58eb8e1a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml
@@ -11,6 +11,7 @@
     </head>
     <update handle="editor"/>
     <body>
+        <referenceContainer name="left" htmlClass="admin__scope-old" htmlTag="div" />
         <referenceContainer name="page.main.actions">
             <block class="Magento\Backend\Block\Store\Switcher" name="category.store.switcher" template="Magento_Backend::store/switcher.phtml">
                 <!--<arguments>-->
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml
index 9bbf8fe2b398f1fe90b1864ea25c302d3c77a9b5..55e9ebee91f5bcbbcc6b77c4d81fd3638dec7592 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml
@@ -13,6 +13,7 @@
     </head>
     <update handle="editor"/>
     <body>
+        <referenceContainer name="admin.scope.col.wrap" htmlClass="admin__old" /> <!-- ToDo UI: remove this wrapper with old styles removal. The class name "admin__old" is for tests only, we shouldn't use it in any way -->
         <referenceContainer name="content">
             <block class="Magento\Catalog\Block\Adminhtml\Product\Edit" name="product_edit">
                 <container name="product-type-tabs" label="Tabs">
@@ -23,6 +24,10 @@
         </referenceContainer>
         <referenceContainer name="left">
             <block class="Magento\Catalog\Block\Adminhtml\Product\Edit\Tabs" name="product_tabs">
+                <!-- @todo ui: remove arguments within .admin__scope-old -->
+                <arguments>
+                    <argument name="panels_class" xsi:type="string">admin__scope-old</argument>
+                </arguments>
                 <block class="Magento\Backend\Block\Widget\Tab" name="product_tabs.customer_options" as="customer_options">
                     <arguments>
                         <argument name="label" xsi:type="string" translate="true">Custom Options</argument>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml
index 71d0a48dd8fed85df0c811eae2c4ea91ff26b255..6386f540f8aad8f52634cd9c325cf38419eb47a2 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml
@@ -24,11 +24,9 @@ $categoryId = $block->getCategoryId();
 <?php if ($block->hasStoreRootCategory()): ?>
     <?php echo $block->getTabsHtml() ?>
 <?php else: ?>
-<div class="admin__scope">
-    <div class="messages">
-        <div class="message message-notice">
-            <div><?php echo __('Set root category for this store in the <a href="%1">configuration</a>.', $block->getStoreConfigurationUrl()) ?></div>
-        </div>
+<div class="messages">
+    <div class="message message-notice">
+        <div><?php echo __('Set root category for this store in the <a href="%1">configuration</a>.', $block->getStoreConfigurationUrl()) ?></div>
     </div>
 </div>
 
@@ -52,9 +50,9 @@ $categoryId = $block->getCategoryId();
     <div id="category_tab_content"></div>
 </form>
 
-<div data-id="information-dialog-category" class="messages admin__scope" style="display: none;">
+<div data-id="information-dialog-category" class="messages" style="display: none;">
     <div class="message message-notice">
-        <div><?php echo __('This operation can take much time'); ?></div>
+        <div><?php echo __('This operation can take a long time'); ?></div>
     </div>
 </div>
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index 26731afb65e187e36e8220b4069611391fd39f6c..b808d1a08b89069b6c54a04dedb4c0c77b48a870 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -30,9 +30,9 @@
     </div>
 </div>
 
-<div data-id="information-dialog-tree" class="messages admin__scope" style="display: none;">
+<div data-id="information-dialog-tree" class="messages" style="display: none;">
     <div class="message message-notice">
-       <div><?php echo __('This operation can take much time'); ?></div>
+       <div><?php echo __('This operation can take a long time'); ?></div>
     </div>
 </div>
 <!--[if IE]>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
index 89a839e200085268fafac6f6639219d4db62a8b1..44945b2db8596cb4acbd7ab374529aa796cfa3f3 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
@@ -13,15 +13,15 @@
  */
 ?>
 <?php echo $block->getFormInitScripts() ?>
-<form id="edit_form" action="<?php echo $block->escapeHtml($block->getSaveUrl()) ?>" method="post">
+<form id="edit_form" class="admin__scope-old" action="<?php echo $block->escapeHtml($block->getSaveUrl()) ?>" method="post">
     <input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
     <?php echo $block->getChildHtml('form') ?>
 </form>
-<div class="admin__scope">
-    <div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php echo $block->getUiId('content-header') ?>>
-        <?php echo $block->getButtonsHtml('header') ?>
-    </div>
+
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php echo $block->getUiId('content-header') ?>>
+    <?php echo $block->getButtonsHtml('header') ?>
 </div>
+
 <script>
 require(['jquery', "mage/mage"], function(jQuery){
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
index 1e7ca675924e6a5b5bf1efffcf5ee924e09d2b7d..6dc43f6f2bbb513a34de36d03d82236e6a1ff2b8 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
@@ -12,39 +12,39 @@
  * @var $block \Magento\Catalog\Block\Adminhtml\Product\Edit
  */
 ?>
+<div class="admin__scope-old">
+    <div class="product-actions">
+        <div id="product-template-suggest-container" class="suggest-expandable">
+            <div class="action-dropdown">
+                <button type="button" class="action-toggle" data-mage-init='{"dropdown":{}}' data-toggle="dropdown">
+                    <span><?php echo $block->getAttributeSetName()?></span>
+                </button>
+                <ul class="dropdown-menu">
+                    <li><input type="text" id="product-template-suggest" class="search"
+                           placeholder="start typing to search template"/></li>
+                </ul>
+            </div>
+        </div>
 
-<div class="product-actions">
-    <div id="product-template-suggest-container" class="suggest-expandable">
-        <div class="action-dropdown">
-            <button type="button" class="action-toggle" data-mage-init='{"dropdown":{}}' data-toggle="dropdown">
-                <span><?php echo $block->getAttributeSetName()?></span>
-            </button>
-            <ul class="dropdown-menu">
-                <li><input type="text" id="product-template-suggest" class="search"
-                       placeholder="start typing to search template"/></li>
-            </ul>
+        <div class="switcher" onselectstart='return false;'>
+            <input type="checkbox" id="product-online-switcher" name="product-online-switcher" />
+            <label class="switcher-label"
+                   for="product-online-switcher"
+                   data-text-on="<?php echo __('Product online'); ?>"
+                   data-text-off="<?php echo __('Product offline'); ?>"
+                   title="<?php echo __('Product online status'); ?>"></label>
         </div>
-    </div>
 
-    <div class="switcher" onselectstart='return false;'>
-        <input type="checkbox" id="product-online-switcher" name="product-online-switcher" />
-        <label class="switcher-label"
-               for="product-online-switcher"
-               data-text-on="<?php echo __('Product online'); ?>"
-               data-text-off="<?php echo __('Product offline'); ?>"
-               title="<?php echo __('Product online status'); ?>"></label>
+        <?php if ($block->getProductId()): ?>
+            <?php echo $block->getDeleteButtonHtml() ?>
+        <?php endif; ?>
+        <?php if ($block->getProductSetId()): ?>
+            <?php echo $block->getChangeAttributeSetButtonHtml() ?>
+            <?php echo $block->getSaveSplitButtonHtml(); ?>
+        <?php endif; ?>
+        <?php echo $block->getBackButtonHtml() ?>
     </div>
-
-    <?php if ($block->getProductId()): ?>
-        <?php echo $block->getDeleteButtonHtml() ?>
-    <?php endif; ?>
-    <?php if ($block->getProductSetId()): ?>
-        <?php echo $block->getChangeAttributeSetButtonHtml() ?>
-        <?php echo $block->getSaveSplitButtonHtml(); ?>
-    <?php endif; ?>
-    <?php echo $block->getBackButtonHtml() ?>
 </div>
-
 <?php if ($block->getUseContainer()): ?>
 <form action="<?php echo $block->getSaveUrl() ?>" method="post" enctype="multipart/form-data"
       data-form="edit-product" data-product-id="<?php echo $block->getProduct()->getId()?>">
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml
index 5ebe1168d71e6cef9a0cda945869edbd0d9938be..a8ee0b1f928cee9031e0db52a96b321646f7eb5a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml
@@ -47,11 +47,9 @@
             <span><?php echo __('Remove Product From Websites') ?></span>
         </legend>
         <br>
-        <div class="admin__scope">
-            <div class="messages">
-                <div class="message message-notice">
-                    <div><?php echo __("Items that you do not want to show in the catalog or search results should have status 'Disabled' in the desired store.") ?></div>
-                </div>
+        <div class="messages">
+            <div class="message message-notice">
+                <div><?php echo __("Items that you do not want to show in the catalog or search results should have status 'Disabled' in the desired store.") ?></div>
             </div>
         </div>
         <div class="store-scope">
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml
index c60c4f8275b2e00afe37b22076efba4a13be1c4c..7e06606146ab823801c4ce4ee0cdf9a27ef932d9 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml
@@ -17,12 +17,10 @@
     </div>
     <div class="fieldset-wrapper-content" id="product-custom-options-content">
         <fieldset class="fieldset">
-            <div class="admin__scope">
-                <div class="messages">
-                    <div class="message message-error" id="dynamic-price-warning" style="display: none;">
-                        <div class="message-inner">
-                            <div class="message-content"><?php echo __('Bundle with dynamic pricing cannot include custom defined options. Options will not be saved.') ?></div>
-                        </div>
+            <div class="messages">
+                <div class="message message-error" id="dynamic-price-warning" style="display: none;">
+                    <div class="message-inner">
+                        <div class="message-content"><?php echo __('Bundle with dynamic pricing cannot include custom defined options. Options will not be saved.') ?></div>
                     </div>
                 </div>
             </div>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/websites.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/websites.phtml
index 2cabd0a0ab2aa4d29eb4cd1b03368d971d1262d8..e0128a5f0fd60ee6c7814ce459ca2b8971024770 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/websites.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/websites.phtml
@@ -11,11 +11,9 @@
     <legend class="legend"><span><?php echo __('Product In Websites') ?></span></legend>
     <br>
     <?php if ($block->getProductId()): ?>
-    <div class="admin__scope">
-        <div class="messages">
-            <div class="message message-notice">
-                <?php echo __("Items that you don't want to show in the catalog or search results should have status 'Disabled' in the desired store.") ?>
-            </div>
+    <div class="messages">
+        <div class="message message-notice">
+            <?php echo __("Items that you don't want to show in the catalog or search results should have status 'Disabled' in the desired store.") ?>
         </div>
     </div>
     <?php endif; ?>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/tabs.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/tabs.phtml
index 119947e887fc552524b01b66895fab455e1316d1..f2042ea041a048a6b9014f41837792e0bc3f3343 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/tabs.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/tabs.phtml
@@ -13,61 +13,105 @@
     \Magento\Catalog\Block\Adminhtml\Product\Edit\Tabs::BASIC_TAB_GROUP_CODE,
     \Magento\Catalog\Block\Adminhtml\Product\Edit\Tabs::ADVANCED_TAB_GROUP_CODE,
 ];?>
+
 <div id="<?php echo $block->getId() ?>"
-    data-mage-init='{"tabs":{
-        "active": "<?php echo $block->getActiveTabId() ?>",
-        "destination": "#<?php echo $block->getDestElementId() ?>",
-        "shadowTabs": "<?php echo $block->getAllShadowTabs()?>",
-        "tabsBlockPrefix": "<?php echo $block->getId() ?>_",
-        "tabIdArgument": "active_tab",
-        "groups": "ul.tabs"
-    }}'>
+     data-mage-init='{"tabs":{
+    "active": "<?php echo $block->getActiveTabId() ?>",
+    "destination": "#<?php echo $block->getDestElementId() ?>",
+    "shadowTabs": "<?php echo $block->getAllShadowTabs()?>",
+    "tabsBlockPrefix": "<?php echo $block->getId() ?>_",
+    "tabIdArgument": "active_tab",
+    "tabPanelClass": "<?php echo $block->getPanelsClass() ?>",
+    "excludedPanel": "<?php echo $block->getExcludedPanel() ?>",
+    "groups": "ul.tabs"
+}}'>
     <?php foreach ($tabGroups as $tabGroupCode): ?>
-    <?php $tabGroupId = $block->getId() . '-' . $tabGroupCode; ?>
-    <?php $isBasic = $tabGroupCode == \Magento\Catalog\Block\Adminhtml\Product\Edit\Tabs::BASIC_TAB_GROUP_CODE; ?>
-    <div id="<?php echo $tabGroupId ?>"
-        <?php if (!$isBasic): ?>
-            data-mage-init='{"collapsible":{"active": <?php echo $block->isAdvancedTabGroupActive() ? 'true' : 'false' ?>, "collapsible": true}}'
-        <?php endif;?>>
-        <h3 <?php echo $block->getUiId('title') ?> data-role="title" <?php if (!$isBasic): ?>class="ui-accordion-header"<?php endif;?>>
-            <span data-role="trigger"> <?php echo $isBasic ? __('Basic Settings') : __('Advanced Settings') ?></span>
-        </h3>
-        <ul <?php echo $block->getUiId('tab', $tabGroupId) ?> class="tabs" data-role="content">
-            <?php foreach ($tabs as $_tab): ?>
-            <?php if (!$block->canShowTab($_tab) || $_tab->getParentTab()
-                || ($_tab->getGroupCode() && $_tab->getGroupCode() != $tabGroupCode)
-                || (!$_tab->getGroupCode() && $isBasic)): continue; endif;?>
-            <?php $_tabClass = 'tab-item-link ' . $block->getTabClass($_tab) . ' ' . (preg_match('/\s?ajax\s?/', $_tab->getClass()) ? 'notloaded' : '') ?>
-            <?php $_tabType = (!preg_match('/\s?ajax\s?/', $_tabClass) && $block->getTabUrl($_tab) != '#') ? 'link' : '' ?>
-            <?php $_tabHref = $block->getTabUrl($_tab) == '#' ? '#' . $block->getTabId($_tab) . '_content' : $block->getTabUrl($_tab) ?>
-            <li <?php if ($block->getTabIsHidden($_tab)): ?> class="no-display"<?php endif; ?><?php echo $block->getUiId('tab', 'item', $_tab->getId()) ?>>
-                <a href="<?php echo $_tabHref ?>" id="<?php echo $block->getTabId($_tab) ?>"
-                   name="<?php echo $block->getTabId($_tab, false) ?>" title="<?php echo $block->getTabTitle($_tab) ?>"
-                   class="<?php echo $_tabClass;?>"
-                   data-tab-type="<?php echo $_tabType;?>" <?php echo $block->getUiId('tab', 'link', $_tab->getId()) ?>>
-                    <span>
-                        <span class="changed" title="<?php echo __('The information in this tab has been changed.') ?>"></span>
-                        <span class="error" title="<?php echo __('This tab contains invalid data. Please solve the problem before saving.') ?>"></span>
-                        <span class="loader" title="<?php echo __('Loading...') ?>"></span>
-                        <?php echo $block->escapeHtml($block->getTabLabel($_tab)); ?>
-                    </span>
-                </a>
-                <div id="<?php echo $block->getTabId($_tab) ?>_content" class="no-display"
-                     data-tab-panel="<?=$_tab->getTabId() ?>"
-                     <?php echo $block->getUiId('tab', 'content', $_tab->getId()) ?>>
-                    <?php echo $block->getTabContent($_tab); ?>
-                    <?php foreach ($tabs as $childTab): ?>
-                        <?php if ($childTab->getParentTab() === $_tab->getId()):?>
+        <?php
+            $tabGroupId = $block->getId() . '-' . $tabGroupCode;
+            $isBasic = $tabGroupCode == \Magento\Catalog\Block\Adminhtml\Product\Edit\Tabs::BASIC_TAB_GROUP_CODE;
+            $activeCollapsible = $block->isAdvancedTabGroupActive() ? true : false;
+        ?>
+
+        <div class="admin__page-nav <?php if (!$isBasic): ?> <?php echo '_collapsed';?> <?php endif;?>"
+            data-role="container"
+            id="<?php echo $tabGroupId ?>"
+            <?php if (!$isBasic): ?>
+                data-mage-init='{"collapsible":{
+                "active": "<?php echo $activeCollapsible; ?>",
+                "openedState": "_show",
+                "closedState": "_hide",
+                "animate": 200,
+                "collapsible": true
+                }}'
+            <?php endif;?>>
+
+            <div class="admin__page-nav-title-wrap" <?php echo $block->getUiId('title') ?> data-role="title">
+                <div class="admin__page-nav-title <?php if (!$isBasic): ?> <?php echo '_collapsible';?><?php endif;?>"
+                    data-role="trigger">
+                    <strong>
+                        <?php echo $isBasic ? __('Basic Settings') : __('Advanced Settings') ?>
+                    </strong>
+                    <span data-role="title-messages" class="admin__page-nav-title-messages"></span>
+                </div>
+            </div>
+
+            <ul <?php echo $block->getUiId('tab', $tabGroupId) ?> class="tabs admin__page-nav-items" data-role="content">
+                <?php foreach ($tabs as $_tab): ?>
+                    <?php if (!$block->canShowTab($_tab) || $_tab->getParentTab()
+                        || ($_tab->getGroupCode() && $_tab->getGroupCode() != $tabGroupCode)
+                        || (!$_tab->getGroupCode() && $isBasic)): continue; endif;?>
+                    <?php $_tabClass = 'tab-item-link ' . $block->getTabClass($_tab) . ' ' . (preg_match('/\s?ajax\s?/', $_tab->getClass()) ? 'notloaded' : '') ?>
+                    <?php $_tabType = (!preg_match('/\s?ajax\s?/', $_tabClass) && $block->getTabUrl($_tab) != '#') ? 'link' : '' ?>
+                    <?php $_tabHref = $block->getTabUrl($_tab) == '#' ? '#' . $block->getTabId($_tab) . '_content' : $block->getTabUrl($_tab) ?>
+                    <li class="admin__page-nav-item <?php if ($block->getTabIsHidden($_tab)): ?> <?php echo "no-display"; ?> <?php endif; ?> " <?php echo $block->getUiId('tab', 'item', $_tab->getId()) ?>>
+
+                        <a href="<?php echo $_tabHref ?>" id="<?php echo $block->getTabId($_tab) ?>"
+                           name="<?php echo $block->getTabId($_tab, false) ?>"
+                           title="<?php echo $block->getTabTitle($_tab) ?>"
+                           class="admin__page-nav-link <?php echo $_tabClass;?>"
+                           data-tab-type="<?php echo $_tabType;?>" <?php echo $block->getUiId('tab', 'link', $_tab->getId()) ?>>
+
+                            <span><?php echo $block->escapeHtml($block->getTabLabel($_tab)); ?></span>
+
+                            <span class="admin__page-nav-item-messages" data-role="item-messages">
+                               <span class="admin__page-nav-item-message _changed">
+                                   <span class="admin__page-nav-item-message-icon"></span>
+                                   <span class="admin__page-nav-item-message-tooltip">
+                                       <?php echo __('Changes have been made to this section that have not been saved.'); ?>
+                                   </span>
+                               </span>
+                               <span class="admin__page-nav-item-message _error">
+                                   <span class="admin__page-nav-item-message-icon"></span>
+                                   <span class="admin__page-nav-item-message-tooltip">
+                                       <?php echo __('This tab contains invalid data. Please solve the problem before saving.'); ?>
+                                   </span>
+                               </span>
+                                <span class="admin__page-nav-item-message-loader">
+                                   <span class="spinner">
+                                       <span></span><span></span><span></span><span></span>
+                                       <span></span><span></span><span></span><span></span>
+                                   </span>
+                               </span>
+                            </span>
+                        </a>
+
+                        <div id="<?php echo $block->getTabId($_tab) ?>_content" class="no-display"
+                             data-tab-panel="<?=$_tab->getTabId() ?>"
+                            <?php echo $block->getUiId('tab', 'content', $_tab->getId()) ?>>
+                            <?php echo $block->getTabContent($_tab); ?>
+                            <?php foreach ($tabs as $childTab): ?>
+                            <?php if ($childTab->getParentTab() === $_tab->getId()):?>
                             <div id="<?php echo $block->getTabId($childTab) ?>_content"
                                 <?php echo $block->getUiId('tab', 'content', $childTab->getId()) ?>>
-                            <?php echo $block->getTabContent($childTab); ?>
-                        <?php endif;?>
-                    <?php endforeach; ?>
-                </div>
-            </li>
-            <?php endforeach; ?>
-        </ul>
-    </div>
+                                <?php echo $block->getTabContent($childTab); ?>
+                                <?php endif;?>
+                                <?php endforeach; ?>
+                            </div>
+                    </li>
+                <?php endforeach; ?>
+            </ul>
+        </div>
     <?php endforeach; ?>
 </div>
+
 <?php endif; ?>
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category-selector.css b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category-selector.css
index 2758bfb06dc57f65a9451c6f8f4721563d0edb06..45837e9b52a0059e689ed0bd5e17c225b1eaa517 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category-selector.css
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category-selector.css
@@ -1,176 +1,177 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
 .field-category_ids .category-select {
-	margin: 0 0 6px 0;
-	padding: 2px;
-	width: 67.999999997%;
-}
-
+    margin: 0 0 6px;
+    padding: 2px;
+    width: 67.999999997%;
+}
+
 .mage-new-category-dialog .category-select {
-	width: 100%;
-	padding: 0;
-}
-
+    padding: 0;
+    width: 100%;
+}
+
 .field-category_ids .mage-suggest-inner {
-	padding-right: 27px;
-}
-
+    padding-right: 27px;
+}
+
 .field-category_ids .addon > button {
-	float: right;
-	margin-left: 2.127659574%;
-	width: 28.4%;
-}
-
+    float: right;
+    margin-left: 2.127659574%;
+    width: 28.4%;
+}
+
 .field-category_ids .mage-suggest-search-label:after,
 .mage-new-category-dialog .mage-suggest-search-label:after {
-	position: absolute;
-	top: 0;
-	right: 5px;
-	font-family: 'MUI-Icons';
-	font-style: normal;
-	speak: none;
-	font-weight: normal;
-	-webkit-font-smoothing: antialiased;
-	content: '\e013'; /* unordered list icon */
-	font-size: 20px;
-	color: #b2b2b2;
-}
-
-/* Remove search icon for category search suggest field */
+    color: #b2b2b2;
+    content: '\e013'; /* unordered list icon */
+    font-family: 'MUI-Icons';
+    font-size: 20px;
+    -webkit-font-smoothing: antialiased;
+    font-style: normal;
+    font-weight: normal;
+    position: absolute;
+    right: 5px;
+    speak: none;
+    top: 0;
+}
+
+/* Remove search icon for category search suggest field */
 .field-category_ids .category-select:after,
 .mage-new-category-dialog .category-select:after {
-	display: none;
-}
-
-.mage-suggest-search-label {
-	display: block;
-}
-
+    display: none;
+}
+
+.admin__scope-old .mage-suggest-search-label {
+    display: block;
+}
+
 .mage-suggest-search-label input {
-	border: none;
-}
-
-/* Category Selector in "Create New Category" popup */
+    border: none;
+}
+
+/* Category Selector in "Create New Category" popup */
 .mage-new-category-dialog .mage-suggest {
-	border: none;
-	box-shadow: none;
-}
-
+    border: none;
+    box-shadow: none;
+}
+
 .mage-new-category-dialog .mage-suggest .mage-suggest-inner {
-	padding: 0;
-}
-
+    padding: 0;
+}
+
 .mage-new-category-dialog .mage-suggest-search-field input.mage-suggest-state-loading {
-	padding-right: 15px;
-}
-
+    padding-right: 15px;
+}
+
 .mage-new-category-dialog .mage-suggest-choices {
-	position: relative;
-	padding: 2px 22px 2px 2px;
-	background-color: #fff;
-	border: 1px solid #ccc;
-	border-radius: 3px;
-	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
+    background-color: #fff;
+    border: 1px solid #ccc;
+    border-radius: 3px;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+       -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+            box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+    padding: 2px 22px 2px 2px;
+    position: relative;
+}
+
 .mage-new-category-dialog .ui-dialog-content,
 .mage-new-category-dialog .ui-dialog-content form {
-	overflow: visible;
-}
-
+    overflow: visible;
+}
+
 .mage-new-category-dialog .mage-suggest-inner {
-	padding: 2px 22px 2px 2px;
-}
-
+    padding: 2px 22px 2px 2px;
+}
+
 .mage-suggest-choices {
-	margin: 0;
-	padding: 0;
-	list-style: none;
-}
-
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+
 .mage-suggest-choices > li {
-	display: inline-block;
-}
-
+    display: inline-block;
+}
+
 .mage-suggest-search-field {
-	width: 100%;
-	white-space: nowrap;
-	margin: 0;
-	padding: 0;
-}
-
+    margin: 0;
+    padding: 0;
+    white-space: nowrap;
+    width: 100%;
+}
+
 .mage-suggest-search-field input,
 .mage-suggest-search-field input:focus,
 .mage-suggest-search-field input:active {
-	width: 100%;
-	height: 22px;
-	line-height: 22px;
-	border: 0 none;
-	box-shadow: none;
-	padding: 0 3px;
-}
-
+    border: 0 none;
+    box-shadow: none;
+    height: 22px;
+    line-height: 22px;
+    padding: 0 3px;
+    width: 100%;
+}
+
 .mage-suggest-search-field input.mage-suggest-state-loading {
-	background: #fff url('images/spinner.gif') no-repeat 100%;
-	padding-right: 22px;
-	position: relative;
-	z-index: 1;
-}
-
-.mage-suggest-choice {
-	position: relative;
-	background: #cdecf6;
-	border: 1px solid #a7cedb;
-	border-radius: 3px;
-	padding: 2px 22px 1px 9px;
-	margin: 1px 2px 1px 0;
-	vertical-align: top;
-	cursor: default;
-	-moz-transition: background .3s;
-	-webkit-transition: background .3s;
-	transition: background .3s;
-}
-
+    background: #fff url('images/spinner.gif') no-repeat 100%;
+    padding-right: 22px;
+    position: relative;
+    z-index: 1;
+}
+
+.admin__scope-old .mage-suggest-choice {
+    background: #cdecf6;
+    border: 1px solid #a7cedb;
+    border-radius: 3px;
+    cursor: default;
+    height: auto;
+    margin: 1px 2px 1px 0;
+    padding: 2px 22px 1px 9px;
+    position: relative;
+    -webkit-transition: background .3s;
+       -moz-transition: background .3s;
+            transition: background .3s;
+    vertical-align: top;
+}
+
 .mage-suggest-choice:hover {
-	background: #aae3f5;
-}
-
+    background: #aae3f5;
+}
+
 .mage-suggest-choice-close {
-	position: absolute;
-	top: 0;
-	right: 0;
-	bottom: 0;
-	width: 20px;
-	line-height: 16px;
-	text-align: center;
-	color: #7b94a1;
-	cursor: pointer;
-}
-
+    bottom: 0;
+    color: #7b94a1;
+    cursor: pointer;
+    line-height: 16px;
+    position: absolute;
+    right: 0;
+    text-align: center;
+    top: 0;
+    width: 20px;
+}
+
 .mage-suggest-choice-close:hover {
-	color: #000;
-}
-
+    color: #000;
+}
+
 .mage-suggest-choice-close:before {
-	font-family: 'MUI-Icons';
-	font-style: normal;
-	speak: none;
-	font-weight: normal;
-	-webkit-font-smoothing: antialiased;
-	content: '\e07d'; /* close icon */
-	font-size: 6px;
-}
-
+    content: '\e07d'; /* close icon */
+    font-family: 'MUI-Icons';
+    font-size: 6px;
+    -webkit-font-smoothing: antialiased;
+    font-style: normal;
+    font-weight: normal;
+    speak: none;
+}
+
 .mage-suggest-no-records {
-	display: inline-block;
-	padding: 10px;
-}
-
+    display: inline-block;
+    padding: 10px;
+}
+
 .ui-helper-hidden-accessible {
-	display: none;
-}
\ No newline at end of file
+    display: none;
+}
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index a324135f1c46bb9163b0048c1afe136032708f8a..29ef5d3ca95c9bbddc89e69d276672bb88d50cb4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -137,6 +137,8 @@ define([
 
                             var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 135;
                             $(this).closest('.ui-dialog').css('margin-top', topMargin);
+
+                            $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                         },
                         close: function () {
                             $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/product/product.css b/app/code/Magento/Catalog/view/adminhtml/web/product/product.css
index 6f5ae923834d7873c7bd2856c1e25f2bb225e598..0ae2dbe3db001fb5b1e37b217e05c5e3e46658df 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/product/product.css
+++ b/app/code/Magento/Catalog/view/adminhtml/web/product/product.css
@@ -3,17 +3,17 @@
  * See COPYING.txt for license details.
  */
 
-.product-actions {
+.admin__scope-old .product-actions {
     padding: 5px 18px;
 }
-.product-actions .switcher {
+.admin__scope-old .product-actions .switcher {
     display: inline-block;
     vertical-align: top;
     margin: 3px 0 6px 6px;
 }
 
 /* Image Management */
-.images {
+.admin__scope-old .images {
     position: relative;
     border: 2px dotted #ccc;
     border-radius: 5px;
@@ -21,8 +21,8 @@
     padding: 5px;
 }
 
-.image,
-.gallery .ui-state-highlight {
+.admin__scope-old .image,
+.admin__scope-old .gallery .ui-state-highlight {
     position: relative;
     width: 17.874%;
     border: 1px solid #ccc;
@@ -37,11 +37,11 @@
     box-sizing: border-box;
 }
 
-.image .spacer {
+.admin__scope-old .image .spacer {
     width: 100%;
 }
 
-.image .product-image {
+.admin__scope-old .image .product-image {
     position: absolute;
     left: 0;
     top: 0;
@@ -52,7 +52,7 @@
     z-index: 1;
 }
 
-.image-label {
+.admin__scope-old .image-label {
     visibility: hidden;
     position: absolute;
     top: 0;
@@ -64,11 +64,11 @@
     z-index: 2;
 }
 
-.image.base-image .image-label {
+.admin__scope-old .image.base-image .image-label {
     visibility: visible;
 }
 
-.image-fade {
+.admin__scope-old .image-fade {
     visibility: hidden;
     position: absolute;
     left: 0;
@@ -85,24 +85,19 @@
     z-index: 3;
 }
 
-.eq-ie8 .image-fade {
-    background: #f7f2ec;
-    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
-}
-
-.image.hidden-for-front .image-fade {
+.admin__scope-old .image.hidden-for-front .image-fade {
     visibility: visible;
 }
 
-.gallery .image.hidden-for-front .image-fade {
+.admin__scope-old .gallery .image.hidden-for-front .image-fade {
     line-height: 160px;
 }
 
-.image.active {
+.admin__scope-old .image.active {
     box-shadow: 0 0 10px #2ea9ec;
 }
 
-.image .actions {
+.admin__scope-old .image .actions {
     position: absolute;
     top: 0;
     right: 0;
@@ -118,26 +113,26 @@
     z-index: 1;
 }
 
-.image .actions [class^="action-"],
-.image[data-image-hidden]:hover .actions [class^="action-"],
-.image.hidden-for-front:hover .actions [class^="action-"] {
+.admin__scope-old .image .actions [class^="action-"],
+.admin__scope-old .image[data-image-hidden]:hover .actions [class^="action-"],
+.admin__scope-old .image.hidden-for-front:hover .actions [class^="action-"] {
     visibility: hidden;
 }
 
-.image:hover .actions [class^="action-"],
-.image[data-image-hidden]:hover .actions .action-delete,
-.hidden-for-front:hover .actions .action-delete {
+.admin__scope-old .image:hover .actions [class^="action-"],
+.admin__scope-old .image[data-image-hidden]:hover .actions .action-delete,
+.admin__scope-old .hidden-for-front:hover .actions .action-delete {
     visibility: visible;
 }
 
-.image .action-delete {
+.admin__scope-old .image .action-delete {
     position: absolute;
     top: 2px;
     right: 2px;
     z-index: 2;
 }
 
-.image .action-make-base {
+.admin__scope-old .image .action-make-base {
     position: absolute;
     bottom: 20px;
     left: 10%;
@@ -146,11 +141,11 @@
     margin: auto;
 }
 
-.image.base-image .action-make-base {
+.admin__scope-old .image.base-image .action-make-base {
     display: none;
 }
 
-.image .draggable-handle {
+.admin__scope-old .image .draggable-handle {
     position: absolute;
     width: 14px;
     height: 8px;
@@ -164,31 +159,31 @@
     z-index: 2;
 }
 
-.image .draggable-handle:before {
+.admin__scope-old .image .draggable-handle:before {
     content: '';
 }
 
-.gallery .image .action-make-base {
+.admin__scope-old .gallery .image .action-make-base {
     width: 70%;
 }
 
-.gallery .image .action-delete {
+.admin__scope-old .gallery .image .action-delete {
     top: 5px;
     right: 5px;
 }
 
-.image.ui-sortable-placeholder {
+.admin__scope-old .image.ui-sortable-placeholder {
     background: #d7ebf5;
     border: 1px dotted #93dbff;
     visibility: visible !important;
 }
 
-.image-placeholder {
+.admin__scope-old .image-placeholder {
     position: relative;
     background: #fff url(Magento_Backend::images/image-placeholder.png) no-repeat 50% 0;
 }
 
-.image-placeholder .fileinput-button {
+.admin__scope-old .image-placeholder .fileinput-button {
     position: absolute;
     left: 0;
     top: 0;
@@ -196,11 +191,11 @@
     bottom: 0;
 }
 
-.image-placeholder .fileinput-button > span {
+.admin__scope-old .image-placeholder .fileinput-button > span {
     display: none;
 }
 
-.image-placeholder input[type="file"] {
+.admin__scope-old .image-placeholder input[type="file"] {
     position: absolute;
     top: 0;
     right: 0;
@@ -215,8 +210,8 @@
     cursor: pointer;
 }
 
-.image-placeholder .file-row,
-.image-placeholder.loading:after {
+.admin__scope-old .image-placeholder .file-row,
+.admin__scope-old .image-placeholder.loading:after {
     position: absolute;
     left: 0;
     right: 0;
@@ -231,7 +226,7 @@
     text-indent: -999em;
 }
 
-.image-placeholder-text {
+.admin__scope-old .image-placeholder-text {
     padding: 0 10px;
     position: absolute;
     left: 0;
@@ -244,22 +239,22 @@
     color: #cac8c4;
 }
 
-.gallery .image-placeholder {
+.admin__scope-old .gallery .image-placeholder {
     background-position: 50% 30%;
 }
 
-.gallery .image-placeholder-text {
+.admin__scope-old .gallery .image-placeholder-text {
     margin-bottom: 15%;
 }
 
 @media screen and (max-width: 1200px) {
-    .gallery .image-placeholder-text {
+    .admin__scope-old .gallery .image-placeholder-text {
         margin-bottom: 5px;
     }
 }
 
 /* Gallery image panel */
-.image-panel {
+.admin__scope-old .image-panel {
     display: none;
     position: relative;
     top: 5px;
@@ -271,12 +266,7 @@
     border-bottom: 1px solid #cfd0cb;
 }
 
-.eq-ie8 .image-panel {
-    border: solid #d6d3d0;
-    border-width: 2px 1px 1px;
-}
-
-.image-pointer {
+.admin__scope-old .image-pointer {
     position: absolute;
     left: 50%;
     top: -11px;
@@ -286,81 +276,77 @@
     background: url(Magento_Backend::images/gallery-image-panel-corner.png) no-repeat;
 }
 
-.eq-ie8 .image-pointer {
-    top: -13px;
-}
-
-.image-panel-controls,
-.image-panel-preview {
+.admin__scope-old .image-panel-controls,
+.admin__scope-old .image-panel-preview {
     float: left;
     width: 65.95744680199999%;
     margin-left: 2.127659574%;
 }
 
-.image-panel-preview {
+.admin__scope-old .image-panel-preview {
     margin-left: 0;
 }
 
-.image-panel-controls {
+.admin__scope-old .image-panel-controls {
     width: 29.914893614%;
     padding: 28px 1% 0 1%;
 }
 
-.image-panel-controls .image-name {
+.admin__scope-old .image-panel-controls .image-name {
     display: block;
     margin: 0 0 3px;
     color: #666;
 }
 
-.image-file-params {
+.admin__scope-old .image-file-params {
     margin: 0 0 10px 0;
     font-size: 11px;
     color: #666;
 }
 
-.image-panel-controls .action-remove,
-.image-panel-controls .action-remove:hover,
-.image-panel-controls .action-remove:active,
-.image-panel-controls .action-remove:focus,
-.image-panel-controls .action-remove[disabled] {
+.admin__scope-old .image-panel-controls .action-remove,
+.admin__scope-old .image-panel-controls .action-remove:hover,
+.admin__scope-old .image-panel-controls .action-remove:active,
+.admin__scope-old .image-panel-controls .action-remove:focus,
+.admin__scope-old .image-panel-controls .action-remove[disabled] {
     color: #a29c94;
     font: 12px/1.333 Arial, Verdana, sans-serif;
     text-decoration: underline;
     margin: 0 0 46px 0;
 }
 
-.image-panel-controls .fieldset-image-panel {
+.admin__scope-old .image-panel-controls .fieldset-image-panel {
     padding: 0 5px 0 0;
 }
 
-.image-panel-controls .fieldset-image-panel .field {
+.admin__scope-old .image-panel-controls .fieldset-image-panel .field {
     margin-bottom: 30px;
 }
 
-.image-panel-controls .fieldset-image-panel .label {
+.admin__scope-old .image-panel-controls .fieldset-image-panel .label {
     width: 100%;
     text-align: left;
     margin-bottom: 10px;
     padding-top: 0;
 }
 
-.image-panel-controls .fieldset-image-panel .field > .control,
-.image-panel-controls textarea {
+.admin__scope-old .image-panel-controls .fieldset-image-panel .field > .control,
+.admin__scope-old .image-panel-controls textarea {
     width: 100%;
     resize: vertical;
 }
 
-.image-panel-preview img {
+.admin__scope-old .image-panel-preview img {
     width: 100%;
 }
 
-.image-panel .action-close {
+.admin__scope-old .image-panel .action-close {
     position: absolute;
     top: 15px;
     right: 15px;
 }
 
-.image-panel .action-close:before {
+.admin__scope-old .image-panel .action-close:before {
     font-family: 'MUI-Icons';
     font-style: normal;
     speak: none;
@@ -371,105 +357,105 @@
     color: #bbb;
 }
 
-.image-panel .action-close span {
+.admin__scope-old .image-panel .action-close span {
     display: none;
 }
 
 /* action in fieldset wrapper */
-#group-fields-product-details-wrapper .attribute-selector {
+.admin__scope-old #group-fields-product-details-wrapper .attribute-selector {
     visibility: hidden;
 }
 
-#group-fields-product-details-wrapper.opened .attribute-selector {
+.admin__scope-old #group-fields-product-details-wrapper.opened .attribute-selector {
     visibility: visible;
 }
 
-.action-manage-images {
+.admin__scope-old .action-manage-images {
     font: 11px/1.666 Arial, Verdana, sans-serif;
     color: #a29c94;
     text-decoration: underline;
 }
 
 /* Quantity filed on product */
-.field-quantity_and_stock_status input[type="text"],
-.field-weight .control .field:first-child {
+.admin__scope-old .field-quantity_and_stock_status input[type="text"],
+.admin__scope-old .field-weight .control .field:first-child {
     width: 140px;
     margin-right: 15px;
 }
 
-.field-quantity_and_stock_status select {
+.admin__scope-old .field-quantity_and_stock_status select {
     vertical-align: middle;
 }
 
 /* Weight field */
-.field-weight .control {
+.admin__scope-old .field-weight .control {
     display: table;
     width: 100%;
 }
 
-.field-weight .control .field:first-child .control {
+.admin__scope-old .field-weight .control .field:first-child .control {
     width: 100%;
 }
 
-.field-weight .choice {
+.admin__scope-old .field-weight .choice {
     padding-top: 3px;
 }
 
-.field-weight .choice input {
+.admin__scope-old .field-weight .choice input {
     margin-right: 5px;
     vertical-align: bottom;
 }
 
-.field-price .addon > input {
+.admin__scope-old .field-price .addon > input {
     width: 99px;
     float: left;
 }
 
 /* Validation for Product Fields with addons  */
-.field-price .control,
-.field-special_price .control,
-.field-msrp .control,
-.field-weight .control,
-.field-quantity_and_stock_status .control {
+.admin__scope-old .field-price .control,
+.admin__scope-old .field-special_price .control,
+.admin__scope-old .field-msrp .control,
+.admin__scope-old .field-weight .control,
+.admin__scope-old .field-quantity_and_stock_status .control {
     position: relative;
 }
 
-.field-price label.mage-error,
-.field-special_price label.mage-error,
-.field-msrp label.mage-error,
-.field-weight label.mage-error,
-.field-quantity_and_stock_status label.mage-error {
+.admin__scope-old .field-price label.mage-error,
+.admin__scope-old .field-special_price label.mage-error,
+.admin__scope-old .field-msrp label.mage-error,
+.admin__scope-old .field-weight label.mage-error,
+.admin__scope-old .field-quantity_and_stock_status label.mage-error {
     position: static;
 }
 
 /* Change Attribute Set */
-#product_info_tabs li.removed,
-div.removed,
-.field.removed {
+.admin__scope-old #product_info_tabs li.removed,
+.admin__scope-old div.removed,
+.admin__scope-old .field.removed {
     display: none !important;
 }
 
 /*
     Custom Options
 -------------------------------------- */
-#product_options_container_top .field-option-title {
+.admin__scope-old #product_options_container_top .field-option-title {
     width: 500px;
 }
 
-#product_options_container_top .field-option-input-type {
+.admin__scope-old #product_options_container_top .field-option-input-type {
     width: 170px;
 }
 
-#product_options_container_top .col-draggable .draggable-handle {
+.admin__scope-old #product_options_container_top .col-draggable .draggable-handle {
     top: 7px;
 }
 
-#product_options_container_top .col-name,
-#product_options_container_top .col-sku {
+.admin__scope-old #product_options_container_top .col-name,
+.admin__scope-old #product_options_container_top .col-sku {
     width: 38%;
 }
 
-#product_options_container_top .add-select-row ~ label.mage-error {
+.admin__scope-old #product_options_container_top .add-select-row ~ label.mage-error {
     display: block;
     margin: 5px 0 0;
 }
@@ -477,17 +463,17 @@ div.removed,
 /*
     Tier Price Table
 -------------------------------------- */
-.tiers_table .col-qty {
+.admin__scope-old .tiers_table .col-qty {
     text-align: left;
     width: 150px;
 }
 
-.tiers_table .col-qty > input[type="text"] {
+.admin__scope-old .tiers_table .col-qty > input[type="text"] {
     width: 40%;
     margin-right: 5px;
 }
 
-.tiers_table .col-qty > .nobr {
+.admin__scope-old .tiers_table .col-qty > .nobr {
     width: 50%;
     float: right;
     margin-top: 6px;
@@ -495,38 +481,38 @@ div.removed,
     overflow: hidden;
 }
 
-.tiers_table .col-price {
+.admin__scope-old .tiers_table .col-price {
     width: 16%;
 }
 
-.new-variation-set {
+.admin__scope-old .new-variation-set {
     margin-left: 2.127659574%;
 }
 
-.not-applicable-attribute {
+.admin__scope-old .not-applicable-attribute {
     display: none;
 }
 
-.attribute-selector {
+.admin__scope-old .attribute-selector {
     margin: -3px -4px 0 0;
 }
 
-.attribute-selector .dropdown-menu {
+.admin__scope-old .attribute-selector .dropdown-menu {
     left: auto;
     right: 0;
 }
 
-.attribute-selector .action-choose {
+.admin__scope-old .attribute-selector .action-choose {
     margin: 0;
 }
 
-.attribute-selector .mage-suggest-dropdown > ul {
+.admin__scope-old .attribute-selector .mage-suggest-dropdown > ul {
     position: relative;
     max-height: 200px;
     overflow: auto;
     z-index: 1;
 }
 
-.attribute-selector .dropdown-menu .actions {
+.admin__scope-old .attribute-selector .dropdown-menu .actions {
     padding: 14px 12px;
 }
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/date.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/date.phtml
index abebf09f2cd8024912fa68afcdc80c92cd566aff..5b98a739879f007b2510650842ba8f2061897f89 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/date.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/date.phtml
@@ -12,37 +12,38 @@
 <?php $class = ($_option->getIsRequire()) ? ' required' : ''; ?>
 <div class="field date<?php echo $class; ?>"
     data-mage-init='{"priceOptionDate":{"fromSelector":"#product_addtocart_form"}}'>
-    <label class="label">
-        <span><?php echo  $block->escapeHtml($_option->getTitle()) ?></span>
-        <?php echo $block->getFormatedPrice() ?>
-    </label>
-    <div class="control">
-        <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE_TIME
-            || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE): ?>
+    <fieldset class="fieldset fieldset-product-options-inner<?php echo $class; ?>">
+        <legend class="legend">
+            <span><?php echo  $block->escapeHtml($_option->getTitle()) ?></span>
+            <?php echo $block->getFormatedPrice() ?>
+        </legend>
+        <div class="control">
+            <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE_TIME
+                || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE): ?>
 
-            <?php echo $block->getDateHtml() ?>
+                <?php echo $block->getDateHtml() ?>
 
-        <?php endif; ?>
+            <?php endif; ?>
 
-        <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE_TIME
-            || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_TIME): ?>
-            <span class="time-picker"><?php echo $block->getTimeHtml() ?></span>
-        <?php endif; ?>
+            <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE_TIME
+                || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_TIME): ?>
+                <span class="time-picker"><?php echo $block->getTimeHtml() ?></span>
+            <?php endif; ?>
 
-        <?php if ($_option->getIsRequire()): ?>
-            <input type="hidden"
-                name="validate_datetime_<?php echo $_optionId ?>"
-                class="validate-datetime-<?php echo $_optionId ?>"
-                value=""
-                data-validate="{'validate-required-datetime':<?php echo $_optionId?>}"/>
-        <?php else: ?>
-            <input type="hidden"
-                name="validate_datetime_<?php echo $_optionId ?>"
-                class="validate-datetime-<?php echo $_optionId ?>"
-                value=""
-                data-validate="{'validate-optional-datetime':<?php echo $_optionId?>}"/>
-        <?php endif; ?>
-        <script type="text/x-magento-init">
+            <?php if ($_option->getIsRequire()): ?>
+                <input type="hidden"
+                       name="validate_datetime_<?php echo $_optionId ?>"
+                       class="validate-datetime-<?php echo $_optionId ?>"
+                       value=""
+                       data-validate="{'validate-required-datetime':<?php echo $_optionId?>}"/>
+            <?php else: ?>
+                <input type="hidden"
+                       name="validate_datetime_<?php echo $_optionId ?>"
+                       class="validate-datetime-<?php echo $_optionId ?>"
+                       value=""
+                       data-validate="{'validate-optional-datetime':<?php echo $_optionId?>}"/>
+            <?php endif; ?>
+            <script type="text/x-magento-init">
             {
                 "#product_addtocart_form": {
                     "validation": {
@@ -51,5 +52,7 @@
                 }
             }
         </script>
-    </div>
+        </div>
+    </fieldset>
+
 </div>
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php
index db437d612291d05474c6c714880dcc50bc66196e..57aa38a39d16721114a731920249284875dcb5cd 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php
@@ -558,7 +558,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::getEntityTypeCode
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::getEntityTypeCode
      */
     public function testGetEntityTypeCode()
     {
@@ -566,15 +566,15 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::importData
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_importData
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveOptions
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveTitles
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_savePrices
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveSpecificTypeValues
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveSpecificTypePrices
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveSpecificTypeTitles
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_updateProducts
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::importData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_importData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveOptions
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveTitles
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_savePrices
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveSpecificTypeValues
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveSpecificTypePrices
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveSpecificTypeTitles
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_updateProducts
      */
     public function testImportDataAppendBehavior()
     {
@@ -582,8 +582,8 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_importData
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_deleteEntities
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_importData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_deleteEntities
      */
     public function testImportDataDeleteBehavior()
     {
@@ -632,7 +632,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for validation of row without custom option
      *
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isRowWithCustomOption
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isRowWithCustomOption
      */
     public function testValidateRowNoCustomOption()
     {
@@ -646,15 +646,15 @@ class OptionTest extends \PHPUnit_Framework_TestCase
      * @param array $rowData
      * @param array $errors
      *
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::validateRow
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isRowWithCustomOption
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isMainOptionRow
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isSecondaryOptionRow
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateMainRow
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateMainRowAdditionalData
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateSecondaryRow
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateSpecificTypeParameters
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateSpecificParameterData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::validateRow
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isRowWithCustomOption
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isMainOptionRow
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_isSecondaryOptionRow
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateMainRow
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateMainRowAdditionalData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateSecondaryRow
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateSpecificTypeParameters
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_validateSpecificParameterData
      * @dataProvider validateRowDataProvider
      */
     public function testValidateRow(array $rowData, array $errors)
@@ -675,11 +675,11 @@ class OptionTest extends \PHPUnit_Framework_TestCase
      * @param string|null $behavior
      * @param int $numberOfValidations
      *
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::validateAmbiguousData
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_findNewOptionsWithTheSameTitles
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_findOldOptionsWithTheSameTitles
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_findNewOldOptionsTypeMismatch
-     * covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveNewOptionData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::validateAmbiguousData
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_findNewOptionsWithTheSameTitles
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_findOldOptionsWithTheSameTitles
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_findNewOldOptionsTypeMismatch
+     * @covers \Magento\CatalogImportExport\Model\Import\Product\Option::_saveNewOptionData
      * @dataProvider validateAmbiguousDataDataProvider
      */
     public function testValidateAmbiguousData(
diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json
index e7d2be7e347536cbdbc8fa8e8074517cff30da15..3d648c064b3abec3b79a9ebf0ce4675582bece41 100644
--- a/app/code/Magento/CatalogImportExport/composer.json
+++ b/app/code/Magento/CatalogImportExport/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-import-export": "0.42.0-beta11",
-        "magento/module-indexer": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-import-export": "0.74.0-beta2",
+        "magento/module-indexer": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogInventory/Exception.php b/app/code/Magento/CatalogInventory/Exception.php
deleted file mode 100644
index 61edb1d7f44a003e21bcd8bcafb719190cc79cce..0000000000000000000000000000000000000000
--- a/app/code/Magento/CatalogInventory/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\CatalogInventory;
-
-class Exception extends \Exception
-{
-}
diff --git a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Full.php b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Full.php
index ff2cafbdcbd422cda438238fac8d4b5662689703..070fc994c48fa940f3c341130652fc5a14e2295b 100644
--- a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Full.php
+++ b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Full.php
@@ -19,16 +19,18 @@ class Full extends \Magento\CatalogInventory\Model\Indexer\Stock\AbstractAction
      * Execute Full reindex
      *
      * @param null|array $ids
-     * @throws \Magento\CatalogInventory\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @return void
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function execute($ids = null)
     {
         try {
             $this->reindexAll();
         } catch (\Exception $e) {
-            throw new \Magento\CatalogInventory\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
         }
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Row.php b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Row.php
index 2ddf25ac201eb6aa6bd452635b66420d1d1c87f3..0103d0849f897fa8ca31ce6d9071de6d167d9e1f 100644
--- a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Row.php
+++ b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Row.php
@@ -19,19 +19,21 @@ class Row extends \Magento\CatalogInventory\Model\Indexer\Stock\AbstractAction
      * Execute Row reindex
      *
      * @param int|null $id
-     * @throws \Magento\CatalogInventory\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @return void
      */
     public function execute($id = null)
     {
         if (!isset($id) || empty($id)) {
-            throw new \Magento\CatalogInventory\Exception(__('Could not rebuild index for undefined product'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Could not rebuild index for undefined product')
+            );
         }
         try {
             $this->_reindexRows([$id]);
         } catch (\Exception $e) {
-            throw new \Magento\CatalogInventory\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException($e->getMessage(), $e->getCode(), $e);
         }
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Rows.php b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Rows.php
index 5e6a31a6b70d7c642827053fac8fd9b20f16a272..ed9b5827e8c3d417caaaf839cb68280060c06a5e 100644
--- a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Rows.php
+++ b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Action/Rows.php
@@ -19,19 +19,21 @@ class Rows extends \Magento\CatalogInventory\Model\Indexer\Stock\AbstractAction
      * Execute Rows reindex
      *
      * @param array $ids
-     * @throws \Magento\CatalogInventory\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @return void
      */
     public function execute($ids)
     {
         if (empty($ids)) {
-            throw new \Magento\CatalogInventory\Exception(__('Could not rebuild index for empty products array'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Could not rebuild index for empty products array')
+            );
         }
         try {
             $this->_reindexRows($ids);
         } catch (\Exception $e) {
-            throw new \Magento\CatalogInventory\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException($e->getMessage(), $e->getCode(), $e);
         }
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php
index 664492933324e1f041138647743990f824e5cdac..a096f71925e83c08696139a9d64d5abed10ec239 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php
@@ -41,7 +41,7 @@ class FullTest extends \PHPUnit_Framework_TestCase
             $productTypeMock
         );
 
-        $this->setExpectedException('\Magento\CatalogInventory\Exception', $exceptionMessage);
+        $this->setExpectedException('\Magento\Framework\Exception\LocalizedException', $exceptionMessage);
 
         $model->execute();
     }
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowTest.php
index a6071c6213c71f97e833e5c8518538e9687b3cb2..9a2bb4ec376b3c01d2a7c1862f4b7f802c39d5e1 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowTest.php
@@ -25,7 +25,7 @@ class RowTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\CatalogInventory\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Could not rebuild index for undefined product
      */
     public function testEmptyId()
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowsTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowsTest.php
index 70d917aa59e80a72428e42210c1ef9d441cf6e9b..460f300c153a7072423465ef3685d691be6d3634 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowsTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/RowsTest.php
@@ -25,7 +25,7 @@ class RowsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\CatalogInventory\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Could not rebuild index for empty products array
      */
     public function testEmptyIds()
diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json
index 1f8771b0c1708cb6290a8fb8202fe76a2b88f48c..a08100c30935a41452a6cdcbbca3a6fba2b62d9e 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-indexer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-indexer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Tab/Main.php b/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Tab/Main.php
index 60ddd32007c278a4cf5f0d497d5b65c7ad3002d9..60c9971f2da7be9f2501f0e8ff1ece128fa045ca 100644
--- a/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Tab/Main.php
+++ b/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Tab/Main.php
@@ -196,7 +196,6 @@ class Main extends Generic implements TabInterface
                 'name' => 'from_date',
                 'label' => __('From Date'),
                 'title' => __('From Date'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'input_format' => \Magento\Framework\Stdlib\DateTime::DATE_INTERNAL_FORMAT,
                 'date_format' => $dateFormat
             ]
@@ -208,7 +207,6 @@ class Main extends Generic implements TabInterface
                 'name' => 'to_date',
                 'label' => __('To Date'),
                 'title' => __('To Date'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'input_format' => \Magento\Framework\Stdlib\DateTime::DATE_INTERNAL_FORMAT,
                 'date_format' => $dateFormat
             ]
diff --git a/app/code/Magento/CatalogRule/CatalogRuleException.php b/app/code/Magento/CatalogRule/CatalogRuleException.php
deleted file mode 100644
index 0b93d3c00f4e46554e9eff6a1ba22aed24ea4824..0000000000000000000000000000000000000000
--- a/app/code/Magento/CatalogRule/CatalogRuleException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\CatalogRule;
-
-class CatalogRuleException extends \Exception
-{
-}
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php
index b3a28507fd6b35cb2c2fa144b95d79bde403e934..56438a823ee13a151c2b4d10d11cf5d7cac53e80 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php
@@ -13,26 +13,33 @@ class ApplyRules extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
     /**
      * Apply all active catalog price rules
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Exception
      */
     public function execute()
     {
         $errorMessage = __('Unable to apply rules.');
-        try {
-            /** @var Job $ruleJob */
-            $ruleJob = $this->_objectManager->get('Magento\CatalogRule\Model\Rule\Job');
-            $ruleJob->applyAll();
+        /** @var Job $ruleJob */
+        $ruleJob = $this->_objectManager->get('Magento\CatalogRule\Model\Rule\Job');
+        $ruleJob->applyAll();
 
-            if ($ruleJob->hasSuccess()) {
-                $this->messageManager->addSuccess($ruleJob->getSuccess());
-                $this->_objectManager->create('Magento\CatalogRule\Model\Flag')->loadSelf()->setState(0)->save();
-            } elseif ($ruleJob->hasError()) {
-                $this->messageManager->addError($errorMessage . ' ' . $ruleJob->getError());
-            }
-        } catch (\Exception $e) {
-            $this->_objectManager->create('Psr\Log\LoggerInterface')->critical($e);
-            $this->messageManager->addError($errorMessage);
+        if ($ruleJob->hasSuccess()) {
+            $this->messageManager->addSuccess($ruleJob->getSuccess());
+            $this->_objectManager->create('Magento\CatalogRule\Model\Flag')->loadSelf()->setState(0)->save();
+        } elseif ($ruleJob->hasError()) {
+            $this->messageManager->addError($errorMessage . ' ' . $ruleJob->getError());
         }
-        $this->_redirect('catalog_rule/*');
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('catalog_rule/*');
     }
 }
diff --git a/app/code/Magento/CatalogRule/Model/Indexer/AbstractIndexer.php b/app/code/Magento/CatalogRule/Model/Indexer/AbstractIndexer.php
index a4d8b53934937cd2342f00bfd5505f6d59953ecc..13dc23422a50c60ace7d5f0ed87376fba998f04f 100644
--- a/app/code/Magento/CatalogRule/Model/Indexer/AbstractIndexer.php
+++ b/app/code/Magento/CatalogRule/Model/Indexer/AbstractIndexer.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\CatalogRule\Model\Indexer;
 
-use Magento\CatalogRule\CatalogRuleException;
 use Magento\Framework\Mview\ActionInterface as MviewActionInterface;
 use Magento\Indexer\Model\ActionInterface as IndexerActionInterface;
 
@@ -74,13 +73,15 @@ abstract class AbstractIndexer implements IndexerActionInterface, MviewActionInt
      * Execute partial indexation by ID list
      *
      * @param int[] $ids
-     * @throws CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     public function executeList(array $ids)
     {
         if (!$ids) {
-            throw new CatalogRuleException(__('Could not rebuild index for empty products array'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Could not rebuild index for empty products array')
+            );
         }
         $this->doExecuteList($ids);
     }
@@ -97,13 +98,15 @@ abstract class AbstractIndexer implements IndexerActionInterface, MviewActionInt
      * Execute partial indexation by ID
      *
      * @param int $id
-     * @throws CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     public function executeRow($id)
     {
         if (!$id) {
-            throw new CatalogRuleException(__('Could not rebuild index for undefined product'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Could not rebuild index for undefined product')
+            );
         }
         $this->doExecuteRow($id);
     }
@@ -112,7 +115,7 @@ abstract class AbstractIndexer implements IndexerActionInterface, MviewActionInt
      * Execute partial indexation by ID. Template method
      *
      * @param int $id
-     * @throws \Magento\CatalogRule\CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     abstract protected function doExecuteRow($id);
diff --git a/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php b/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php
index 2394d6afaae2be230798bb620492f6d98fb08b23..a2cfaba45a1e0ccdf826cce274ad17864eb00ca7 100644
--- a/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php
+++ b/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php
@@ -7,7 +7,6 @@
 namespace Magento\CatalogRule\Model\Indexer;
 
 use Magento\Catalog\Model\Product;
-use Magento\CatalogRule\CatalogRuleException;
 use Magento\CatalogRule\Model\Resource\Rule\CollectionFactory as RuleCollectionFactory;
 use Magento\CatalogRule\Model\Rule;
 use Magento\Framework\Pricing\PriceCurrencyInterface;
@@ -126,7 +125,7 @@ class IndexBuilder
      * Reindex by ids
      *
      * @param array $ids
-     * @throws \Magento\CatalogRule\CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     public function reindexByIds(array $ids)
@@ -135,7 +134,7 @@ class IndexBuilder
             $this->doReindexByIds($ids);
         } catch (\Exception $e) {
             $this->critical($e);
-            throw new CatalogRuleException($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException($e->getMessage(), $e->getCode(), $e);
         }
     }
 
@@ -159,7 +158,7 @@ class IndexBuilder
     /**
      * Full reindex
      *
-     * @throws CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     public function reindexFull()
@@ -168,7 +167,7 @@ class IndexBuilder
             $this->doReindexFull();
         } catch (\Exception $e) {
             $this->critical($e);
-            throw new CatalogRuleException($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException($e->getMessage(), $e->getCode(), $e);
         }
     }
 
diff --git a/app/code/Magento/CatalogRule/Model/Observer.php b/app/code/Magento/CatalogRule/Model/Observer.php
index 88f24410e253ea30111561745a82532154f4952f..9d636b0ae60b1c9288526410b048c92e3c5de6d8 100644
--- a/app/code/Magento/CatalogRule/Model/Observer.php
+++ b/app/code/Magento/CatalogRule/Model/Observer.php
@@ -47,11 +47,6 @@ class Observer
      */
     protected $_customerSession;
 
-    /**
-     * @var Price
-     */
-    protected $_productPrice;
-
     /**
      * @var \Magento\CatalogRule\Model\Resource\Rule\CollectionFactory
      */
@@ -86,7 +81,6 @@ class Observer
      * @param Resource\RuleFactory $resourceRuleFactory
      * @param Resource\Rule $resourceRule
      * @param Resource\Rule\CollectionFactory $ruleCollectionFactory
-     * @param Price $productPrice
      * @param StoreManagerInterface $storeManager
      * @param TimezoneInterface $localeDate
      * @param CustomerModelSession $customerSession
@@ -100,7 +94,6 @@ class Observer
         Resource\RuleFactory $resourceRuleFactory,
         Resource\Rule $resourceRule,
         Resource\Rule\CollectionFactory $ruleCollectionFactory,
-        Rule\Product\Price $productPrice,
         StoreManagerInterface $storeManager,
         TimezoneInterface $localeDate,
         CustomerModelSession $customerSession,
@@ -111,7 +104,6 @@ class Observer
         $this->_resourceRuleFactory = $resourceRuleFactory;
         $this->_resourceRule = $resourceRule;
         $this->_ruleCollectionFactory = $ruleCollectionFactory;
-        $this->_productPrice = $productPrice;
         $this->_storeManager = $storeManager;
         $this->_localeDate = $localeDate;
         $this->_customerSession = $customerSession;
@@ -215,36 +207,6 @@ class Observer
         $this->_rulePrices = [];
     }
 
-    /**
-     * Calculate minimal final price with catalog rule price
-     *
-     * @param EventObserver $observer
-     * @return $this
-     */
-    public function prepareCatalogProductPriceIndexTable(EventObserver $observer)
-    {
-        $select = $observer->getEvent()->getSelect();
-
-        $indexTable = $observer->getEvent()->getIndexTable();
-        $entityId = $observer->getEvent()->getEntityId();
-        $customerGroupId = $observer->getEvent()->getCustomerGroupId();
-        $websiteId = $observer->getEvent()->getWebsiteId();
-        $websiteDate = $observer->getEvent()->getWebsiteDate();
-        $updateFields = $observer->getEvent()->getUpdateFields();
-
-        $this->_productPrice->applyPriceRuleToIndexTable(
-            $select,
-            $indexTable,
-            $entityId,
-            $customerGroupId,
-            $websiteId,
-            $updateFields,
-            $websiteDate
-        );
-
-        return $this;
-    }
-
     /**
      * @param EventObserver $observer
      * @return $this
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/AbstractIndexerTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/AbstractIndexerTest.php
index b9a21020e4120a7218a7af66fc9ba0d833a2ebc8..dfec1c047ab09db3763e463ff16d120f3d4c50ad 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/AbstractIndexerTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/AbstractIndexerTest.php
@@ -74,7 +74,7 @@ class AbstractIndexerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\CatalogRule\CatalogRuleException
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Could not rebuild index for empty products array
      *
      * @return void
@@ -85,7 +85,7 @@ class AbstractIndexerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @throws \Magento\CatalogRule\CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @return void
      */
@@ -98,7 +98,7 @@ class AbstractIndexerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\CatalogRule\CatalogRuleException
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Could not rebuild index for undefined product
      *
      * @return void
@@ -109,7 +109,7 @@ class AbstractIndexerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @throws \Magento\CatalogRule\CatalogRuleException
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @return void
      */
diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json
index 6a4603978014cd24961f7b33ab1c3f97af727401..527f58c05615f46d3c9348c710cb8f5ce65b8777 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.42.0-beta11",
-        "magento/module-rule": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-indexer": "0.42.0-beta11",
-        "magento/module-import-export": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-rule": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-indexer": "0.74.0-beta2",
+        "magento/module-import-export": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogRule/etc/events.xml b/app/code/Magento/CatalogRule/etc/events.xml
deleted file mode 100644
index 646d1de75082550ea731b69746dde56286d45953..0000000000000000000000000000000000000000
--- a/app/code/Magento/CatalogRule/etc/events.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
-    <event name="prepare_catalog_product_price_index_table">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Model\Observer" method="prepareCatalogProductPriceIndexTable" />
-    </event>
-</config>
diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json
index 6f18c48c09539f25b5ed88d00c92ed9b5334e7c4..d0d4169d006ce4208d00d09dc1b3dc3c87a907c5 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-search": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-indexer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-search": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-indexer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json
index 4a580fe66dccd16f87760604369c6f05f4256b19..730aec4c662dca3ff93602e6ecfcc12d33594130 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-catalog-import-export": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-import-export": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-url-rewrite": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-catalog-import-export": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-import-export": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-url-rewrite": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogWidget/composer.json b/app/code/Magento/CatalogWidget/composer.json
index 38d68cb4be5b1f67ea0aa3462eca11d684c9b1a2..772427302289cc7e94adf038c5620c8751c04d20 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.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-rule": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-rule": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Centinel/Test/Unit/Model/ServiceTest.php b/app/code/Magento/Centinel/Test/Unit/Model/ServiceTest.php
index 0d992a5643d7149dd601edd4faeef07446143c9a..e9b5237e16ead347fa64ebafda32d99533ba6392 100644
--- a/app/code/Magento/Centinel/Test/Unit/Model/ServiceTest.php
+++ b/app/code/Magento/Centinel/Test/Unit/Model/ServiceTest.php
@@ -12,8 +12,8 @@ namespace Magento\Centinel\Test\Unit\Model;
 class ServiceTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Centinel\Model\Service::getAuthenticationStartUrl
-     * covers \Magento\Centinel\Model\Service::_getUrl
+     * @covers \Magento\Centinel\Model\Service::getAuthenticationStartUrl
+     * @covers \Magento\Centinel\Model\Service::_getUrl
      */
     public function testGetAuthenticationStartUrl()
     {
diff --git a/app/code/Magento/Centinel/composer.json b/app/code/Magento/Centinel/composer.json
index 78cdf53ce4d7b9324bbad2319b41f85dde732814..497c1378422053931b3f7c2580aeb4f9843162c5 100644
--- a/app/code/Magento/Centinel/composer.json
+++ b/app/code/Magento/Centinel/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Checkout/Block/Cart/Sidebar.php b/app/code/Magento/Checkout/Block/Cart/Sidebar.php
index a811d6069b6ffe4a1f7469064bb79a7581fe8f87..549b8c8a54437223408fc59daebc1a78637fc0f6 100644
--- a/app/code/Magento/Checkout/Block/Cart/Sidebar.php
+++ b/app/code/Magento/Checkout/Block/Cart/Sidebar.php
@@ -9,6 +9,7 @@
 namespace Magento\Checkout\Block\Cart;
 
 use Magento\Framework\View\Block\IdentityInterface;
+use Magento\Store\Model\ScopeInterface;
 
 /**
  * Wishlist sidebar block
@@ -19,6 +20,7 @@ class Sidebar extends AbstractCart implements IdentityInterface
      * Xml pah to chackout sidebar count value
      */
     const XML_PATH_CHECKOUT_SIDEBAR_COUNT = 'checkout/sidebar/count';
+    const XML_PATH_CHECKOUT_SIDEBAR_DISPLAY = 'checkout/sidebar/display';
 
     /**
      * @var \Magento\Catalog\Model\Resource\Url
@@ -73,7 +75,7 @@ class Sidebar extends AbstractCart implements IdentityInterface
         if (is_null($count)) {
             $count = $this->_scopeConfig->getValue(
                 self::XML_PATH_CHECKOUT_SIDEBAR_COUNT,
-                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+                ScopeInterface::SCOPE_STORE
             );
             $this->setData('item_count', $count);
         }
@@ -161,14 +163,43 @@ class Sidebar extends AbstractCart implements IdentityInterface
     /**
      * Get one page checkout page url
      *
-     * @return bool
-     * @SuppressWarnings(PHPMD.BooleanGetMethodName)
+     * @return string
      */
     public function getCheckoutUrl()
     {
         return $this->getUrl('checkout/onepage');
     }
 
+    /**
+     * Get shoppinc cart page url
+     *
+     * @return string
+     */
+    public function getShoppingCartUrl()
+    {
+        return $this->getUrl('checkout/cart');
+    }
+
+    /**
+     * Get update cart item url
+     *
+     * @return string
+     */
+    public function getUpdateItemQtyUrl()
+    {
+        return $this->getUrl('checkout/sidebar/updateItemQty');
+    }
+
+    /**
+     * Get remove cart item url
+     *
+     * @return string
+     */
+    public function getRemoveItemUrl()
+    {
+        return $this->getUrl('checkout/sidebar/removeItem');
+    }
+
     /**
      * Define if Mini Shopping Cart Pop-Up Menu enabled
      *
@@ -178,8 +209,8 @@ class Sidebar extends AbstractCart implements IdentityInterface
     public function getIsNeedToDisplaySideBar()
     {
         return (bool)$this->_scopeConfig->getValue(
-            'checkout/sidebar/display',
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            self::XML_PATH_CHECKOUT_SIDEBAR_DISPLAY,
+            ScopeInterface::SCOPE_STORE
         );
     }
 
@@ -284,8 +315,24 @@ class Sidebar extends AbstractCart implements IdentityInterface
         return $identities;
     }
 
+    /**
+     * Retrieve subtotal block html
+     *
+     * @return string
+     */
     public function getTotalsHtml()
     {
         return $this->getLayout()->getBlock('checkout.cart.minicart.totals')->toHtml();
     }
+
+    /**
+     * Retrieve items qty text
+     *
+     * @param int $qty
+     * @return \Magento\Framework\Phrase
+     */
+    public function getSummaryText($qty)
+    {
+        return ($qty == 1) ? __(' item') : __(' items');
+    }
 }
diff --git a/app/code/Magento/Checkout/Controller/Action.php b/app/code/Magento/Checkout/Controller/Action.php
index daa22d34d16b57cdf0af041d28743e7276dc4d88..0306ebf24acd733a12192f6fccbf2766405352c8 100644
--- a/app/code/Magento/Checkout/Controller/Action.php
+++ b/app/code/Magento/Checkout/Controller/Action.php
@@ -29,29 +29,21 @@ abstract class Action extends \Magento\Framework\App\Action\Action
      */
     protected $accountManagement;
 
-    /**
-     * @var \Magento\Framework\Controller\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Framework\App\Action\Context $context
      * @param \Magento\Customer\Model\Session $customerSession
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $accountManagement
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
         \Magento\Customer\Model\Session $customerSession,
         CustomerRepositoryInterface $customerRepository,
-        AccountManagementInterface $accountManagement,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
+        AccountManagementInterface $accountManagement
     ) {
         $this->_customerSession = $customerSession;
         $this->customerRepository = $customerRepository;
         $this->accountManagement = $accountManagement;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Checkout/Controller/Cart.php b/app/code/Magento/Checkout/Controller/Cart.php
index 2b056aeac07fab9f177311dcd9c0b9d764fe0763..9aa93f99d03528ac3cb292debd7f03ff01f542aa 100644
--- a/app/code/Magento/Checkout/Controller/Cart.php
+++ b/app/code/Magento/Checkout/Controller/Cart.php
@@ -39,11 +39,6 @@ class Cart extends \Magento\Framework\App\Action\Action implements ViewInterface
      */
     protected $cart;
 
-    /**
-     * @var \Magento\Framework\Controller\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Framework\App\Action\Context $context
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
@@ -51,7 +46,6 @@ class Cart extends \Magento\Framework\App\Action\Action implements ViewInterface
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param CustomerCart $cart
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
@@ -59,15 +53,13 @@ class Cart extends \Magento\Framework\App\Action\Action implements ViewInterface
         \Magento\Checkout\Model\Session $checkoutSession,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
-        CustomerCart $cart,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
+        CustomerCart $cart
     ) {
         $this->_formKeyValidator = $formKeyValidator;
         $this->_scopeConfig = $scopeConfig;
         $this->_checkoutSession = $checkoutSession;
         $this->_storeManager = $storeManager;
         $this->cart = $cart;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Checkout/Controller/Cart/Add.php b/app/code/Magento/Checkout/Controller/Cart/Add.php
index 69aa88b0b3dc81e75993c2e7fb99689b175b71a4..c26c171daea13b95cde9c7ac654c5e30094e4ff3 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Add.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Add.php
@@ -30,7 +30,6 @@ class Add extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param CustomerCart $cart
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param ProductRepositoryInterface $productRepository
      */
     public function __construct(
@@ -40,7 +39,6 @@ class Add extends \Magento\Checkout\Controller\Cart
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         CustomerCart $cart,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         ProductRepositoryInterface $productRepository
     ) {
         parent::__construct(
@@ -49,8 +47,7 @@ class Add extends \Magento\Checkout\Controller\Cart
             $checkoutSession,
             $storeManager,
             $formKeyValidator,
-            $cart,
-            $resultRedirectFactory
+            $cart
         );
         $this->productRepository = $productRepository;
     }
diff --git a/app/code/Magento/Checkout/Controller/Cart/Configure.php b/app/code/Magento/Checkout/Controller/Cart/Configure.php
index eebb127c786c5dc5e73264393b19a8aa3480c40d..cedc400e20b9f56245f3b90261cf0e01d4357b32 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Configure.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Configure.php
@@ -22,7 +22,6 @@ class Configure extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param \Magento\Checkout\Model\Cart $cart
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
@@ -32,7 +31,6 @@ class Configure extends \Magento\Checkout\Controller\Cart
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         \Magento\Checkout\Model\Cart $cart,
-        Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct(
@@ -41,8 +39,7 @@ class Configure extends \Magento\Checkout\Controller\Cart
             $checkoutSession,
             $storeManager,
             $formKeyValidator,
-            $cart,
-            $resultRedirectFactory
+            $cart
         );
         $this->resultPageFactory = $resultPageFactory;
     }
@@ -51,6 +48,7 @@ class Configure extends \Magento\Checkout\Controller\Cart
      * Action to reconfigure cart item
      *
      * @return \Magento\Framework\View\Result\Page|\Magento\Framework\Controller\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -62,30 +60,34 @@ class Configure extends \Magento\Checkout\Controller\Cart
             $quoteItem = $this->cart->getQuote()->getItemById($id);
         }
 
-        try {
-            if (!$quoteItem || $productId != $quoteItem->getProduct()->getId()) {
-                $this->messageManager->addError(__("We can't find the quote item."));
-                return $this->resultRedirectFactory->create()->setPath('checkout/cart');
-            }
+        if (!$quoteItem || $productId != $quoteItem->getProduct()->getId()) {
+            $this->messageManager->addError(__("We can't find the quote item."));
+            return $this->resultRedirectFactory->create()->setPath('checkout/cart');
+        }
 
-            $params = new \Magento\Framework\Object();
-            $params->setCategoryId(false);
-            $params->setConfigureMode(true);
-            $params->setBuyRequest($quoteItem->getBuyRequest());
+        $params = new \Magento\Framework\Object();
+        $params->setCategoryId(false);
+        $params->setConfigureMode(true);
+        $params->setBuyRequest($quoteItem->getBuyRequest());
 
-            $resultPage = $this->resultPageFactory->create();
-            $this->_objectManager->get('Magento\Catalog\Helper\Product\View')
-                ->prepareAndRender(
-                    $resultPage,
-                    $quoteItem->getProduct()->getId(),
-                    $this,
-                    $params
-                );
-            return $resultPage;
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('We cannot configure the product.'));
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
-            return $this->_goBack();
-        }
+        $resultPage = $this->resultPageFactory->create();
+        $this->_objectManager->get('Magento\Catalog\Helper\Product\View')
+            ->prepareAndRender(
+                $resultPage,
+                $quoteItem->getProduct()->getId(),
+                $this,
+                $params
+            );
+        return $resultPage;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        return $this->_goBack();
     }
 }
diff --git a/app/code/Magento/Checkout/Controller/Cart/CouponPost.php b/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
index 26225b39fa6f9732cb5562c4ffda4d28c0f7eacd..2b93e3d1cb1840c16b5db2dfe59a4c531a7aeae8 100644
--- a/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
@@ -21,7 +21,6 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param \Magento\Checkout\Model\Cart $cart
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
      */
     public function __construct(
@@ -31,7 +30,6 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         \Magento\Checkout\Model\Cart $cart,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Quote\Model\QuoteRepository $quoteRepository
     ) {
         parent::__construct(
@@ -40,8 +38,7 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
             $checkoutSession,
             $storeManager,
             $formKeyValidator,
-            $cart,
-            $resultRedirectFactory
+            $cart
         );
         $this->quoteRepository = $quoteRepository;
     }
@@ -50,6 +47,7 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
      * Initialize coupon
      *
      * @return \Magento\Framework\Controller\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
@@ -71,41 +69,44 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
             return $this->_goBack();
         }
 
-        try {
-            $codeLength = strlen($couponCode);
-            $isCodeLengthValid = $codeLength && $codeLength <= \Magento\Checkout\Helper\Cart::COUPON_CODE_MAX_LENGTH;
+        $codeLength = strlen($couponCode);
+        $isCodeLengthValid = $codeLength && $codeLength <= \Magento\Checkout\Helper\Cart::COUPON_CODE_MAX_LENGTH;
 
-            $this->cart->getQuote()->getShippingAddress()->setCollectShippingRates(true);
-            $this->cart->getQuote()->setCouponCode($isCodeLengthValid ? $couponCode : '')->collectTotals();
-            $this->quoteRepository->save($this->cart->getQuote());
+        $this->cart->getQuote()->getShippingAddress()->setCollectShippingRates(true);
+        $this->cart->getQuote()->setCouponCode($isCodeLengthValid ? $couponCode : '')->collectTotals();
+        $this->quoteRepository->save($this->cart->getQuote());
 
-            if ($codeLength) {
-                if ($isCodeLengthValid && $couponCode == $this->cart->getQuote()->getCouponCode()) {
-                    $this->messageManager->addSuccess(
-                        __(
-                            'The coupon code "%1" was applied.',
-                            $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($couponCode)
-                        )
-                    );
-                } else {
-                    $this->messageManager->addError(
-                        __(
-                            'The coupon code "%1" is not valid.',
-                            $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($couponCode)
-                        )
-                    );
-                    $this->cart->save();
-                }
+        if ($codeLength) {
+            if ($isCodeLengthValid && $couponCode == $this->cart->getQuote()->getCouponCode()) {
+                $this->messageManager->addSuccess(
+                    __(
+                        'The coupon code "%1" was applied.',
+                        $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($couponCode)
+                    )
+                );
             } else {
-                $this->messageManager->addSuccess(__('The coupon code was canceled.'));
+                $this->messageManager->addError(
+                    __(
+                        'The coupon code "%1" is not valid.',
+                        $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($couponCode)
+                    )
+                );
+                $this->cart->save();
             }
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('We cannot apply the coupon code.'));
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
+        } else {
+            $this->messageManager->addSuccess(__('The coupon code was canceled.'));
         }
 
         return $this->_goBack();
     }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        return $this->_goBack();
+    }
 }
diff --git a/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php b/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
index 88a1d46d971e69146a4b0f40ff2fb4fe19c3d9d3..ce6bbc95511f5980e8ddb76bad03ca61f0817f80 100644
--- a/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
@@ -22,7 +22,6 @@ class EstimatePost extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param CustomerCart $cart
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
      */
     public function __construct(
@@ -32,7 +31,6 @@ class EstimatePost extends \Magento\Checkout\Controller\Cart
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         CustomerCart $cart,
-        Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Quote\Model\QuoteRepository $quoteRepository
     ) {
         $this->quoteRepository = $quoteRepository;
@@ -42,8 +40,7 @@ class EstimatePost extends \Magento\Checkout\Controller\Cart
             $checkoutSession,
             $storeManager,
             $formKeyValidator,
-            $cart,
-            $resultRedirectFactory
+            $cart
         );
     }
 
diff --git a/app/code/Magento/Checkout/Controller/Cart/Index.php b/app/code/Magento/Checkout/Controller/Cart/Index.php
index 8a29029fd18365c618a3c0f5fede9a0edfd7a0d1..de1a954f86ae22765ed4d4f4426e9c4b1dbf541b 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Index.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Index.php
@@ -21,7 +21,6 @@ class Index extends \Magento\Checkout\Controller\Cart
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      * @param \Magento\Checkout\Model\Cart $cart
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
@@ -31,7 +30,6 @@ class Index extends \Magento\Checkout\Controller\Cart
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
         \Magento\Checkout\Model\Cart $cart,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct(
@@ -40,8 +38,7 @@ class Index extends \Magento\Checkout\Controller\Cart
             $checkoutSession,
             $storeManager,
             $formKeyValidator,
-            $cart,
-            $resultRedirectFactory
+            $cart
         );
         $this->resultPageFactory = $resultPageFactory;
     }
diff --git a/app/code/Magento/Checkout/Controller/Index/Index.php b/app/code/Magento/Checkout/Controller/Index/Index.php
index 7e34b412e338311a0ac66aaeb53a45867572ee29..de5f3dea47424538422c9d06218df3f790f04ace 100644
--- a/app/code/Magento/Checkout/Controller/Index/Index.php
+++ b/app/code/Magento/Checkout/Controller/Index/Index.php
@@ -8,23 +8,6 @@ namespace Magento\Checkout\Controller\Index;
 
 class Index extends \Magento\Framework\App\Action\Action
 {
-    /**
-     * @var \Magento\Framework\Controller\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Framework\App\Action\Context $context
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Framework\App\Action\Context $context,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
diff --git a/app/code/Magento/Checkout/Controller/Onepage.php b/app/code/Magento/Checkout/Controller/Onepage.php
index 3a47eca2e4f86807ed665c56deed717b2b89319a..2257347e9150ba0993f4b04e12a59019744152c1 100644
--- a/app/code/Magento/Checkout/Controller/Onepage.php
+++ b/app/code/Magento/Checkout/Controller/Onepage.php
@@ -7,7 +7,7 @@ namespace Magento\Checkout\Controller;
 
 use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\RequestInterface;
 
 /**
@@ -86,7 +86,6 @@ class Onepage extends Action
      * @param \Magento\Customer\Model\Session $customerSession
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $accountManagement
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Framework\Translate\InlineInterface $translateInline
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
@@ -105,7 +104,6 @@ class Onepage extends Action
         \Magento\Customer\Model\Session $customerSession,
         CustomerRepositoryInterface $customerRepository,
         AccountManagementInterface $accountManagement,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\Translate\InlineInterface $translateInline,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
@@ -131,8 +129,7 @@ class Onepage extends Action
             $context,
             $customerSession,
             $customerRepository,
-            $accountManagement,
-            $resultRedirectFactory
+            $accountManagement
         );
     }
 
@@ -141,7 +138,7 @@ class Onepage extends Action
      *
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
-     * @throws \Magento\Framework\App\Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
      */
     public function dispatch(RequestInterface $request)
     {
@@ -158,7 +155,7 @@ class Onepage extends Action
         }
 
         if (!$this->_canShowForUnregisteredUsers()) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         return parent::dispatch($request);
     }
diff --git a/app/code/Magento/Checkout/Controller/Onepage/SavePayment.php b/app/code/Magento/Checkout/Controller/Onepage/SavePayment.php
index 18a3f1524908e9107e4e561e8e6a0afc7a99cbf4..19e17acf91ee53299f14c092916153888c2766fc 100644
--- a/app/code/Magento/Checkout/Controller/Onepage/SavePayment.php
+++ b/app/code/Magento/Checkout/Controller/Onepage/SavePayment.php
@@ -45,11 +45,6 @@ class SavePayment extends \Magento\Checkout\Controller\Onepage
             if ($redirectUrl) {
                 $result['redirect'] = $redirectUrl;
             }
-        } catch (\Magento\Payment\Exception $e) {
-            if ($e->getFields()) {
-                $result['fields'] = $e->getFields();
-            }
-            $result['error'] = $e->getMessage();
         } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $result['error'] = $e->getMessage();
         } catch (\Exception $e) {
diff --git a/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php b/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0ed1515f90475a09ce1034632bd4db6c656267e
--- /dev/null
+++ b/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Checkout\Controller\Sidebar;
+
+use Magento\Checkout\Model\Sidebar;
+use Magento\Framework\App\Action\Action;
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\App\Response\Http;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Json\Helper\Data;
+use Magento\Framework\View\Result\PageFactory;
+use Psr\Log\LoggerInterface;
+
+class RemoveItem extends Action
+{
+    /**
+     * @var Sidebar
+     */
+    protected $sidebar;
+
+    /**
+     * @var LoggerInterface
+     */
+    protected $logger;
+
+    /**
+     * @var Data
+     */
+    protected $jsonHelper;
+
+    /**
+     * @var PageFactory
+     */
+    protected $resultPageFactory;
+
+    /**
+     * @param Context $context
+     * @param Sidebar $sidebar
+     * @param LoggerInterface $logger
+     * @param Data $jsonHelper
+     * @param PageFactory $resultPageFactory
+     */
+    public function __construct(
+        Context $context,
+        Sidebar $sidebar,
+        LoggerInterface $logger,
+        Data $jsonHelper,
+        PageFactory $resultPageFactory
+    ) {
+        $this->sidebar = $sidebar;
+        $this->logger = $logger;
+        $this->jsonHelper = $jsonHelper;
+        $this->resultPageFactory = $resultPageFactory;
+        parent::__construct($context);
+    }
+
+    /**
+     * @return $this
+     */
+    public function execute()
+    {
+        $itemId = (int)$this->getRequest()->getParam('item_id');
+        try {
+            $this->sidebar->checkQuoteItem($itemId);
+            $this->sidebar->removeQuoteItem($itemId);
+            return $this->jsonResponse();
+        } catch (LocalizedException $e) {
+            return $this->jsonResponse($e->getMessage());
+        } catch (\Exception $e) {
+            $this->logger->critical($e);
+            return $this->jsonResponse($e->getMessage());
+        }
+    }
+
+    /**
+     * Compile JSON response
+     *
+     * @param string $error
+     * @return Http
+     */
+    protected function jsonResponse($error = '')
+    {
+        $response = $this->sidebar->getResponseData($error);
+
+        if (empty($error)) {
+            $resultPage = $this->resultPageFactory->create();
+            $block = $resultPage->getLayout()->getBlock('minicart.content')->toHtml();
+            $response['content'] = $block;
+        }
+
+        return $this->getResponse()->representJson(
+            $this->jsonHelper->jsonEncode($response)
+        );
+    }
+}
diff --git a/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php b/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php
new file mode 100644
index 0000000000000000000000000000000000000000..656ea11ad773b9a2141a12e4c6714ccc33a880f9
--- /dev/null
+++ b/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Checkout\Controller\Sidebar;
+
+use Magento\Checkout\Model\Sidebar;
+use Magento\Framework\App\Action\Action;
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\App\Response\Http;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Json\Helper\Data;
+use Psr\Log\LoggerInterface;
+
+class UpdateItemQty extends Action
+{
+    /**
+     * @var Sidebar
+     */
+    protected $sidebar;
+
+    /**
+     * @var LoggerInterface
+     */
+    protected $logger;
+
+    /**
+     * @var Data
+     */
+    protected $jsonHelper;
+
+    /**
+     * @param Context $context
+     * @param Sidebar $sidebar
+     * @param LoggerInterface $logger
+     * @param Data $jsonHelper
+     */
+    public function __construct(
+        Context $context,
+        Sidebar $sidebar,
+        LoggerInterface $logger,
+        Data $jsonHelper
+    ) {
+        $this->sidebar = $sidebar;
+        $this->logger = $logger;
+        $this->jsonHelper = $jsonHelper;
+        parent::__construct($context);
+    }
+
+    /**
+     * @return $this
+     */
+    public function execute()
+    {
+        $itemId = (int)$this->getRequest()->getParam('item_id');
+        $itemQty = (int)$this->getRequest()->getParam('item_qty');
+
+        try {
+            $this->sidebar->checkQuoteItem($itemId);
+            $this->sidebar->updateQuoteItem($itemId, $itemQty);
+            return $this->jsonResponse();
+        } catch (LocalizedException $e) {
+            return $this->jsonResponse($e->getMessage());
+        } catch (\Exception $e) {
+            $this->logger->critical($e);
+            return $this->jsonResponse($e->getMessage());
+        }
+    }
+
+    /**
+     * Compile JSON response
+     *
+     * @param string $error
+     * @return Http
+     */
+    protected function jsonResponse($error = '')
+    {
+        return $this->getResponse()->representJson(
+            $this->jsonHelper->jsonEncode($this->sidebar->getResponseData($error))
+        );
+    }
+}
diff --git a/app/code/Magento/Checkout/Exception.php b/app/code/Magento/Checkout/Exception.php
old mode 100644
new mode 100755
index 2ee13bca5009cc52e51d7942639bd3f92d852cce..f0e271627daea344cfd4209a99199121797433af
--- a/app/code/Magento/Checkout/Exception.php
+++ b/app/code/Magento/Checkout/Exception.php
@@ -5,6 +5,6 @@
  */
 namespace Magento\Checkout;
 
-class Exception extends \Zend_Exception
+class Exception extends \Magento\Framework\Exception\LocalizedException
 {
 }
diff --git a/app/code/Magento/Checkout/Model/Cart.php b/app/code/Magento/Checkout/Model/Cart.php
index 898bbefe8c47fdcefa1bbe22e8599fbc72f224df..b023e8eda142fc9c3cefededf0b1ea027a308a3c 100644
--- a/app/code/Magento/Checkout/Model/Cart.php
+++ b/app/code/Magento/Checkout/Model/Cart.php
@@ -228,8 +228,10 @@ class Cart extends Object implements CartInterface
     {
         $quote = $this->getQuote()->setCheckoutMethod('');
         $this->_checkoutSession->setCartWasUpdated(true);
+        // TODO: Move this logic to Multishipping module as plug-in.
         // reset for multiple address checkout
-        if ($this->_checkoutSession->getCheckoutState() !== Session::CHECKOUT_STATE_BEGIN) {
+        if ($this->_checkoutSession->getCheckoutState() !== Session::CHECKOUT_STATE_BEGIN
+            && $this->_checkoutSession->getCheckoutState() !== null) {
             $quote->removeAllAddresses()->removePayment();
             $this->_checkoutSession->resetCheckout();
         }
diff --git a/app/code/Magento/Checkout/Model/Sidebar.php b/app/code/Magento/Checkout/Model/Sidebar.php
new file mode 100644
index 0000000000000000000000000000000000000000..225c5c7323bc48cc3d06f970acfa59b5a99d6965
--- /dev/null
+++ b/app/code/Magento/Checkout/Model/Sidebar.php
@@ -0,0 +1,178 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Checkout\Model;
+
+use Magento\Checkout\Helper\Data as HelperData;
+use Magento\Checkout\Model\Cart;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Locale\ResolverInterface;
+use Magento\Quote\Api\Data\CartItemInterface;
+use Magento\Quote\Model\Quote\Address\Total;
+
+class Sidebar
+{
+    /**
+     * @var Cart
+     */
+    protected $cart;
+
+    /**
+     * @var HelperData
+     */
+    protected $helperData;
+
+    /**
+     * @var ResolverInterface
+     */
+    protected $resolver;
+
+    /**
+     * @var int
+     */
+    protected $summaryQty;
+
+    /**
+     * @param Cart $cart
+     * @param HelperData $helperData
+     * @param ResolverInterface $resolver
+     */
+    public function __construct(
+        Cart $cart,
+        HelperData $helperData,
+        ResolverInterface $resolver
+    ) {
+        $this->cart = $cart;
+        $this->helperData = $helperData;
+        $this->resolver = $resolver;
+    }
+
+    /**
+     * Compile response data
+     *
+     * @param string $error
+     * @return array
+     */
+    public function getResponseData($error = '')
+    {
+        if (empty($error)) {
+            $response = [
+                'success' => true,
+                'data' => [
+                    'summary_qty' => $this->getSummaryQty(),
+                    'summary_text' => $this->getSummaryText(),
+                    'subtotal' => $this->getSubtotalHtml(),
+                ],
+            ];
+            if (!$this->getSummaryQty()) {
+                $response['cleanup'] = true;
+            }
+        } else {
+            $response = [
+                'success' => false,
+                'error_message' => $error,
+            ];
+        }
+        return $response;
+    }
+
+    /**
+     * Check if required quote item exist
+     *
+     * @param int $itemId
+     * @throws LocalizedException
+     * @return $this
+     */
+    public function checkQuoteItem($itemId)
+    {
+        $item = $this->cart->getQuote()->getItemById($itemId);
+        if (!$item instanceof CartItemInterface) {
+            throw new LocalizedException(__('We can\'t find the quote item.'));
+        }
+        return $this;
+    }
+
+    /**
+     * Remove quote item
+     *
+     * @param int $itemId
+     * @return $this
+     */
+    public function removeQuoteItem($itemId)
+    {
+        $this->cart->removeItem($itemId);
+        $this->cart->save();
+        return $this;
+    }
+
+    /**
+     * Update quote item
+     *
+     * @param int $itemId
+     * @param int $itemQty
+     * @throws LocalizedException
+     * @return $this
+     */
+    public function updateQuoteItem($itemId, $itemQty)
+    {
+        $itemData = [$itemId => ['qty' => $this->normalize($itemQty)]];
+        $this->cart->updateItems($itemData)->save();
+        return $this;
+    }
+
+    /**
+     * Apply normalization filter to item qty value
+     *
+     * @param int $itemQty
+     * @return int|array
+     */
+    protected function normalize($itemQty)
+    {
+        if ($itemQty) {
+            $filter = new \Zend_Filter_LocalizedToNormalized(
+                ['locale' => $this->resolver->getLocale()]
+            );
+            return $filter->filter($itemQty);
+        }
+        return $itemQty;
+    }
+
+    /**
+     * Retrieve summary qty
+     *
+     * @return int
+     */
+    protected function getSummaryQty()
+    {
+        if (!$this->summaryQty) {
+            $this->summaryQty = $this->cart->getSummaryQty();
+        }
+        return $this->summaryQty;
+    }
+
+    /**
+     * Retrieve summary qty text
+     *
+     * @return string
+     */
+    protected function getSummaryText()
+    {
+        return ($this->getSummaryQty() == 1) ? __(' item') : __(' items');
+    }
+
+    /**
+     * Retrieve subtotal block html
+     *
+     * @return string
+     */
+    protected function getSubtotalHtml()
+    {
+        $totals = $this->cart->getQuote()->getTotals();
+        $subtotal = isset($totals['subtotal']) && $totals['subtotal'] instanceof Total
+            ? $totals['subtotal']->getValue()
+            : 0;
+        return $this->helperData->formatPrice($subtotal);
+    }
+}
diff --git a/app/code/Magento/Checkout/Test/Unit/Block/Cart/Item/RendererTest.php b/app/code/Magento/Checkout/Test/Unit/Block/Cart/Item/RendererTest.php
index ea78661984115e725d71ff5f3153d51a093e688e..575eebc4188964d8eb8365f41068006d263e5e6f 100644
--- a/app/code/Magento/Checkout/Test/Unit/Block/Cart/Item/RendererTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Block/Cart/Item/RendererTest.php
@@ -114,8 +114,8 @@ class RendererTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Checkout\Block\Cart\Item\Renderer::getProductPriceHtml
-     * covers \Magento\Checkout\Block\Cart\Item\Renderer::getPriceRender
+     * @covers \Magento\Checkout\Block\Cart\Item\Renderer::getProductPriceHtml
+     * @covers \Magento\Checkout\Block\Cart\Item\Renderer::getPriceRender
      */
     public function testGetProductPriceHtml()
     {
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php
index 67669a198a926cdb5490c2fbb1c88e3df1aa91a8..e5142f4ef2e3c096ff3a47a15745df0014b04599 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Onepage/IndexTest.php
@@ -167,6 +167,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->willReturn($this->basicMock('\Magento\Framework\Message\ManagerInterface'));
         $this->basicStub($this->contextMock, 'getRedirect')->willReturn($this->redirectMock);
         $this->basicStub($this->contextMock, 'getUrl')->willReturn($this->url);
+        $this->basicStub($this->contextMock, 'getResultRedirectFactory')->willReturn($resultRedirectFactoryMock);
 
         // SUT
         $this->model = $this->objectManager->getObject(
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..900693acec908f43bb86e24f10f89e0d04585bb4
--- /dev/null
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php
@@ -0,0 +1,234 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Checkout\Test\Unit\Controller\Sidebar;
+
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class RemoveItemTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Checkout\Controller\Sidebar\RemoveItem */
+    protected $removeItem;
+
+    /** @var ObjectManagerHelper */
+    protected $objectManagerHelper;
+
+    /** @var \Magento\Checkout\Model\Sidebar|\PHPUnit_Framework_MockObject_MockObject */
+    protected $sidebarMock;
+
+    /** @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $loggerMock;
+
+    /** @var \Magento\Framework\Json\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
+    protected $jsonHelperMock;
+
+    /** @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $requestMock;
+
+    /** @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $responseMock;
+
+    /** @var \Magento\Framework\View\Result\PageFactory|\PHPUnit_Framework_MockObject_MockObject */
+    protected $resultPageFactoryMock;
+
+    protected function setUp()
+    {
+        $this->sidebarMock = $this->getMock('Magento\Checkout\Model\Sidebar', [], [], '', false);
+        $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
+        $this->jsonHelperMock = $this->getMock('Magento\Framework\Json\Helper\Data', [], [], '', false);
+        $this->requestMock = $this->getMock('Magento\Framework\App\RequestInterface');
+        $this->responseMock = $this->getMockForAbstractClass(
+            'Magento\Framework\App\ResponseInterface',
+            [],
+            '',
+            false,
+            true,
+            true,
+            ['representJson']
+        );
+        $this->resultPageFactoryMock = $this->getMock('Magento\Framework\View\Result\PageFactory', [], [], '', false);
+
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->removeItem = $this->objectManagerHelper->getObject(
+            'Magento\Checkout\Controller\Sidebar\RemoveItem',
+            [
+                'sidebar' => $this->sidebarMock,
+                'logger' => $this->loggerMock,
+                'jsonHelper' => $this->jsonHelperMock,
+                'request' => $this->requestMock,
+                'response' => $this->responseMock,
+                'resultPageFactory' => $this->resultPageFactoryMock,
+            ]
+        );
+    }
+
+    public function testExecute()
+    {
+        $this->requestMock->expects($this->once())
+            ->method('getParam')
+            ->with('item_id', null)
+            ->willReturn('1');
+
+        $this->sidebarMock->expects($this->once())
+            ->method('checkQuoteItem')
+            ->with(1)
+            ->willReturnSelf();
+        $this->sidebarMock->expects($this->once())
+            ->method('removeQuoteItem')
+            ->with(1)
+            ->willReturnSelf();
+        $this->sidebarMock->expects($this->once())
+            ->method('getResponseData')
+            ->with('')
+            ->willReturn(
+                [
+                    'cleanup' => true,
+                    'data' => [
+                        'summary_qty' => 0,
+                        'summary_text' => __(' items'),
+                        'subtotal' => 0,
+                    ],
+                ]
+            );
+
+        $pageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->resultPageFactoryMock->expects($this->once())
+            ->method('create')
+            ->with(false, [])
+            ->willReturn($pageMock);
+
+        $layoutMock = $this->getMockBuilder('Magento\Framework\View\LayoutInterface')
+            ->getMock();
+
+        $pageMock->expects($this->once())
+            ->method('getLayout')
+            ->willReturn($layoutMock);
+
+        $blockMock = $this->getMockBuilder('Magento\Framework\View\Element\BlockInterface')
+            ->getMock();
+
+        $layoutMock->expects($this->once())
+            ->method('getBlock')
+            ->with('minicart.content')
+            ->willReturn($blockMock);
+
+        $blockMock->expects($this->once())
+            ->method('toHtml')
+            ->willReturn('block html');
+
+        $this->jsonHelperMock->expects($this->once())
+            ->method('jsonEncode')
+            ->with(
+                [
+                    'cleanup' => true,
+                    'data' => [
+                        'summary_qty' => 0,
+                        'summary_text' => __(' items'),
+                        'subtotal' => 0,
+                    ],
+                    'content' => 'block html',
+                ]
+            )
+            ->willReturn('json encoded');
+
+        $this->responseMock->expects($this->once())
+            ->method('representJson')
+            ->with('json encoded')
+            ->willReturn('json represented');
+
+        $this->assertEquals('json represented', $this->removeItem->execute());
+    }
+
+    public function testExecuteWithLocalizedException()
+    {
+        $this->requestMock->expects($this->once())
+            ->method('getParam')
+            ->with('item_id', null)
+            ->willReturn('1');
+
+        $this->sidebarMock->expects($this->once())
+            ->method('checkQuoteItem')
+            ->with(1)
+            ->willThrowException(new LocalizedException(__('Error message!')));
+
+        $this->sidebarMock->expects($this->once())
+            ->method('getResponseData')
+            ->with('Error message!')
+            ->willReturn(
+                [
+                    'success' => false,
+                    'error_message' => 'Error message!',
+                ]
+            );
+
+        $this->jsonHelperMock->expects($this->once())
+            ->method('jsonEncode')
+            ->with(
+                [
+                    'success' => false,
+                    'error_message' => 'Error message!',
+                ]
+            )
+            ->willReturn('json encoded');
+
+        $this->responseMock->expects($this->once())
+            ->method('representJson')
+            ->with('json encoded')
+            ->willReturn('json represented');
+
+        $this->assertEquals('json represented', $this->removeItem->execute());
+    }
+
+    public function testExecuteWithException()
+    {
+        $this->requestMock->expects($this->once())
+            ->method('getParam')
+            ->with('item_id', null)
+            ->willReturn('1');
+
+        $exception = new \Exception('Error message!');
+
+        $this->sidebarMock->expects($this->once())
+            ->method('checkQuoteItem')
+            ->with(1)
+            ->willThrowException($exception);
+
+        $this->loggerMock->expects($this->once())
+            ->method('critical')
+            ->with($exception)
+            ->willReturn(null);
+
+        $this->sidebarMock->expects($this->once())
+            ->method('getResponseData')
+            ->with('Error message!')
+            ->willReturn(
+                [
+                    'success' => false,
+                    'error_message' => 'Error message!',
+                ]
+            );
+
+        $this->jsonHelperMock->expects($this->once())
+            ->method('jsonEncode')
+            ->with(
+                [
+                    'success' => false,
+                    'error_message' => 'Error message!',
+                ]
+            )
+            ->willReturn('json encoded');
+
+        $this->responseMock->expects($this->once())
+            ->method('representJson')
+            ->with('json encoded')
+            ->willReturn('json represented');
+
+        $this->assertEquals('json represented', $this->removeItem->execute());
+    }
+}
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b36cbed010b0298348affe01da90822694fd8cb0
--- /dev/null
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php
@@ -0,0 +1,210 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Checkout\Test\Unit\Controller\Sidebar;
+
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class UpdateItemQtyTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Checkout\Controller\Sidebar\UpdateItemQty */
+    protected $updateItemQty;
+
+    /** @var ObjectManagerHelper */
+    protected $objectManagerHelper;
+
+    /** @var \Magento\Checkout\Model\Sidebar|\PHPUnit_Framework_MockObject_MockObject */
+    protected $sidebarMock;
+
+    /** @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $loggerMock;
+
+    /** @var \Magento\Framework\Json\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
+    protected $jsonHelperMock;
+
+    /** @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $requestMock;
+
+    /** @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $responseMock;
+
+    protected function setUp()
+    {
+        $this->sidebarMock = $this->getMock('Magento\Checkout\Model\Sidebar', [], [], '', false);
+        $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
+        $this->jsonHelperMock = $this->getMock('Magento\Framework\Json\Helper\Data', [], [], '', false);
+        $this->requestMock = $this->getMock('Magento\Framework\App\RequestInterface');
+        $this->responseMock = $this->getMockForAbstractClass(
+            'Magento\Framework\App\ResponseInterface',
+            [],
+            '',
+            false,
+            true,
+            true,
+            ['representJson']
+        );
+
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->updateItemQty = $this->objectManagerHelper->getObject(
+            'Magento\Checkout\Controller\Sidebar\UpdateItemQty',
+            [
+                'sidebar' => $this->sidebarMock,
+                'logger' => $this->loggerMock,
+                'jsonHelper' => $this->jsonHelperMock,
+                'request' => $this->requestMock,
+                'response' => $this->responseMock,
+            ]
+        );
+    }
+
+    public function testExecute()
+    {
+        $this->requestMock->expects($this->at(0))
+            ->method('getParam')
+            ->with('item_id', null)
+            ->willReturn('1');
+        $this->requestMock->expects($this->at(1))
+            ->method('getParam')
+            ->with('item_qty', null)
+            ->willReturn('2');
+
+        $this->sidebarMock->expects($this->once())
+            ->method('checkQuoteItem')
+            ->with(1)
+            ->willReturnSelf();
+        $this->sidebarMock->expects($this->once())
+            ->method('updateQuoteItem')
+            ->with(1, 2)
+            ->willReturnSelf();
+        $this->sidebarMock->expects($this->once())
+            ->method('getResponseData')
+            ->with('')
+            ->willReturn(
+                [
+                    'data' => [
+                        'summary_qty' => 2,
+                        'summary_text' => __(' items'),
+                        'subtotal' => 12.34,
+                    ],
+                ]
+            );
+
+        $this->jsonHelperMock->expects($this->once())
+            ->method('jsonEncode')
+            ->with(
+                [
+                    'data' => [
+                        'summary_qty' => 2,
+                        'summary_text' => __(' items'),
+                        'subtotal' => 12.34,
+                    ],
+                ]
+            )
+            ->willReturn('json encoded');
+
+        $this->responseMock->expects($this->once())
+            ->method('representJson')
+            ->with('json encoded')
+            ->willReturn('json represented');
+
+        $this->assertEquals('json represented', $this->updateItemQty->execute());
+    }
+
+    public function testExecuteWithLocalizedException()
+    {
+        $this->requestMock->expects($this->at(0))
+            ->method('getParam')
+            ->with('item_id', null)
+            ->willReturn('1');
+        $this->requestMock->expects($this->at(1))
+            ->method('getParam')
+            ->with('item_qty', null)
+            ->willReturn('2');
+
+        $this->sidebarMock->expects($this->once())
+            ->method('checkQuoteItem')
+            ->with(1)
+            ->willThrowException(new LocalizedException(__('Error!')));
+
+        $this->sidebarMock->expects($this->once())
+            ->method('getResponseData')
+            ->with('Error!')
+            ->willReturn(
+                [
+                    'success' => false,
+                    'error_message' => 'Error!',
+                ]
+            );
+
+        $this->jsonHelperMock->expects($this->once())
+            ->method('jsonEncode')
+            ->with(
+                [
+                    'success' => false,
+                    'error_message' => 'Error!',
+                ]
+            )
+            ->willReturn('json encoded');
+
+        $this->responseMock->expects($this->once())
+            ->method('representJson')
+            ->with('json encoded')
+            ->willReturn('json represented');
+
+        $this->assertEquals('json represented', $this->updateItemQty->execute());
+    }
+
+    public function testExecuteWithException()
+    {
+        $this->requestMock->expects($this->at(0))
+            ->method('getParam')
+            ->with('item_id', null)
+            ->willReturn('1');
+        $this->requestMock->expects($this->at(1))
+            ->method('getParam')
+            ->with('item_qty', null)
+            ->willReturn('2');
+
+        $exception = new \Exception('Error!');
+
+        $this->sidebarMock->expects($this->once())
+            ->method('checkQuoteItem')
+            ->with(1)
+            ->willThrowException($exception);
+
+        $this->loggerMock->expects($this->once())
+            ->method('critical')
+            ->with($exception)
+            ->willReturn(null);
+
+        $this->sidebarMock->expects($this->once())
+            ->method('getResponseData')
+            ->with('Error!')
+            ->willReturn(
+                [
+                    'success' => false,
+                    'error_message' => 'Error!',
+                ]
+            );
+
+        $this->jsonHelperMock->expects($this->once())
+            ->method('jsonEncode')
+            ->with(
+                [
+                    'success' => false,
+                    'error_message' => 'Error!',
+                ]
+            )
+            ->willReturn('json encoded');
+
+        $this->responseMock->expects($this->once())
+            ->method('representJson')
+            ->with('json encoded')
+            ->willReturn('json represented');
+
+        $this->assertEquals('json represented', $this->updateItemQty->execute());
+    }
+}
diff --git a/app/code/Magento/Checkout/Test/Unit/Model/SidebarTest.php b/app/code/Magento/Checkout/Test/Unit/Model/SidebarTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c928db0923da844cdecd741b08269824d726a6f5
--- /dev/null
+++ b/app/code/Magento/Checkout/Test/Unit/Model/SidebarTest.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Checkout\Test\Unit\Model;
+
+use Magento\Checkout\Model\Sidebar;
+
+class SidebarTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var Sidebar */
+    protected $sidebar;
+
+    /** @var \Magento\Checkout\Model\Cart|\PHPUnit_Framework_MockObject_MockObject */
+    protected $cartMock;
+
+    /** @var \Magento\Checkout\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
+    protected $checkoutHelperMock;
+
+    /** @var \Magento\Framework\Locale\ResolverInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $resolverMock;
+
+    protected function setUp()
+    {
+        $this->cartMock = $this->getMock('Magento\Checkout\Model\Cart', [], [], '', false);
+        $this->checkoutHelperMock = $this->getMock('Magento\Checkout\Helper\Data', [], [], '', false);
+        $this->resolverMock = $this->getMock('Magento\Framework\Locale\ResolverInterface');
+
+        $this->sidebar = new Sidebar(
+            $this->cartMock,
+            $this->checkoutHelperMock,
+            $this->resolverMock
+        );
+    }
+
+    /**
+     * @param string $error
+     * @param float $summaryQty
+     * @param array $totals
+     * @param array $result
+     *
+     * @dataProvider dataProviderGetResponseData
+     */
+    public function testGetResponseData($error, $summaryQty, $totals, $result)
+    {
+        $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $quoteMock->expects($this->any())
+            ->method('getTotals')
+            ->willReturn($totals);
+
+        $this->cartMock->expects($this->any())
+            ->method('getSummaryQty')
+            ->willReturn($summaryQty);
+        $this->cartMock->expects($this->any())
+            ->method('getQuote')
+            ->willReturn($quoteMock);
+
+        $this->checkoutHelperMock->expects($this->any())
+            ->method('formatPrice')
+            ->willReturnArgument(0);
+
+        $this->assertEquals($result, $this->sidebar->getResponseData($error));
+    }
+
+    public function dataProviderGetResponseData()
+    {
+        $totalMock = $this->getMockBuilder('Magento\Quote\Model\Quote\Address\Total')
+            ->disableOriginalConstructor()
+            ->setMethods(['getValue'])
+            ->getMock();
+        $totalMock->expects($this->any())
+            ->method('getValue')
+            ->willReturn(12.34);
+
+        return [
+            [
+                '',
+                0,
+                [],
+                [
+                    'success' => true,
+                    'data' => [
+                        'summary_qty' => 0,
+                        'summary_text' => __(' items'),
+                        'subtotal' => 0,
+                    ],
+                    'cleanup' => true,
+                ],
+            ],
+            [
+                '',
+                1,
+                [
+                    'subtotal' => $this->getMock('NonexistentClass'),
+                ],
+                [
+                    'success' => true,
+                    'data' => [
+                        'summary_qty' => 1,
+                        'summary_text' => __(' item'),
+                        'subtotal' => 0,
+                    ],
+                ],
+            ],
+            [
+                '',
+                2,
+                [
+                    'subtotal' => $totalMock,
+                ],
+                [
+                    'success' => true,
+                    'data' => [
+                        'summary_qty' => 2,
+                        'summary_text' => __(' items'),
+                        'subtotal' => 12.34,
+                    ],
+                ],
+            ],
+            [
+                'Error',
+                0,
+                [],
+                [
+                    'success' => false,
+                    'error_message' => 'Error',
+                ],
+            ],
+        ];
+    }
+
+    public function testCheckQuoteItem()
+    {
+        $itemId = 1;
+
+        $itemMock = $this->getMockBuilder('Magento\Quote\Api\Data\CartItemInterface')
+            ->getMock();
+
+        $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $quoteMock->expects($this->once())
+            ->method('getItemById')
+            ->with($itemId)
+            ->willReturn($itemMock);
+
+        $this->cartMock->expects($this->any())
+            ->method('getQuote')
+            ->willReturn($quoteMock);
+
+        $this->assertEquals($this->sidebar, $this->sidebar->checkQuoteItem($itemId));
+    }
+
+    /**
+     * @expectedException \Magento\Framework\Exception\LocalizedException
+     * @exceptedExceptionMessage We can't find the quote item.
+     */
+    public function testCheckQuoteItemWithException()
+    {
+        $itemId = 2;
+
+        $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $quoteMock->expects($this->once())
+            ->method('getItemById')
+            ->with($itemId)
+            ->willReturn(null);
+
+        $this->cartMock->expects($this->any())
+            ->method('getQuote')
+            ->willReturn($quoteMock);
+
+        $this->sidebar->checkQuoteItem($itemId);
+    }
+
+    public function testRemoveQuoteItem()
+    {
+        $itemId = 1;
+
+        $this->cartMock->expects($this->once())
+            ->method('removeItem')
+            ->with($itemId)
+            ->willReturnSelf();
+        $this->cartMock->expects($this->once())
+            ->method('save')
+            ->willReturnSelf();
+
+        $this->assertEquals($this->sidebar, $this->sidebar->removeQuoteItem($itemId));
+    }
+
+    public function testUpdateQuoteItem()
+    {
+        $itemId = 1;
+        $itemQty = 2;
+
+        $this->resolverMock->expects($this->once())
+            ->method('getLocale')
+            ->willReturn('en');
+
+        $this->cartMock->expects($this->once())
+            ->method('updateItems')
+            ->with([$itemId => ['qty' => $itemQty]])
+            ->willReturnSelf();
+        $this->cartMock->expects($this->once())
+            ->method('save')
+            ->willReturnSelf();
+
+        $this->assertEquals($this->sidebar, $this->sidebar->updateQuoteItem($itemId, $itemQty));
+    }
+
+    public function testUpdateQuoteItemWithZeroQty()
+    {
+        $itemId = 1;
+        $itemQty = 0;
+
+        $this->resolverMock->expects($this->never())
+            ->method('getLocale');
+
+        $this->cartMock->expects($this->once())
+            ->method('updateItems')
+            ->with([$itemId => ['qty' => $itemQty]])
+            ->willReturnSelf();
+        $this->cartMock->expects($this->once())
+            ->method('save')
+            ->willReturnSelf();
+
+        $this->assertEquals($this->sidebar, $this->sidebar->updateQuoteItem($itemId, $itemQty));
+    }
+}
diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json
index ed8f574a7005d5cf7aa498cff6670c9cf6027f40..a92572b3680b6c80688bc383ec8b5f72ea1a0cde 100644
--- a/app/code/Magento/Checkout/composer.json
+++ b/app/code/Magento/Checkout/composer.json
@@ -3,31 +3,31 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-gift-message": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/module-page-cache": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-msrp": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-gift-message": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/module-page-cache": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-msrp": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.42.0-beta11"
+        "magento/module-cookie": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Checkout/etc/config.xml b/app/code/Magento/Checkout/etc/config.xml
index 31f59f6d891c5af880e55ec5d2dda30c5d26ab28..060d51932d09facdc524faa5e64d3a4032df9d90 100644
--- a/app/code/Magento/Checkout/etc/config.xml
+++ b/app/code/Magento/Checkout/etc/config.xml
@@ -21,7 +21,7 @@
             </cart_link>
             <sidebar>
                 <display>1</display>
-                <count>3</count>
+                <count>5</count>
             </sidebar>
             <payment_failed>
                 <identity>general</identity>
diff --git a/app/code/Magento/Checkout/view/frontend/layout/default.xml b/app/code/Magento/Checkout/view/frontend/layout/default.xml
index e563c4b56bf96830d92fcfd9f85dbcfe36143630..8fff222718790f074ae8935ce68923e51010f134 100644
--- a/app/code/Magento/Checkout/view/frontend/layout/default.xml
+++ b/app/code/Magento/Checkout/view/frontend/layout/default.xml
@@ -15,14 +15,17 @@
         </referenceBlock>
         <referenceContainer name="header-wrapper">
             <block class="Magento\Checkout\Block\Cart\Sidebar" name="minicart" as="minicart" after="logo" template="cart/minicart.phtml">
-                <block class="Magento\Framework\View\Element\RendererList" name="checkout.cart.sidebar.item.renderers" as="renderer.list"/>
-                <container name="minicart.subtotal.container" as="subtotal" label="My Cart Subtotal">
-                    <block name="minicart.subtotal" class="Magento\Checkout\Block\Cart\Sidebar" template="cart/subtotal.phtml"/>
-                </container>
-                <container name="minicart.extra.info" as="minicart_info" label="My Cart Extra info"/>
-                <container name="topCart.extra_actions" as="extra_actions" label="My Cart Extra Actions">
-                    <block class="Magento\Catalog\Block\ShortcutButtons" name="topCart.shortcut.buttons"/>
-                </container>
+                <block class="Magento\Checkout\Block\Cart\Sidebar" name="minicart.content" as="minicart_content" template="cart/minicart/content.phtml">
+                    <block class="Magento\Framework\View\Element\RendererList" name="checkout.cart.sidebar.item.renderers" as="renderer.list"/>
+                    <container name="minicart.subtotal.container" as="subtotal" label="My Cart Subtotal">
+                        <block name="minicart.subtotal" class="Magento\Checkout\Block\Cart\Sidebar" template="cart/subtotal.phtml"/>
+                    </container>
+                    <container name="minicart.promotion" as="cart_promotion" label="Mini-cart promotion block"/>
+                    <container name="minicart.extra.info" as="minicart_info" label="My Cart Extra info"/>
+                    <container name="topCart.extra_actions" as="extra_actions" label="My Cart Extra Actions">
+                        <block class="Magento\Catalog\Block\ShortcutButtons" name="topCart.shortcut.buttons"/>
+                    </container>
+                </block>
             </block>
         </referenceContainer>
     </body>
diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml
index 355971348cbe9b8516d2f007cbda6da38b360d61..9082c7696e4e1217e5c38514bcf50f154bb7f8d4 100644
--- a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml
+++ b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml
@@ -8,104 +8,71 @@
 
 /** @var $block \Magento\Checkout\Block\Cart\Sidebar */
 ?>
-<?php if ($block->getInList()): ?>
-    <li data-block="minicart" class="minicart-wrapper">
-<?php else:  ?>
-    <div data-block="minicart" class="minicart-wrapper">
-<?php endif; ?>
+
 <?php $_cartQty = (float) $block->getSummaryCount() ?>
-<?php if (!$block->getIsLinkMode() || !$block->getIsNeedToDisplaySideBar()): ?>
-    <a class="action showcart" href="<?php echo $block->getUrl('checkout/cart'); ?>">
+<div data-block="minicart" class="minicart-wrapper">
+    <a class="action showcart" href="<?php echo $block->getShoppingCartUrl(); ?>">
         <span class="text"><?php echo __('My Cart'); ?></span>
         <span class="counter qty<?php echo($_cartQty > 0) ? '' : ' empty'; ?>">
             <span class="counter-number">
                 <?php echo $_cartQty;?>
             </span>
             <span class="counter-label">
-                <?php if ($_cartQty == 1):?>
-                    <?php echo __('item');?>
-                <?php else:?>
-                    <?php echo __('items');?>
-                <?php endif;?>
+                <?php echo $block->getSummaryText($_cartQty); ?>
             </span>
         </span>
     </a>
     <?php if ($block->getIsNeedToDisplaySideBar()): ?>
-        <div class="block block-minicart<?php echo($_cartQty > 0) ? '' : ' empty'; ?>" <?php if ($block->getIsNeedToDisplaySideBar()): ?> data-mage-init='{"dropdownDialog":{"appendTo":"[data-block=minicart]", "triggerTarget":".showcart", "timeout": "2000", "triggerClass":"active", "parentClass":"active"}}'<?php endif ?>>
-            <div class="title">
-                <strong>
-                    <span class="text"><?php echo __('My Cart'); ?></span>
-                    <span title="<?php echo __('Items in Cart'); ?>"
-                          class="qty<?php echo($_cartQty > 0) ? '' : ' empty'; ?>"
-                        ><?php echo $_cartQty ?></span>
-                </strong>
-            </div>
-            <div class="content">
-                <?php if ($_cartQty || $block->getAllowCartLink()): ?>
-                    <div class="items-total">
-                        <?php echo($_cartQty == 1) ? __('1 item ') : __('%1 items ', $_cartQty) ?>
-                    </div>
-                    <?php $isPossibleOnepageCheckout = $_cartQty && $block->isPossibleOnepageCheckout() ?>
-                    <?php if ($isPossibleOnepageCheckout): ?>
-                        <?php echo $block->getChildHtml('subtotal'); ?>
-                    <?php endif; ?>
-                    <?php echo $block->getChildHtml('minicart_info') ?>
-                    <div class="actions">
-                        <div class="primary">
-                            <?php if ($isPossibleOnepageCheckout): ?>
-                                <button
-                                    id="top-cart-btn-checkout"
-                                    type="button"
-                                    class="action checkout primary"
-                                    title="<?php echo __('Go to Checkout') ?>">
-                                    <span><?php echo __('Go to Checkout') ?></span>
-                                </button>
-                                <?php echo $block->getChildHtml('extra_actions') ?>
-                            <?php endif; ?>
-                        </div>
-                        <div class="secondary">
-                            <a class="action viewcart" href="<?php echo $block->getUrl('checkout/cart'); ?>">
-                                <span><?php echo __('Go to Shopping Cart') ?></span>
-                            </a>
-                        </div>
-                    </div>
-                <?php endif ?>
-                <?php $_items = $block->getRecentItems() ?>
-                <?php if (count($_items)): ?>
-                    <strong class="subtitle"><?php echo __('Recently added item(s)') ?></strong>
-                    <div data-action="scroll" class="products minilist">
-                        <ol id="mini-cart" class="minilist items">
-                            <?php foreach ($_items as $_item): ?>
-                            <?php echo $block->getItemHtml($_item) ?>
-                            <?php endforeach; ?>
-                        </ol>
-                    </div>
-                <?php else: ?>
-                    <strong class="subtitle empty">
-                        <?php echo __('You have no items in your shopping cart.') ?>
-                    </strong>
-                    <?php if ($block->getCartEmptyMessage()): ?>
-                        <p class="minicart empty text"><?php echo $block->getCartEmptyMessage(); ?></p>
-                    <?php endif; ?>
-                <?php endif ?>
+        <div class="block block-minicart<?php echo($_cartQty > 0) ? '' : ' empty'; ?>"
+             data-mage-init='{"dropdownDialog":{
+                "appendTo":"[data-block=minicart]",
+                "triggerTarget":".showcart",
+                "timeout": "2000",
+                "closeOnMouseLeave": false,
+                "closeOnEscape": true,
+                "triggerClass":"active",
+                "parentClass":"active",
+                "buttons":[]}}'>
+            <div id="minicart-content-wrapper">
+                <?php echo $block->getChildHtml('minicart_content') ?>
             </div>
         </div>
     <?php endif ?>
-<?php endif; ?>
-<script type="text/x-magento-init">
+    <script type="text/x-magento-init">
     {
         "[data-block='minicart']": {
             "sidebar": {
-                "checkoutUrl": "<?php echo $block->getCheckoutUrl();?>",
-                "checkoutButton": "#top-cart-btn-checkout",
-                "removeButton": "#mini-cart a.action.delete",
+                "targetElement": "div.block.block-minicart",
+                "url": {
+                    "checkout": "<?php echo $block->getCheckoutUrl();?>",
+                    "update": "<?php echo $block->getUpdateItemQtyUrl(); ?>",
+                    "remove": "<?php echo $block->getRemoveItemUrl(); ?>"
+                },
+                "button": {
+                    "checkout": "#top-cart-btn-checkout",
+                    "remove": "#mini-cart a.action.delete",
+                    "close": "#btn-minicart-close"
+                },
+                "showcart": {
+                    "parent": "span.counter",
+                    "qty": "span.counter-number",
+                    "label": "span.counter-label"
+                },
+                "minicart": {
+                    "list": "#mini-cart",
+                    "content": "#minicart-content-wrapper",
+                    "qty": "div.items-total",
+                    "subtotal": "div.subtotal span.price"
+                },
+                "item": {
+                    "qty": ":input.cart-item-qty",
+                    "button": ":button.update-cart-item"
+                },
                 "confirmMessage": "<?php echo __('Are you sure you would like to remove this item from the shopping cart?') ?>"
             }
         }
     }
-</script>
-<?php if ($block->getInList()): ?>
-    </li>
-<?php else:  ?>
-    </div>
-<?php endif; ?>
+    </script>
+</div>
+
+
diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart/content.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart/content.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..ac59b9dce84a0ff7b5584db0b7a99e7d6fed28c3
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart/content.phtml
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+// @codingStandardsIgnoreFile
+
+/** @var $block \Magento\Checkout\Block\Cart\Sidebar */
+?>
+
+<?php $_cartQty = (float) $block->getSummaryCount() ?>
+<div class="block-title">
+    <strong>
+        <span class="text"><?php echo __('My Cart'); ?></span>
+                    <span title="<?php echo $block->escapeHtml(__('Items in Cart')); ?>"
+                          class="qty<?php echo($_cartQty > 0) ? '' : ' empty'; ?>"
+                        ><?php echo $_cartQty ?></span>
+    </strong>
+</div>
+<div class="block-content">
+    <button type="button"
+            id="btn-minicart-close"
+            title="<?php echo $block->escapeHtml(__('Close')); ?>"
+            class="action close">
+        <span><?php echo __('Close') ?></span>
+    </button>
+
+    <?php if ($_cartQty || $block->getAllowCartLink()): ?>
+        <div class="items-total">
+            <span class="count"><?php echo $_cartQty; ?></span>
+            <?php echo $block->getSummaryText($_cartQty); ?>
+        </div>
+        <?php $isPossibleOnepageCheckout = $_cartQty && $block->isPossibleOnepageCheckout() ?>
+        <?php if ($isPossibleOnepageCheckout): ?>
+            <?php echo $block->getChildHtml('subtotal'); ?>
+        <?php endif; ?>
+        <?php echo $block->getChildHtml('minicart_info') ?>
+        <div class="actions">
+            <div class="primary">
+                <?php if ($isPossibleOnepageCheckout): ?>
+                    <button
+                        id="top-cart-btn-checkout"
+                        type="button"
+                        class="action primary checkout"
+                        title="<?php echo $block->escapeHtml(__('Go to Checkout')); ?>">
+                        <span><?php echo __('Go to Checkout') ?></span>
+                    </button>
+                    <?php echo $block->getChildHtml('extra_actions') ?>
+                <?php endif; ?>
+            </div>
+        </div>
+    <?php endif ?>
+
+    <?php $_items = $block->getRecentItems() ?>
+    <?php if (count($_items)): ?>
+        <strong class="subtitle"><?php echo __('Recently added item(s)') ?></strong>
+        <div data-action="scroll" class="minicart-items-wrapper">
+            <ol id="mini-cart" class="minicart-items">
+                <?php foreach ($_items as $_item): ?>
+                    <?php echo $block->getItemHtml($_item) ?>
+                <?php endforeach; ?>
+            </ol>
+        </div>
+    <?php else: ?>
+        <strong class="subtitle empty">
+            <?php echo __('You have no items in your shopping cart.') ?>
+        </strong>
+        <?php if ($block->getCartEmptyMessage()): ?>
+            <p class="minicart empty text"><?php echo $block->getCartEmptyMessage(); ?></p>
+        <?php endif; ?>
+    <?php endif ?>
+
+    <?php if ($_cartQty || $block->getAllowCartLink()): ?>
+        <div class="actions">
+            <div class="secondary">
+                <a class="action viewcart" href="<?php echo $block->getUrl('checkout/cart'); ?>">
+                    <span><?php echo __('View and edit cart') ?></span>
+                </a>
+            </div>
+        </div>
+    <?php endif ?>
+
+    <div id="minicart-widgets" class="minicart-widgets">
+        <?php echo $block->getChildHtml('cart_promotion') ?>
+    </div>
+</div>
diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/sidebar/default.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/sidebar/default.phtml
index 826cc8efac19b814a976cca84a512d30b3c1a454..5a5d1cba87399286e052eab523e4c514cfc76ec7 100644
--- a/app/code/Magento/Checkout/view/frontend/templates/cart/sidebar/default.phtml
+++ b/app/code/Magento/Checkout/view/frontend/templates/cart/sidebar/default.phtml
@@ -75,9 +75,23 @@ $imageBlock = $block->getLayout()->createBlock('Magento\Catalog\Block\Product\Im
                     <?php echo $block->getSidebarItemPriceHtml($_item); ?>
                 <?php endif; //Can apply MSRP ?>
 
-                <div class="details-qty">
+                <div class="details-qty qty">
                     <span class="label"><?php echo __('Qty'); ?></span>
-                    <span class="value qty"><?php echo $block->getQty() ?></span>
+                    <input id="cart-item-<?php echo $_item->getId() ?>-qty"
+                           value="<?php echo $block->getQty() ?>"
+                           type="number"
+                           size="4"
+                           class="item-qty cart-item-qty"
+                           data-cart-item="<?php echo $_item->getId() ?>"
+                           data-item-qty="<?php echo $block->getQty() ?>"
+                           maxlength="12"/>
+                    <button id="update-cart-item-<?php echo $_item->getId() ?>"
+                            class="update-cart-item"
+                            data-cart-item="<?php echo $_item->getId() ?>"
+                            title="<?php echo $block->escapeHtml(__('Update')); ?>"
+                            style="display: none">
+                        <span><?php echo __('Update'); ?></span>
+                    </button>
                 </div>
             </div>
 
@@ -85,12 +99,17 @@ $imageBlock = $block->getLayout()->createBlock('Magento\Catalog\Block\Product\Im
                 <?php if ($product->isVisibleInSiteVisibility()):?>
                 <div class="primary">
                     <a href="<?php echo $block->getConfigureUrl() ?>"
-                       title="<?php echo __('Edit item') ?>"
-                       class="action edit"><span><?php echo __('Edit')?></span></a>
+                       title="<?php echo $block->escapeHtml(__('Edit item')); ?>"
+                       class="action edit">
+                       <span><?php echo __('Edit')?></span>
+                   </a>
                 </div>
                 <?php endif ?>
                 <div class="secondary">
-                    <a href="#" data-post='<?php echo $this->helper('Magento\Checkout\Helper\Cart')->getDeletePostJson($_item); ?>' title="<?php echo __('Remove item') ?>" class="action delete">
+                    <a href="#"
+                       data-cart-item="<?php echo $_item->getId() ?>"
+                       title="<?php echo $block->escapeHtml(__('Remove item')); ?>"
+                       class="action delete">
                         <span><?php echo __('Remove')?></span>
                     </a>
                 </div>
diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/subtotal.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/subtotal.phtml
index 34e8b3922671cebd25915227a7e2459532045246..291a8a762fe899ffeb9726aa6d2ab8043fad0339 100644
--- a/app/code/Magento/Checkout/view/frontend/templates/cart/subtotal.phtml
+++ b/app/code/Magento/Checkout/view/frontend/templates/cart/subtotal.phtml
@@ -6,7 +6,7 @@
 /** @var $block \Magento\Checkout\Block\Cart\Sidebar */
 ?>
 <div class="subtotal">
-    <span class="mark">
+    <span class="label">
         <?php echo __('Cart Subtotal') ?>
     </span>
     <?php echo $block->getTotalsHtml() ?>
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index 59e5f2e35d81022aa4bef3e624713d5d8ff91396..d3c3a264b88d814fd8123aa84bc1df10d3828aa6 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -12,18 +12,242 @@ define([
 
     $.widget('mage.sidebar', {
         options: {
-            isRecursive: true
+            isRecursive: true,
+            maxItemsVisible: 3
         },
+        scrollHeight: 0,
+
         _create: function() {
+            this._initContent();
+        },
+
+        _initContent: function() {
+            var self = this;
+
             this.element.decorate('list', this.options.isRecursive);
-            $(this.options.checkoutButton).on('click', $.proxy(function() {
-                location.href = this.options.checkoutUrl;
-            }, this));
-            $(this.options.removeButton).on('click', $.proxy(function() {
-                return confirm(this.options.confirmMessage);
+
+            $(this.options.button.close).click(function(event) {
+                event.stopPropagation();
+                $(self.options.targetElement).dropdownDialog("close");
+            });
+
+            $(this.options.button.checkout).on('click', $.proxy(function() {
+                location.href = this.options.url.checkout;
             }, this));
+
+            $(this.options.button.remove).click(function(event) {
+                event.stopPropagation();
+                if (confirm(self.options.confirmMessage)) {
+                    self._removeItem($(this));
+                }
+            });
+
+            $(this.options.item.qty).keyup(function() {
+                self._showItemButton($(this));
+            });
+            $(this.options.item.button).click(function(event) {
+                event.stopPropagation();
+                self._updateItemQty($(this))
+            });
+
+            this._calcHeight();
+            this._isOverflowed();
+        },
+
+        /**
+         * Add 'overflowed' class to minicart items wrapper element
+         *
+         * @private
+         */
+        _isOverflowed: function() {
+            var list = $(this.options.minicart.list);
+            if (this.scrollHeight > list.innerHeight()) {
+                list.parent().addClass('overflowed');
+            } else {
+                list.parent().removeClass('overflowed');
+            }
+        },
+
+        _showItemButton: function(elem) {
+            var itemId = elem.data('cart-item');
+            var itemQty = elem.data('item-qty');
+            if (this._isValidQty(itemQty, elem.val())) {
+                $('#update-cart-item-' + itemId).show('fade', 300);
+            } else if (elem.val() == 0) {
+                elem.val(itemQty);
+                this._hideItemButton(elem);
+            } else {
+                this._hideItemButton(elem);
+            }
+        },
+
+        /**
+         * @param origin - origin qty. 'data-item-qty' attribute.
+         * @param changed - new qty.
+         * @returns {boolean}
+         * @private
+         */
+        _isValidQty: function(origin, changed) {
+            return (origin != changed)
+                && (changed.length > 0)
+                && (changed - 0 == changed)
+                && (changed - 0 > 0);
+        },
+
+        _hideItemButton: function(elem) {
+            var itemId = elem.data('cart-item');
+            $('#update-cart-item-' + itemId).hide('fade', 300);
+        },
+
+        _updateItemQty: function(elem) {
+            var itemId = elem.data('cart-item');
+            this._ajax(this.options.url.update, {
+                item_id: itemId,
+                item_qty: $('#cart-item-' + itemId + '-qty').val()
+            }, elem, this._updateItemQtyAfter);
+        },
+
+        /**
+         * Update content after update qty
+         *
+         * @param elem
+         * @param response
+         * @private
+         */
+        _updateItemQtyAfter: function(elem, response) {
+            if ($.type(response.data) === 'object') {
+                this._refreshQty(response.data.summary_qty, response.data.summary_text);
+                this._refreshSubtotal(response.data.subtotal);
+                this._refreshShowcart(response.data.summary_qty, response.data.summary_text);
+                this._refreshItemQty(elem, response.data.summary_qty);
+            }
+            this._hideItemButton(elem);
+        },
+
+        _removeItem: function(elem) {
+            var itemId = elem.data('cart-item');
+            this._ajax(this.options.url.remove, {
+                item_id: itemId
+            }, elem, this._removeItemAfter);
+        },
+
+        /**
+         * Update content after item remove
+         *
+         * @param elem
+         * @param response
+         * @private
+         */
+        _removeItemAfter: function(elem, response) {
+            if ($.type(response.data) === 'object') {
+                this._refreshShowcart(response.data.summary_qty, response.data.summary_text);
+            }
+            $(this.options.minicart.content).html($.trim(response.content));
+            if (response.cleanup === true) {
+                $(this.options.showcart.parent).addClass('empty');
+            }
+            this._initContent();
+        },
+
+        /**
+         * @param url - ajax url
+         * @param data - post data for ajax call
+         * @param elem - element that initiated the event
+         * @param callback - callback method to execute after AJAX success
+         */
+        _ajax: function(url, data, elem, callback) {
+            $.ajax({
+                url: url,
+                data: data,
+                type: 'post',
+                dataType: 'json',
+                context: this,
+                beforeSend: function() {
+                    elem.attr('disabled', 'disabled');
+                },
+                complete: function() {
+                    elem.attr('disabled', null);
+                }
+            })
+                .done(function(response) {
+                    if (response.success) {
+                        callback.call(this, elem, response);
+                    } else {
+                        var msg = response.error_message;
+                        if (msg) {
+                            window.alert($.mage.__(msg));
+                        }
+                    }
+                })
+                .fail(function(error) {
+                    console.log(JSON.stringify(error));
+                });
+        },
+
+        _refreshItemQty: function(elem, qty) {
+            if (qty != undefined) {
+                var itemId = elem.data('cart-item');
+                $('#cart-item-' + itemId + '-qty').data('item-qty', qty);
+            }
+        },
+
+        _refreshQty: function(qty, text) {
+            if (qty != undefined && text != undefined) {
+                var self = this;
+                $(this.options.minicart.qty).fadeOut('slow', function() {
+                    $(self.options.minicart.qty).html('<span class="count">' + qty + '</span>' + text);
+                }).fadeIn();
+            }
+        },
+
+        _refreshSubtotal: function(val) {
+            if (val != undefined) {
+                var self = this;
+                $(this.options.minicart.subtotal).fadeOut('slow', function() {
+                    $(self.options.minicart.subtotal).replaceWith(val);
+                }).fadeIn();
+            }
+        },
+
+        _refreshShowcart: function(qty, text) {
+            if (qty != undefined && text != undefined) {
+                var self = this;
+                $(this.options.showcart.qty).fadeOut('slow', function() {
+                    $(self.options.showcart.qty).text(qty);
+                }).fadeIn();
+                $(this.options.showcart.label).fadeOut('slow', function() {
+                    $(self.options.showcart.label).text(text);
+                }).fadeIn();
+            }
+        },
+
+        /**
+         * Calculate height of minicart list
+         *
+         * @private
+         */
+        _calcHeight: function() {
+            var self = this,
+                height = 0,
+                counter = this.options.maxItemsVisible,
+                target = $(this.options.minicart.list)
+                    .clone()
+                    .attr('style', 'position: absolute !important; top: -10000 !important;')
+                    .appendTo('body');
+
+            this.scrollHeight = 0;
+            target.children().each(function() {
+                if (counter-- > 0) {
+                    height += $(this).height() - 15;
+                }
+                self.scrollHeight += $(this).height() - 15;
+            });
+
+            target.remove();
+
+            $(this.options.minicart.list).css('height', height);
         }
     });
 
     return $.mage.sidebar;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php
index fba6b572166c142a4e8f6a58275809f295705db8..9be4d20c91f2fbfe151aef2ceb50e7999b2ec4a2 100644
--- a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php
+++ b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php
@@ -10,6 +10,7 @@ class Delete extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreement
 {
     /**
      * @return void
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -21,17 +22,8 @@ class Delete extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreement
             return;
         }
 
-        try {
-            $model->delete();
-            $this->messageManager->addSuccess(__('The condition has been deleted.'));
-            $this->_redirect('checkout/*/');
-            return;
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('Something went wrong  while deleting this condition.'));
-        }
-
-        $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl($this->getUrl('*')));
+        $model->delete();
+        $this->messageManager->addSuccess(__('The condition has been deleted.'));
+        $this->_redirect('checkout/*/');
     }
 }
diff --git a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementTest.php b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementTest.php
index b71c88d74d8c39378a6b1de98728fea18761a9dc..54c5119771cca6a4ede61a3f84360ad7f0440adf 100644
--- a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementTest.php
+++ b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementTest.php
@@ -19,7 +19,7 @@ class AgreementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\CheckoutAgreements\Model\Agreement::validateData
+     * @covers \Magento\CheckoutAgreements\Model\Agreement::validateData
      *
      * @dataProvider validateDataDataProvider
      * @param \Magento\Framework\Object $inputData
diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json
index 764b8b4e97b92f66fa7f711b7e08fc0ef22c057b..564eb787401ac173b467a9dc1a741c80188af697 100644
--- a/app/code/Magento/CheckoutAgreements/composer.json
+++ b/app/code/Magento/CheckoutAgreements/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cms/Api/BlockRepositoryInterface.php b/app/code/Magento/Cms/Api/BlockRepositoryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9834b821a66be6531ecfcce99fe1800a38f62f7
--- /dev/null
+++ b/app/code/Magento/Cms/Api/BlockRepositoryInterface.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api;
+
+use Magento\Framework\Api\SearchCriteriaInterface;
+
+/**
+ * CMS block CRUD interface.
+ */
+interface BlockRepositoryInterface
+{
+    /**
+     * Save block.
+     *
+     * @param Data\BlockInterface $block
+     * @return Data\BlockInterface
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function save(Data\BlockInterface $block);
+
+    /**
+     * Retrieve block.
+     *
+     * @param int $blockId
+     * @return Data\BlockInterface
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function getById($blockId);
+
+    /**
+     * Retrieve blocks matching the specified criteria.
+     *
+     * @param SearchCriteriaInterface $searchCriteria
+     * @return \Magento\Framework\Api\SearchResultsInterface
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function getList(SearchCriteriaInterface $searchCriteria);
+
+    /**
+     * Delete block.
+     *
+     * @param Data\BlockInterface $block
+     * @return bool true on success
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function delete(Data\BlockInterface $block);
+
+    /**
+     * Delete block by ID.
+     *
+     * @param int $blockId
+     * @return bool true on success
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function deleteById($blockId);
+}
diff --git a/app/code/Magento/Cms/Api/Data/BlockInterface.php b/app/code/Magento/Cms/Api/Data/BlockInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d26f46cda2fb2cfe337413133be03785dfbbbbfa
--- /dev/null
+++ b/app/code/Magento/Cms/Api/Data/BlockInterface.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api\Data;
+
+/**
+ * CMS block interface.
+ */
+interface BlockInterface
+{
+    /**#@+
+     * Constants for keys of data array. Identical to the name of the getter in snake case
+     */
+    const BLOCK_ID      = 'block_id';
+    const IDENTIFIER    = 'identifier';
+    const TITLE         = 'title';
+    const CONTENT       = 'content';
+    const CREATION_TIME = 'creation_time';
+    const UPDATE_TIME   = 'update_time';
+    const IS_ACTIVE     = 'is_active';
+    /**#@-*/
+
+    /**
+     * Get ID
+     *
+     * @return int
+     */
+    public function getId();
+
+    /**
+     * Get identifier
+     *
+     * @return string
+     */
+    public function getIdentifier();
+
+    /**
+     * Get title
+     *
+     * @return string
+     */
+    public function getTitle();
+
+    /**
+     * Get content
+     *
+     * @return string
+     */
+    public function getContent();
+
+    /**
+     * Get creation time
+     *
+     * @return string
+     */
+    public function getCreationTime();
+
+    /**
+     * Get update time
+     *
+     * @return string
+     */
+    public function getUpdateTime();
+
+    /**
+     * Is active
+     *
+     * @return bool
+     */
+    public function isActive();
+
+    /**
+     * Set ID
+     *
+     * @param int $id
+     * @return BlockInterface
+     */
+    public function setId($id);
+
+    /**
+     * Set identifier
+     *
+     * @param string $identifier
+     * @return BlockInterface
+     */
+    public function setIdentifier($identifier);
+
+    /**
+     * Set title
+     *
+     * @param string $title
+     * @return BlockInterface
+     */
+    public function setTitle($title);
+
+    /**
+     * Set content
+     *
+     * @param string $content
+     * @return BlockInterface
+     */
+    public function setContent($content);
+
+    /**
+     * Set creation time
+     *
+     * @param string $creationTime
+     * @return BlockInterface
+     */
+    public function setCreationTime($creationTime);
+
+    /**
+     * Set update time
+     *
+     * @param string $updateTime
+     * @return BlockInterface
+     */
+    public function setUpdateTime($updateTime);
+
+    /**
+     * Set is active
+     *
+     * @param bool|int $isActive
+     * @return BlockInterface
+     */
+    public function setIsActive($isActive);
+}
diff --git a/app/code/Magento/Cms/Api/Data/BlockSearchResultsInterface.php b/app/code/Magento/Cms/Api/Data/BlockSearchResultsInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..715790c17343691226d8020f45ae896aee4eb5df
--- /dev/null
+++ b/app/code/Magento/Cms/Api/Data/BlockSearchResultsInterface.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api\Data;
+
+use Magento\Framework\Api\SearchResultsInterface;
+
+/**
+ * Interface for cms block search results.
+ */
+interface BlockSearchResultsInterface extends SearchResultsInterface
+{
+    /**
+     * Get blocks list.
+     *
+     * @return \Magento\Cms\Api\Data\BlockInterface[]
+     */
+    public function getItems();
+
+    /**
+     * Set blocks list.
+     *
+     * @param \Magento\Cms\Api\Data\BlockInterface[] $items
+     * @return $this
+     */
+    public function setItems(array $items = null);
+}
diff --git a/app/code/Magento/Cms/Api/Data/PageInterface.php b/app/code/Magento/Cms/Api/Data/PageInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e03d0ed1ffde5e14a18ae2effb77062b508ffcf
--- /dev/null
+++ b/app/code/Magento/Cms/Api/Data/PageInterface.php
@@ -0,0 +1,305 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api\Data;
+
+/**
+ * CMS page interface.
+ */
+interface PageInterface
+{
+    /**#@+
+     * Constants for keys of data array. Identical to the name of the getter in snake case
+     */
+    const PAGE_ID                  = 'page_id';
+    const IDENTIFIER               = 'identifier';
+    const TITLE                    = 'title';
+    const PAGE_LAYOUT              = 'page_layout';
+    const META_KEYWORDS            = 'meta_keywords';
+    const META_DESCRIPTION         = 'meta_description';
+    const CONTENT_HEADING          = 'content_heading';
+    const CONTENT                  = 'content';
+    const CREATION_TIME            = 'creation_time';
+    const UPDATE_TIME              = 'update_time';
+    const SORT_ORDER               = 'sort_order';
+    const LAYOUT_UPDATE_XML        = 'layout_update_xml';
+    const CUSTOM_THEME             = 'custom_theme';
+    const CUSTOM_ROOT_TEMPLATE     = 'custom_root_template';
+    const CUSTOM_LAYOUT_UPDATE_XML = 'custom_layout_update_xml';
+    const CUSTOM_THEME_FROM        = 'custom_theme_from';
+    const CUSTOM_THEME_TO          = 'custom_theme_to';
+    const IS_ACTIVE                = 'is_active';
+    /**#@-*/
+
+    /**
+     * Get ID
+     *
+     * @return int
+     */
+    public function getId();
+
+    /**
+     * Get identifier
+     *
+     * @return string
+     */
+    public function getIdentifier();
+
+    /**
+     * Get title
+     *
+     * @return string
+     */
+    public function getTitle();
+
+    /**
+     * Get page layout
+     *
+     * @return string
+     */
+    public function getPageLayout();
+
+    /**
+     * Get meta keywords
+     *
+     * @return string
+     */
+    public function getMetaKeywords();
+
+    /**
+     * Get meta description
+     *
+     * @return string
+     */
+    public function getMetaDescription();
+
+    /**
+     * Get content heading
+     *
+     * @return string
+     */
+    public function getContentHeading();
+
+    /**
+     * Get content
+     *
+     * @return string
+     */
+    public function getContent();
+
+    /**
+     * Get creation time
+     *
+     * @return string
+     */
+    public function getCreationTime();
+
+    /**
+     * Get update time
+     *
+     * @return string
+     */
+    public function getUpdateTime();
+
+    /**
+     * Get sort order
+     *
+     * @return string
+     */
+    public function getSortOrder();
+
+    /**
+     * Get layout update xml
+     *
+     * @return string
+     */
+    public function getLayoutUpdateXml();
+
+    /**
+     * Get custom theme
+     *
+     * @return string
+     */
+    public function getCustomTheme();
+
+    /**
+     * Get custom root template
+     *
+     * @return string
+     */
+    public function getCustomRootTemplate();
+
+    /**
+     * Get custom layout update xml
+     *
+     * @return string
+     */
+    public function getCustomLayoutUpdateXml();
+
+    /**
+     * Get custom theme from
+     *
+     * @return string
+     */
+    public function getCustomThemeFrom();
+
+    /**
+     * Get custom theme to
+     *
+     * @return string
+     */
+    public function getCustomThemeTo();
+
+    /**
+     * Is active
+     *
+     * @return bool
+     */
+    public function isActive();
+
+    /**
+     * Set ID
+     *
+     * @param int $id
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setId($id);
+
+    /**
+     * Set identifier
+     *
+     * @param string $identifier
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setIdentifier($identifier);
+
+    /**
+     * Set title
+     *
+     * @param string $title
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setTitle($title);
+
+    /**
+     * Set page layout
+     *
+     * @param string $pageLayout
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setPageLayout($pageLayout);
+
+    /**
+     * Set meta keywords
+     *
+     * @param string $metaKeywords
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setMetaKeywords($metaKeywords);
+
+    /**
+     * Set meta description
+     *
+     * @param string $metaDescription
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setMetaDescription($metaDescription);
+
+    /**
+     * Set content heading
+     *
+     * @param string $contentHeading
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setContentHeading($contentHeading);
+
+    /**
+     * Set content
+     *
+     * @param string $content
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setContent($content);
+
+    /**
+     * Set creation time
+     *
+     * @param string $creationTime
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCreationTime($creationTime);
+
+    /**
+     * Set update time
+     *
+     * @param string $updateTime
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setUpdateTime($updateTime);
+
+    /**
+     * Set sort order
+     *
+     * @param string $sortOrder
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setSortOrder($sortOrder);
+
+    /**
+     * Set layout update xml
+     *
+     * @param string $layoutUpdateXml
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setLayoutUpdateXml($layoutUpdateXml);
+
+    /**
+     * Set custom theme
+     *
+     * @param string $customTheme
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomTheme($customTheme);
+
+    /**
+     * Set custom root template
+     *
+     * @param string $customRootTemplate
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomRootTemplate($customRootTemplate);
+
+    /**
+     * Set custom layout update xml
+     *
+     * @param string $customLayoutUpdateXml
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomLayoutUpdateXml($customLayoutUpdateXml);
+
+    /**
+     * Set custom theme from
+     *
+     * @param string $customThemeFrom
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomThemeFrom($customThemeFrom);
+
+    /**
+     * Set custom theme to
+     *
+     * @param string $customThemeTo
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomThemeTo($customThemeTo);
+
+    /**
+     * Set is active
+     *
+     * @param int|bool $isActive
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setIsActive($isActive);
+}
diff --git a/app/code/Magento/Cms/Api/Data/PageSearchResultsInterface.php b/app/code/Magento/Cms/Api/Data/PageSearchResultsInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..160d93d172c214ecba5dd13e4e482cc4754772c6
--- /dev/null
+++ b/app/code/Magento/Cms/Api/Data/PageSearchResultsInterface.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api\Data;
+
+use Magento\Framework\Api\SearchResultsInterface;
+
+/**
+ * Interface for cms page search results.
+ */
+interface PageSearchResultsInterface extends SearchResultsInterface
+{
+    /**
+     * Get pages list.
+     *
+     * @return \Magento\Cms\Api\Data\PageInterface[]
+     */
+    public function getItems();
+
+    /**
+     * Set pages list.
+     *
+     * @param \Magento\Cms\Api\Data\PageInterface[] $items
+     * @return $this
+     */
+    public function setItems(array $items = null);
+}
diff --git a/app/code/Magento/Cms/Api/PageRepositoryInterface.php b/app/code/Magento/Cms/Api/PageRepositoryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9dcf95d572fd533036999b4863bd1240ed7ad30e
--- /dev/null
+++ b/app/code/Magento/Cms/Api/PageRepositoryInterface.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api;
+
+use Magento\Framework\Api\SearchCriteriaInterface;
+
+/**
+ * CMS page CRUD interface.
+ */
+interface PageRepositoryInterface
+{
+    /**
+     * Save page.
+     *
+     * @param Data\PageInterface $page
+     * @return Data\PageInterface
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function save(Data\PageInterface $page);
+
+    /**
+     * Retrieve page.
+     *
+     * @param int $pageId
+     * @return Data\PageInterface
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function getById($pageId);
+
+    /**
+     * Retrieve pages matching the specified criteria.
+     *
+     * @param SearchCriteriaInterface $searchCriteria
+     * @return \Magento\Framework\Api\SearchResultsInterface
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function getList(SearchCriteriaInterface $searchCriteria);
+
+    /**
+     * Delete page.
+     *
+     * @param Data\PageInterface $page
+     * @return bool true on success
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function delete(Data\PageInterface $page);
+
+    /**
+     * Delete page by ID.
+     *
+     * @param int $pageId
+     * @return bool true on success
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function deleteById($pageId);
+}
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php b/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php
index 93f8f338149a480ebb4502291daaa7a538263099..fed2f67da6f177806559e463deb8fda56a2fbb3f 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php
@@ -16,7 +16,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_blockFactory;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory
+     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -24,14 +24,14 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Cms\Model\BlockFactory $blockFactory
-     * @param \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $collectionFactory
+     * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Cms\Model\BlockFactory $blockFactory,
-        \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $collectionFactory,
+        \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_blockFactory = $blockFactory;
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php
index 0e12b799444cd796892dfcf5f1892e780e368532..e8769676429606f1f06833cdc1d210ede3da9731 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php
@@ -125,7 +125,6 @@ class Design extends \Magento\Backend\Block\Widget\Form\Generic implements
             [
                 'name' => 'custom_theme_from',
                 'label' => __('Custom Design From'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'date_format' => $dateFormat,
                 'disabled' => $isElementDisabled,
                 'class' => 'validate-date validate-date-range date-range-custom_theme-from'
@@ -138,7 +137,6 @@ class Design extends \Magento\Backend\Block\Widget\Form\Generic implements
             [
                 'name' => 'custom_theme_to',
                 'label' => __('Custom Design To'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'date_format' => $dateFormat,
                 'disabled' => $isElementDisabled,
                 'class' => 'validate-date validate-date-range date-range-custom_theme-to'
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php
index 0580ceeaeb0d16706547ec6831b197c142e1cd27..af9f8d533c2d87e95e8fbcbd8a205f2dcec7e873 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php
@@ -11,7 +11,7 @@ namespace Magento\Cms\Block\Adminhtml\Page;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory
+     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -29,7 +29,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Cms\Model\Page $cmsPage
-     * @param \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory
+     * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory
      * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder
      * @param array $data
      */
@@ -37,7 +37,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Cms\Model\Page $cmsPage,
-        \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory,
+        \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory,
         \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder,
         array $data = []
     ) {
@@ -66,7 +66,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected function _prepareCollection()
     {
         $collection = $this->_collectionFactory->create();
-        /* @var $collection \Magento\Cms\Model\Resource\Page\Grid\Collection */
+        /* @var $collection \Magento\Cms\Model\Resource\Page\Collection */
         $collection->setFirstStoreFlag(true);
         $this->setCollection($collection);
 
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php
index f6efab805aa28ef9fd36d9bf5eca387adf8914df..addaf3f4926b8e05f48833b16e540eb73ad295ef 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php
@@ -23,7 +23,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_pageFactory;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory
+     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -37,7 +37,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Cms\Model\Page $cmsPage
      * @param \Magento\Cms\Model\PageFactory $pageFactory
-     * @param \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory
+     * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory
      * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder
      * @param array $data
      */
@@ -46,7 +46,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Cms\Model\Page $cmsPage,
         \Magento\Cms\Model\PageFactory $pageFactory,
-        \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory,
+        \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory,
         \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder,
         array $data = []
     ) {
@@ -141,7 +141,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
     protected function _prepareCollection()
     {
         $collection = $this->_collectionFactory->create();
-        /* @var $collection \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory */
+        /* @var $collection \Magento\Cms\Model\Resource\Page\CollectionFactory */
         $collection->setFirstStoreFlag(true);
         $this->setCollection($collection);
 
diff --git a/app/code/Magento/Cms/Block/Block.php b/app/code/Magento/Cms/Block/Block.php
index 2f8f28e4334fc17c2f112217efbb9aad8c4f3cf0..707dbbe40d754d3708cd3c13a284e13fe5720a58 100644
--- a/app/code/Magento/Cms/Block/Block.php
+++ b/app/code/Magento/Cms/Block/Block.php
@@ -68,7 +68,7 @@ class Block extends \Magento\Framework\View\Element\AbstractBlock implements \Ma
             /** @var \Magento\Cms\Model\Block $block */
             $block = $this->_blockFactory->create();
             $block->setStoreId($storeId)->load($blockId);
-            if ($block->getIsActive()) {
+            if ($block->isActive()) {
                 $html = $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent());
             }
         }
diff --git a/app/code/Magento/Cms/Block/Page.php b/app/code/Magento/Cms/Block/Page.php
index 6788811a85054149231104adabc78b647ee92b38..9b28ef8015ea158ea8ea6df080efbc5813db22e8 100644
--- a/app/code/Magento/Cms/Block/Page.php
+++ b/app/code/Magento/Cms/Block/Page.php
@@ -118,7 +118,7 @@ class Page extends \Magento\Framework\View\Element\AbstractBlock implements
      * Prepare breadcrumbs
      *
      * @param \Magento\Cms\Model\Page $page
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     protected function _addBreadcrumbs(\Magento\Cms\Model\Page $page)
diff --git a/app/code/Magento/Cms/Block/Widget/Block.php b/app/code/Magento/Cms/Block/Widget/Block.php
index 66f31639c36f1bb13a97f460f89a324f28895eac..7c83169d945f128d2d10380664f80a7f82123a7a 100644
--- a/app/code/Magento/Cms/Block/Widget/Block.php
+++ b/app/code/Magento/Cms/Block/Widget/Block.php
@@ -70,7 +70,7 @@ class Block extends \Magento\Framework\View\Element\Template implements \Magento
             /** @var \Magento\Cms\Model\Block $block */
             $block = $this->_blockFactory->create();
             $block->setStoreId($storeId)->load($blockId);
-            if ($block->getIsActive()) {
+            if ($block->isActive()) {
                 $this->setText(
                     $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent())
                 );
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/AbstractMassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/AbstractMassDelete.php
index c3a871112593f687b23ce20d719fc279b008d394..defddb18779229876ae60ca59e9b40491885aedf 100755
--- a/app/code/Magento/Cms/Controller/Adminhtml/AbstractMassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/AbstractMassDelete.php
@@ -37,50 +37,40 @@ class AbstractMassDelete extends \Magento\Backend\App\Action
      */
     protected $model = 'Magento\Framework\Model\AbstractModel';
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context);
-    }
-
     /**
      * Execute action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
         $data = $this->getRequest()->getParam('massaction', '[]');
         $data = json_decode($data, true);
-        $resultRedirect = $this->resultRedirectFactory->create();
 
-        try {
-            if (isset($data['all_selected']) && $data['all_selected'] === true) {
-                if (!empty($data['excluded'])) {
-                    $this->excludedDelete($data['excluded']);
-                } else {
-                    $this->deleteAll();
-                }
-            } elseif (!empty($data['selected'])) {
-                $this->selectedDelete($data['selected']);
+        if (isset($data['all_selected']) && $data['all_selected'] === true) {
+            if (!empty($data['excluded'])) {
+                $this->excludedDelete($data['excluded']);
             } else {
-                $this->messageManager->addError(__('Please select item(s).'));
+                $this->deleteAll();
             }
-        } catch (\Exception $e) {
-            $this->messageManager->addError($e->getMessage());
+        } elseif (!empty($data['selected'])) {
+            $this->selectedDelete($data['selected']);
+        } else {
+            $this->messageManager->addError(__('Please select item(s).'));
         }
 
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath(static::REDIRECT_URL);
     }
 
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php
index df5ed33ff756e2279854f7387bb4e8c00911be94..c5bf68c00e127f199bc23d04f165a333db937035 100755
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php
@@ -8,25 +8,6 @@ namespace Magento\Cms\Controller\Adminhtml\Block;
 
 class Delete extends \Magento\Cms\Controller\Adminhtml\Block
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\Registry $coreRegistry,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $coreRegistry);
-    }
-
     /**
      * Delete action
      *
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php
index d042bb4fc351e7aece51e943a70351b75718fd8b..bc8f586567c58fc68aec8d3fcc351ee98fcf9d73 100755
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php
@@ -8,11 +8,6 @@ namespace Magento\Cms\Controller\Adminhtml\Block;
 
 class Edit extends \Magento\Cms\Controller\Adminhtml\Block
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\View\Result\PageFactory
      */
@@ -21,16 +16,13 @@ class Edit extends \Magento\Cms\Controller\Adminhtml\Block
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Registry $coreRegistry,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
         parent::__construct($context, $coreRegistry);
     }
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php
index 7fa41aace2be14b9c92f95797c30019a5e7dba62..1fe7e266c91be3609d217d825d2b1a5b5a943881 100755
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php
@@ -8,25 +8,6 @@ namespace Magento\Cms\Controller\Adminhtml\Block;
 
 class Save extends \Magento\Cms\Controller\Adminhtml\Block
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\Registry $coreRegistry,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $coreRegistry);
-    }
-
     /**
      * Save action
      *
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php
index 306668ffe6ac4ef2b1b87559a87ff11fb7df1f6d..278515e3f101773c5ba196e9e77dfc8896ac4d0a 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php
@@ -6,27 +6,8 @@
  */
 namespace Magento\Cms\Controller\Adminhtml\Page;
 
-use Magento\Backend\App\Action;
-
 class Delete extends \Magento\Backend\App\Action
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context);
-    }
-
     /**
      * {@inheritdoc}
      */
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php
index 36e68c281a54aa5fa5226af889678e9907bf601a..c53641376c471c985556de4e84792749fdf8ca42 100755
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php
@@ -22,25 +22,17 @@ class Edit extends \Magento\Backend\App\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Registry $registry
      */
     public function __construct(
         Action\Context $context,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Registry $registry
     ) {
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->_coreRegistry = $registry;
         parent::__construct($context);
     }
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
index 95ec6e5169e34519a92e893e5f3bc26e76a99e95..a87024f3ea1e622f46e7f1d540e5f9081932bcaf 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
@@ -23,7 +23,7 @@ class MassDelete extends AbstractMassDelete
      *
      * @var string
      */
-    protected $collection = 'Magento\Cms\Model\Resource\Page\Grid\Collection';
+    protected $collection = 'Magento\Cms\Model\Resource\Page\Collection';
 
     /**
      * Page model
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php
index fc89acb6d7d72e127b8947bd40e5671d11df66a5..46b0998de61fd481386bfe840506b715a4d9b692 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php
@@ -7,15 +7,9 @@
 namespace Magento\Cms\Controller\Adminhtml\Page;
 
 use Magento\Backend\App\Action;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 
 class Save extends \Magento\Backend\App\Action
 {
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var PostDataProcessor
      */
@@ -24,15 +18,10 @@ class Save extends \Magento\Backend\App\Action
     /**
      * @param Action\Context $context
      * @param PostDataProcessor $dataProcessor
-     * @param RedirectFactory $resultRedirectFactory
      */
-    public function __construct(
-        Action\Context $context,
-        PostDataProcessor $dataProcessor,
-        RedirectFactory $resultRedirectFactory
-    ) {
+    public function __construct(Action\Context $context, PostDataProcessor $dataProcessor)
+    {
         $this->dataProcessor = $dataProcessor;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Cms/Helper/Wysiwyg/Images.php b/app/code/Magento/Cms/Helper/Wysiwyg/Images.php
index 72fab43cf7fb46d9c31182d65db6cd56bc35f7c7..9728519a5e2101446790e491bd5b6fd3429132ac 100644
--- a/app/code/Magento/Cms/Helper/Wysiwyg/Images.php
+++ b/app/code/Magento/Cms/Helper/Wysiwyg/Images.php
@@ -206,7 +206,7 @@ class Images extends \Magento\Framework\App\Helper\AbstractHelper
                 if (!$this->_directory->isExist($currentDir)) {
                     $this->_directory->create($currentDir);
                 }
-            } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+            } catch (\Magento\Framework\Exception\FileSystemException $e) {
                 $message = __('The directory %1 is not writable by server.', $currentPath);
                 throw new \Magento\Framework\Exception\LocalizedException($message);
             }
diff --git a/app/code/Magento/Cms/Model/Block.php b/app/code/Magento/Cms/Model/Block.php
index 14227352f81bb7575785bfb46af36585111ed1ab..8fd712570825f235b4959b353906974eefb69a46 100644
--- a/app/code/Magento/Cms/Model/Block.php
+++ b/app/code/Magento/Cms/Model/Block.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Cms\Model;
 
+use Magento\Cms\Api\Data\BlockInterface;
 use Magento\Framework\Object\IdentityInterface;
 
 /**
@@ -12,28 +13,14 @@ use Magento\Framework\Object\IdentityInterface;
  *
  * @method \Magento\Cms\Model\Resource\Block _getResource()
  * @method \Magento\Cms\Model\Resource\Block getResource()
- * @method \Magento\Cms\Model\Block setTitle(string $value)
- * @method \Magento\Cms\Model\Block setIdentifier(string $value)
- * @method \Magento\Cms\Model\Block setContent(string $value)
- * @method \Magento\Cms\Model\Block setCreationTime(string $value)
- * @method \Magento\Cms\Model\Block setUpdateTime(string $value)
- * @method \Magento\Cms\Model\Block setIsActive(int $value)
  */
-class Block extends \Magento\Framework\Model\AbstractModel implements IdentityInterface
+class Block extends \Magento\Framework\Model\AbstractModel implements BlockInterface, IdentityInterface
 {
     /**
      * CMS block cache tag
      */
     const CACHE_TAG = 'cms_block';
 
-    const ID = 'block_id';
-    const IDENTIFIER = 'identifier';
-    const TITLE = 'title';
-    const CONTENT = 'content';
-    const CREATION_TIME = 'creation_time';
-    const UPDATE_TIME ='update_time';
-    const IS_ACTIVE ='is_active';
-
     /**
      * @var string
      */
@@ -88,7 +75,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn
      */
     public function getId()
     {
-        return $this->_getData(self::ID);
+        return $this->getData(self::BLOCK_ID);
     }
 
     /**
@@ -98,7 +85,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn
      */
     public function getIdentifier()
     {
-        return (string) $this->_getData(self::IDENTIFIER);
+        return (string)$this->getData(self::IDENTIFIER);
     }
 
     /**
@@ -108,7 +95,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn
      */
     public function getTitle()
     {
-        return $this->_getData(self::TITLE);
+        return $this->getData(self::TITLE);
     }
 
     /**
@@ -118,7 +105,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn
      */
     public function getContent()
     {
-        return $this->_getData(self::CONTENT);
+        return $this->getData(self::CONTENT);
     }
 
     /**
@@ -128,7 +115,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn
      */
     public function getCreationTime()
     {
-        return $this->_getData(self::CREATION_TIME);
+        return $this->getData(self::CREATION_TIME);
     }
 
     /**
@@ -138,16 +125,93 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn
      */
     public function getUpdateTime()
     {
-        return $this->_getData(self::UPDATE_TIME);
+        return $this->getData(self::UPDATE_TIME);
     }
 
     /**
-     * Retrieve block status
+     * Is active
      *
-     * @return int
+     * @return bool
+     */
+    public function isActive()
+    {
+        return (bool)$this->getData(self::IS_ACTIVE);
+    }
+
+    /**
+     * Set ID
+     *
+     * @param int $id
+     * @return BlockInterface
+     */
+    public function setId($id)
+    {
+        return $this->setData(self::BLOCK_ID, $id);
+    }
+
+    /**
+     * Set identifier
+     *
+     * @param string $identifier
+     * @return BlockInterface
+     */
+    public function setIdentifier($identifier)
+    {
+        return $this->setData(self::IDENTIFIER, $identifier);
+    }
+
+    /**
+     * Set title
+     *
+     * @param string $title
+     * @return BlockInterface
+     */
+    public function setTitle($title)
+    {
+        return $this->setData(self::TITLE, $title);
+    }
+
+    /**
+     * Set content
+     *
+     * @param string $content
+     * @return BlockInterface
+     */
+    public function setContent($content)
+    {
+        return $this->setData(self::CONTENT, $content);
+    }
+
+    /**
+     * Set creation time
+     *
+     * @param string $creationTime
+     * @return BlockInterface
+     */
+    public function setCreationTime($creationTime)
+    {
+        return $this->setData(self::CREATION_TIME, $creationTime);
+    }
+
+    /**
+     * Set update time
+     *
+     * @param string $updateTime
+     * @return BlockInterface
+     */
+    public function setUpdateTime($updateTime)
+    {
+        return $this->setData(self::UPDATE_TIME, $updateTime);
+    }
+
+    /**
+     * Set is active
+     *
+     * @param bool|int $isActive
+     * @return BlockInterface
      */
-    public function getIsActive()
+    public function setIsActive($isActive)
     {
-        return $this->_getData(self::IS_ACTIVE);
+        return $this->setData(self::IS_ACTIVE, $isActive);
     }
 }
diff --git a/app/code/Magento/Cms/Model/BlockCriteriaInterface.php b/app/code/Magento/Cms/Model/BlockCriteriaInterface.php
deleted file mode 100644
index 358551b163cdcfa6be96d49b4c2c007c31525f1a..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/BlockCriteriaInterface.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model;
-
-/**
- * Interface BlockCriteriaInterface
- */
-interface BlockCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
-{
-    /**
-     * Set first store flag
-     *
-     * @param bool $flag
-     * @return void
-     */
-    public function setFirstStoreFlag($flag = false);
-
-    /**
-     * Add filter by store
-     *
-     * @param int $storeId
-     * @param bool $withAdmin
-     * @return void
-     */
-    public function addStoreFilter($storeId, $withAdmin = true);
-}
diff --git a/app/code/Magento/Cms/Model/BlockRepository.php b/app/code/Magento/Cms/Model/BlockRepository.php
index 520add71eb28b864280d9cc2979859400fb04c6f..be1498fc8667553ba1f4ad4f8ccd93ac61d57b97 100644
--- a/app/code/Magento/Cms/Model/BlockRepository.php
+++ b/app/code/Magento/Cms/Model/BlockRepository.php
@@ -5,70 +5,82 @@
  */
 namespace Magento\Cms\Model;
 
+use Magento\Cms\Api\Data;
+use Magento\Cms\Api\BlockRepositoryInterface;
+use Magento\Framework\Api\DataObjectHelper;
+use Magento\Framework\Api\SearchCriteriaInterface;
 use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\NoSuchEntityException;
 
 /**
  * Class BlockRepository
- * @api
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class BlockRepository
+class BlockRepository implements BlockRepositoryInterface
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Block
+     * @var Resource\Block
      */
     protected $resource;
 
     /**
-     * @var \Magento\Cms\Model\BlockFactory
+     * @var BlockFactory
      */
     protected $blockFactory;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory
+     * @var Resource\Block\CollectionFactory
      */
     protected $blockCollectionFactory;
 
     /**
-     * @var \Magento\Framework\DB\QueryBuilderFactory
+     * @var Data\BlockSearchResultsInterfaceFactory
      */
-    protected $queryBuilderFactory;
+    protected $searchResultsFactory;
 
     /**
-     * @var \Magento\Framework\DB\MapperFactory
+     * @var DataObjectHelper
      */
-    protected $mapperFactory;
+    protected $dataObjectHelper;
 
     /**
-     * @param \Magento\Cms\Model\Resource\Block $resource
-     * @param \Magento\Cms\Model\BlockFactory $blockFactory
-     * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory
-     * @param \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory
-     * @param \Magento\Framework\DB\MapperFactory $mapperFactory
+     * @var Data\BlockInterfaceFactory
+     */
+    protected $dataBlockFactory;
+
+    /**
+     * @param Resource\Block $resource
+     * @param BlockFactory $blockFactory
+     * @param Data\BlockInterfaceFactory $dataBlockFactory
+     * @param Resource\Block\CollectionFactory $blockCollectionFactory
+     * @param Data\BlockSearchResultsInterfaceFactory $searchResultsFactory
+     * @param DataObjectHelper $dataObjectHelper
      */
     public function __construct(
-        \Magento\Cms\Model\Resource\Block $resource,
-        \Magento\Cms\Model\BlockFactory $blockFactory,
-        \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory,
-        \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory,
-        \Magento\Framework\DB\MapperFactory $mapperFactory
+        Resource\Block $resource,
+        BlockFactory $blockFactory,
+        Data\BlockInterfaceFactory $dataBlockFactory,
+        Resource\Block\CollectionFactory $blockCollectionFactory,
+        Data\BlockSearchResultsInterfaceFactory $searchResultsFactory,
+        DataObjectHelper $dataObjectHelper
     ) {
         $this->resource = $resource;
         $this->blockFactory = $blockFactory;
         $this->blockCollectionFactory = $blockCollectionFactory;
-        $this->queryBuilderFactory = $queryBuilderFactory;
-        $this->mapperFactory = $mapperFactory;
+        $this->searchResultsFactory = $searchResultsFactory;
+        $this->dataObjectHelper = $dataObjectHelper;
+        $this->dataBlockFactory = $dataBlockFactory;
     }
 
     /**
      * Save Block data
      *
-     * @param \Magento\Cms\Model\Block $block
-     * @return \Magento\Cms\Model\Block
+     * @param Data\BlockInterface $block
+     * @return Block
      * @throws CouldNotSaveException
      */
-    public function save(\Magento\Cms\Model\Block $block)
+    public function save(Data\BlockInterface $block)
     {
         try {
             $this->resource->save($block);
@@ -82,10 +94,10 @@ class BlockRepository
      * Load Block data by given Block Identity
      *
      * @param string $blockId
-     * @return \Magento\Cms\Model\Block
+     * @return Block
      * @throws \Magento\Framework\Exception\NoSuchEntityException
      */
-    public function get($blockId)
+    public function getById($blockId)
     {
         $block = $this->blockFactory->create();
         $this->resource->load($block, $blockId);
@@ -98,27 +110,65 @@ class BlockRepository
     /**
      * Load Block data collection by given search criteria
      *
-     * @param \Magento\Cms\Model\BlockCriteriaInterface $criteria
-     * @return \Magento\Cms\Model\Resource\Block\Collection
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     * @param SearchCriteriaInterface $criteria
+     * @return Resource\Block\Collection
      */
-    public function getList(\Magento\Cms\Model\BlockCriteriaInterface $criteria)
+    public function getList(SearchCriteriaInterface $criteria)
     {
-        $queryBuilder = $this->queryBuilderFactory->create();
-        $queryBuilder->setCriteria($criteria);
-        $queryBuilder->setResource($this->resource);
-        $query = $queryBuilder->create();
-        $collection = $this->blockCollectionFactory->create(['query' => $query]);
-        return $collection;
+        $searchResults = $this->searchResultsFactory->create();
+        $searchResults->setSearchCriteria($criteria);
+
+        $collection = $this->blockCollectionFactory->create();
+        foreach ($criteria->getFilterGroups() as $filterGroup) {
+            $fields = [];
+            $conditions = [];
+            foreach ($filterGroup->getFilters() as $filter) {
+                if ($filter->getField() === 'store_id') {
+                    $collection->addStoreFilter($filter->getValue(), false);
+                    continue;
+                }
+                $condition = $filter->getConditionType() ?: 'eq';
+                $fields[] = ['attribute' => $filter->getField(), $condition => $filter->getValue()];
+            }
+            if ($fields) {
+                $collection->addFieldToFilter($fields, $conditions);
+            }
+        }
+        $searchResults->setTotalCount($collection->getSize());
+        $sortOrders = $criteria->getSortOrders();
+        if ($sortOrders) {
+            foreach ($sortOrders as $sortOrder) {
+                $collection->addOrder(
+                    $sortOrder->getField(),
+                    ($sortOrder->getDirection() == SearchCriteriaInterface::SORT_ASC) ? 'ASC' : 'DESC'
+                );
+            }
+        }
+        $collection->setCurPage($criteria->getCurrentPage());
+        $collection->setPageSize($criteria->getPageSize());
+        $blocks = [];
+        /** @var Block $blockModel */
+        foreach ($collection as $blockModel) {
+            $blocks[] = $this->dataObjectHelper->populateWithArray(
+                $this->dataBlockFactory->create(),
+                $blockModel->getData(),
+                'Magento\Cms\Api\Data\BlockInterface'
+            );
+        }
+        $searchResults->setItems($blocks);
+        return $searchResults;
     }
 
     /**
      * Delete Block
      *
-     * @param \Magento\Cms\Model\Block $block
+     * @param Data\BlockInterface $block
      * @return bool
-     * @throws \Magento\Framework\Exception\CouldNotDeleteException
+     * @throws CouldNotDeleteException
      */
-    public function delete(\Magento\Cms\Model\Block $block)
+    public function delete(Data\BlockInterface $block)
     {
         try {
             $this->resource->delete($block);
@@ -133,11 +183,11 @@ class BlockRepository
      *
      * @param string $blockId
      * @return bool
-     * @throws \Magento\Framework\Exception\CouldNotDeleteException
-     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     * @throws CouldNotDeleteException
+     * @throws NoSuchEntityException
      */
     public function deleteById($blockId)
     {
-        return $this->delete($this->get($blockId));
+        return $this->delete($this->getById($blockId));
     }
 }
diff --git a/app/code/Magento/Cms/Model/Config/Source/Page.php b/app/code/Magento/Cms/Model/Config/Source/Page.php
index 4ed69001f1f9e0d0a747bcb7962f0a33b9c87a4a..6d0d87680ef5a386c7fde21be6a542beb1335793 100644
--- a/app/code/Magento/Cms/Model/Config/Source/Page.php
+++ b/app/code/Magento/Cms/Model/Config/Source/Page.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Cms\Model\Config\Source;
 
+use Magento\Cms\Model\Resource\Page\CollectionFactory;
+
 /**
  * Class Page
  */
@@ -16,25 +18,17 @@ class Page implements \Magento\Framework\Option\ArrayInterface
     protected $options;
 
     /**
-     * @var \Magento\Cms\Model\PageRepository
-     */
-    protected $pageRepository;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\PageCriteria
+     * @var CollectionFactory
      */
-    protected $pageCriteriaFactory;
+    protected $collectionFactory;
 
     /**
-     * @param \Magento\Cms\Model\PageRepository $pageRepository
-     * @param \Magento\Cms\Model\Resource\PageCriteriaFactory $pageCriteriaFactory
+     * @param CollectionFactory $collectionFactory
      */
     public function __construct(
-        \Magento\Cms\Model\PageRepository $pageRepository,
-        \Magento\Cms\Model\Resource\PageCriteriaFactory $pageCriteriaFactory
+        CollectionFactory $collectionFactory
     ) {
-        $this->pageRepository = $pageRepository;
-        $this->pageCriteriaFactory = $pageCriteriaFactory;
+        $this->collectionFactory = $collectionFactory;
     }
 
     /**
@@ -45,7 +39,7 @@ class Page implements \Magento\Framework\Option\ArrayInterface
     public function toOptionArray()
     {
         if (!$this->options) {
-            $this->options = $this->pageRepository->getList($this->pageCriteriaFactory->create())->toOptionIdArray();
+            $this->options = $this->collectionFactory->create()->toOptionIdArray();
         }
         return $this->options;
     }
diff --git a/app/code/Magento/Cms/Model/DataSource/BlockCollection.php b/app/code/Magento/Cms/Model/DataSource/BlockCollection.php
deleted file mode 100644
index b63c604fcd6865a88fcb7d0fadc1a578ce59e163..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/DataSource/BlockCollection.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\DataSource;
-
-use Magento\Framework\Data\CollectionDataSourceInterface;
-use Magento\Cms\Model\Resource\BlockCriteria;
-use Magento\Cms\Model\BlockRepository;
-
-/**
- * CMS block collection data source
- *
- * Class BlockCollection
- */
-class BlockCollection extends BlockCriteria implements CollectionDataSourceInterface
-{
-    /**
-     * @var BlockRepository
-     */
-    protected $repository;
-
-    /**
-     * @param BlockRepository $repository
-     * @param string $mapper
-     */
-    public function __construct(BlockRepository $repository, $mapper = '')
-    {
-        $this->repository = $repository;
-        $this->setFirstStoreFlag(true);
-        parent::__construct($mapper);
-    }
-
-    /**
-     * @inheritdoc
-     */
-    public function addFilter($name, $field, $condition = null, $type = 'public')
-    {
-        if ($field === 'store_id') {
-            $this->addStoreFilter($condition, false);
-        } else {
-            parent::addFilter($name, $field, $condition, $type);
-        }
-    }
-
-    /**
-     * @return \Magento\Cms\Model\Resource\Block\Collection
-     */
-    public function getResultCollection()
-    {
-        return $this->repository->getList($this);
-    }
-}
diff --git a/app/code/Magento/Cms/Model/DataSource/PageCollection.php b/app/code/Magento/Cms/Model/DataSource/PageCollection.php
deleted file mode 100644
index 74491d38aea4c6a72e70e6bba56596dba579103b..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/DataSource/PageCollection.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\DataSource;
-
-use Magento\Cms\Model\Resource\PageCriteria;
-use Magento\Framework\Data\CollectionDataSourceInterface;
-
-/**
- * CMS page collection data source
- *
- * Class PageCollection
- */
-class PageCollection extends PageCriteria implements CollectionDataSourceInterface
-{
-    /**
-     * @var \Magento\Cms\Model\PageRepository
-     */
-    protected $repository;
-
-    /**
-     * @param \Magento\Cms\Model\PageRepository $repository
-     * @param string $mapper
-     */
-    public function __construct(\Magento\Cms\Model\PageRepository $repository, $mapper = '')
-    {
-        $this->repository = $repository;
-        $this->setFirstStoreFlag(true);
-        parent::__construct($mapper);
-    }
-
-    /**
-     * @inheritdoc
-     */
-    public function addFilter($name, $field, $condition = null, $type = 'public')
-    {
-        if ($field === 'store_id') {
-            $this->addStoreFilter($condition, false);
-        } else {
-            parent::addFilter($name, $field, $condition, $type);
-        }
-    }
-
-    /**
-     * @return \Magento\Cms\Model\Resource\Page\Collection
-     */
-    public function getResultCollection()
-    {
-        return $this->repository->getList($this);
-    }
-
-    /**
-     * Add Criteria object
-     *
-     * @param \Magento\Cms\Model\Resource\PageCriteria $criteria
-     * @return void
-     */
-    public function addCriteria(\Magento\Cms\Model\Resource\PageCriteria $criteria)
-    {
-        $this->data[self::PART_CRITERIA_LIST]['list'][] = $criteria;
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Page.php b/app/code/Magento/Cms/Model/Page.php
index d1693facd3e2180a190c88961455eb3dbe4f8ff8..fca4ecc84aa66052fc48af15edf6d9fac83aeb41 100644
--- a/app/code/Magento/Cms/Model/Page.php
+++ b/app/code/Magento/Cms/Model/Page.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Cms\Model;
 
+use Magento\Cms\Api\Data\PageInterface;
 use Magento\Framework\Object\IdentityInterface;
 
 /**
@@ -12,41 +13,9 @@ use Magento\Framework\Object\IdentityInterface;
  *
  * @method \Magento\Cms\Model\Resource\Page _getResource()
  * @method \Magento\Cms\Model\Resource\Page getResource()
- * @method \Magento\Cms\Model\Page setTitle(string $value)
- * @method string getPageLayout()
- * @method \Magento\Cms\Model\Page setPageLayout(string $value)
- * @method string getMetaKeywords()
- * @method \Magento\Cms\Model\Page setMetaKeywords(string $value)
- * @method string getMetaDescription()
- * @method \Magento\Cms\Model\Page setMetaDescription(string $value)
- * @method \Magento\Cms\Model\Page setIdentifier(string $value)
- * @method string getContentHeading()
- * @method \Magento\Cms\Model\Page setContentHeading(string $value)
- * @method string getContent()
- * @method \Magento\Cms\Model\Page setContent(string $value)
- * @method string getCreationTime()
- * @method \Magento\Cms\Model\Page setCreationTime(string $value)
- * @method string getUpdateTime()
- * @method \Magento\Cms\Model\Page setUpdateTime(string $value)
- * @method int getIsActive()
- * @method \Magento\Cms\Model\Page setIsActive(int $value)
- * @method int getSortOrder()
- * @method \Magento\Cms\Model\Page setSortOrder(int $value)
- * @method string getLayoutUpdateXml()
- * @method \Magento\Cms\Model\Page setLayoutUpdateXml(string $value)
- * @method string getCustomTheme()
- * @method \Magento\Cms\Model\Page setCustomTheme(string $value)
- * @method string getCustomPageLayout()
- * @method \Magento\Cms\Model\Page setCustomPageLayout(string $value)
- * @method string getCustomLayoutUpdateXml()
- * @method \Magento\Cms\Model\Page setCustomLayoutUpdateXml(string $value)
- * @method string getCustomThemeFrom()
- * @method \Magento\Cms\Model\Page setCustomThemeFrom(string $value)
- * @method string getCustomThemeTo()
- * @method \Magento\Cms\Model\Page setCustomThemeTo(string $value)
  * @method int[] getStores()
  */
-class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInterface
+class Page extends \Magento\Framework\Model\AbstractModel implements PageInterface, IdentityInterface
 {
     /**
      * No route page id
@@ -60,14 +29,6 @@ class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInt
     const STATUS_DISABLED = 0;
     /**#@-*/
 
-    /**#@+
-     * Data object constants
-     */
-    const PAGE_ID = 'page_id';
-    const IDENTIFIER = 'identifier';
-    const TITLE = 'title';
-    /**#@-*/
-
     /**
      * CMS page cache tag
      */
@@ -95,30 +56,6 @@ class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInt
         $this->_init('Magento\Cms\Model\Resource\Page');
     }
 
-    /**
-     * @return int
-     */
-    public function getId()
-    {
-        return $this->_getData(self::PAGE_ID);
-    }
-
-    /**
-     * @return string
-     */
-    public function getIdentifier()
-    {
-        return (string) $this->_getData(self::IDENTIFIER);
-    }
-
-    /**
-     * @return string
-     */
-    public function getTitle()
-    {
-        return $this->_getData(self::TITLE);
-    }
-
     /**
      * Load object data
      *
@@ -177,4 +114,382 @@ class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInt
     {
         return [self::CACHE_TAG . '_' . $this->getId()];
     }
+
+    /**
+     * Get ID
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return parent::getData(self::PAGE_ID);
+    }
+
+    /**
+     * Get identifier
+     *
+     * @return string
+     */
+    public function getIdentifier()
+    {
+        return $this->getData(self::IDENTIFIER);
+    }
+
+    /**
+     * Get title
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        return $this->getData(self::TITLE);
+    }
+
+    /**
+     * Get page layout
+     *
+     * @return string
+     */
+    public function getPageLayout()
+    {
+        return $this->getData(self::PAGE_LAYOUT);
+    }
+
+    /**
+     * Get meta keywords
+     *
+     * @return string
+     */
+    public function getMetaKeywords()
+    {
+        return $this->getData(self::META_KEYWORDS);
+    }
+
+    /**
+     * Get meta description
+     *
+     * @return string
+     */
+    public function getMetaDescription()
+    {
+        return $this->getData(self::META_DESCRIPTION);
+    }
+
+    /**
+     * Get content heading
+     *
+     * @return string
+     */
+    public function getContentHeading()
+    {
+        return $this->getData(self::CONTENT_HEADING);
+    }
+
+    /**
+     * Get content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->getData(self::CONTENT);
+    }
+
+    /**
+     * Get creation time
+     *
+     * @return string
+     */
+    public function getCreationTime()
+    {
+        return $this->getData(self::CREATION_TIME);
+    }
+
+    /**
+     * Get update time
+     *
+     * @return string
+     */
+    public function getUpdateTime()
+    {
+        return $this->getData(self::UPDATE_TIME);
+    }
+
+    /**
+     * Get sort order
+     *
+     * @return string
+     */
+    public function getSortOrder()
+    {
+        return $this->getData(self::SORT_ORDER);
+    }
+
+    /**
+     * Get layout update xml
+     *
+     * @return string
+     */
+    public function getLayoutUpdateXml()
+    {
+        return $this->getData(self::LAYOUT_UPDATE_XML);
+    }
+
+    /**
+     * Get custom theme
+     *
+     * @return string
+     */
+    public function getCustomTheme()
+    {
+        return $this->getData(self::CUSTOM_THEME);
+    }
+
+    /**
+     * Get custom root template
+     *
+     * @return string
+     */
+    public function getCustomRootTemplate()
+    {
+        return $this->getData(self::CUSTOM_ROOT_TEMPLATE);
+    }
+
+    /**
+     * Get custom layout update xml
+     *
+     * @return string
+     */
+    public function getCustomLayoutUpdateXml()
+    {
+        return $this->getData(self::CUSTOM_LAYOUT_UPDATE_XML);
+    }
+
+    /**
+     * Get custom theme from
+     *
+     * @return string
+     */
+    public function getCustomThemeFrom()
+    {
+        return $this->getData(self::CUSTOM_THEME_FROM);
+    }
+
+    /**
+     * Get custom theme to
+     *
+     * @return string
+     */
+    public function getCustomThemeTo()
+    {
+        return $this->getData(self::CUSTOM_THEME_TO);
+    }
+
+    /**
+     * Is active
+     *
+     * @return bool
+     */
+    public function isActive()
+    {
+        return (bool)$this->getData(self::IS_ACTIVE);
+    }
+
+    /**
+     * Set ID
+     *
+     * @param int $id
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setId($id)
+    {
+        return $this->setData(self::PAGE_ID, $id);
+    }
+
+    /**
+     * Set identifier
+     *
+     * @param string $identifier
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setIdentifier($identifier)
+    {
+        return $this->setData(self::IDENTIFIER, $identifier);
+    }
+
+    /**
+     * Set title
+     *
+     * @param string $title
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setTitle($title)
+    {
+        return $this->setData(self::TITLE, $title);
+    }
+
+    /**
+     * Set page layout
+     *
+     * @param string $pageLayout
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setPageLayout($pageLayout)
+    {
+        return $this->setData(self::PAGE_LAYOUT, $pageLayout);
+    }
+
+    /**
+     * Set meta keywords
+     *
+     * @param string $metaKeywords
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setMetaKeywords($metaKeywords)
+    {
+        return $this->setData(self::META_KEYWORDS, $metaKeywords);
+    }
+
+    /**
+     * Set meta description
+     *
+     * @param string $metaDescription
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setMetaDescription($metaDescription)
+    {
+        return $this->setData(self::META_DESCRIPTION, $metaDescription);
+    }
+
+    /**
+     * Set content heading
+     *
+     * @param string $contentHeading
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setContentHeading($contentHeading)
+    {
+        return $this->setData(self::CONTENT_HEADING, $contentHeading);
+    }
+
+    /**
+     * Set content
+     *
+     * @param string $content
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setContent($content)
+    {
+        return $this->setData(self::CONTENT, $content);
+    }
+
+    /**
+     * Set creation time
+     *
+     * @param string $creationTime
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCreationTime($creationTime)
+    {
+        return $this->setData(self::CREATION_TIME, $creationTime);
+    }
+
+    /**
+     * Set update time
+     *
+     * @param string $updateTime
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setUpdateTime($updateTime)
+    {
+        return $this->setData(self::UPDATE_TIME, $updateTime);
+    }
+
+    /**
+     * Set sort order
+     *
+     * @param string $sortOrder
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setSortOrder($sortOrder)
+    {
+        return $this->setData(self::SORT_ORDER, $sortOrder);
+    }
+
+    /**
+     * Set layout update xml
+     *
+     * @param string $layoutUpdateXml
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setLayoutUpdateXml($layoutUpdateXml)
+    {
+        return $this->setData(self::LAYOUT_UPDATE_XML, $layoutUpdateXml);
+    }
+
+    /**
+     * Set custom theme
+     *
+     * @param string $customTheme
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomTheme($customTheme)
+    {
+        return $this->setData(self::CUSTOM_THEME, $customTheme);
+    }
+
+    /**
+     * Set custom root template
+     *
+     * @param string $customRootTemplate
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomRootTemplate($customRootTemplate)
+    {
+        return $this->setData(self::CUSTOM_ROOT_TEMPLATE, $customRootTemplate);
+    }
+
+    /**
+     * Set custom layout update xml
+     *
+     * @param string $customLayoutUpdateXml
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomLayoutUpdateXml($customLayoutUpdateXml)
+    {
+        return $this->setData(self::CUSTOM_LAYOUT_UPDATE_XML, $customLayoutUpdateXml);
+    }
+
+    /**
+     * Set custom theme from
+     *
+     * @param string $customThemeFrom
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomThemeFrom($customThemeFrom)
+    {
+        return $this->setData(self::CUSTOM_THEME_FROM, $customThemeFrom);
+    }
+
+    /**
+     * Set custom theme to
+     *
+     * @param string $customThemeTo
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setCustomThemeTo($customThemeTo)
+    {
+        return $this->setData(self::CUSTOM_THEME_TO, $customThemeTo);
+    }
+
+    /**
+     * Set is active
+     *
+     * @param int|bool $isActive
+     * @return \Magento\Cms\Api\Data\PageInterface
+     */
+    public function setIsActive($isActive)
+    {
+        return $this->setData(self::IS_ACTIVE, $isActive);
+    }
 }
diff --git a/app/code/Magento/Cms/Model/PageCriteriaInterface.php b/app/code/Magento/Cms/Model/PageCriteriaInterface.php
deleted file mode 100644
index 692fb97988f222d119b02fcf536bc01b656b3e21..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/PageCriteriaInterface.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model;
-
-/**
- * Interface PageCriteriaInterface
- */
-interface PageCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
-{
-    /**
-     * Set first store flag
-     *
-     * @param bool $flag
-     * @return void
-     */
-    public function setFirstStoreFlag($flag = false);
-
-    /**
-     * Add filter by store
-     *
-     * @param int|\Magento\Store\Model\Store $store
-     * @param bool $withAdmin
-     * @return void
-     */
-    public function addStoreFilter($store, $withAdmin = true);
-}
diff --git a/app/code/Magento/Cms/Model/PageRepository.php b/app/code/Magento/Cms/Model/PageRepository.php
index 67815ec24adb01de14531640a2cdbeec49f2a471..82fbba3748d12cdb9dd26ec4dd0d62c9f6c50455 100644
--- a/app/code/Magento/Cms/Model/PageRepository.php
+++ b/app/code/Magento/Cms/Model/PageRepository.php
@@ -5,69 +5,82 @@
  */
 namespace Magento\Cms\Model;
 
+use Magento\Cms\Api\Data;
+use Magento\Cms\Api\PageRepositoryInterface;
+use Magento\Framework\Api\DataObjectHelper;
+use Magento\Framework\Api\SearchCriteriaInterface;
 use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\NoSuchEntityException;
 
 /**
  * Class PageRepository
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class PageRepository
+class PageRepository implements PageRepositoryInterface
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Page
+     * @var Resource\Page
      */
     protected $resource;
 
     /**
-     * @var \Magento\Cms\Model\PageFactory
+     * @var PageFactory
      */
     protected $pageFactory;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory
+     * @var Resource\Page\CollectionFactory
      */
     protected $pageCollectionFactory;
 
     /**
-     * @var \Magento\Framework\DB\QueryBuilderFactory
+     * @var Data\PageSearchResultsInterfaceFactory
      */
-    protected $queryBuilderFactory;
+    protected $searchResultsFactory;
 
     /**
-     * @var \Magento\Framework\DB\MapperFactory
+     * @var DataObjectHelper
      */
-    protected $mapperFactory;
+    protected $dataObjectHelper;
+
+    /**
+     * @var Data\PageInterfaceFactory
+     */
+    protected $dataPageFactory;
 
     /**
      * @param Resource\Page $resource
-     * @param \Magento\Cms\Model\PageFactory $pageFactory
-     * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $pageCollectionFactory
-     * @param \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory
-     * @param \Magento\Framework\DB\MapperFactory $mapperFactory
+     * @param PageFactory $pageFactory
+     * @param Data\PageInterfaceFactory $dataPageFactory
+     * @param Resource\Page\CollectionFactory $pageCollectionFactory
+     * @param Data\PageSearchResultsInterfaceFactory $searchResultsFactory
+     * @param DataObjectHelper $dataObjectHelper
      */
     public function __construct(
-        \Magento\Cms\Model\Resource\Page $resource,
-        \Magento\Cms\Model\PageFactory $pageFactory,
-        \Magento\Cms\Model\Resource\Page\CollectionFactory $pageCollectionFactory,
-        \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory,
-        \Magento\Framework\DB\MapperFactory $mapperFactory
+        Resource\Page $resource,
+        PageFactory $pageFactory,
+        Data\PageInterfaceFactory $dataPageFactory,
+        Resource\Page\CollectionFactory $pageCollectionFactory,
+        Data\PageSearchResultsInterfaceFactory $searchResultsFactory,
+        DataObjectHelper $dataObjectHelper
     ) {
         $this->resource = $resource;
         $this->pageFactory = $pageFactory;
         $this->pageCollectionFactory = $pageCollectionFactory;
-        $this->queryBuilderFactory = $queryBuilderFactory;
-        $this->mapperFactory = $mapperFactory;
+        $this->searchResultsFactory = $searchResultsFactory;
+        $this->dataObjectHelper = $dataObjectHelper;
+        $this->dataPageFactory = $dataPageFactory;
     }
 
     /**
      * Save Page data
      *
-     * @param \Magento\Cms\Model\Page $page
-     * @return \Magento\Cms\Model\Page
+     * @param Data\PageInterface $page
+     * @return Page
      * @throws CouldNotSaveException
      */
-    public function save(\Magento\Cms\Model\Page $page)
+    public function save(Data\PageInterface $page)
     {
         try {
             $this->resource->save($page);
@@ -81,10 +94,10 @@ class PageRepository
      * Load Page data by given Page Identity
      *
      * @param string $pageId
-     * @return \Magento\Cms\Model\Page
+     * @return Page
      * @throws \Magento\Framework\Exception\NoSuchEntityException
      */
-    public function get($pageId)
+    public function getById($pageId)
     {
         $page = $this->pageFactory->create();
         $this->resource->load($page, $pageId);
@@ -97,27 +110,65 @@ class PageRepository
     /**
      * Load Page data collection by given search criteria
      *
-     * @param \Magento\Cms\Model\PageCriteriaInterface $criteria
-     * @return \Magento\Cms\Model\Resource\Page\Collection
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     * @param SearchCriteriaInterface $criteria
+     * @return Resource\Page\Collection
      */
-    public function getList(\Magento\Cms\Model\PageCriteriaInterface $criteria)
+    public function getList(SearchCriteriaInterface $criteria)
     {
-        $queryBuilder = $this->queryBuilderFactory->create();
-        $queryBuilder->setCriteria($criteria);
-        $queryBuilder->setResource($this->resource);
-        $query = $queryBuilder->create();
-        $collection = $this->pageCollectionFactory->create(['query' => $query]);
-        return $collection;
+        $searchResults = $this->searchResultsFactory->create();
+        $searchResults->setSearchCriteria($criteria);
+
+        $collection = $this->pageCollectionFactory->create();
+        foreach ($criteria->getFilterGroups() as $filterGroup) {
+            $fields = [];
+            $conditions = [];
+            foreach ($filterGroup->getFilters() as $filter) {
+                if ($filter->getField() === 'store_id') {
+                    $collection->addStoreFilter($filter->getValue(), false);
+                    continue;
+                }
+                $condition = $filter->getConditionType() ?: 'eq';
+                $fields[] = ['attribute' => $filter->getField(), $condition => $filter->getValue()];
+            }
+            if ($fields) {
+                $collection->addFieldToFilter($fields, $conditions);
+            }
+        }
+        $searchResults->setTotalCount($collection->getSize());
+        $sortOrders = $criteria->getSortOrders();
+        if ($sortOrders) {
+            foreach ($sortOrders as $sortOrder) {
+                $collection->addOrder(
+                    $sortOrder->getField(),
+                    ($sortOrder->getDirection() == SearchCriteriaInterface::SORT_ASC) ? 'ASC' : 'DESC'
+                );
+            }
+        }
+        $collection->setCurPage($criteria->getCurrentPage());
+        $collection->setPageSize($criteria->getPageSize());
+        $pages = [];
+        /** @var Page $pageModel */
+        foreach ($collection as $pageModel) {
+            $pages[] = $this->dataObjectHelper->populateWithArray(
+                $this->dataPageFactory->create(),
+                $pageModel->getData(),
+                'Magento\Cms\Api\Data\PageInterface'
+            );
+        }
+        $searchResults->setItems($pages);
+        return $searchResults;
     }
 
     /**
      * Delete Page
      *
-     * @param \Magento\Cms\Model\Page $page
+     * @param Data\PageInterface $page
      * @return bool
-     * @throws \Magento\Framework\Exception\CouldNotDeleteException
+     * @throws CouldNotDeleteException
      */
-    public function delete(\Magento\Cms\Model\Page $page)
+    public function delete(Data\PageInterface $page)
     {
         try {
             $this->resource->delete($page);
@@ -132,11 +183,11 @@ class PageRepository
      *
      * @param string $pageId
      * @return bool
-     * @throws \Magento\Framework\Exception\CouldNotDeleteException
-     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     * @throws CouldNotDeleteException
+     * @throws NoSuchEntityException
      */
     public function deleteById($pageId)
     {
-        return $this->delete($this->get($pageId));
+        return $this->delete($this->getById($pageId));
     }
 }
diff --git a/app/code/Magento/Cms/Model/Resource/Block/Collection.php b/app/code/Magento/Cms/Model/Resource/Block/Collection.php
index b6e0b2db406ee0cfd33a7fffe3b5494c21f4d508..3898607f31ed81b2ebe958e33eb56eeb243660df 100644
--- a/app/code/Magento/Cms/Model/Resource/Block/Collection.php
+++ b/app/code/Magento/Cms/Model/Resource/Block/Collection.php
@@ -1,27 +1,117 @@
 <?php
 /**
+ * Cms block grid collection
+ *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 namespace Magento\Cms\Model\Resource\Block;
 
-use Magento\Cms\Model\Resource\AbstractCollection;
-
 /**
- * CMS block collection
- *
  * Class Collection
  */
-class Collection extends AbstractCollection
+class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
 {
     /**
+     * @return \Magento\Cms\Model\Resource\Block\Collection
+     */
+    protected function _afterLoad()
+    {
+        $this->walk('afterLoad');
+        parent::_afterLoad();
+    }
+
+    /**
+     * @param string|array $field
+     * @param string|int|array|null $condition
+     * @return \Magento\Cms\Model\Resource\Block\Collection
+     */
+    public function addFieldToFilter($field, $condition = null)
+    {
+        if ($field == 'store_id') {
+            return $this->addStoreFilter($condition, false);
+        }
+        return parent::addFieldToFilter($field, $condition);
+    }
+
+    /**
+     * Define resource model
+     *
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_init('Magento\Cms\Model\Block', 'Magento\Cms\Model\Resource\Block');
+        $this->_map['fields']['store'] = 'store_table.store_id';
+    }
+
+    /**
+     * Returns pairs block_id - title
+     *
+     * @return array
+     */
+    public function toOptionArray()
+    {
+        return $this->_toOptionArray('block_id', 'title');
+    }
+
+    /**
+     * Add filter by store
+     *
+     * @param int|\Magento\Store\Model\Store $store
+     * @param bool $withAdmin
+     * @return $this
+     */
+    public function addStoreFilter($store, $withAdmin = true)
+    {
+        if ($store instanceof \Magento\Store\Model\Store) {
+            $store = [$store->getId()];
+        }
+
+        if (!is_array($store)) {
+            $store = [$store];
+        }
+
+        if ($withAdmin) {
+            $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID;
+        }
+
+        $this->addFilter('store', ['in' => $store], 'public');
+
+        return $this;
+    }
+
+    /**
+     * Get SQL for get record count.
+     * Extra GROUP BY strip added.
+     *
+     * @return \Magento\Framework\DB\Select
+     */
+    public function getSelectCountSql()
+    {
+        $countSelect = parent::getSelectCountSql();
+
+        $countSelect->reset(\Zend_Db_Select::GROUP);
+
+        return $countSelect;
+    }
+
+    /**
+     * Join store relation table if there is store filter
+     *
      * @return void
      */
-    protected function init()
+    protected function _renderFiltersBefore()
     {
-        $this->setDataInterfaceName('Magento\Cms\Model\Block');
-        $this->storeTableName = 'cms_block_store';
-        $this->linkFieldName = 'block_id';
-        parent::init();
+        if ($this->getFilter('store')) {
+            $this->getSelect()->join(
+                ['store_table' => $this->getTable('cms_block_store')],
+                'main_table.block_id = store_table.block_id',
+                []
+            )->group(
+                'main_table.block_id'
+            );
+        }
+        parent::_renderFiltersBefore();
     }
 }
diff --git a/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php b/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php
deleted file mode 100644
index 50b5433e4fc9dc0a2b83e4cbd93ce89b3ab450e7..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Cms block grid collection
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource\Block\Grid;
-
-/**
- * Class Collection
- */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
-{
-    /**
-     * @return \Magento\Cms\Model\Resource\Block\Grid\Collection
-     */
-    protected function _afterLoad()
-    {
-        $this->walk('afterLoad');
-        parent::_afterLoad();
-    }
-
-    /**
-     * @param string|array $field
-     * @param string|int|array|null $condition
-     * @return \Magento\Cms\Model\Resource\Block\Grid\Collection
-     */
-    public function addFieldToFilter($field, $condition = null)
-    {
-        if ($field == 'store_id') {
-            return $this->addStoreFilter($condition, false);
-        }
-        return parent::addFieldToFilter($field, $condition);
-    }
-
-    /**
-     * Define resource model
-     *
-     * @return void
-     */
-    protected function _construct()
-    {
-        $this->_init('Magento\Cms\Model\Block', 'Magento\Cms\Model\Resource\Block');
-        $this->_map['fields']['store'] = 'store_table.store_id';
-    }
-
-    /**
-     * Returns pairs block_id - title
-     *
-     * @return array
-     */
-    public function toOptionArray()
-    {
-        return $this->_toOptionArray('block_id', 'title');
-    }
-
-    /**
-     * Add filter by store
-     *
-     * @param int|\Magento\Store\Model\Store $store
-     * @param bool $withAdmin
-     * @return $this
-     */
-    public function addStoreFilter($store, $withAdmin = true)
-    {
-        if ($store instanceof \Magento\Store\Model\Store) {
-            $store = [$store->getId()];
-        }
-
-        if (!is_array($store)) {
-            $store = [$store];
-        }
-
-        if ($withAdmin) {
-            $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID;
-        }
-
-        $this->addFilter('store', ['in' => $store], 'public');
-
-        return $this;
-    }
-
-    /**
-     * Get SQL for get record count.
-     * Extra GROUP BY strip added.
-     *
-     * @return \Magento\Framework\DB\Select
-     */
-    public function getSelectCountSql()
-    {
-        $countSelect = parent::getSelectCountSql();
-
-        $countSelect->reset(\Zend_Db_Select::GROUP);
-
-        return $countSelect;
-    }
-
-    /**
-     * Join store relation table if there is store filter
-     *
-     * @return void
-     */
-    protected function _renderFiltersBefore()
-    {
-        if ($this->getFilter('store')) {
-            $this->getSelect()->join(
-                ['store_table' => $this->getTable('cms_block_store')],
-                'main_table.block_id = store_table.block_id',
-                []
-            )->group(
-                'main_table.block_id'
-            );
-        }
-        parent::_renderFiltersBefore();
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/BlockCriteria.php b/app/code/Magento/Cms/Model/Resource/BlockCriteria.php
deleted file mode 100644
index e10c0c0c15d612b6b15e20e6ddc7a194e3b9bbfa..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/BlockCriteria.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource;
-
-use Magento\Cms\Model\BlockCriteriaInterface;
-
-/**
- * Class BlockCriteria
- */
-class BlockCriteria extends CmsAbstractCriteria implements BlockCriteriaInterface
-{
-    /**
-     * @param string $mapper
-     */
-    public function __construct($mapper = '')
-    {
-        $this->mapperInterfaceName = $mapper ?: 'Magento\Cms\Model\Resource\BlockCriteriaMapper';
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/BlockCriteriaMapper.php b/app/code/Magento/Cms/Model/Resource/BlockCriteriaMapper.php
deleted file mode 100644
index cfa339ad26232172404adb67094aa1ba90010b58..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/BlockCriteriaMapper.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource;
-
-/**
- * Class BlockCriteriaMapper
- */
-class BlockCriteriaMapper extends CmsCriteriaMapper
-{
-    /**
-     * @inheritdoc
-     */
-    protected function init()
-    {
-        $this->storeTableName = 'cms_block_store';
-        $this->linkFieldName = 'block_id';
-        $this->initResource('Magento\Cms\Model\Resource\Block');
-        parent::init();
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/CmsAbstractCriteria.php b/app/code/Magento/Cms/Model/Resource/CmsAbstractCriteria.php
deleted file mode 100644
index 88068299f8b9b9b68db949d2de672268827f35b6..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/CmsAbstractCriteria.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource;
-
-use Magento\Framework\Data\AbstractCriteria;
-
-/**
- * Class CmsAbstractCriteria
- */
-class CmsAbstractCriteria extends AbstractCriteria
-{
-    /**
-     * @inheritdoc
-     */
-    public function setFirstStoreFlag($flag = false)
-    {
-        $this->data['first_store_flag'] = $flag;
-    }
-
-    /**
-     * @inheritdoc
-     */
-    public function addStoreFilter($store, $withAdmin = true)
-    {
-        $this->data['store_filter'] = [$store, $withAdmin];
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/CmsCriteriaMapper.php b/app/code/Magento/Cms/Model/Resource/CmsCriteriaMapper.php
deleted file mode 100644
index ffac24c942d62253aed5c41b61564ef26d0fdc3e..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/CmsCriteriaMapper.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource;
-
-use Magento\Framework\DB\GenericMapper;
-
-/**
- * Class CmsCriteriaMapper
- */
-class CmsCriteriaMapper extends GenericMapper
-{
-    /**
-     * Table which links CMS entity to stores
-     *
-     * @var string
-     */
-    protected $storeTableName;
-
-    /**
-     * @var string
-     */
-    protected $linkFieldName;
-
-    /**
-     * @inheritdoc
-     */
-    protected function init()
-    {
-        $this->map['fields']['store'] = 'store_table.store_id';
-        $this->map['fields']['store_id'] = 'store_table.store_id';
-    }
-
-    /**
-     * Set first store flag
-     *
-     * @param bool $flag
-     * @return void
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function mapFirstStoreFlag($flag)
-    {
-        // do nothing since handled in collection afterLoad
-    }
-
-    /**
-     * Add filter by store
-     *
-     * @param int|\Magento\Store\Model\Store $store
-     * @param bool $withAdmin
-     * @return void
-     */
-    public function mapStoreFilter($store, $withAdmin)
-    {
-        $this->getSelect()->join(
-            ['store_table' => $this->getTable($this->storeTableName)],
-            "main_table.{$this->linkFieldName} = store_table.{$this->linkFieldName}",
-            []
-        )->group("main_table.{$this->linkFieldName}");
-        if (!is_array($store)) {
-            if ($store instanceof \Magento\Store\Model\Store) {
-                $store = [$store->getId()];
-            } else {
-                $store = [$store];
-            }
-        }
-        if ($withAdmin) {
-            $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID;
-        }
-        $field = $this->getMappedField('store');
-        $this->select->where(
-            $this->getConditionSql($field, ['in' => $store]),
-            null,
-            \Magento\Framework\DB\Select::TYPE_CONDITION
-        );
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/Page/Collection.php b/app/code/Magento/Cms/Model/Resource/Page/Collection.php
index 69dc4cfd7558d53b761aa54b03781bac30a3a666..2b8943acb57a50f1e1dba0c87c6f44649d71ebca 100644
--- a/app/code/Magento/Cms/Model/Resource/Page/Collection.php
+++ b/app/code/Magento/Cms/Model/Resource/Page/Collection.php
@@ -5,131 +5,212 @@
  */
 namespace Magento\Cms\Model\Resource\Page;
 
-use Magento\Framework\Data\AbstractSearchResult;
-use Magento\Framework\Data\Collection\EntityFactoryInterface;
-use Magento\Framework\Data\SearchResultIteratorFactory;
-use Magento\Framework\DB\QueryInterface;
-use Magento\Framework\Event\ManagerInterface;
-use Magento\Store\Model\StoreManagerInterface;
-use Magento\Framework\Data\SearchResultProcessorFactory;
-use Magento\Framework\Data\SearchResultProcessor;
-
 /**
  * CMS page collection
+ *
+ * Class Collection
  */
-class Collection extends AbstractSearchResult
+class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
 {
     /**
-     * @var StoreManagerInterface
+     * Load data for preview flag
+     *
+     * @var bool
      */
-    protected $storeManager;
+    protected $_previewFlag;
 
     /**
-     * @var SearchResultProcessor
+     * Store manager
+     *
+     * @var \Magento\Store\Model\StoreManagerInterface
      */
-    protected $searchResultProcessor;
+    protected $_storeManager;
 
     /**
-     * @param QueryInterface $query
-     * @param EntityFactoryInterface $entityFactory
-     * @param ManagerInterface $eventManager
-     * @param SearchResultIteratorFactory $resultIteratorFactory
+     * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
+     * @param \Psr\Log\LoggerInterface $logger
+     * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
+     * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param SearchResultProcessorFactory $searchResultProcessorFactory
+     * @param mixed $connection
+     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
      */
     public function __construct(
-        QueryInterface $query,
-        EntityFactoryInterface $entityFactory,
-        ManagerInterface $eventManager,
-        SearchResultIteratorFactory $resultIteratorFactory,
-        StoreManagerInterface $storeManager,
-        SearchResultProcessorFactory $searchResultProcessorFactory
+        \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
+        \Psr\Log\LoggerInterface $logger,
+        \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
+        \Magento\Framework\Event\ManagerInterface $eventManager,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        $connection = null,
+        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
     ) {
-        $this->storeManager = $storeManager;
-        $this->searchResultProcessor = $searchResultProcessorFactory->create($this);
-        parent::__construct($query, $entityFactory, $eventManager, $resultIteratorFactory);
+        parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
+        $this->_storeManager = $storeManager;
     }
 
     /**
+     * Define resource model
+     *
      * @return void
      */
-    protected function init()
+    protected function _construct()
     {
-        $this->setDataInterfaceName('Magento\Cms\Model\Page');
-        $this->query->addCountSqlSkipPart(\Zend_Db_Select::GROUP, true);
-        $this->storeTableName = 'cms_page_store';
-        $this->linkFieldName = 'page_id';
+        $this->_init('Magento\Cms\Model\Page', 'Magento\Cms\Model\Resource\Page');
+        $this->_map['fields']['page_id'] = 'main_table.page_id';
+        $this->_map['fields']['store'] = 'store_table.store_id';
     }
 
     /**
+     * Returns pairs identifier - title for unique identifiers
+     * and pairs identifier|page_id - title for non-unique after first
+     *
      * @return array
      */
     public function toOptionIdArray()
     {
         $res = [];
         $existingIdentifiers = [];
-        foreach ($this->getItems() as $item) {
-            /** @var PageInterface $item */
-            $identifier = $item->getIdentifier();
+        foreach ($this as $item) {
+            $identifier = $item->getData('identifier');
 
             $data['value'] = $identifier;
-            $data['label'] = $item->getTitle();
+            $data['label'] = $item->getData('title');
 
             if (in_array($identifier, $existingIdentifiers)) {
-                $data['value'] .= '|' . $item->getPageId();
+                $data['value'] .= '|' . $item->getData('page_id');
             } else {
                 $existingIdentifiers[] = $identifier;
             }
+
             $res[] = $data;
         }
+
         return $res;
     }
 
     /**
-     * @deprecated
-     * @return void
+     * Set first store flag
+     *
+     * @param bool $flag
+     * @return $this
+     */
+    public function setFirstStoreFlag($flag = false)
+    {
+        $this->_previewFlag = $flag;
+        return $this;
+    }
+
+    /**
+     * Add field filter to collection
+     *
+     * @param string|array $field
+     * @param string|int|array|null $condition
+     * @return \Magento\Cms\Model\Resource\Block\Collection
+     */
+    public function addFieldToFilter($field, $condition = null)
+    {
+        if ($field === 'store_id') {
+            return $this->addStoreFilter($condition, false);
+        }
+
+        return parent::addFieldToFilter($field, $condition);
+    }
+
+    /**
+     * Add filter by store
+     *
+     * @param int|\Magento\Store\Model\Store $store
+     * @param bool $withAdmin
+     * @return $this
      */
-    public function addStoreFilter()
+    public function addStoreFilter($store, $withAdmin = true)
     {
-        //
+        if (!$this->getFlag('store_filter_added')) {
+            if ($store instanceof \Magento\Store\Model\Store) {
+                $store = [$store->getId()];
+            }
+
+            if (!is_array($store)) {
+                $store = [$store];
+            }
+
+            if ($withAdmin) {
+                $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID;
+            }
+
+            $this->addFilter('store', ['in' => $store], 'public');
+        }
+        return $this;
     }
 
     /**
      * Perform operations after collection load
      *
-     * @return void
+     * @return $this
      */
-    protected function afterLoad()
+    protected function _afterLoad()
     {
-        if ($this->getSearchCriteria()->getPart('first_store_flag')) {
-            $items = $this->searchResultProcessor->getColumnValues('page_id');
-
-            $connection = $this->getQuery()->getConnection();
-            $resource = $this->getQuery()->getResource();
-            if (count($items)) {
-                $select = $connection->select()->from(['cps' => $resource->getTable('cms_page_store')])
-                    ->where('cps.page_id IN (?)', $items);
-                if ($result = $connection->fetchPairs($select)) {
-                    foreach ($this->getItems() as $item) {
-                        /** @var PageInterface $item */
-                        if (!isset($result[$item->getPageId()])) {
-                            continue;
-                        }
-                        if ($result[$item->getPageId()] == 0) {
-                            $stores = $this->storeManager->getStores(false, true);
-                            $storeId = current($stores)->getId();
-                            $storeCode = key($stores);
-                        } else {
-                            $storeId = $result[$item->getPageId()];
-                            $storeCode = $this->storeManager->getStore($storeId)->getCode();
-                        }
-                        $item->setData('_first_store_id', $storeId);
-                        $item->setData('store_code', $storeCode);
-                        $item->setData('store_id', [$result[$item->getPageId()]]);
+        $items = $this->getColumnValues('page_id');
+        if (count($items)) {
+            $connection = $this->getConnection();
+            $select = $connection->select()->from(['cps' => $this->getTable('cms_page_store')])
+                ->where('cps.page_id IN (?)', $items);
+            $result = $connection->fetchPairs($select);
+            if ($result) {
+                foreach ($this as $item) {
+                    $pageId = $item->getData('page_id');
+                    if (!isset($result[$pageId])) {
+                        continue;
+                    }
+                    if ($result[$pageId] == 0) {
+                        $stores = $this->_storeManager->getStores(false, true);
+                        $storeId = current($stores)->getId();
+                        $storeCode = key($stores);
+                    } else {
+                        $storeId = $result[$item->getData('page_id')];
+                        $storeCode = $this->_storeManager->getStore($storeId)->getCode();
                     }
+                    $item->setData('_first_store_id', $storeId);
+                    $item->setData('store_code', $storeCode);
+                    $item->setData('store_id', [$result[$pageId]]);
                 }
             }
         }
-        parent::afterLoad();
+
+        $this->_previewFlag = false;
+        return parent::_afterLoad();
+    }
+
+    /**
+     * Join store relation table if there is store filter
+     *
+     * @return void
+     */
+    protected function _renderFiltersBefore()
+    {
+        if ($this->getFilter('store')) {
+            $this->getSelect()->join(
+                ['store_table' => $this->getTable('cms_page_store')],
+                'main_table.page_id = store_table.page_id',
+                []
+            )->group(
+                'main_table.page_id'
+            );
+        }
+        parent::_renderFiltersBefore();
+    }
+
+    /**
+     * Get SQL for get record count.
+     * Extra GROUP BY strip added.
+     *
+     * @return \Magento\Framework\DB\Select
+     */
+    public function getSelectCountSql()
+    {
+        $countSelect = parent::getSelectCountSql();
+        $countSelect->reset(\Zend_Db_Select::GROUP);
+
+        return $countSelect;
     }
 }
diff --git a/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php b/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php
deleted file mode 100644
index 41402e0ed343f197fa58b3f10d6bf55bf302fcdc..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource\Page\Grid;
-
-/**
- * CMS page collection
- *
- * Class Collection
- */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
-{
-    /**
-     * Load data for preview flag
-     *
-     * @var bool
-     */
-    protected $_previewFlag;
-
-    /**
-     * Store manager
-     *
-     * @var \Magento\Store\Model\StoreManagerInterface
-     */
-    protected $_storeManager;
-
-    /**
-     * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
-     * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
-     * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
-     */
-    public function __construct(
-        \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
-        \Psr\Log\LoggerInterface $logger,
-        \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
-        \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Store\Model\StoreManagerInterface $storeManager,
-        $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
-    ) {
-        parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
-        $this->_storeManager = $storeManager;
-    }
-
-    /**
-     * Define resource model
-     *
-     * @return void
-     */
-    protected function _construct()
-    {
-        $this->_init('Magento\Cms\Model\Page', 'Magento\Cms\Model\Resource\Page');
-        $this->_map['fields']['page_id'] = 'main_table.page_id';
-        $this->_map['fields']['store'] = 'store_table.store_id';
-    }
-
-    /**
-     * Returns pairs identifier - title for unique identifiers
-     * and pairs identifier|page_id - title for non-unique after first
-     *
-     * @return array
-     */
-    public function toOptionIdArray()
-    {
-        $res = [];
-        $existingIdentifiers = [];
-        foreach ($this as $item) {
-            $identifier = $item->getData('identifier');
-
-            $data['value'] = $identifier;
-            $data['label'] = $item->getData('title');
-
-            if (in_array($identifier, $existingIdentifiers)) {
-                $data['value'] .= '|' . $item->getData('page_id');
-            } else {
-                $existingIdentifiers[] = $identifier;
-            }
-
-            $res[] = $data;
-        }
-
-        return $res;
-    }
-
-    /**
-     * Set first store flag
-     *
-     * @param bool $flag
-     * @return $this
-     */
-    public function setFirstStoreFlag($flag = false)
-    {
-        $this->_previewFlag = $flag;
-        return $this;
-    }
-
-    /**
-     * Add field filter to collection
-     *
-     * @param string|array $field
-     * @param string|int|array|null $condition
-     * @return \Magento\Cms\Model\Resource\Block\Grid\Collection
-     */
-    public function addFieldToFilter($field, $condition = null)
-    {
-        if ($field === 'store_id') {
-            return $this->addStoreFilter($condition, false);
-        }
-
-        return parent::addFieldToFilter($field, $condition);
-    }
-
-    /**
-     * Add filter by store
-     *
-     * @param int|\Magento\Store\Model\Store $store
-     * @param bool $withAdmin
-     * @return $this
-     */
-    public function addStoreFilter($store, $withAdmin = true)
-    {
-        if (!$this->getFlag('store_filter_added')) {
-            if ($store instanceof \Magento\Store\Model\Store) {
-                $store = [$store->getId()];
-            }
-
-            if (!is_array($store)) {
-                $store = [$store];
-            }
-
-            if ($withAdmin) {
-                $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID;
-            }
-
-            $this->addFilter('store', ['in' => $store], 'public');
-        }
-        return $this;
-    }
-
-    /**
-     * Perform operations after collection load
-     *
-     * @return $this
-     */
-    protected function _afterLoad()
-    {
-        $items = $this->getColumnValues('page_id');
-        if (count($items)) {
-            $connection = $this->getConnection();
-            $select = $connection->select()->from(['cps' => $this->getTable('cms_page_store')])
-                ->where('cps.page_id IN (?)', $items);
-            $result = $connection->fetchPairs($select);
-            if ($result) {
-                foreach ($this as $item) {
-                    $pageId = $item->getData('page_id');
-                    if (!isset($result[$pageId])) {
-                        continue;
-                    }
-                    if ($result[$pageId] == 0) {
-                        $stores = $this->_storeManager->getStores(false, true);
-                        $storeId = current($stores)->getId();
-                        $storeCode = key($stores);
-                    } else {
-                        $storeId = $result[$item->getData('page_id')];
-                        $storeCode = $this->_storeManager->getStore($storeId)->getCode();
-                    }
-                    $item->setData('_first_store_id', $storeId);
-                    $item->setData('store_code', $storeCode);
-                    $item->setData('store_id', [$result[$pageId]]);
-                }
-            }
-        }
-
-        $this->_previewFlag = false;
-        return parent::_afterLoad();
-    }
-
-    /**
-     * Join store relation table if there is store filter
-     *
-     * @return void
-     */
-    protected function _renderFiltersBefore()
-    {
-        if ($this->getFilter('store')) {
-            $this->getSelect()->join(
-                ['store_table' => $this->getTable('cms_page_store')],
-                'main_table.page_id = store_table.page_id',
-                []
-            )->group(
-                'main_table.page_id'
-            );
-        }
-        parent::_renderFiltersBefore();
-    }
-
-    /**
-     * Get SQL for get record count.
-     * Extra GROUP BY strip added.
-     *
-     * @return \Magento\Framework\DB\Select
-     */
-    public function getSelectCountSql()
-    {
-        $countSelect = parent::getSelectCountSql();
-        $countSelect->reset(\Zend_Db_Select::GROUP);
-
-        return $countSelect;
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/PageCriteria.php b/app/code/Magento/Cms/Model/Resource/PageCriteria.php
deleted file mode 100644
index 87cf04da8372198db34367c3f06424ac7b045efc..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/PageCriteria.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource;
-
-use Magento\Cms\Model\PageCriteriaInterface;
-
-/**
- * Class PageCriteria
- */
-class PageCriteria extends CmsAbstractCriteria implements PageCriteriaInterface
-{
-    /**
-     * @param string $mapper
-     */
-    public function __construct($mapper = '')
-    {
-        $this->mapperInterfaceName = $mapper ?: 'Magento\Cms\Model\Resource\PageCriteriaMapper';
-    }
-
-    /**
-     * @inheritdoc
-     */
-    public function setFirstStoreFlag($flag = false)
-    {
-        $this->data['first_store_flag'] = $flag;
-        return true;
-    }
-
-    /**
-     * @inheritdoc
-     */
-    public function addStoreFilter($store, $withAdmin = true)
-    {
-        $this->data['store_filter'] = [$store, $withAdmin];
-        return true;
-    }
-
-    /**
-     * Add Criteria object
-     *
-     * @param \Magento\Cms\Model\Resource\PageCriteria $criteria
-     * @return bool
-     */
-    public function addCriteria(\Magento\Cms\Model\Resource\PageCriteria $criteria)
-    {
-        $this->data[self::PART_CRITERIA_LIST]['list'][] = $criteria;
-        return true;
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Resource/PageCriteriaMapper.php b/app/code/Magento/Cms/Model/Resource/PageCriteriaMapper.php
deleted file mode 100644
index 2c1aa20b396eacf22c2fdc10224e1e97ccccd8a6..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Model/Resource/PageCriteriaMapper.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Model\Resource;
-
-/**
- * Class PageCriteriaMapper
- */
-class PageCriteriaMapper extends CmsCriteriaMapper
-{
-    /**
-     * @inheritdoc
-     */
-    protected function init()
-    {
-        $this->storeTableName = 'cms_page_store';
-        $this->linkFieldName = 'page_id';
-        $this->initResource('Magento\Cms\Model\Resource\Page');
-        parent::init();
-    }
-}
diff --git a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php
index 683506fc7b36f44c810048e2610f170c0b88b0bf..2adc979aacac0827c5211b171a53ba3d4945a2ef 100644
--- a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php
+++ b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php
@@ -375,7 +375,7 @@ class Storage extends \Magento\Framework\Object
                 'id' => $this->_cmsWysiwygImages->convertPathToId($newPath),
             ];
             return $result;
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             throw new \Magento\Framework\Exception\LocalizedException(__('We cannot create a new directory.'));
         }
     }
@@ -396,7 +396,7 @@ class Storage extends \Magento\Framework\Object
             $this->_deleteByPath($path);
             $path = $this->getThumbnailRoot() . $this->_getRelativePathToRoot($path);
             $this->_deleteByPath($path);
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             throw new \Magento\Framework\Exception\LocalizedException(__('We cannot delete directory %1.', $path));
         }
     }
diff --git a/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/EditTest.php b/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/EditTest.php
index 3b0d1837ed3b1dd99d33f5dc0bfe2bb7a3121e4d..4d6b28b79746db90ec65c329016cdc185f889b00 100644
--- a/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/EditTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/EditTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Block\Adminhtml\Block;
 
 /**
- * covers \Magento\Cms\Block\Adminhtml\Block\Edit
+ * @covers \Magento\Cms\Block\Adminhtml\Block\Edit
  */
 class EditTest extends \PHPUnit_Framework_TestCase
 {
@@ -59,7 +59,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Block\Adminhtml\Block\Edit::getHeaderText
+     * @covers \Magento\Cms\Block\Adminhtml\Block\Edit::getHeaderText
      * @param integer|null $modelBlockId
      *
      * @dataProvider getHeaderTextDataProvider
diff --git a/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/Widget/ChooserTest.php b/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/Widget/ChooserTest.php
index d43a564165b9a5c91442b430ae381773e31f9453..0c075194e3330d099d7bb12b2427b971621f8a81 100644
--- a/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/Widget/ChooserTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Block/Adminhtml/Block/Widget/ChooserTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Block\Adminhtml\Block\Widget;
 
 /**
- * covers \Magento\Cms\Block\Adminhtml\Block\Widget\Chooser
+ * @covers \Magento\Cms\Block\Adminhtml\Block\Widget\Chooser
  */
 class ChooserTest extends \PHPUnit_Framework_TestCase
 {
@@ -127,7 +127,7 @@ class ChooserTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Block\Adminhtml\Block\Widget\Chooser::prepareElementHtml
+     * @covers \Magento\Cms\Block\Adminhtml\Block\Widget\Chooser::prepareElementHtml
      * @param string $elementValue
      * @param integer|null $modelBlockId
      *
@@ -231,7 +231,7 @@ class ChooserTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Block\Adminhtml\Block\Widget\Chooser::getGridUrl
+     * @covers \Magento\Cms\Block\Adminhtml\Block\Widget\Chooser::getGridUrl
      */
     public function testGetGridUrl()
     {
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php
index feb1701022ff0619a8c61ee8ae8d385ab9d51adc..7d0ec584d46755e871a355c748937cccf94b2364 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php
@@ -157,7 +157,7 @@ class DirectiveTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::execute
+     * @covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::execute
      */
     public function testExecute()
     {
@@ -193,7 +193,7 @@ class DirectiveTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::execute
+     * @covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::execute
      */
     public function testExecuteException()
     {
diff --git a/app/code/Magento/Cms/Test/Unit/Helper/PageTest.php b/app/code/Magento/Cms/Test/Unit/Helper/PageTest.php
old mode 100755
new mode 100644
index d7c680fd689c462728719dddde67c65d6b9a53c7..4b7e6861eec6c399f4a4be17ee39f240d80b2caa
--- a/app/code/Magento/Cms/Test/Unit/Helper/PageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Helper/PageTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Helper;
 
 /**
- * covers \Magento\Cms\Helper\Page
+ * @covers \Magento\Cms\Helper\Page
  *
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -208,7 +208,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Helper\Page::prepareResultPage
+     * @covers \Magento\Cms\Helper\Page::prepareResultPage
      * @param integer|null $pageId
      * @param integer|null $internalPageId
      * @param integer $pageLoadResultIndex
@@ -422,7 +422,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Helper\Page::getPageUrl
+     * @covers \Magento\Cms\Helper\Page::getPageUrl
      * @param integer|null $pageId
      * @param integer|null $internalPageId
      * @param integer $pageLoadResultIndex
diff --git a/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php b/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5c3c9dd155437c9ff54c4a7e3e3312096bfea88
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php
@@ -0,0 +1,300 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model;
+
+use Magento\Cms\Model\BlockRepository;
+use Magento\Framework\Api\SearchCriteriaInterface;
+
+/**
+ * Test for Magento\Cms\Model\BlockRepository
+ */
+class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var BlockRepository
+     */
+    protected $repository;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Block
+     */
+    protected $blockResource;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Block
+     */
+    protected $block;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\BlockInterface
+     */
+    protected $blockData;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\BlockSearchResultsInterface
+     */
+    protected $blockSearchResult;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\DataObjectHelper
+     */
+    protected $dataHelper;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Block\Collection
+     */
+    protected $collection;
+
+    /**
+     * Initialize repository
+     */
+    public function setUp()
+    {
+        $this->blockResource = $this->getMockBuilder('Magento\Cms\Model\Resource\Block')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $blockFactory = $this->getMockBuilder('Magento\Cms\Model\BlockFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $blockDataFactory = $this->getMockBuilder('Magento\Cms\Api\Data\BlockInterfaceFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $blockSearchResultFactory = $this->getMockBuilder('Magento\Cms\Api\Data\BlockSearchResultsInterfaceFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\CollectionFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->block = $this->getMockBuilder('Magento\Cms\Model\Block')->disableOriginalConstructor()->getMock();
+        $this->blockData = $this->getMockBuilder('Magento\Cms\Api\Data\BlockInterface')
+            ->getMock();
+        $this->blockSearchResult = $this->getMockBuilder('Magento\Cms\Api\Data\BlockSearchResultsInterface')
+            ->getMock();
+        $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Collection')
+            ->disableOriginalConstructor()
+            ->setMethods(['addFieldToFilter', 'getSize', 'setCurPage', 'setPageSize', 'load', 'addOrder'])
+            ->getMock();
+
+        $blockFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->block);
+        $blockDataFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->blockData);
+        $blockSearchResultFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->blockSearchResult);
+        $collectionFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->collection);
+        /**
+         * @var \Magento\Cms\Model\BlockFactory $blockFactory
+         * @var \Magento\Cms\Api\Data\BlockInterfaceFactory $blockDataFactory
+         * @var \Magento\Cms\Api\Data\BlockSearchResultsInterfaceFactory $blockSearchResultFactory
+         * @var \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory
+         */
+
+        $this->dataHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->repository = new BlockRepository(
+            $this->blockResource,
+            $blockFactory,
+            $blockDataFactory,
+            $collectionFactory,
+            $blockSearchResultFactory,
+            $this->dataHelper
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function testSave()
+    {
+        $this->blockResource->expects($this->once())
+            ->method('save')
+            ->with($this->block)
+            ->willReturnSelf();
+        $this->assertEquals($this->block, $this->repository->save($this->block));
+    }
+
+    /**
+     * @test
+     */
+    public function testDeleteById()
+    {
+        $blockId = '123';
+
+        $this->block->expects($this->once())
+            ->method('getId')
+            ->willReturn(true);
+        $this->blockResource->expects($this->once())
+            ->method('load')
+            ->with($this->block, $blockId)
+            ->willReturn($this->block);
+        $this->blockResource->expects($this->once())
+            ->method('delete')
+            ->with($this->block)
+            ->willReturnSelf();
+
+        $this->assertTrue($this->repository->deleteById($blockId));
+    }
+
+    /**
+     * @test
+     *
+     * @expectedException \Magento\Framework\Exception\CouldNotSaveException
+     */
+    public function testSaveException()
+    {
+        $this->blockResource->expects($this->once())
+            ->method('save')
+            ->with($this->block)
+            ->willThrowException(new \Exception());
+        $this->repository->save($this->block);
+    }
+
+    /**
+     * @test
+     *
+     * @expectedException \Magento\Framework\Exception\CouldNotDeleteException
+     */
+    public function testDeleteException()
+    {
+        $this->blockResource->expects($this->once())
+            ->method('delete')
+            ->with($this->block)
+            ->willThrowException(new \Exception());
+        $this->repository->delete($this->block);
+    }
+
+    /**
+     * @test
+     *
+     * @expectedException \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function testGetByIdException()
+    {
+        $blockId = '123';
+
+        $this->block->expects($this->once())
+            ->method('getId')
+            ->willReturn(false);
+        $this->blockResource->expects($this->once())
+            ->method('load')
+            ->with($this->block, $blockId)
+            ->willReturn($this->block);
+        $this->repository->getById($blockId);
+    }
+
+    /**
+     * @test
+     */
+    public function testGetList()
+    {
+        $field = 'name';
+        $value = 'magento';
+        $condition = 'eq';
+        $total = 10;
+        $currentPage = 3;
+        $pageSize = 2;
+        $sortField = 'id';
+
+        $criteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteriaInterface')->getMock();
+        $filterGroup = $this->getMockBuilder('Magento\Framework\Api\Search\FilterGroup')->getMock();
+        $filter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock();
+        $storeFilter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock();
+        $sortOrder = $this->getMockBuilder('Magento\Framework\Api\SortOrder')->getMock();
+
+        $criteria->expects($this->once())
+            ->method('getFilterGroups')
+            ->willReturn([$filterGroup]);
+        $criteria->expects($this->once())
+            ->method('getSortOrders')
+            ->willReturn([$sortOrder]);
+        $criteria->expects($this->once())
+            ->method('getCurrentPage')
+            ->willReturn($currentPage);
+        $criteria->expects($this->once())
+            ->method('getPageSize')
+            ->willReturn($pageSize);
+        $filterGroup->expects($this->once())
+            ->method('getFilters')
+            ->willReturn([$storeFilter, $filter]);
+        $filter->expects($this->once())
+            ->method('getConditionType')
+            ->willReturn($condition);
+        $filter->expects($this->any())
+            ->method('getField')
+            ->willReturn($field);
+        $filter->expects($this->once())
+            ->method('getValue')
+            ->willReturn($value);
+        $storeFilter->expects($this->any())
+            ->method('getField')
+            ->willReturn('store_id');
+        $storeFilter->expects($this->once())
+            ->method('getValue')
+            ->willReturn(1);
+        $sortOrder->expects($this->once())
+            ->method('getField')
+            ->willReturn($sortField);
+        $sortOrder->expects($this->once())
+            ->method('getDirection')
+            ->willReturn(SearchCriteriaInterface::SORT_DESC);
+
+        /** @var \Magento\Framework\Api\SearchCriteriaInterface $criteria */
+
+        $this->collection->addItem($this->block);
+        $this->blockSearchResult->expects($this->once())
+            ->method('setSearchCriteria')
+            ->with($criteria)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('addFieldToFilter')
+            ->with([['attribute' => $field, $condition => $value]], [])
+            ->willReturnSelf();
+        $this->blockSearchResult->expects($this->once())
+            ->method('setTotalCount')
+            ->with($total)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('getSize')
+            ->willReturn($total);
+        $this->collection->expects($this->once())
+            ->method('setCurPage')
+            ->with($currentPage)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('setPageSize')
+            ->with($pageSize)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('addOrder')
+            ->with($sortField, 'DESC')
+            ->willReturnSelf();
+        $this->block->expects($this->once())
+            ->method('getData')
+            ->willReturn(['data']);
+        $this->blockSearchResult->expects($this->once())
+            ->method('setItems')
+            ->with(['someData'])
+            ->willReturnSelf();
+        $this->dataHelper->expects($this->once())
+            ->method('populateWithArray')
+            ->with($this->blockData, ['data'], 'Magento\Cms\Api\Data\BlockInterface')
+            ->willReturn('someData');
+
+        $this->assertEquals($this->blockSearchResult, $this->repository->getList($criteria));
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php
index 234de25b3a6866038240be08d00d6fbc2da77370..a4602ea501dc26e141aa9003b763bd33ac7c745e 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php
@@ -11,14 +11,9 @@ namespace Magento\Cms\Test\Unit\Model\Config\Source;
 class PageTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Cms\Model\PageRepository|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $pageRepositoryMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\PageCriteria|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCriteriaFactoryMock;
+    protected $collectionFactory;
 
     /**
      * @var \Magento\Cms\Model\Config\Source\Page
@@ -34,15 +29,8 @@ class PageTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
-        $this->pageRepositoryMock = $this->getMock(
-            'Magento\Cms\Model\PageRepository',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->pageCriteriaFactoryMock = $this->getMock(
-            'Magento\Cms\Model\Resource\PageCriteriaFactory',
+        $this->collectionFactory = $this->getMock(
+            'Magento\Cms\Model\Resource\Page\CollectionFactory',
             ['create'],
             [],
             '',
@@ -52,8 +40,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
         $this->page = $objectManager->getObject(
             'Magento\Cms\Model\Config\Source\Page',
             [
-                'pageRepository' => $this->pageRepositoryMock,
-                'pageCriteriaFactory' => $this->pageCriteriaFactoryMock
+                'collectionFactory' => $this->collectionFactory,
             ]
         );
     }
@@ -72,22 +59,10 @@ class PageTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $pageCriteriaMock = $this->getMock(
-            'Magento\Cms\Model\Resource\PageCriteria',
-            [],
-            [],
-            '',
-            false
-        );
-
-        $this->pageRepositoryMock->expects($this->once())
-            ->method('getList')
-            ->with($pageCriteriaMock)
-            ->will($this->returnValue($pageCollectionMock));
 
-        $this->pageCriteriaFactoryMock->expects($this->once())
+        $this->collectionFactory->expects($this->once())
             ->method('create')
-            ->will($this->returnValue($pageCriteriaMock));
+            ->will($this->returnValue($pageCollectionMock));
 
         $pageCollectionMock->expects($this->once())
             ->method('toOptionIdArray')
diff --git a/app/code/Magento/Cms/Test/Unit/Model/DataSource/PageCollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/DataSource/PageCollectionTest.php
deleted file mode 100644
index 227a7c2280ccc75e1b0a457fb5f2119b0794072b..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Test/Unit/Model/DataSource/PageCollectionTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Test\Unit\Model\DataSource;
-
-/**
- * Class PageCollectionTest
- */
-class PageCollectionTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Cms\Model\Resource\PageCriteria|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $criteriaMock;
-
-    /**
-     * @var \Magento\Cms\Model\PageRepository|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $repositoryMock;
-
-    /**
-     * @var \Magento\Cms\Model\DataSource\PageCollection
-     */
-    protected $pageCollection;
-
-    /**
-     * Set up
-     *
-     * @return void
-     */
-    protected function setUp()
-    {
-        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->repositoryMock = $this->getMock(
-            'Magento\Cms\Model\PageRepository',
-            [],
-            [],
-            '',
-            false
-        );
-
-        $this->pageCollection = $objectManager->getObject(
-            'Magento\Cms\Model\DataSource\PageCollection',
-            [
-                'repository' => $this->repositoryMock,
-                'mapper' => ''
-            ]
-        );
-    }
-
-    /**
-     * Run test addFilter method
-     *
-     * @param string $name
-     * @param string $field
-     * @param mixed $condition
-     * @param string $type
-     * @return void
-     *
-     * @dataProvider dataProviderAddFilter
-     */
-    public function testAddFilter($name, $field, $condition, $type)
-    {
-        $this->pageCollection->addFilter($name, $field, $condition, $type);
-    }
-
-    /**
-     * Run test getResultCollection method
-     *
-     * @return void
-     */
-    public function testGetResultCollection()
-    {
-        $this->repositoryMock->expects($this->once())
-            ->method('getList')
-            ->with($this->pageCollection)
-            ->will($this->returnValue('return-value'));
-
-        $this->assertEquals('return-value', $this->pageCollection->getResultCollection());
-    }
-
-    /**
-     * Data provider for addFilter method
-     *
-     * @return array
-     */
-    public function dataProviderAddFilter()
-    {
-        return [
-            [
-                'name' => 'test-name',
-                'field' => 'store_id',
-                'condition' => null,
-                'type' => 'public',
-            ],
-            [
-                'name' => 'test-name',
-                'field' => 'any_field',
-                'condition' => 10,
-                'type' => 'private'
-            ]
-        ];
-    }
-}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/ObserverTest.php b/app/code/Magento/Cms/Test/Unit/Model/ObserverTest.php
index 80950d4e02fb0638adaf04263715f5126b13eb9d..f18bd6c6d5d3fb4ccb53a834df8be66a16d93854 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/ObserverTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/ObserverTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Model;
 
 /**
- * covers \Magento\Cms\Model\Observer
+ * @covers \Magento\Cms\Model\Observer
  */
 class ObserverTest extends \PHPUnit_Framework_TestCase
 {
@@ -92,7 +92,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Observer::noRoute
+     * @covers \Magento\Cms\Model\Observer::noRoute
      */
     public function testNoRoute()
     {
@@ -129,7 +129,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Observer::noCookies
+     * @covers \Magento\Cms\Model\Observer::noCookies
      * @param string $pageUrl
      * @dataProvider noCookiesDataProvider
      */
diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php
index d300268f7ab044c6228031707df86c8dd1d29f43..a5127dc51823910b45ebcc68d6c1cca26e53541a 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php
@@ -5,261 +5,296 @@
  */
 namespace Magento\Cms\Test\Unit\Model;
 
+use Magento\Cms\Model\PageRepository;
+use Magento\Framework\Api\SearchCriteriaInterface;
+
 /**
- * Class PageRepositoryTest
+ * Test for Magento\Cms\Model\PageRepository
  */
 class PageRepositoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Page|\PHPUnit_Framework_MockObject_MockObject
+     * @var PageRepository
      */
-    protected $resourceMock;
+    protected $repository;
 
     /**
-     * @var \Magento\Cms\Model\PageFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Page
      */
-    protected $pageFactoryMock;
+    protected $pageResource;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Page
      */
-    protected $pageCollectionFactoryMock;
+    protected $page;
 
     /**
-     * @var \Magento\Framework\DB\QueryBuilderFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\PageInterface
      */
-    protected $queryBuilderFactoryMock;
+    protected $pageData;
 
     /**
-     * @var \Magento\Framework\DB\MapperFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\PageSearchResultsInterface
      */
-    protected $mapperFactoryMock;
+    protected $pageSearchResult;
 
     /**
-     * @var \Magento\Cms\Model\PageRepository
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\DataObjectHelper
      */
-    protected $pageRepository;
+    protected $dataHelper;
 
     /**
-     * Set up
-     *
-     * @return void
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Page\Collection
      */
-    protected function setUp()
+    protected $collection;
+
+    /**
+     * Initialize repository
+     */
+    public function setUp()
     {
-        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->pageResource = $this->getMockBuilder('Magento\Cms\Model\Resource\Page')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $pageFactory = $this->getMockBuilder('Magento\Cms\Model\PageFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $pageDataFactory = $this->getMockBuilder('Magento\Cms\Api\Data\PageInterfaceFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $pageSearchResultFactory = $this->getMockBuilder('Magento\Cms\Api\Data\PageSearchResultsInterfaceFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\Resource\Page\CollectionFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
 
-        $this->resourceMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page',
-            ['save', 'load', 'delete'],
-            [],
-            '',
-            false
-        );
-        $this->pageFactoryMock = $this->getMock(
-            'Magento\Cms\Model\PageFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->pageCollectionFactoryMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\CollectionFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->queryBuilderFactoryMock = $this->getMock(
-            'Magento\Framework\DB\QueryBuilderFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->mapperFactoryMock = $this->getMock(
-            'Magento\Framework\DB\MapperFactory',
-            [],
-            [],
-            '',
-            false
-        );
+        $this->page = $this->getMockBuilder('Magento\Cms\Model\Page')->disableOriginalConstructor()->getMock();
+        $this->pageData = $this->getMockBuilder('Magento\Cms\Api\Data\PageInterface')
+            ->getMock();
+        $this->pageSearchResult = $this->getMockBuilder('Magento\Cms\Api\Data\PageSearchResultsInterface')
+            ->getMock();
+        $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Page\Collection')
+            ->disableOriginalConstructor()
+            ->setMethods(['addFieldToFilter', 'getSize', 'setCurPage', 'setPageSize', 'load', 'addOrder'])
+            ->getMock();
+
+        $pageFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->page);
+        $pageDataFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->pageData);
+        $pageSearchResultFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->pageSearchResult);
+        $collectionFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->collection);
+        /**
+         * @var \Magento\Cms\Model\PageFactory $pageFactory
+         * @var \Magento\Cms\Api\Data\PageInterfaceFactory $pageDataFactory
+         * @var \Magento\Cms\Api\Data\PageSearchResultsInterfaceFactory $pageSearchResultFactory
+         * @var \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory
+         */
+
+        $this->dataHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper')
+            ->disableOriginalConstructor()
+            ->getMock();
 
-        $this->pageRepository = $objectManager->getObject(
-            'Magento\Cms\Model\PageRepository',
-            [
-                'resource' => $this->resourceMock,
-                'pageFactory' => $this->pageFactoryMock,
-                'pageCollectionFactory' => $this->pageCollectionFactoryMock,
-                'queryBuilderFactory' => $this->queryBuilderFactoryMock,
-                'mapperFactory' => $this->mapperFactoryMock
-            ]
+        $this->repository = new PageRepository(
+            $this->pageResource,
+            $pageFactory,
+            $pageDataFactory,
+            $collectionFactory,
+            $pageSearchResultFactory,
+            $this->dataHelper
         );
     }
 
     /**
-     * Run test save method
-     *
-     * @return void
+     * @test
      */
     public function testSave()
     {
-        $pageMock = $this->getMock(
-            'Magento\Cms\Model\Page',
-            [],
-            [],
-            '',
-            false
-        );
-
-        $this->resourceMock->expects($this->once())
+        $this->pageResource->expects($this->once())
             ->method('save')
-            ->with($pageMock);
-
-        $this->assertEquals($pageMock, $this->pageRepository->save($pageMock));
+            ->with($this->page)
+            ->willReturnSelf();
+        $this->assertEquals($this->page, $this->repository->save($this->page));
     }
 
     /**
-     * Run test get method
-     *
-     * @return void
+     * @test
      */
-    public function testGet()
+    public function testDeleteById()
     {
-        $id = 20;
-        $pageMock = $this->getMockForAbstractClass(
-            'Magento\Cms\Model\Page',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['getId']
-        );
+        $pageId = '123';
 
-        $pageMock->expects($this->atLeastOnce())
+        $this->page->expects($this->once())
             ->method('getId')
-            ->will($this->returnValue($id));
-        $this->pageFactoryMock->expects($this->once())
-            ->method('create')
-            ->will($this->returnValue($pageMock));
-        $this->resourceMock->expects($this->once())
+            ->willReturn(true);
+        $this->pageResource->expects($this->once())
             ->method('load')
-            ->with($pageMock, $id);
+            ->with($this->page, $pageId)
+            ->willReturn($this->page);
+        $this->pageResource->expects($this->once())
+            ->method('delete')
+            ->with($this->page)
+            ->willReturnSelf();
 
-        $this->assertEquals($pageMock, $this->pageRepository->get($id));
+        $this->assertTrue($this->repository->deleteById($pageId));
     }
 
     /**
-     * Run test getList method
+     * @test
      *
-     * @return void
+     * @expectedException \Magento\Framework\Exception\CouldNotSaveException
      */
-    public function testGetList()
+    public function testSaveException()
     {
-        $criteriaMock = $this->getMock(
-            'Magento\Cms\Model\Resource\PageCriteria',
-            [],
-            [],
-            '',
-            false
-        );
-        $queryBuilderMock = $this->getMock(
-            'Magento\Framework\DB\QueryBuilder',
-            ['setCriteria', 'setResource', 'create'],
-            [],
-            '',
-            false
-        );
-        $queryMock = $this->getMockForAbstractClass(
-            'Magento\Framework\DB\QueryInterface',
-            [],
-            '',
-            false
-        );
-        $collectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
-            [],
-            [],
-            '',
-            false
-        );
-
-        $this->queryBuilderFactoryMock->expects($this->once())
-            ->method('create')
-            ->will($this->returnValue($queryBuilderMock));
-        $queryBuilderMock->expects($this->once())
-            ->method('setCriteria')
-            ->with($criteriaMock);
-        $queryBuilderMock->expects($this->once())
-            ->method('setResource')
-            ->with($this->resourceMock);
-        $queryBuilderMock->expects($this->once())
-            ->method('create')
-            ->will($this->returnValue($queryMock));
-        $this->pageCollectionFactoryMock->expects($this->once())
-            ->method('create')
-            ->with(['query' => $queryMock])
-            ->will($this->returnValue($collectionMock));
-
-        $this->assertEquals($collectionMock, $this->pageRepository->getList($criteriaMock));
+        $this->pageResource->expects($this->once())
+            ->method('save')
+            ->with($this->page)
+            ->willThrowException(new \Exception());
+        $this->repository->save($this->page);
     }
 
     /**
-     * Run test delete method
+     * @test
      *
-     * @return void
+     * @expectedException \Magento\Framework\Exception\CouldNotDeleteException
      */
-    public function testDelete()
+    public function testDeleteException()
     {
-        $pageMock = $this->getMockForAbstractClass(
-            'Magento\Cms\Model\Page',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['getPageId']
-        );
-
-        $this->resourceMock->expects($this->once())
+        $this->pageResource->expects($this->once())
             ->method('delete')
-            ->with($pageMock);
-
-        $this->assertTrue($this->pageRepository->delete($pageMock));
+            ->with($this->page)
+            ->willThrowException(new \Exception());
+        $this->repository->delete($this->page);
     }
 
     /**
-     * Run test deleteById method
+     * @test
      *
-     * @return void
+     * @expectedException \Magento\Framework\Exception\NoSuchEntityException
      */
-    public function testDeleteById()
+    public function testGetByIdException()
     {
-        $id = 20;
-        $pageMock = $this->getMockForAbstractClass(
-            'Magento\Cms\Model\Page',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['getId']
-        );
+        $pageId = '123';
 
-        $this->pageFactoryMock->expects($this->once())
-            ->method('create')
-            ->will($this->returnValue($pageMock));
-        $this->resourceMock->expects($this->once())
-            ->method('load')
-            ->with($pageMock, $id);
-        $pageMock->expects($this->once())
+        $this->page->expects($this->once())
             ->method('getId')
-            ->will($this->returnValue($id));
-        $this->resourceMock->expects($this->once())
-            ->method('delete')
-            ->with($pageMock);
+            ->willReturn(false);
+        $this->pageResource->expects($this->once())
+            ->method('load')
+            ->with($this->page, $pageId)
+            ->willReturn($this->page);
+        $this->repository->getById($pageId);
+    }
+
+    /**
+     * @test
+     */
+    public function testGetList()
+    {
+        $field = 'name';
+        $value = 'magento';
+        $condition = 'eq';
+        $total = 10;
+        $currentPage = 3;
+        $pageSize = 2;
+        $sortField = 'id';
+
+        $criteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteriaInterface')->getMock();
+        $filterGroup = $this->getMockBuilder('Magento\Framework\Api\Search\FilterGroup')->getMock();
+        $filter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock();
+        $storeFilter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock();
+        $sortOrder = $this->getMockBuilder('Magento\Framework\Api\SortOrder')->getMock();
+
+        $criteria->expects($this->once())
+            ->method('getFilterGroups')
+            ->willReturn([$filterGroup]);
+        $criteria->expects($this->once())
+            ->method('getSortOrders')
+            ->willReturn([$sortOrder]);
+        $criteria->expects($this->once())
+            ->method('getCurrentPage')
+            ->willReturn($currentPage);
+        $criteria->expects($this->once())
+            ->method('getPageSize')
+            ->willReturn($pageSize);
+        $filterGroup->expects($this->once())
+            ->method('getFilters')
+            ->willReturn([$storeFilter, $filter]);
+        $filter->expects($this->once())
+            ->method('getConditionType')
+            ->willReturn($condition);
+        $filter->expects($this->any())
+            ->method('getField')
+            ->willReturn($field);
+        $filter->expects($this->once())
+            ->method('getValue')
+            ->willReturn($value);
+        $storeFilter->expects($this->any())
+            ->method('getField')
+            ->willReturn('store_id');
+        $storeFilter->expects($this->once())
+            ->method('getValue')
+            ->willReturn(1);
+        $sortOrder->expects($this->once())
+            ->method('getField')
+            ->willReturn($sortField);
+        $sortOrder->expects($this->once())
+            ->method('getDirection')
+            ->willReturn(SearchCriteriaInterface::SORT_DESC);
+
+        /** @var \Magento\Framework\Api\SearchCriteriaInterface $criteria */
+
+        $this->collection->addItem($this->page);
+        $this->pageSearchResult->expects($this->once())
+            ->method('setSearchCriteria')
+            ->with($criteria)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('addFieldToFilter')
+            ->with([['attribute' => $field, $condition => $value]], [])
+            ->willReturnSelf();
+        $this->pageSearchResult->expects($this->once())
+            ->method('setTotalCount')
+            ->with($total)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('getSize')
+            ->willReturn($total);
+        $this->collection->expects($this->once())
+            ->method('setCurPage')
+            ->with($currentPage)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('setPageSize')
+            ->with($pageSize)
+            ->willReturnSelf();
+        $this->collection->expects($this->once())
+            ->method('addOrder')
+            ->with($sortField, 'DESC')
+            ->willReturnSelf();
+        $this->page->expects($this->once())
+            ->method('getData')
+            ->willReturn(['data']);
+        $this->pageSearchResult->expects($this->once())
+            ->method('setItems')
+            ->with(['someData'])
+            ->willReturnSelf();
+        $this->dataHelper->expects($this->once())
+            ->method('populateWithArray')
+            ->with($this->pageData, ['data'], 'Magento\Cms\Api\Data\PageInterface')
+            ->willReturn('someData');
 
-        $this->assertTrue($this->pageRepository->deleteById($id));
+        $this->assertEquals($this->pageSearchResult, $this->repository->getList($criteria));
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
index 6fd6dd57d8b9b647ae1d62fef1607fb14e16775f..8d08e7402b896f5dd655380a0d5a831389c30538 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Model;
 
 /**
- * covers \Magento\Cms\Model\Page
+ * @covers \Magento\Cms\Model\Page
  */
 class PageTest extends \PHPUnit_Framework_TestCase
 {
@@ -91,7 +91,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Page::noRoutePage
+     * @covers \Magento\Cms\Model\Page::noRoutePage
      */
     public function testNoRoutePage()
     {
@@ -99,7 +99,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Page::checkIdentifier
+     * @covers \Magento\Cms\Model\Page::checkIdentifier
      */
     public function testCheckIdentifier()
     {
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php
index 9db74457f743fa561510a622b3c439472a819085..5b267bc224b84db9894c9416ecc26deac3f8fb4c 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Cms\Test\Unit\Model\Resource\Block\Grid;
 
-use Magento\Cms\Model\Resource\Block\Grid\Collection;
+use Magento\Cms\Model\Resource\Block\Collection;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -42,11 +42,11 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $arguments = $objectManagerHelper->getConstructArguments(
-            'Magento\Cms\Model\Resource\Block\Grid\Collection',
+            'Magento\Cms\Model\Resource\Block\Collection',
             ['resource' => $resource, 'connection' => $connection]
         );
 
-        $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Grid\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Collection')
             ->setConstructorArgs($arguments)
             ->setMethods(['addFilter', '_translateCondition', 'getMainTable'])
             ->getMock();
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php
deleted file mode 100644
index 2abd96842cf321873d5d6949bcf80f4d1e954d30..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php
+++ /dev/null
@@ -1,278 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Test\Unit\Model\Resource\Page;
-
-/**
- * Class CollectionTest
- */
-class CollectionTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $storeManagerMock;
-
-    /**
-     * @var \Magento\Framework\DB\QueryInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $queryMock;
-
-    /**
-     * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $eventManagerMock;
-
-    /**
-     * @var \Magento\Framework\Data\Collection\EntityFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $entityFactoryMock;
-
-    /**
-     * @var \Magento\Framework\Data\SearchResultIteratorFactory|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $resultIteratorFactoryMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $searchResultProcessorMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection
-     */
-    protected $collection;
-
-    /**
-     * Set up
-     *
-     * @return void
-     */
-    protected function setUp()
-    {
-        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-
-        $this->queryMock = $this->getMockForAbstractClass(
-            'Magento\Framework\DB\QueryInterface',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['fetchAll', 'getIdFieldName', 'getConnection', 'getResource']
-        );
-        $this->entityFactoryMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Data\Collection\EntityFactoryInterface',
-            [],
-            '',
-            false,
-            true,
-            true,
-            []
-        );
-        $this->eventManagerMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Event\ManagerInterface',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['dispatch']
-        );
-        $this->resultIteratorFactoryMock = $this->getMock(
-            'Magento\Framework\Data\SearchResultIteratorFactory',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->searchResultProcessorMock = $this->getMock(
-            'Magento\Framework\Data\SearchResultProcessor',
-            [],
-            [],
-            '',
-            false
-        );
-        $searchResultProcessorFactoryMock = $this->getMock(
-            'Magento\Framework\Data\SearchResultProcessorFactory',
-            [],
-            [],
-            '',
-            false
-        );
-        $searchResultProcessorFactoryMock->expects($this->any())
-            ->method('create')
-            ->withAnyParameters()
-            ->willReturn($this->searchResultProcessorMock);
-        $this->storeManagerMock = $this->getMockForAbstractClass(
-            'Magento\Store\Model\StoreManagerInterface',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['getStore']
-        );
-
-        $this->collection = $objectManager->getObject(
-            'Magento\Cms\Model\Resource\Page\Collection',
-            [
-                'query' => $this->queryMock,
-                'entityFactory' => $this->entityFactoryMock,
-                'eventManager' => $this->eventManagerMock,
-                'resultIteratorFactory' => $this->resultIteratorFactoryMock,
-                'storeManager' => $this->storeManagerMock,
-                'searchResultProcessorFactory' => $searchResultProcessorFactoryMock
-            ]
-        );
-    }
-
-    /**
-     * Run test toOptionIdArray method
-     *
-     * @return void
-     *
-     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
-     */
-    public function testToOptionIdArray()
-    {
-        $itemsByPageId = array_fill(0, 4, 123);
-        $data = [
-            'item1' => ['test' => 'test'],
-            'item2' => ['test' => 'test'],
-            'item3' => ['test' => 'test'],
-            'item4' => ['test' => 'test'],
-        ];
-
-        $objectMock = $this->getMock(
-            'Magento\Framework\Object',
-            ['getData', 'getId', 'setData', 'getTitle', 'getIdentifier'],
-            [],
-            '',
-            false
-        );
-        $criteriaMock = $this->getMockForAbstractClass('Magento\Framework\Api\CriteriaInterface');
-        $connectionMock = $this->getMockForAbstractClass('Magento\Framework\DB\Adapter\AdapterInterface');
-        $resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['getTable']
-        );
-        $selectMock = $this->getMock(
-            'Magento\Framework\DB\Select',
-            ['from', 'where'],
-            [],
-            '',
-            false
-        );
-        $storeMock = $this->getMock(
-            'Magento\Store\Model\Store',
-            ['getCode'],
-            [],
-            '',
-            false
-        );
-
-        $this->queryMock->expects($this->once())
-            ->method('fetchAll')
-            ->will($this->returnValue($data));
-
-        $this->searchResultProcessorMock->expects($this->once())
-            ->method('getColumnValues')
-            ->with('page_id')
-            ->will($this->returnValue($itemsByPageId));
-        $this->queryMock->expects($this->any())
-            ->method('getIdFieldName')
-            ->will($this->returnValue('id_field_name'));
-        $objectMock->expects($this->any())
-            ->method('getData')
-            ->will(
-                $this->returnValueMap(
-                    [
-                        ['id_field_name', null, null],
-                        ['page_id', null, 123],
-                    ]
-                )
-            );
-        $this->entityFactoryMock->expects($this->any())
-            ->method('create')
-            ->with('Magento\Cms\Model\Page', ['data' => ['test' => 'test']])
-            ->will($this->returnValue($objectMock));
-        $this->queryMock->expects($this->once())
-            ->method('getCriteria')
-            ->will($this->returnValue($criteriaMock));
-        $criteriaMock->expects($this->once())
-            ->method('getPart')
-            ->with('first_store_flag')
-            ->will($this->returnValue(true));
-        $this->queryMock->expects($this->once())
-            ->method('getConnection')
-            ->will($this->returnValue($connectionMock));
-        $this->queryMock->expects($this->once())
-            ->method('getResource')
-            ->will($this->returnValue($resourceMock));
-        $connectionMock->expects($this->once())
-            ->method('select')
-            ->will($this->returnValue($selectMock));
-        $selectMock->expects($this->once())
-            ->method('from')
-            ->with(['cps' => 'query_table'])
-            ->will($this->returnSelf());
-        $resourceMock->expects($this->once())
-            ->method('getTable')
-            ->with('cms_page_store')
-            ->will($this->returnValue('query_table'));
-        $selectMock->expects($this->once())
-            ->method('where')
-            ->with('cps.page_id IN (?)', array_fill(0, 4, 123))
-            ->will($this->returnSelf());
-        $connectionMock->expects($this->once())
-            ->method('fetchPairs')
-            ->with($selectMock)
-            ->will($this->returnValue([123 => 999]));
-        $objectMock->expects($this->any())
-            ->method('getId')
-            ->will($this->returnValue(123));
-        $this->storeManagerMock->expects($this->any())
-            ->method('getStore')
-            ->with(999)
-            ->will($this->returnValue($storeMock));
-        $storeMock->expects($this->any())
-            ->method('getCode')
-            ->will($this->returnValue('store_code'));
-        $objectMock->expects($this->any())
-            ->method('setData');
-        $objectMock->expects($this->any())
-            ->method('getTitle')
-            ->will($this->returnValue('item-value'));
-        $objectMock->expects($this->any())
-            ->method('getIdentifier')
-            ->will($this->returnValue('identifier-value'));
-
-        $expected = [
-            [
-                'value' => 'identifier-value',
-                'label' => 'item-value',
-            ],
-            [
-                'value' => 'identifier-value|123',
-                'label' => 'item-value'
-            ],
-            [
-                'value' => 'identifier-value|123',
-                'label' => 'item-value'
-            ],
-            [
-                'value' => 'identifier-value|123',
-                'label' => 'item-value'
-            ],
-        ];
-        $this->assertEquals($expected, $this->collection->toOptionIdArray());
-    }
-}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/PageCriteriaMapperTest.php b/app/code/Magento/Cms/Test/Unit/Model/Resource/PageCriteriaMapperTest.php
deleted file mode 100644
index 19ac623ed6b10f98e592e6308409c401ea961cda..0000000000000000000000000000000000000000
--- a/app/code/Magento/Cms/Test/Unit/Model/Resource/PageCriteriaMapperTest.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Cms\Test\Unit\Model\Resource;
-
-/**
- * Class PageCriteriaMapperTest
- */
-class PageCriteriaMapperTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $loggerMock;
-
-    /**
-     * @var \Magento\Framework\Data\Collection\Db\FetchStrategyInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $fetchStrategyMock;
-
-    /**
-     * @var \Magento\Framework\Data\ObjectFactory|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $objectFactoryMock;
-
-    /**
-     * @var \Magento\Framework\DB\MapperFactory|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $mapperFactoryMock;
-
-    /**
-     * @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $selectMock;
-
-    /**
-     * @var \Magento\Cms\Model\Resource\PageCriteriaMapper|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageCriteria;
-
-    /**
-     * Set up
-     *
-     * @return void
-     */
-    protected function setUp()
-    {
-        $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
-        $this->fetchStrategyMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Data\Collection\Db\FetchStrategyInterface',
-            [],
-            '',
-            false
-        );
-        $this->objectFactoryMock = $this->getMock(
-            'Magento\Framework\Data\ObjectFactory',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->mapperFactoryMock = $this->getMock(
-            'Magento\Framework\DB\MapperFactory',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->selectMock = $this->getMock(
-            'Magento\Framework\DB\Select',
-            ['join', 'group', 'where'],
-            [],
-            '',
-            false
-        );
-
-        $this->pageCriteria = $this->getMockBuilder('Magento\Cms\Model\Resource\PageCriteriaMapper')
-            ->setConstructorArgs(
-                [
-                    'logger' => $this->loggerMock,
-                    'fetchStrategy' => $this->fetchStrategyMock,
-                    'objectFactory' => $this->objectFactoryMock,
-                    'mapperFactory' => $this->mapperFactoryMock,
-                    'select' => $this->selectMock,
-                ]
-            )->setMethods(['init', 'getTable', 'getMappedField', 'getConditionSql'])
-            ->getMock();
-    }
-
-    /**
-     * Run test mapStoreFilter method
-     *
-     * @return void
-     */
-    public function testMapStoreFilter()
-    {
-        $reflection = new \ReflectionClass($this->pageCriteria);
-        $reflectionProperty = $reflection->getProperty('storeTableName');
-        $reflectionProperty->setAccessible(true);
-        $reflectionProperty->setValue($this->pageCriteria, 'cms_page_store');
-        $reflectionProperty = $reflection->getProperty('linkFieldName');
-        $reflectionProperty->setAccessible(true);
-        $reflectionProperty->setValue($this->pageCriteria, 'page_id');
-
-        $this->pageCriteria->expects($this->once())
-            ->method('getTable')
-            ->with('cms_page_store')
-            ->will($this->returnValue('table-name'));
-        $this->pageCriteria->expects($this->once())
-            ->method('getMappedField')
-            ->with('store')
-            ->will($this->returnValue('mapped-field-result'));
-        $this->selectMock->expects($this->once())
-            ->method('join')
-            ->with(
-                ['store_table' => 'table-name'],
-                'main_table.page_id = store_table.page_id',
-                []
-            )->will($this->returnSelf());
-        $this->selectMock->expects($this->once())
-            ->method('group')
-            ->with('main_table.page_id');
-        $this->pageCriteria->expects($this->once())
-            ->method('getConditionSql')
-            ->with('mapped-field-result', ['in' => [1]])
-            ->will($this->returnValue('condition-sql-result'));
-        $this->selectMock->expects($this->once())
-            ->method('where')
-            ->with('condition-sql-result', null, \Magento\Framework\DB\Select::TYPE_CONDITION);
-
-        $this->pageCriteria->mapStoreFilter(1, false);
-    }
-}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Template/FilterProviderTest.php b/app/code/Magento/Cms/Test/Unit/Model/Template/FilterProviderTest.php
index e43575d48ac3b92f2f4f92a8c7bdf62b67f00ce8..284b8e68874a89d1a7204b2fc3eb480276bc84ee 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Template/FilterProviderTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Template/FilterProviderTest.php
@@ -31,7 +31,7 @@ class FilterProviderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Template\FilterProvider::getBlockFilter
+     * @covers \Magento\Cms\Model\Template\FilterProvider::getBlockFilter
      */
     public function testGetBlockFilter()
     {
@@ -39,7 +39,7 @@ class FilterProviderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Template\FilterProvider::getPageFilter
+     * @covers \Magento\Cms\Model\Template\FilterProvider::getPageFilter
      */
     public function testGetPageFilter()
     {
@@ -47,7 +47,7 @@ class FilterProviderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Template\FilterProvider::getPageFilter
+     * @covers \Magento\Cms\Model\Template\FilterProvider::getPageFilter
      */
     public function testGetPageFilterInnerCache()
     {
@@ -57,7 +57,7 @@ class FilterProviderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Template\FilterProvider::getPageFilter
+     * @covers \Magento\Cms\Model\Template\FilterProvider::getPageFilter
      * @expectedException \Exception
      */
     public function testGetPageWrongInstance()
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Template/FilterTest.php
index 6ce36d5834508fb871e05d76aba012578c7bc45e..f5c4a7b15637e518d2f81c5b3f0dcce828be8ed3 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Template/FilterTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Template/FilterTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Model\Template;
 
 /**
- * covers \Magento\Cms\Model\Template\Filter
+ * @covers \Magento\Cms\Model\Template\Filter
  */
 class FilterTest extends \PHPUnit_Framework_TestCase
 {
@@ -44,7 +44,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Template\Filter::mediaDirective
+     * @covers \Magento\Cms\Model\Template\Filter::mediaDirective
      */
     public function testMediaDirective()
     {
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/ConfigTest.php b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/ConfigTest.php
index bcaf1187a3d1453946c90cdf206e9413e3bfd691..f939b8dc6006a10d757183440589a0531a0daa88 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/ConfigTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/ConfigTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Cms\Test\Unit\Model\Wysiwyg;
 
 /**
- * covers \Magento\Cms\Model\Wysiwyg\Config
+ * @covers \Magento\Cms\Model\Wysiwyg\Config
  */
 class ConfigTest extends \PHPUnit_Framework_TestCase
 {
@@ -116,7 +116,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Config::getConfig
+     * @covers \Magento\Cms\Model\Wysiwyg\Config::getConfig
      * @param array $data
      * @param boolean $isAuthorizationAllowed
      * @param array $expectedResults
@@ -187,7 +187,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Config::getSkinImagePlaceholderPath
+     * @covers \Magento\Cms\Model\Wysiwyg\Config::getSkinImagePlaceholderPath
      */
     public function testGetSkinImagePlaceholderPath()
     {
@@ -213,7 +213,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Config::isEnabled
+     * @covers \Magento\Cms\Model\Wysiwyg\Config::isEnabled
      * @param string $wysiwygState
      * @param boolean $expectedResult
      *
@@ -245,7 +245,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Config::isHidden
+     * @covers \Magento\Cms\Model\Wysiwyg\Config::isHidden
      * @param string $status
      * @param boolean $expectedResult
      *
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php
index 2e890e13e92af72e8e69c137a56b7aeabc6c3a84..f06f1346e7b960dd8b3099ede27862ee4e9e3c3f 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php
@@ -225,7 +225,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Images\Storage::getResizeWidth
+     * @covers \Magento\Cms\Model\Wysiwyg\Images\Storage::getResizeWidth
      */
     public function testGetResizeWidth()
     {
@@ -233,7 +233,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Images\Storage::getResizeHeight
+     * @covers \Magento\Cms\Model\Wysiwyg\Images\Storage::getResizeHeight
      */
     public function testGetResizeHeight()
     {
@@ -241,7 +241,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Images\Storage::deleteDirectory
+     * @covers \Magento\Cms\Model\Wysiwyg\Images\Storage::deleteDirectory
      */
     public function testDeleteDirectoryOverRoot()
     {
@@ -253,7 +253,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Cms\Model\Wysiwyg\Images\Storage::deleteDirectory
+     * @covers \Magento\Cms\Model\Wysiwyg\Images\Storage::deleteDirectory
      */
     public function testDeleteRootDirectory()
     {
diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json
index 9384e914ed55cc731ca124669284e5432773b4b1..d98e7df4c6fc084b82a8279bf5d69c2d4c25d446 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.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-email": "0.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
-        "magento/module-variable": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-email": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
+        "magento/module-variable": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cms/etc/di.xml b/app/code/Magento/Cms/etc/di.xml
index 5180d2671ad2e15dab12a891e221812f0665ab74..d25ddfd399e02b299b8cc9be0c901fe03b795f3d 100644
--- a/app/code/Magento/Cms/etc/di.xml
+++ b/app/code/Magento/Cms/etc/di.xml
@@ -6,8 +6,14 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
-    <preference for="Magento\Cms\Model\PageCriteriaInterface" type="Magento\Cms\Model\Resource\PageCriteria" />
-    <preference for="Magento\Cms\Model\BlockCriteriaInterface" type="Magento\Cms\Model\Resource\BlockCriteria" />
+    <preference for="Magento\Cms\Api\Data\PageSearchResultsInterface"
+                type="Magento\Framework\Api\SearchResults" />
+    <preference for="Magento\Cms\Api\Data\BlockSearchResultsInterface"
+                type="Magento\Framework\Api\SearchResults" />
+    <preference for="Magento\Cms\Api\Data\PageInterface" type="Magento\Cms\Model\Page" />
+    <preference for="Magento\Cms\Api\Data\BlockInterface" type="Magento\Cms\Model\Block" />
+    <preference for="Magento\Cms\Api\BlockRepositoryInterface" type="Magento\Cms\Model\BlockRepository" />
+    <preference for="Magento\Cms\Api\PageRepositoryInterface" type="Magento\Cms\Model\PageRepository" />
     <type name="Magento\Cms\Model\Wysiwyg\Config">
         <arguments>
             <argument name="windowSize" xsi:type="array">
diff --git a/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml
index 83f7ab821f23355be1d399dc85244287af31d8bc..6f1975adb97cd11e5032ed1b455183ac0a653f31 100644
--- a/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml
@@ -10,7 +10,7 @@
         <referenceBlock name="listing">
             <arguments>
                 <argument name="name" xsi:type="string">cms_block_listing</argument>
-                <argument name="dataSource" xsi:type="object">Magento\Cms\Model\DataSource\BlockCollection</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Cms\Model\Resource\Block\Collection</argument>
                 <argument name="save_parameters_in_session" xsi:type="string">1</argument>
                 <argument name="configuration" xsi:type="array">
                     <item name="page_actions" xsi:type="array">
diff --git a/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml
index 48bdecdc6696955d394dc16dc148d4f231b01c6b..bebf23cacd86b98d4f7e4f6c3af734c4cba77515 100644
--- a/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml
@@ -10,7 +10,7 @@
         <referenceBlock name="listing">
             <arguments>
                 <argument name="name" xsi:type="string">cms_page_listing</argument>
-                <argument name="dataSource" xsi:type="object">Magento\Cms\Model\DataSource\PageCollection</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Cms\Model\Resource\Page\Collection</argument>
                 <argument name="save_parameters_in_session" xsi:type="string">1</argument>
                 <argument name="configuration" xsi:type="array">
                     <item name="page_actions" xsi:type="array">
diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json
index 584c86836e4a91f043f8c863b54f64c1c73d0daa..9d32b3444bbb28713fdb769c65b01506cb3dd1ae 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.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-url-rewrite": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-url-rewrite": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php
index 71d3b9146c48f89ca62d1cbb8f63c745e91e39a3..9f8bf3a73f1778c792403d964c4ab4f0a7e20d1f 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php
@@ -8,11 +8,6 @@ namespace Magento\Config\Controller\Adminhtml\System\Config;
 
 class Edit extends AbstractScopeConfig
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\View\Result\PageFactory
      */
@@ -23,7 +18,6 @@ class Edit extends AbstractScopeConfig
      * @param \Magento\Config\Model\Config\Structure $configStructure
      * @param \Magento\Config\Controller\Adminhtml\System\ConfigSectionChecker $sectionChecker
      * @param \Magento\Config\Model\Config $backendConfig
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
     public function __construct(
@@ -31,11 +25,9 @@ class Edit extends AbstractScopeConfig
         \Magento\Config\Model\Config\Structure $configStructure,
         \Magento\Config\Controller\Adminhtml\System\ConfigSectionChecker $sectionChecker,
         \Magento\Config\Model\Config $backendConfig,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context, $configStructure, $sectionChecker, $backendConfig);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
     }
 
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php
index 8cc81e08d40092507e5abdada866ff6ccf175a94..f5969841a7db1d5653e6f19cdb0765973d1b8310 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php
@@ -32,11 +32,6 @@ class Save extends AbstractConfig
      */
     protected $string;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Config\Model\Config\Structure $configStructure
@@ -44,7 +39,6 @@ class Save extends AbstractConfig
      * @param \Magento\Config\Model\Config\Factory $configFactory
      * @param \Magento\Framework\Cache\FrontendInterface $cache
      * @param \Magento\Framework\Stdlib\String $string
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
@@ -52,14 +46,12 @@ class Save extends AbstractConfig
         \Magento\Config\Controller\Adminhtml\System\ConfigSectionChecker $sectionChecker,
         \Magento\Config\Model\Config\Factory $configFactory,
         \Magento\Framework\Cache\FrontendInterface $cache,
-        \Magento\Framework\Stdlib\String $string,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\Stdlib\String $string
     ) {
         parent::__construct($context, $configStructure, $sectionChecker);
         $this->_configFactory = $configFactory;
         $this->_cache = $cache;
         $this->string = $string;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/ConfigSectionChecker.php b/app/code/Magento/Config/Controller/Adminhtml/System/ConfigSectionChecker.php
index f143741ec2c78aca48f74ca897eee90c99755dd5..bbce2b525d4e645f61ea4c8c7f3d87abb39c5678 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/ConfigSectionChecker.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/ConfigSectionChecker.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Config\Controller\Adminhtml\System;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 
 class ConfigSectionChecker
 {
@@ -41,7 +41,7 @@ class ConfigSectionChecker
             }
             return true;
         } catch (\Zend_Acl_Exception $e) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         } catch (\Exception $e) {
             return false;
         }
diff --git a/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php b/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php
index 060672c505204f81cb57ce75c31c5348821cecc7..23d788e710f5b601a702d9dbd0669363442431a1 100644
--- a/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php
+++ b/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php
@@ -123,12 +123,27 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $this->_cacheMock = $this->getMock('Magento\Framework\App\Cache\Type\Layout', [], [], '', false);
 
-        $configStructureMock->expects($this->any())->method('getElement')
-            ->will($this->returnValue($this->_sectionMock));
+        $configStructureMock->expects($this->any())->method('getElement')->willReturn($this->_sectionMock);
 
-        $helperMock->expects($this->any())->method('getUrl')->will($this->returnArgument(0));
+        $helperMock->expects($this->any())->method('getUrl')->willReturnArgument(0);
 
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultRedirect->expects($this->atLeastOnce())
+            ->method('setPath')
+            ->with('adminhtml/system_config/edit')
+            ->willReturnSelf();
+        $resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $resultRedirectFactory->expects($this->atLeastOnce())
+            ->method('create')
+            ->willReturn($this->resultRedirect);
+
         $arguments = [
             'request' => $this->_requestMock,
             'response' => $this->_responseMock,
@@ -136,6 +151,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             'eventManager' => $this->_eventManagerMock,
             'auth' => $this->_authMock,
             'messageManager' => $this->messageManagerMock,
+            'resultRedirectFactory' => $resultRedirectFactory
         ];
 
         $this->_sectionCheckerMock = $this->getMock(
@@ -146,21 +162,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->resultRedirect->expects($this->atLeastOnce())
-            ->method('setPath')
-            ->with('adminhtml/system_config/edit')
-            ->willReturnSelf();
-        $resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-        $resultRedirectFactory->expects($this->atLeastOnce())
-            ->method('create')
-            ->willReturn($this->resultRedirect);
-
         $context = $helper->getObject('Magento\Backend\App\Action\Context', $arguments);
         $this->_controller = $this->getMock(
             'Magento\Config\Controller\Adminhtml\System\Config\Save',
@@ -172,7 +173,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
                 $this->_configFactoryMock,
                 $this->_cacheMock,
                 new \Magento\Framework\Stdlib\String(),
-                $resultRedirectFactory
             ]
         );
     }
diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json
index 9fdfc97389801480818889a96c47d96ce1b2dd11..72d17066f3299561cd531e7a1a27f32330c58830 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-cron": "0.42.0-beta11",
-        "magento/module-email": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-cron": "0.74.0-beta2",
+        "magento/module-email": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Config/view/adminhtml/templates/system/config/tabs.phtml b/app/code/Magento/Config/view/adminhtml/templates/system/config/tabs.phtml
index b9f4c6838806ac12ab05b9363a8dde97efaa7456..d954aedfeb2270a6370a501d98c43c85f5e8ee96 100644
--- a/app/code/Magento/Config/view/adminhtml/templates/system/config/tabs.phtml
+++ b/app/code/Magento/Config/view/adminhtml/templates/system/config/tabs.phtml
@@ -8,35 +8,57 @@
 
 /** @var $block \Magento\Config\Block\System\Config\Tabs */
 ?>
-<?php if ($block->getTitle()): ?>
-    <h3><?php echo $block->getTitle() ?></h3>
-<?php endif ?>
+
 <?php if ($block->getTabs()): ?>
-<ul id="<?php echo $block->getId() ?>" class="config-nav">
-    <?php
-    /** @var $_tab \Magento\Config\Model\Config\Structure\Element\Tab */
-    foreach ($block->getTabs() as $_tab):
-    ?>
-    <li class="config-nav-block <?php if ($_tab->getClass()): ?><?php echo $_tab->getClass() ?><?php endif ?>">
-        <h4 class="title"><?php echo $_tab->getLabel() ?></h4>
-        <ul class="items">
-        <?php $_iterator = 1; ?>
+    <div id="<?php echo $block->getId() ?>" class="config-nav">
+        <?php
+        /** @var $_tab \Magento\Config\Model\Config\Structure\Element\Tab */
+        foreach ($block->getTabs() as $_tab):
+            ?>
+
+            <?php
+                $activeCollapsible = false;
+                foreach ($_tab->getChildren() as $_section) {
+                    if ($block->isSectionActive($_section)) {
+                        $activeCollapsible = true;
+                    }
+                }
+            ?>
+
+            <div class="config-nav-block admin__page-nav _collapsed
+                <?php if ($_tab->getClass()): ?>
+                    <?php echo $_tab->getClass() ?>
+                <?php endif ?>"
+                 data-mage-init='{"collapsible":{"active": "<?php echo $activeCollapsible;?>",
+                 "openedState": "_show",
+                 "closedState": "_hide",
+                 "collapsible": true,
+                 "animate": 200}}'>
+                <div class="admin__page-nav-title title _collapsible" data-role="title">
+                    <strong><?php echo $_tab->getLabel() ?></strong>
+                </div>
+
+                <ul class="admin__page-nav-items items" data-role="content">
+                    <?php $_iterator = 1; ?>
+                    <?php
+                    /** @var $_section \Magento\Config\Model\Config\Structure\Element\Section */
+                    foreach ($_tab->getChildren() as $_section): ?>
+                        <li class="admin__page-nav-item item
+                            <?php echo $_section->getClass() ?>
+                            <?php if ($block->isSectionActive($_section)): ?> _active<?php endif ?>
+                            <?php echo $_tab->getChildren()->isLast($_section) ? ' _last' : '' ?>">
+                            <a href="<?php echo $block->getSectionUrl($_section) ?>"
+                               class="admin__page-nav-link item-nav">
+                               <span><?php echo $_section->getLabel() ?></span>
+                            </a>
+                        </li>
+                        <?php $_iterator++; ?>
+                    <?php endforeach; ?>
+                </ul>
+
+            </div>
         <?php
-            /** @var $_section \Magento\Config\Model\Config\Structure\Element\Section */
-            foreach ($_tab->getChildren() as $_section): ?>
-                <li class="item">
-                    <a href="<?php echo $block->getSectionUrl($_section) ?>" class="item-nav <?php echo $_section->getClass() ?><?php if ($block->isSectionActive($_section)): ?> active<?php endif ?> <?php echo $_tab->getChildren()->isLast($_section) ? 'last' : '' ?>">
-                        <span>
-                            <?php echo $_section->getLabel() ?>
-                        </span>
-                    </a>
-                </li>
-            <?php $_iterator++; ?>
-        <?php endforeach; ?>
-        </ul>
-    </li>
-    <?php
-    endforeach;
-    ?>
-</ul>
+        endforeach;
+        ?>
+    </div>
 <?php endif; ?>
diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json
index b7070263ad41b0cc8bce0435e0e341c80f7fe886..159d501aab3926c6ea08cb36613de2f915b90960 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.42.0-beta11",
-        "magento/module-catalog-import-export": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-import-export": "0.42.0-beta11",
-        "magento/module-configurable-product": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-catalog-import-export": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-import-export": "0.74.0-beta2",
+        "magento/module-configurable-product": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json
index 8e5ed6d41420f3511ea04f64c73aae01705a0d98..1b82ecacc37d54c27ecdd6a2bfee6e625b40a939 100644
--- a/app/code/Magento/ConfigurableProduct/composer.json
+++ b/app/code/Magento/ConfigurableProduct/composer.json
@@ -3,26 +3,26 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-catalog-rule": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-catalog-rule": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-      "magento/module-webapi": "0.42.0-beta11"
+      "magento/module-webapi": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/form.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/form.phtml
index bb0c462574f1a28c850ba3880559e7e135b16f8b..a9c558ad9ce46d7fd7eb30e408d2774eae5de2e2 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/form.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/form.phtml
@@ -11,41 +11,42 @@
 <div id="<?php echo $block->getNameInLayout() ?>" style="display: none" data-role="dialog" data-id="affected-attribute-set-selector">
     <form action="">
 
-        <div class="messages admin__scope">
+        <div class="messages">
             <div class="message message-notice notice">
                 <div><?php echo __("Attribute set comprising all selected configurable attributes need to be in order to save generated variations.") ?></div>
             </div>
             <div class="message message-error error" style="display: none"></div>
         </div>
-
-        <fieldset class="fieldset">
-            <div class="field" id="affected-attribute-set-current-container" data-role="container" data-id="current-attribute-set">
-                <div class="control">
-                    <input type="radio" id="affected-attribute-set-current" name="affected-attribute-set" value="current" checked="checked" />
-                    <label class="label" for="affected-attribute-set-current">
-                        <span><?php echo __('Add configurable attributes to the current set ("<span data-role="name-container">%1</span>")', $block->getLayout()->getBlock('product_edit')->getAttributeSetName())?></span>
-                    </label>
+        <div class="admin__scope-old">
+            <fieldset class="fieldset">
+                <div class="field" id="affected-attribute-set-current-container" data-role="container" data-id="current-attribute-set">
+                    <div class="control">
+                        <input type="radio" id="affected-attribute-set-current" name="affected-attribute-set" value="current" checked="checked" />
+                        <label class="label" for="affected-attribute-set-current">
+                            <span><?php echo __('Add configurable attributes to the current set ("<span data-role="name-container">%1</span>")', $block->getLayout()->getBlock('product_edit')->getAttributeSetName())?></span>
+                        </label>
+                    </div>
                 </div>
-            </div>
 
-            <div class="field" id="affected-attribute-set-new-container">
-                <div class="control">
-                    <input type="radio" id="affected-attribute-set-new" name="affected-attribute-set" value="new" />
-                    <label class="label" for="affected-attribute-set-new">
-                        <span><?php echo __('Add configurable attributes to the new set based on current')?></span>
-                    </label>
+                <div class="field" id="affected-attribute-set-new-container">
+                    <div class="control">
+                        <input type="radio" id="affected-attribute-set-new" name="affected-attribute-set" value="new" />
+                        <label class="label" for="affected-attribute-set-new">
+                            <span><?php echo __('Add configurable attributes to the new set based on current')?></span>
+                        </label>
+                    </div>
                 </div>
-            </div>
 
-            <div class="field required" id="affected-attribute-set-new-name-container" style="display: none">
-                <label class="label" for="new-attribute-set-name">
-                    <span><?php echo __('New attribute set name')?></span>
-                </label>
+                <div class="field required" id="affected-attribute-set-new-name-container" style="display: none">
+                    <label class="label" for="new-attribute-set-name">
+                        <span><?php echo __('New attribute set name')?></span>
+                    </label>
 
-                <div class="control">
-                    <input id="new-attribute-set-name" name="new-attribute-set-name" type="text" class="input-text required-entry validate-no-html-tags" />
+                    <div class="control">
+                        <input id="new-attribute-set-name" name="new-attribute-set-name" type="text" class="input-text required-entry validate-no-html-tags" />
+                    </div>
                 </div>
-            </div>
-        </fieldset>
+            </fieldset>
+        </div>
     </form>
 </div>
diff --git a/app/code/Magento/Contact/Controller/Index.php b/app/code/Magento/Contact/Controller/Index.php
index d144b198916e8b7574756dbf347297986572591c..df15306308938be825471943e34c0274a7edfc55 100644
--- a/app/code/Magento/Contact/Controller/Index.php
+++ b/app/code/Magento/Contact/Controller/Index.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Contact\Controller;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\RequestInterface;
 use Magento\Store\Model\ScopeInterface;
 
@@ -80,12 +80,12 @@ class Index extends \Magento\Framework\App\Action\Action
      *
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
-     * @throws \Magento\Framework\App\Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
      */
     public function dispatch(RequestInterface $request)
     {
         if (!$this->scopeConfig->isSetFlag(self::XML_PATH_ENABLED, ScopeInterface::SCOPE_STORE)) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         return parent::dispatch($request);
     }
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php b/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
index 4cd4d71f5b74678f909390a67867814534cadb4e..9db82a0300c8dfcc1fb590aa2f7bf329596dd736 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
@@ -61,7 +61,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\Action\NotFoundException
+     * @expectedException \Magento\Framework\Exception\NotFoundException
      */
     public function testDispatch()
     {
diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json
index 5cf852865c8884a34f1b0d5a7196170762fa292d..57b5f1fb07d116c5a6def7ee13b40e6bd8efe874 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cookie/composer.json b/app/code/Magento/Cookie/composer.json
index 677da5785a19e3b5091339135af9fdc2c7b6e7e5..6eb0244da272a35850eaeeb2aede214145e1fea6 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.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-backend": "0.42.0-beta11"
+        "magento/module-backend": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cron/Model/Observer.php b/app/code/Magento/Cron/Model/Observer.php
index 0c4330b236445e5158ced871f4c4de452a4d53e4..800e1e732710d455b0a12a728df25a01f486ba5f 100644
--- a/app/code/Magento/Cron/Model/Observer.php
+++ b/app/code/Magento/Cron/Model/Observer.php
@@ -345,6 +345,13 @@ class Observer
             return $this;
         }
 
+        // check how long the record should stay unprocessed before marked as MISSED
+        $scheduleLifetime = (int)$this->_scopeConfig->getValue(
+            'system/cron/' . $groupId . '/' . self::XML_PATH_SCHEDULE_LIFETIME,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+        );
+        $scheduleLifetime = $scheduleLifetime * self::SECONDS_IN_MINUTE;
+
         /**
          * @var \Magento\Cron\Model\Resource\Schedule\Collection $history
          */
@@ -370,7 +377,9 @@ class Observer
         $now = $this->timezone->scopeTimeStamp();
         /** @var Schedule $record */
         foreach ($history as $record) {
-            if (strtotime($record->getExecutedAt()) < $now - $historyLifetimes[$record->getStatus()]) {
+            $checkTime = $record->getExecutedAt() ? strtotime($record->getExecutedAt()) :
+                strtotime($record->getScheduledAt()) + $scheduleLifetime;
+            if ($checkTime < $now - $historyLifetimes[$record->getStatus()]) {
                 $record->delete();
             }
         }
diff --git a/app/code/Magento/Cron/Test/Unit/Model/ObserverTest.php b/app/code/Magento/Cron/Test/Unit/Model/ObserverTest.php
index 1b9c5cd798101a15d4fd8ab122dacc1afa67bba0..1f67cb67065623e9bc84a9e41c12baa9bb4a8ae7 100644
--- a/app/code/Magento/Cron/Test/Unit/Model/ObserverTest.php
+++ b/app/code/Magento/Cron/Test/Unit/Model/ObserverTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Cron\Test\Unit\Model;
 
+use Magento\Cron\Model\Schedule;
+
 /**
  * Class \Magento\Cron\Test\Unit\Model\ObserverTest
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -607,4 +609,84 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
 
         $this->_observer->dispatch('');
     }
+
+    public function testMissedJobsCleanedInTime()
+    {
+        /* 1. Initialize dependencies of _generate() method which is called first */
+        $jobConfig = [
+            'test_group' => ['test_job1' => ['instance' => 'CronJob', 'method' => 'execute']],
+        ];
+
+        // This item was scheduled 2 days ago
+        $schedule1 = $this->getMockBuilder(
+            'Magento\Cron\Model\Schedule'
+        )->disableOriginalConstructor()->setMethods(
+            ['getExecutedAt', 'getScheduledAt', 'getStatus', 'delete', '__wakeup']
+        )->getMock();
+        $schedule1->expects($this->any())->method('getExecutedAt')->will($this->returnValue(null));
+        $schedule1->expects($this->any())->method('getScheduledAt')->will($this->returnValue('-2 day -1 hour'));
+        $schedule1->expects($this->any())->method('getStatus')->will($this->returnValue(Schedule::STATUS_MISSED));
+        //we expect this job be deleted from the list
+        $schedule1->expects($this->once())->method('delete')->will($this->returnValue(true));
+
+        // This item was scheduled 1 day ago
+        $schedule2 = $this->getMockBuilder(
+            'Magento\Cron\Model\Schedule'
+        )->disableOriginalConstructor()->setMethods(
+            ['getExecutedAt', 'getScheduledAt', 'getStatus', 'delete', '__wakeup']
+        )->getMock();
+        $schedule2->expects($this->any())->method('getExecutedAt')->will($this->returnValue(null));
+        $schedule2->expects($this->any())->method('getScheduledAt')->will($this->returnValue('-1 day'));
+        $schedule2->expects($this->any())->method('getStatus')->will($this->returnValue(Schedule::STATUS_MISSED));
+        //we don't expect this job be deleted from the list
+        $schedule2->expects($this->never())->method('delete');
+
+        $this->_collection->addItem($schedule1);
+        $this->_config->expects($this->once())->method('getJobs')->will($this->returnValue($jobConfig));
+
+        //get configuration value CACHE_KEY_LAST_HISTORY_CLEANUP_AT in the "_generate()"
+        $this->_cache->expects($this->at(0))->method('load')->will($this->returnValue(time() + 10000000));
+        //get configuration value CACHE_KEY_LAST_HISTORY_CLEANUP_AT in the "_cleanup()"
+        $this->_cache->expects($this->at(1))->method('load')->will($this->returnValue(time() - 10000000));
+
+        $this->_scopeConfig->expects($this->at(0))->method('getValue')
+            ->with($this->equalTo('system/cron/test_group/use_separate_process'))
+            ->will($this->returnValue(0));
+        $this->_scopeConfig->expects($this->at(1))->method('getValue')
+            ->with($this->equalTo('system/cron/test_group/schedule_generate_every'))
+            ->will($this->returnValue(0));
+        $this->_scopeConfig->expects($this->at(2))->method('getValue')
+            ->with($this->equalTo('system/cron/test_group/history_cleanup_every'))
+            ->will($this->returnValue(0));
+        $this->_scopeConfig->expects($this->at(3))->method('getValue')
+            ->with($this->equalTo('system/cron/test_group/schedule_lifetime'))
+            ->will($this->returnValue(2*24*60));
+        $this->_scopeConfig->expects($this->at(4))->method('getValue')
+            ->with($this->equalTo('system/cron/test_group/history_success_lifetime'))
+            ->will($this->returnValue(0));
+        $this->_scopeConfig->expects($this->at(5))->method('getValue')
+            ->with($this->equalTo('system/cron/test_group/history_failure_lifetime'))
+            ->will($this->returnValue(0));
+
+        /* 2. Initialize dependencies of _cleanup() method which is called second */
+        $scheduleMock = $this->getMockBuilder('Magento\Cron\Model\Schedule')->disableOriginalConstructor()->getMock();
+        $scheduleMock->expects($this->any())->method('getCollection')->will($this->returnValue($this->_collection));
+        $this->_scheduleFactory->expects($this->at(0))->method('create')->will($this->returnValue($scheduleMock));
+
+        $collection = $this->getMockBuilder(
+            'Magento\Cron\Model\Resource\Schedule\Collection'
+        )->setMethods(
+            ['addFieldToFilter', 'load', '__wakeup']
+        )->disableOriginalConstructor()->getMock();
+        $collection->expects($this->any())->method('addFieldToFilter')->will($this->returnSelf());
+        $collection->expects($this->any())->method('load')->will($this->returnSelf());
+        $collection->addItem($schedule1);
+        $collection->addItem($schedule2);
+
+        $scheduleMock = $this->getMockBuilder('Magento\Cron\Model\Schedule')->disableOriginalConstructor()->getMock();
+        $scheduleMock->expects($this->any())->method('getCollection')->will($this->returnValue($collection));
+        $this->_scheduleFactory->expects($this->at(1))->method('create')->will($this->returnValue($scheduleMock));
+
+        $this->_observer->dispatch('');
+    }
 }
diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json
index 537fc35fcb0e7e8782c198e2172a8725acc286ca..a5f2fd8de55aa27542811c9361cfac9e3d3ba001 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php
index d860910e844bd7030cafdd90c7269468a40b201d..a99c5d696096d3acb8c36937e2e78b4553a1ec8c 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php
@@ -11,46 +11,51 @@ class FetchRates extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Cur
     /**
      * Fetch rates action
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Exception|\Magento\Framework\Exception\LocalizedException
      */
     public function execute()
     {
         /** @var \Magento\Backend\Model\Session $backendSession */
         $backendSession = $this->_objectManager->get('Magento\Backend\Model\Session');
-        try {
-            $service = $this->getRequest()->getParam('rate_services');
-            $this->_getSession()->setCurrencyRateService($service);
-            if (!$service) {
-                throw new \Exception(__('Please specify a correct Import Service.'));
-            }
-            try {
-                /** @var \Magento\Directory\Model\Currency\Import\ImportInterface $importModel */
-                $importModel = $this->_objectManager->get(
-                    'Magento\Directory\Model\Currency\Import\Factory'
-                )->create(
-                    $service
-                );
-            } catch (\Exception $e) {
-                throw new \Magento\Framework\Exception\LocalizedException(__('We can\'t initialize the import model.'));
-            }
-            $rates = $importModel->fetchRates();
-            $errors = $importModel->getMessages();
-            if (sizeof($errors) > 0) {
-                foreach ($errors as $error) {
-                    $this->messageManager->addWarning($error);
-                }
-                $this->messageManager->addWarning(
-                    __('All possible rates were fetched, please click on "Save" to apply')
-                );
-            } else {
-                $this->messageManager->addSuccess(__('All rates were fetched, please click on "Save" to apply'));
-            }
 
-            $backendSession->setRates($rates);
+        $service = $this->getRequest()->getParam('rate_services');
+        $this->_getSession()->setCurrencyRateService($service);
+        if (!$service) {
+            throw new \Exception(__('Please specify a correct Import Service.'));
+        }
+        try {
+            /** @var \Magento\Directory\Model\Currency\Import\ImportInterface $importModel */
+            $importModel = $this->_objectManager->get('Magento\Directory\Model\Currency\Import\Factory')
+                ->create($service);
         } catch (\Exception $e) {
-            $this->messageManager->addError($e->getMessage());
+            throw new \Magento\Framework\Exception\LocalizedException(__('We can\'t initialize the import model.'));
+        }
+        $rates = $importModel->fetchRates();
+        $errors = $importModel->getMessages();
+        if (sizeof($errors) > 0) {
+            foreach ($errors as $error) {
+                $this->messageManager->addWarning($error);
+            }
+            $this->messageManager->addWarning(
+                __('All possible rates were fetched, please click on "Save" to apply')
+            );
+        } else {
+            $this->messageManager->addSuccess(__('All rates were fetched, please click on "Save" to apply'));
         }
-        $this->_redirect('adminhtml/*/');
+
+        $backendSession->setRates($rates);
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('adminhtml/*/');
     }
 }
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php
index e89ab91b3aab4382e9690247272e05bd954440d6..01940a5bee4c225946b1475263f3b96e921295ce 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php
@@ -12,6 +12,7 @@ class Save extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Currencys
      * Save custom Currency symbol
      *
      * @return void
+     * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
     public function execute()
     {
@@ -24,16 +25,9 @@ class Save extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Currencys
             }
         }
 
-        try {
-            $this->_objectManager->create(
-                'Magento\CurrencySymbol\Model\System\Currencysymbol'
-            )->setCurrencySymbolsData(
-                $symbolsDataArray
-            );
-            $this->messageManager->addSuccess(__('The custom currency symbols were applied.'));
-        } catch (\Exception $e) {
-            $this->messageManager->addError($e->getMessage());
-        }
+        $this->_objectManager->create('Magento\CurrencySymbol\Model\System\Currencysymbol')
+            ->setCurrencySymbolsData($symbolsDataArray);
+        $this->messageManager->addSuccess(__('The custom currency symbols were applied.'));
 
         $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl($this->getUrl('*')));
     }
diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json
index cf12bc45c09290b14863a145c89b8c52c6d09814..7010fffc07b1b69be0f4e47d1f7cb164ee2009d7 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-page-cache": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-page-cache": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Customer/Api/AccountManagementInterface.php b/app/code/Magento/Customer/Api/AccountManagementInterface.php
index 389774fc144422a898e9f0050d4b3ebb79b05b65..3a686695721b836c470aa228b30f9c36f3f5ffc4 100644
--- a/app/code/Magento/Customer/Api/AccountManagementInterface.php
+++ b/app/code/Magento/Customer/Api/AccountManagementInterface.php
@@ -23,6 +23,7 @@ interface AccountManagementInterface
     /**
      * Create customer account. Perform necessary business operations like sending email.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerInterface $customer
      * @param string $password
      * @param string $redirectUrl
@@ -38,6 +39,7 @@ interface AccountManagementInterface
     /**
      * Create customer account using provided hashed password. Should not be exposed as a webapi.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerInterface $customer
      * @param string $hash Password hash that we can save directly
      * @param string $redirectUrl URL fed to welcome email templates. Can be used by templates to, for example, direct
@@ -56,6 +58,7 @@ interface AccountManagementInterface
     /**
      * Validate customer data.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerInterface $customer
      * @return \Magento\Customer\Api\Data\ValidationResultsInterface
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -65,6 +68,7 @@ interface AccountManagementInterface
     /**
      * Check if customer can be deleted.
      *
+     * @api
      * @param int $customerId
      * @return bool
      * @throws \Magento\Framework\Exception\NoSuchEntityException If group is not found
@@ -75,6 +79,7 @@ interface AccountManagementInterface
     /**
      * Activate a customer account using a key that was sent in a confirmation e-mail.
      *
+     * @api
      * @param string $email
      * @param string $confirmationKey
      * @return \Magento\Customer\Api\Data\CustomerInterface
@@ -85,6 +90,7 @@ interface AccountManagementInterface
     /**
      * Activate a customer account using a key that was sent in a confirmation e-mail.
      *
+     * @api
      * @param int $customerId
      * @param string $confirmationKey
      * @return \Magento\Customer\Api\Data\CustomerInterface
@@ -95,6 +101,7 @@ interface AccountManagementInterface
     /**
      * Authenticate a customer by username and password
      *
+     * @api
      * @param string $email
      * @param string $password
      * @return \Magento\Customer\Api\Data\CustomerInterface
@@ -105,6 +112,7 @@ interface AccountManagementInterface
     /**
      * Change customer password.
      *
+     * @api
      * @param string $email
      * @param string $currentPassword
      * @param string $newPassword
@@ -116,6 +124,7 @@ interface AccountManagementInterface
     /**
      * Change customer password.
      *
+     * @api
      * @param int $customerId
      * @param string $currentPassword
      * @param string $newPassword
@@ -127,6 +136,7 @@ interface AccountManagementInterface
     /**
      * Send an email to the customer with a password reset link.
      *
+     * @api
      * @param string $email
      * @param string $template
      * @param int $websiteId
@@ -138,6 +148,7 @@ interface AccountManagementInterface
     /**
      * Reset customer password.
      *
+     * @api
      * @param string $email
      * @param string $resetToken
      * @param string $newPassword
@@ -149,6 +160,7 @@ interface AccountManagementInterface
     /**
      * Check if password reset token is valid.
      *
+     * @api
      * @param int $customerId
      * @param string $resetPasswordLinkToken
      * @return bool True if the token is valid
@@ -163,6 +175,7 @@ interface AccountManagementInterface
     /**
      * Gets the account confirmation status.
      *
+     * @api
      * @param int $customerId
      * @return string
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -172,6 +185,7 @@ interface AccountManagementInterface
     /**
      * Resend confirmation email.
      *
+     * @api
      * @param string $email
      * @param int $websiteId
      * @param string $redirectUrl
@@ -183,6 +197,7 @@ interface AccountManagementInterface
     /**
      * Check if given email is associated with a customer account in given website.
      *
+     * @api
      * @param string $customerEmail
      * @param int $websiteId If not set, will use the current websiteId
      * @return bool
@@ -193,6 +208,7 @@ interface AccountManagementInterface
     /**
      * Check store availability for customer given the customerId.
      *
+     * @api
      * @param int $customerWebsiteId
      * @param int $storeId
      * @return bool
@@ -203,6 +219,7 @@ interface AccountManagementInterface
     /**
      * Retrieve default billing address for the given customerId.
      *
+     * @api
      * @param int $customerId
      * @return \Magento\Customer\Api\Data\AddressInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException If the customer Id is invalid
@@ -213,6 +230,7 @@ interface AccountManagementInterface
     /**
      * Retrieve default shipping address for the given customerId.
      *
+     * @api
      * @param int $customerId
      * @return \Magento\Customer\Api\Data\AddressInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException If the customer Id is invalid
@@ -223,6 +241,7 @@ interface AccountManagementInterface
     /**
      * Return hashed password, which can be directly saved to database.
      *
+     * @api
      * @param string $password
      * @return string
      */
diff --git a/app/code/Magento/Customer/Api/AddressRepositoryInterface.php b/app/code/Magento/Customer/Api/AddressRepositoryInterface.php
index 7102d16bbacdb19aea2fa1756a2dbbbb8b4a0ec7..384ce945fb12159175b89c7164e661158851ed5e 100644
--- a/app/code/Magento/Customer/Api/AddressRepositoryInterface.php
+++ b/app/code/Magento/Customer/Api/AddressRepositoryInterface.php
@@ -14,6 +14,7 @@ interface AddressRepositoryInterface
     /**
      * Save customer address.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\AddressInterface $address
      * @return \Magento\Customer\Api\Data\AddressInterface
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -23,6 +24,7 @@ interface AddressRepositoryInterface
     /**
      * Retrieve customer address.
      *
+     * @api
      * @param int $addressId
      * @return \Magento\Customer\Api\Data\AddressInterface
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -32,6 +34,7 @@ interface AddressRepositoryInterface
     /**
      * Retrieve customers addresses matching the specified criteria.
      *
+     * @api
      * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria
      * @return \Magento\Customer\Api\Data\AddressSearchResultsInterface
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -41,6 +44,7 @@ interface AddressRepositoryInterface
     /**
      * Delete customer address.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\AddressInterface $address
      * @return bool true on success
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -50,6 +54,7 @@ interface AddressRepositoryInterface
     /**
      * Delete customer address by ID.
      *
+     * @api
      * @param int $addressId
      * @return bool true on success
      * @throws \Magento\Framework\Exception\NoSuchEntityException
diff --git a/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php b/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php
index a550b9d94692c2ea9a43ef04f007c8a583873bbe..72dc3cd2ef4e2c95a2e3f96ded8dde8856a57f12 100644
--- a/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php
+++ b/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php
@@ -15,6 +15,7 @@ interface CustomerRepositoryInterface
     /**
      * Create customer.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerInterface $customer
      * @param string $passwordHash
      * @return \Magento\Customer\Api\Data\CustomerInterface
@@ -27,6 +28,7 @@ interface CustomerRepositoryInterface
     /**
      * Retrieve customer.
      *
+     * @api
      * @param string $email
      * @param int|null $websiteId
      * @return \Magento\Customer\Api\Data\CustomerInterface
@@ -38,6 +40,7 @@ interface CustomerRepositoryInterface
     /**
      * Retrieve customer.
      *
+     * @api
      * @param int $customerId
      * @return \Magento\Customer\Api\Data\CustomerInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException If customer with the specified ID does not exist.
@@ -48,6 +51,7 @@ interface CustomerRepositoryInterface
     /**
      * Retrieve customers which match a specified criteria.
      *
+     * @api
      * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria
      * @return \Magento\Customer\Api\Data\CustomerSearchResultsInterface
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -57,6 +61,7 @@ interface CustomerRepositoryInterface
     /**
      * Delete customer.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerInterface $customer
      * @return bool true on success
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -66,6 +71,7 @@ interface CustomerRepositoryInterface
     /**
      * Delete customer by ID.
      *
+     * @api
      * @param int $customerId
      * @return bool true on success
      * @throws \Magento\Framework\Exception\NoSuchEntityException
diff --git a/app/code/Magento/Customer/Api/Data/AddressInterface.php b/app/code/Magento/Customer/Api/Data/AddressInterface.php
index d4828f5abc8e67580ca9abcfb338bffb8b172cdf..3b2b7d4ff0f065f4fcd5a18c5c687dd17aa4a17b 100644
--- a/app/code/Magento/Customer/Api/Data/AddressInterface.php
+++ b/app/code/Magento/Customer/Api/Data/AddressInterface.php
@@ -38,6 +38,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get ID
      *
+     * @api
      * @return int|null
      */
     public function getId();
@@ -45,6 +46,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set ID
      *
+     * @api
      * @param int $id
      * @return $this
      */
@@ -53,6 +55,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get customer ID
      *
+     * @api
      * @return int|null
      */
     public function getCustomerId();
@@ -60,6 +63,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set customer ID
      *
+     * @api
      * @param int $customerId
      * @return $this
      */
@@ -68,6 +72,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get region
      *
+     * @api
      * @return \Magento\Customer\Api\Data\RegionInterface|null
      */
     public function getRegion();
@@ -75,6 +80,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set region
      *
+     * @api
      * @param \Magento\Customer\Api\Data\RegionInterface $region
      * @return $this
      */
@@ -83,6 +89,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Two-letter country code in ISO_3166-2 format
      *
+     * @api
      * @return string|null
      */
     public function getCountryId();
@@ -90,6 +97,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set country id
      *
+     * @api
      * @param string $countryId
      * @return $this
      */
@@ -98,6 +106,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get street
      *
+     * @api
      * @return string[]|null
      */
     public function getStreet();
@@ -105,6 +114,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set street
      *
+     * @api
      * @param string[] $street
      * @return $this
      */
@@ -113,6 +123,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get company
      *
+     * @api
      * @return string|null
      */
     public function getCompany();
@@ -120,6 +131,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set company
      *
+     * @api
      * @param string $company
      * @return $this
      */
@@ -128,6 +140,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get telephone number
      *
+     * @api
      * @return string|null
      */
     public function getTelephone();
@@ -135,6 +148,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set telephone number
      *
+     * @api
      * @param string $telephone
      * @return $this
      */
@@ -143,6 +157,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get fax number
      *
+     * @api
      * @return string|null
      */
     public function getFax();
@@ -150,6 +165,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set fax number
      *
+     * @api
      * @param string $fax
      * @return $this
      */
@@ -158,6 +174,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get postcode
      *
+     * @api
      * @return string|null
      */
     public function getPostcode();
@@ -165,6 +182,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set postcode
      *
+     * @api
      * @param string $postcode
      * @return $this
      */
@@ -173,6 +191,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get city name
      *
+     * @api
      * @return string|null
      */
     public function getCity();
@@ -180,6 +199,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set city name
      *
+     * @api
      * @param string $city
      * @return $this
      */
@@ -188,6 +208,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get first name
      *
+     * @api
      * @return string|null
      */
     public function getFirstname();
@@ -195,6 +216,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set first name
      *
+     * @api
      * @param string $firstName
      * @return $this
      */
@@ -203,6 +225,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get last name
      *
+     * @api
      * @return string|null
      */
     public function getLastname();
@@ -210,6 +233,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set last name
      *
+     * @api
      * @param string $lastName
      * @return $this
      */
@@ -218,6 +242,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get middle name
      *
+     * @api
      * @return string|null
      */
     public function getMiddlename();
@@ -225,6 +250,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set middle name
      *
+     * @api
      * @param string $middleName
      * @return $this
      */
@@ -233,6 +259,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get prefix
      *
+     * @api
      * @return string|null
      */
     public function getPrefix();
@@ -240,6 +267,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set prefix
      *
+     * @api
      * @param string $prefix
      * @return $this
      */
@@ -248,6 +276,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get suffix
      *
+     * @api
      * @return string|null
      */
     public function getSuffix();
@@ -255,6 +284,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set suffix
      *
+     * @api
      * @param string $suffix
      * @return $this
      */
@@ -263,6 +293,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get Vat id
      *
+     * @api
      * @return string|null
      */
     public function getVatId();
@@ -270,6 +301,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set Vat id
      *
+     * @api
      * @param string $vatId
      * @return $this
      */
@@ -278,6 +310,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get if this address is default shipping address.
      *
+     * @api
      * @return bool|null
      */
     public function isDefaultShipping();
@@ -285,6 +318,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set if this address is default shipping address.
      *
+     * @api
      * @param bool $isDefaultShipping
      * @return $this
      */
@@ -293,6 +327,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Get if this address is default billing address
      *
+     * @api
      * @return bool|null
      */
     public function isDefaultBilling();
@@ -300,6 +335,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set if this address is default billing address
      *
+     * @api
      * @param bool $isDefaultBilling
      * @return $this
      */
@@ -308,6 +344,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Retrieve existing extension attributes object or create a new one.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\AddressExtensionInterface|null
      */
     public function getExtensionAttributes();
@@ -315,6 +352,7 @@ interface AddressInterface extends \Magento\Framework\Api\CustomAttributesDataIn
     /**
      * Set an extension attributes object.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\AddressExtensionInterface $extensionAttributes
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/AddressSearchResultsInterface.php b/app/code/Magento/Customer/Api/Data/AddressSearchResultsInterface.php
index ab08ea9e87b298b8641bd714742834da1976efe0..f74c607091c2c3254c4f07461cc66afaa55837d3 100644
--- a/app/code/Magento/Customer/Api/Data/AddressSearchResultsInterface.php
+++ b/app/code/Magento/Customer/Api/Data/AddressSearchResultsInterface.php
@@ -14,6 +14,7 @@ interface AddressSearchResultsInterface extends \Magento\Framework\Api\SearchRes
     /**
      * Get customer addresses list.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\AddressInterface[]
      */
     public function getItems();
@@ -21,6 +22,7 @@ interface AddressSearchResultsInterface extends \Magento\Framework\Api\SearchRes
     /**
      * Set customer addresses list.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\AddressInterface[] $items
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/AttributeMetadataInterface.php b/app/code/Magento/Customer/Api/Data/AttributeMetadataInterface.php
index d5af12db20d6176e3621b0b155eb083f704b0bba..988aea370ef94d5a181d734fb72783055fe52ae9 100644
--- a/app/code/Magento/Customer/Api/Data/AttributeMetadataInterface.php
+++ b/app/code/Magento/Customer/Api/Data/AttributeMetadataInterface.php
@@ -36,6 +36,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Frontend HTML for input element.
      *
+     * @api
      * @return string
      */
     public function getFrontendInput();
@@ -43,6 +44,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set frontend HTML for input element.
      *
+     * @api
      * @param string $frontendInput
      * @return $this
      */
@@ -51,6 +53,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get template used for input (e.g. "date")
      *
+     * @api
      * @return string
      */
     public function getInputFilter();
@@ -58,6 +61,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set template used for input (e.g. "date")
      *
+     * @api
      * @param string $inputFilter
      * @return $this
      */
@@ -66,6 +70,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get label of the store.
      *
+     * @api
      * @return string
      */
     public function getStoreLabel();
@@ -73,6 +78,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set label of the store.
      *
+     * @api
      * @param string $storeLabel
      * @return $this
      */
@@ -81,6 +87,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Retrieve validation rules.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\ValidationRuleInterface[]
      */
     public function getValidationRules();
@@ -88,6 +95,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set validation rules.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\ValidationRuleInterface[] $validationRules
      * @return $this
      */
@@ -96,6 +104,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Number of lines of the attribute value.
      *
+     * @api
      * @return int
      */
     public function getMultilineCount();
@@ -103,6 +112,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set number of lines of the attribute value.
      *
+     * @api
      * @param int $multilineCount
      * @return $this
      */
@@ -111,6 +121,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Whether attribute is visible on frontend.
      *
+     * @api
      * @return bool
      */
     public function isVisible();
@@ -118,6 +129,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set whether attribute is visible on frontend.
      *
+     * @api
      * @param bool $isVisible
      * @return $this
      */
@@ -126,6 +138,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Whether attribute is required.
      *
+     * @api
      * @return bool
      */
     public function isRequired();
@@ -133,6 +146,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set whether attribute is required.
      *
+     * @api
      * @param bool $isRequired
      * @return $this
      */
@@ -141,6 +155,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get data model for attribute.
      *
+     * @api
      * @return string
      */
     public function getDataModel();
@@ -148,6 +163,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get data model for attribute.
      *
+     * @api
      * @param string $dataModel
      * @return $this
      */
@@ -156,6 +172,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Return options of the attribute (key => value pairs for select)
      *
+     * @api
      * @return \Magento\Customer\Api\Data\OptionInterface[]
      */
     public function getOptions();
@@ -163,6 +180,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set options of the attribute (key => value pairs for select)
      *
+     * @api
      * @param \Magento\Customer\Api\Data\OptionInterface[] $options
      * @return $this
      */
@@ -171,6 +189,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get class which is used to display the attribute on frontend.
      *
+     * @api
      * @return string
      */
     public function getFrontendClass();
@@ -178,6 +197,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set class which is used to display the attribute on frontend.
      *
+     * @api
      * @param string $frontendClass
      * @return $this
      */
@@ -186,6 +206,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Whether current attribute has been defined by a user.
      *
+     * @api
      * @return bool
      */
     public function isUserDefined();
@@ -193,6 +214,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set whether current attribute has been defined by a user.
      *
+     * @api
      * @param bool $isUserDefined
      * @return $this
      */
@@ -201,6 +223,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get attributes sort order.
      *
+     * @api
      * @return int
      */
     public function getSortOrder();
@@ -208,6 +231,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get attributes sort order.
      *
+     * @api
      * @param int $sortOrder
      * @return $this
      */
@@ -216,6 +240,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get label which supposed to be displayed on frontend.
      *
+     * @api
      * @return string
      */
     public function getFrontendLabel();
@@ -223,6 +248,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set label which supposed to be displayed on frontend.
      *
+     * @api
      * @param string $frontendLabel
      * @return $this
      */
@@ -231,6 +257,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get the note attribute for the element.
      *
+     * @api
      * @return string
      */
     public function getNote();
@@ -238,6 +265,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set the note attribute for the element.
      *
+     * @api
      * @param string $note
      * @return $this
      */
@@ -246,6 +274,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Whether this is a system attribute.
      *
+     * @api
      * @return bool
      */
     public function isSystem();
@@ -253,6 +282,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set whether this is a system attribute.
      *
+     * @api
      * @param bool $isSystem
      * @return $this
      */
@@ -261,6 +291,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Get backend type.
      *
+     * @api
      * @return string
      */
     public function getBackendType();
@@ -268,6 +299,7 @@ interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObje
     /**
      * Set backend type.
      *
+     * @api
      * @param string $backendType
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/CustomerInterface.php b/app/code/Magento/Customer/Api/Data/CustomerInterface.php
index 78be9d556014ac871eff29a9053153033690a736..681d29c2b9d52f8ec1c4fb18d1fecbf68b3bb178 100644
--- a/app/code/Magento/Customer/Api/Data/CustomerInterface.php
+++ b/app/code/Magento/Customer/Api/Data/CustomerInterface.php
@@ -37,6 +37,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get customer id
      *
+     * @api
      * @return int|null
      */
     public function getId();
@@ -44,6 +45,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set customer id
      *
+     * @api
      * @param int $id
      * @return $this
      */
@@ -52,6 +54,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get group id
      *
+     * @api
      * @return int|null
      */
     public function getGroupId();
@@ -59,6 +62,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set group id
      *
+     * @api
      * @param int $groupId
      * @return $this
      */
@@ -67,6 +71,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get default billing address id
      *
+     * @api
      * @return string|null
      */
     public function getDefaultBilling();
@@ -74,6 +79,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set default billing address id
      *
+     * @api
      * @param string $defaultBilling
      * @return $this
      */
@@ -82,6 +88,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get default shipping address id
      *
+     * @api
      * @return string|null
      */
     public function getDefaultShipping();
@@ -89,6 +96,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set default shipping address id
      *
+     * @api
      * @param string $defaultShipping
      * @return $this
      */
@@ -97,6 +105,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get confirmation
      *
+     * @api
      * @return string|null
      */
     public function getConfirmation();
@@ -104,6 +113,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set confirmation
      *
+     * @api
      * @param string $confirmation
      * @return $this
      */
@@ -112,6 +122,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get created at time
      *
+     * @api
      * @return string|null
      */
     public function getCreatedAt();
@@ -119,6 +130,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set created at time
      *
+     * @api
      * @param string $createdAt
      * @return $this
      */
@@ -127,6 +139,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get created in area
      *
+     * @api
      * @return string|null
      */
     public function getCreatedIn();
@@ -134,6 +147,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set created in area
      *
+     * @api
      * @param string $createdIn
      * @return $this
      */
@@ -142,6 +156,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get date of birth
      *
+     * @api
      * @return string|null
      */
     public function getDob();
@@ -149,6 +164,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set date of birth
      *
+     * @api
      * @param string $dob
      * @return $this
      */
@@ -157,6 +173,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get email address
      *
+     * @api
      * @return string
      */
     public function getEmail();
@@ -164,6 +181,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set email address
      *
+     * @api
      * @param string $email
      * @return $this
      */
@@ -172,6 +190,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get first name
      *
+     * @api
      * @return string
      */
     public function getFirstname();
@@ -179,6 +198,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set first name
      *
+     * @api
      * @param string $firstname
      * @return $this
      */
@@ -187,6 +207,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get last name
      *
+     * @api
      * @return string
      */
     public function getLastname();
@@ -194,6 +215,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set last name
      *
+     * @api
      * @param string $lastname
      * @return string
      */
@@ -202,6 +224,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get middle name
      *
+     * @api
      * @return string|null
      */
     public function getMiddlename();
@@ -209,6 +232,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set middle name
      *
+     * @api
      * @param string $middlename
      * @return $this
      */
@@ -217,6 +241,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get prefix
      *
+     * @api
      * @return string|null
      */
     public function getPrefix();
@@ -224,6 +249,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set prefix
      *
+     * @api
      * @param string $prefix
      * @return $this
      */
@@ -232,6 +258,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get suffix
      *
+     * @api
      * @return string|null
      */
     public function getSuffix();
@@ -239,6 +266,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set suffix
      *
+     * @api
      * @param string $suffix
      * @return $this
      */
@@ -247,6 +275,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get gender
      *
+     * @api
      * @return string|null
      */
     public function getGender();
@@ -254,6 +283,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set gender
      *
+     * @api
      * @param string $gender
      * @return $this
      */
@@ -262,6 +292,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get store id
      *
+     * @api
      * @return int|null
      */
     public function getStoreId();
@@ -269,6 +300,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set store id
      *
+     * @api
      * @param int $storeId
      * @return $this
      */
@@ -277,6 +309,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get tax Vat
      *
+     * @api
      * @return string|null
      */
     public function getTaxvat();
@@ -284,6 +317,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set tax Vat
      *
+     * @api
      * @param string $taxvat
      * @return $this
      */
@@ -292,6 +326,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get website id
      *
+     * @api
      * @return int|null
      */
     public function getWebsiteId();
@@ -299,6 +334,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set website id
      *
+     * @api
      * @param int $websiteId
      * @return $this
      */
@@ -307,6 +343,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Get customer addresses.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\AddressInterface[]|null
      */
     public function getAddresses();
@@ -314,6 +351,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set customer addresses.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\AddressInterface[] $addresses
      * @return $this
      */
@@ -322,6 +360,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Retrieve existing extension attributes object or create a new one.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\CustomerExtensionInterface|null
      */
     public function getExtensionAttributes();
@@ -329,6 +368,7 @@ interface CustomerInterface extends \Magento\Framework\Api\CustomAttributesDataI
     /**
      * Set an extension attributes object.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerExtensionInterface $extensionAttributes
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/CustomerSearchResultsInterface.php b/app/code/Magento/Customer/Api/Data/CustomerSearchResultsInterface.php
index 2a020f9deeb09503817655494eaa0d2a57208dee..9cf801526d30894b06a58120ef4f262f91009b64 100644
--- a/app/code/Magento/Customer/Api/Data/CustomerSearchResultsInterface.php
+++ b/app/code/Magento/Customer/Api/Data/CustomerSearchResultsInterface.php
@@ -14,6 +14,7 @@ interface CustomerSearchResultsInterface extends \Magento\Framework\Api\SearchRe
     /**
      * Get customers list.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\CustomerInterface[]
      */
     public function getItems();
@@ -21,6 +22,7 @@ interface CustomerSearchResultsInterface extends \Magento\Framework\Api\SearchRe
     /**
      * Set customers list.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\CustomerInterface[] $items
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/GroupInterface.php b/app/code/Magento/Customer/Api/Data/GroupInterface.php
index 7bb583d433a33e3ad16129038c9c03d7abf95cb9..1ba779941a653fc01ab6f063e754782f331756eb 100644
--- a/app/code/Magento/Customer/Api/Data/GroupInterface.php
+++ b/app/code/Magento/Customer/Api/Data/GroupInterface.php
@@ -29,6 +29,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Get id
      *
+     * @api
      * @return int|null
      */
     public function getId();
@@ -36,6 +37,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Set id
      *
+     * @api
      * @param int $id
      * @return $this
      */
@@ -44,6 +46,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Get code
      *
+     * @api
      * @return string
      */
     public function getCode();
@@ -51,6 +54,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Set code
      *
+     * @api
      * @param string $code
      * @return $this
      */
@@ -59,6 +63,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Get tax class id
      *
+     * @api
      * @return int
      */
     public function getTaxClassId();
@@ -66,6 +71,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Set tax class id
      *
+     * @api
      * @param int $taxClassId
      * @return $this
      */
@@ -74,6 +80,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Get tax class name
      *
+     * @api
      * @return string|null
      */
     public function getTaxClassName();
@@ -81,6 +88,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Set tax class name
      *
+     * @api
      * @param string $taxClassName
      * @return string|null
      */
@@ -89,6 +97,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Retrieve existing extension attributes object or create a new one.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\GroupExtensionInterface|null
      */
     public function getExtensionAttributes();
@@ -96,6 +105,7 @@ interface GroupInterface extends ExtensibleDataInterface
     /**
      * Set an extension attributes object.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\GroupExtensionInterface $extensionAttributes
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/GroupSearchResultsInterface.php b/app/code/Magento/Customer/Api/Data/GroupSearchResultsInterface.php
index 953c2f2381498b6534652defd89065e69c71cdf0..f8effeeb8fc5a3783e2d2c41a4d6b3f8eddac3b2 100644
--- a/app/code/Magento/Customer/Api/Data/GroupSearchResultsInterface.php
+++ b/app/code/Magento/Customer/Api/Data/GroupSearchResultsInterface.php
@@ -14,6 +14,7 @@ interface GroupSearchResultsInterface extends \Magento\Framework\Api\SearchResul
     /**
      * Get customer groups list.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\GroupInterface[]
      */
     public function getItems();
@@ -21,6 +22,7 @@ interface GroupSearchResultsInterface extends \Magento\Framework\Api\SearchResul
     /**
      * Set customer groups list.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\GroupInterface[] $items
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/OptionInterface.php b/app/code/Magento/Customer/Api/Data/OptionInterface.php
index 16ad22278e2a6221525b0ada114c907f2c7f328b..a0fe1cf3c0f085fd1c124c2f450bba2eb84e5dc4 100644
--- a/app/code/Magento/Customer/Api/Data/OptionInterface.php
+++ b/app/code/Magento/Customer/Api/Data/OptionInterface.php
@@ -23,6 +23,7 @@ interface OptionInterface
     /**
      * Get option label
      *
+     * @api
      * @return string
      */
     public function getLabel();
@@ -30,6 +31,7 @@ interface OptionInterface
     /**
      * Set option label
      *
+     * @api
      * @param string $label
      * @return $this
      */
@@ -38,6 +40,7 @@ interface OptionInterface
     /**
      * Get option value
      *
+     * @api
      * @return string|null
      */
     public function getValue();
@@ -45,6 +48,7 @@ interface OptionInterface
     /**
      * Set option value
      *
+     * @api
      * @param string $value
      * @return $this
      */
@@ -53,6 +57,7 @@ interface OptionInterface
     /**
      * Get nested options
      *
+     * @api
      * @return \Magento\Customer\Api\Data\OptionInterface[]|null
      */
     public function getOptions();
@@ -60,6 +65,7 @@ interface OptionInterface
     /**
      * Set nested options
      *
+     * @api
      * @param \Magento\Customer\Api\Data\OptionInterface[] $options
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/RegionInterface.php b/app/code/Magento/Customer/Api/Data/RegionInterface.php
index 808274c02f051b2decca7e39a2f7d0b614ca22a6..8e497834668abb1dd1f4b077b2a588fbdff1a28a 100644
--- a/app/code/Magento/Customer/Api/Data/RegionInterface.php
+++ b/app/code/Magento/Customer/Api/Data/RegionInterface.php
@@ -24,6 +24,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Get region code
      *
+     * @api
      * @return string
      */
     public function getRegionCode();
@@ -31,6 +32,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Set region code
      *
+     * @api
      * @param string $regionCode
      * @return $this
      */
@@ -39,6 +41,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Get region
      *
+     * @api
      * @return string
      */
     public function getRegion();
@@ -46,6 +49,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Set region
      *
+     * @api
      * @param string $region
      * @return $this
      */
@@ -54,6 +58,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Get region id
      *
+     * @api
      * @return int
      */
     public function getRegionId();
@@ -61,6 +66,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Set region id
      *
+     * @api
      * @param int $regionId
      * @return $this
      */
@@ -69,6 +75,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Retrieve existing extension attributes object or create a new one.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\RegionExtensionInterface|null
      */
     public function getExtensionAttributes();
@@ -76,6 +83,7 @@ interface RegionInterface extends ExtensibleDataInterface
     /**
      * Set an extension attributes object.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\RegionExtensionInterface $extensionAttributes
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/Data/ValidationResultsInterface.php b/app/code/Magento/Customer/Api/Data/ValidationResultsInterface.php
index 7e9d830f0e9892e8e6da28e51f9fd2deae680fdb..7688f522b9bdc71200d3ec91f36a82a00c058a4a 100644
--- a/app/code/Magento/Customer/Api/Data/ValidationResultsInterface.php
+++ b/app/code/Magento/Customer/Api/Data/ValidationResultsInterface.php
@@ -22,6 +22,7 @@ interface ValidationResultsInterface
     /**
      * Check if the provided data is valid.
      *
+     * @api
      * @return bool
      */
     public function isValid();
@@ -29,6 +30,7 @@ interface ValidationResultsInterface
     /**
      * Set if the provided data is valid.
      *
+     * @api
      * @param bool $isValid
      * @return $this
      */
@@ -37,6 +39,7 @@ interface ValidationResultsInterface
     /**
      * Get error messages as array in case of validation failure, else return empty array.
      *
+     * @api
      * @return string[]
      */
     public function getMessages();
@@ -44,6 +47,7 @@ interface ValidationResultsInterface
     /**
      * Set error messages as array in case of validation failure.
      *
+     * @api
      * @param string[] $messages
      * @return string[]
      */
diff --git a/app/code/Magento/Customer/Api/Data/ValidationRuleInterface.php b/app/code/Magento/Customer/Api/Data/ValidationRuleInterface.php
index 78e3bf4af1984a332985359a3a80f7ff34545b8e..589f73d5ffbc05231ba24b8c3343ffe4ccb641be 100644
--- a/app/code/Magento/Customer/Api/Data/ValidationRuleInterface.php
+++ b/app/code/Magento/Customer/Api/Data/ValidationRuleInterface.php
@@ -22,6 +22,7 @@ interface ValidationRuleInterface
     /**
      * Get validation rule name
      *
+     * @api
      * @return string
      */
     public function getName();
@@ -29,6 +30,7 @@ interface ValidationRuleInterface
     /**
      * Set validation rule name
      *
+     * @api
      * @param string $name
      * @return $this
      */
@@ -37,6 +39,7 @@ interface ValidationRuleInterface
     /**
      * Get validation rule value
      *
+     * @api
      * @return string
      */
     public function getValue();
@@ -44,6 +47,7 @@ interface ValidationRuleInterface
     /**
      * Set validation rule value
      *
+     * @api
      * @param string $value
      * @return $this
      */
diff --git a/app/code/Magento/Customer/Api/GroupManagementInterface.php b/app/code/Magento/Customer/Api/GroupManagementInterface.php
index b5bc26b9b70545fb0c5da804ac312fa418829a2d..3b051eb041a3708ec86d1d78142279d0e2faf3fe 100644
--- a/app/code/Magento/Customer/Api/GroupManagementInterface.php
+++ b/app/code/Magento/Customer/Api/GroupManagementInterface.php
@@ -24,6 +24,7 @@ interface GroupManagementInterface
     /**
      * Get default customer group.
      *
+     * @api
      * @param int $storeId
      * @return \Magento\Customer\Api\Data\GroupInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException
@@ -34,6 +35,7 @@ interface GroupManagementInterface
     /**
      * Get customer group representing customers not logged in.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\GroupInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -43,6 +45,7 @@ interface GroupManagementInterface
     /**
      * Get all customer groups except group representing customers not logged in.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\GroupInterface[]
      * @throws \Magento\Framework\Exception\LocalizedException
      */
@@ -51,6 +54,7 @@ interface GroupManagementInterface
     /**
      * Get customer group representing all customers.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\GroupInterface
      * @throws \Magento\Framework\Exception\LocalizedException
      */
diff --git a/app/code/Magento/Customer/Api/GroupRepositoryInterface.php b/app/code/Magento/Customer/Api/GroupRepositoryInterface.php
index 3dc7045dfeba7704ec7637b4a3246ce0252ceb1d..c89ce113dcd17c42e7e19974f36a756e71e57b22 100644
--- a/app/code/Magento/Customer/Api/GroupRepositoryInterface.php
+++ b/app/code/Magento/Customer/Api/GroupRepositoryInterface.php
@@ -13,6 +13,7 @@ interface GroupRepositoryInterface
     /**
      * Save customer group.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\GroupInterface $group
      * @return \Magento\Customer\Api\Data\GroupInterface
      * @throws \Magento\Framework\Exception\InputException If there is a problem with the input
@@ -26,6 +27,7 @@ interface GroupRepositoryInterface
     /**
      * Get customer group by group ID.
      *
+     * @api
      * @param int $id
      * @return \Magento\Customer\Api\Data\GroupInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException If $groupId is not found
@@ -39,6 +41,7 @@ interface GroupRepositoryInterface
      * The list of groups can be filtered to exclude the NOT_LOGGED_IN group using the first parameter and/or it can
      * be filtered by tax class.
      *
+     * @api
      * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria
      * @return \Magento\Customer\Api\Data\GroupSearchResultsInterface
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -48,6 +51,7 @@ interface GroupRepositoryInterface
     /**
      * Delete customer group.
      *
+     * @api
      * @param \Magento\Customer\Api\Data\GroupInterface $group
      * @return bool true on success
      * @throws \Magento\Framework\Exception\StateException If customer group cannot be deleted
@@ -58,6 +62,7 @@ interface GroupRepositoryInterface
     /**
      * Delete customer group by ID.
      *
+     * @api
      * @param int $id
      * @return bool true on success
      * @throws \Magento\Framework\Exception\NoSuchEntityException
diff --git a/app/code/Magento/Customer/Api/MetadataInterface.php b/app/code/Magento/Customer/Api/MetadataInterface.php
index fb77ce928e71dab6981a4804aa328a8eaf2ac293..faa87c0f11d186c749de11f066d3478b1fd12f01 100644
--- a/app/code/Magento/Customer/Api/MetadataInterface.php
+++ b/app/code/Magento/Customer/Api/MetadataInterface.php
@@ -14,6 +14,7 @@ interface MetadataInterface extends \Magento\Framework\Api\MetadataServiceInterf
     /**
      * Retrieve all attributes filtered by form code
      *
+     * @api
      * @param string $formCode
      * @return \Magento\Customer\Api\Data\AttributeMetadataInterface[]
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -23,6 +24,7 @@ interface MetadataInterface extends \Magento\Framework\Api\MetadataServiceInterf
     /**
      * Retrieve attribute metadata.
      *
+     * @api
      * @param string $attributeCode
      * @return \Magento\Customer\Api\Data\AttributeMetadataInterface
      * @throws \Magento\Framework\Exception\NoSuchEntityException
@@ -33,6 +35,7 @@ interface MetadataInterface extends \Magento\Framework\Api\MetadataServiceInterf
     /**
      * Get all attribute metadata.
      *
+     * @api
      * @return \Magento\Customer\Api\Data\AttributeMetadataInterface[]
      * @throws \Magento\Framework\Exception\LocalizedException
      */
@@ -41,6 +44,7 @@ interface MetadataInterface extends \Magento\Framework\Api\MetadataServiceInterf
     /**
      *  Get custom attributes metadata for the given data interface.
      *
+     * @api
      * @param string $dataInterfaceName
      * @return \Magento\Customer\Api\Data\AttributeMetadataInterface[]
      * @throws \Magento\Framework\Exception\LocalizedException
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/GenericMetadata.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/GenericMetadata.php
index c973d31e694379f8ac85a7fcf64fdd3a6c648ca6..bdde7fbe8093a7f222e47e1bdde3c85bc03c09f1 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/GenericMetadata.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/GenericMetadata.php
@@ -98,7 +98,6 @@ class GenericMetadata extends \Magento\Backend\Block\Widget\Form\Generic
                 $element->setCanBeEmpty(true);
                 break;
             case 'date':
-                $element->setImage($this->getViewFileUrl('images/grid-cal.png'));
                 $element->setDateFormat($this->_localeDate->getDateFormatWithLongYear());
                 break;
             case 'multiline':
diff --git a/app/code/Magento/Customer/Controller/Account.php b/app/code/Magento/Customer/Controller/Account.php
index 15b3136eb542707d5105b12885d5a118a011be90..286f3f4cd6c554a122d312cc1a58d729f784dee7 100644
--- a/app/code/Magento/Customer/Controller/Account.php
+++ b/app/code/Magento/Customer/Controller/Account.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Controller;
 use Magento\Customer\Model\Session;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\App\RequestInterface;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 
 /**
@@ -42,11 +41,6 @@ class Account extends \Magento\Framework\App\Action\Action
     /** @var Session */
     protected $session;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var PageFactory
      */
@@ -55,17 +49,14 @@ class Account extends \Magento\Framework\App\Action\Action
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      */
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory
     ) {
         $this->session = $customerSession;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultPageFactory = $resultPageFactory;
         parent::__construct($context);
     }
diff --git a/app/code/Magento/Customer/Controller/Account/Confirm.php b/app/code/Magento/Customer/Controller/Account/Confirm.php
index a42a81c43f8589f176884e88e35786399456f71b..04e84dd7ceebcb448933731e3fe41813b6d47991 100644
--- a/app/code/Magento/Customer/Controller/Account/Confirm.php
+++ b/app/code/Magento/Customer/Controller/Account/Confirm.php
@@ -10,7 +10,6 @@ use Magento\Customer\Model\Url;
 use Magento\Framework\App\Action\Context;
 use Magento\Customer\Model\Session;
 use Magento\Framework\App\Config\ScopeConfigInterface;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Customer\Api\AccountManagementInterface;
@@ -48,7 +47,6 @@ class Confirm extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param ScopeConfigInterface $scopeConfig
      * @param StoreManagerInterface $storeManager
@@ -62,7 +60,6 @@ class Confirm extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         ScopeConfigInterface $scopeConfig,
         StoreManagerInterface $storeManager,
@@ -77,13 +74,14 @@ class Confirm extends \Magento\Customer\Controller\Account
         $this->customerRepository = $customerRepository;
         $this->addressHelper = $addressHelper;
         $this->urlModel = $urlFactory->create();
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
      * Confirm customer account by id and confirmation key
      *
      * @return \Magento\Framework\Controller\Result\Redirect
+     * @throws \Exception
      */
     public function execute()
     {
@@ -94,32 +92,35 @@ class Confirm extends \Magento\Customer\Controller\Account
             $resultRedirect->setPath('*/*/');
             return $resultRedirect;
         }
-        try {
-            $customerId = $this->getRequest()->getParam('id', false);
-            $key = $this->getRequest()->getParam('key', false);
-            if (empty($customerId) || empty($key)) {
-                throw new \Exception(__('Bad request.'));
-            }
-
-            // log in and send greeting email
-            $customerEmail = $this->customerRepository->getById($customerId)->getEmail();
-            $customer = $this->customerAccountManagement->activate($customerEmail, $key);
-            $this->_getSession()->setCustomerDataAsLoggedIn($customer);
 
-            $this->messageManager->addSuccess($this->getSuccessMessage());
-            $resultRedirect->setUrl($this->getSuccessRedirect());
-            return $resultRedirect;
-        } catch (StateException $e) {
-            $this->messageManager->addException($e, __('This confirmation key is invalid or has expired.'));
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('There was an error confirming the account'));
+        $customerId = $this->getRequest()->getParam('id', false);
+        $key = $this->getRequest()->getParam('key', false);
+        if (empty($customerId) || empty($key)) {
+            throw new \Exception(__('Bad request.'));
         }
-        // die unhappy
-        $url = $this->urlModel->getUrl('*/*/index', ['_secure' => true]);
-        $resultRedirect->setUrl($this->_redirect->error($url));
+
+        // log in and send greeting email
+        $customerEmail = $this->customerRepository->getById($customerId)->getEmail();
+        $customer = $this->customerAccountManagement->activate($customerEmail, $key);
+        $this->_getSession()->setCustomerDataAsLoggedIn($customer);
+
+        $this->messageManager->addSuccess($this->getSuccessMessage());
+        $resultRedirect->setUrl($this->getSuccessRedirect());
         return $resultRedirect;
     }
 
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        $url = $this->urlModel->getUrl('*/*/index', ['_secure' => true]);
+        return $resultRedirect->setUrl($this->_redirect->error($url));
+    }
+
     /**
      * Retrieve success message
      *
diff --git a/app/code/Magento/Customer/Controller/Account/Confirmation.php b/app/code/Magento/Customer/Controller/Account/Confirmation.php
index ba7ee81e3eaf8e199059bf50f728e5ef58bc5e51..0eea2052db37fb847aa1ab75f262930256181f71 100644
--- a/app/code/Magento/Customer/Controller/Account/Confirmation.php
+++ b/app/code/Magento/Customer/Controller/Account/Confirmation.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Controller\Account;
 
 use Magento\Framework\App\Action\Context;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Customer\Api\AccountManagementInterface;
@@ -25,7 +24,6 @@ class Confirmation extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param StoreManagerInterface $storeManager
      * @param AccountManagementInterface $customerAccountManagement
@@ -33,14 +31,13 @@ class Confirmation extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         StoreManagerInterface $storeManager,
         AccountManagementInterface $customerAccountManagement
     ) {
         $this->storeManager = $storeManager;
         $this->customerAccountManagement = $customerAccountManagement;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/Create.php b/app/code/Magento/Customer/Controller/Account/Create.php
index 215f1a0198d18b245c3bd22d4fd76933a7373452..887ec8d996a35bfc2fc3207bd182cca2eefc1596 100644
--- a/app/code/Magento/Customer/Controller/Account/Create.php
+++ b/app/code/Magento/Customer/Controller/Account/Create.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Controller\Account;
 
 use Magento\Customer\Model\Registration;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\App\Action\Context;
 
@@ -20,19 +19,17 @@ class Create extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param Registration $registration
      */
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         Registration $registration
     ) {
         $this->registration = $registration;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/CreatePassword.php b/app/code/Magento/Customer/Controller/Account/CreatePassword.php
index 69f5eb09d510084ad0fd55a38bf0fe2bb9f23f8a..22ef71e47e3cf2e1b4dbd71144536fa78e7b1b17 100644
--- a/app/code/Magento/Customer/Controller/Account/CreatePassword.php
+++ b/app/code/Magento/Customer/Controller/Account/CreatePassword.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Controller\Account;
 
 use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\App\Action\Context;
 
@@ -20,19 +19,17 @@ class CreatePassword extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param AccountManagementInterface $customerAccountManagement
      */
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         AccountManagementInterface $customerAccountManagement
     ) {
         $this->customerAccountManagement = $customerAccountManagement;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/CreatePost.php b/app/code/Magento/Customer/Controller/Account/CreatePost.php
index 420139f171cfabb1925d5b9f0d86265cf8c67384..c132eb904d1446ff1bc8d49c4068e1675963e968 100644
--- a/app/code/Magento/Customer/Controller/Account/CreatePost.php
+++ b/app/code/Magento/Customer/Controller/Account/CreatePost.php
@@ -11,7 +11,6 @@ use Magento\Customer\Model\Url;
 use Magento\Framework\Api\DataObjectHelper;
 use Magento\Framework\App\Action\Context;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Store\Model\StoreManagerInterface;
@@ -82,7 +81,6 @@ class CreatePost extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param ScopeConfigInterface $scopeConfig
      * @param StoreManagerInterface $storeManager
@@ -106,7 +104,6 @@ class CreatePost extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         ScopeConfigInterface $scopeConfig,
         StoreManagerInterface $storeManager,
@@ -144,7 +141,6 @@ class CreatePost extends \Magento\Customer\Controller\Account
         parent::__construct(
             $context,
             $customerSession,
-            $resultRedirectFactory,
             $resultPageFactory
         );
     }
diff --git a/app/code/Magento/Customer/Controller/Account/Edit.php b/app/code/Magento/Customer/Controller/Account/Edit.php
index b4de05f17140b8be1acb91b7fc070fe38400c0e7..df4dde04fc35ca50a1f14ddffa439a8223bb0252 100644
--- a/app/code/Magento/Customer/Controller/Account/Edit.php
+++ b/app/code/Magento/Customer/Controller/Account/Edit.php
@@ -9,7 +9,6 @@ namespace Magento\Customer\Controller\Account;
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Framework\Api\DataObjectHelper;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\App\Action\Context;
 
@@ -24,7 +23,6 @@ class Edit extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param DataObjectHelper $dataObjectHelper
@@ -32,14 +30,13 @@ class Edit extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         CustomerRepositoryInterface $customerRepository,
         DataObjectHelper $dataObjectHelper
     ) {
         $this->customerRepository = $customerRepository;
         $this->dataObjectHelper = $dataObjectHelper;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/EditPost.php b/app/code/Magento/Customer/Controller/Account/EditPost.php
index a3df334fbf83560dc676ee96e415ff842a88ac30..c61860f64004def6eb8bc8a72a04d0ea02a2eaf9 100644
--- a/app/code/Magento/Customer/Controller/Account/EditPost.php
+++ b/app/code/Magento/Customer/Controller/Account/EditPost.php
@@ -11,7 +11,6 @@ use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Customer\Model\CustomerExtractor;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\Exception\AuthenticationException;
@@ -37,7 +36,6 @@ class EditPost extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param AccountManagementInterface $customerAccountManagement
      * @param CustomerRepositoryInterface $customerRepository
@@ -48,7 +46,6 @@ class EditPost extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         AccountManagementInterface $customerAccountManagement,
         CustomerRepositoryInterface $customerRepository,
@@ -59,7 +56,7 @@ class EditPost extends \Magento\Customer\Controller\Account
         $this->customerRepository = $customerRepository;
         $this->formKeyValidator = $formKeyValidator;
         $this->customerExtractor = $customerExtractor;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php b/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php
index 3b82507dc7f45d9f7c079bb2679539e1ed915be3..fc391f4143525b23d8e88590fa2c5065eeeed664 100644
--- a/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php
+++ b/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php
@@ -9,7 +9,6 @@ namespace Magento\Customer\Controller\Account;
 use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Model\AccountManagement;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\Escaper;
@@ -26,7 +25,6 @@ class ForgotPasswordPost extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param AccountManagementInterface $customerAccountManagement
      * @param Escaper $escaper
@@ -34,14 +32,13 @@ class ForgotPasswordPost extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         AccountManagementInterface $customerAccountManagement,
         Escaper $escaper
     ) {
         $this->customerAccountManagement = $customerAccountManagement;
         $this->escaper = $escaper;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/LoginPost.php b/app/code/Magento/Customer/Controller/Account/LoginPost.php
index 1f05dff29314ebeca53856b305565dca6619aeb1..500a2f7b68302ee573f84a0ac597b551c899e36b 100644
--- a/app/code/Magento/Customer/Controller/Account/LoginPost.php
+++ b/app/code/Magento/Customer/Controller/Account/LoginPost.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Controller\Account;
 use Magento\Customer\Model\Account\Redirect as AccountRedirect;
 use Magento\Framework\App\Action\Context;
 use Magento\Customer\Model\Session;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Model\Url as CustomerUrl;
@@ -35,7 +34,6 @@ class LoginPost extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param AccountManagementInterface $customerAccountManagement
      * @param CustomerUrl $customerHelperData
@@ -47,7 +45,6 @@ class LoginPost extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         AccountManagementInterface $customerAccountManagement,
         CustomerUrl $customerHelperData,
@@ -61,7 +58,6 @@ class LoginPost extends \Magento\Customer\Controller\Account
         parent::__construct(
             $context,
             $customerSession,
-            $resultRedirectFactory,
             $resultPageFactory
         );
     }
diff --git a/app/code/Magento/Customer/Controller/Account/ResetPassword.php b/app/code/Magento/Customer/Controller/Account/ResetPassword.php
index 32735a80177b4323b0a7784a539f85a56de3c7dc..d8486b21549a9161b12ce30c36d798976273b319 100644
--- a/app/code/Magento/Customer/Controller/Account/ResetPassword.php
+++ b/app/code/Magento/Customer/Controller/Account/ResetPassword.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Controller\Account;
 
 use Magento\Customer\Model\Session;
 use Magento\Framework\App\Action\Context;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\Controller\Result\ForwardFactory;
 
@@ -22,19 +21,17 @@ class ResetPassword extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param ForwardFactory $resultForwardFactory
      */
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         ForwardFactory $resultForwardFactory
     ) {
         $this->resultForwardFactory = $resultForwardFactory;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php b/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php
index b8055dc7354e7a34a16dd876f05611bd28f6c3a3..2d53034cb6897e21849bed76fdb2a9e80a02ab33 100644
--- a/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php
+++ b/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php
@@ -10,7 +10,6 @@ use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Customer\Model\Session;
 use Magento\Framework\App\Action\Context;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 
 class ResetPasswordPost extends \Magento\Customer\Controller\Account
@@ -24,7 +23,6 @@ class ResetPasswordPost extends \Magento\Customer\Controller\Account
     /**
      * @param Context $context
      * @param Session $customerSession
-     * @param RedirectFactory $resultRedirectFactory
      * @param PageFactory $resultPageFactory
      * @param AccountManagementInterface $accountManagement
      * @param CustomerRepositoryInterface $customerRepository
@@ -32,14 +30,13 @@ class ResetPasswordPost extends \Magento\Customer\Controller\Account
     public function __construct(
         Context $context,
         Session $customerSession,
-        RedirectFactory $resultRedirectFactory,
         PageFactory $resultPageFactory,
         AccountManagementInterface $accountManagement,
         CustomerRepositoryInterface $customerRepository
     ) {
         $this->accountManagement = $accountManagement;
         $this->customerRepository = $customerRepository;
-        parent::__construct($context, $customerSession, $resultRedirectFactory, $resultPageFactory);
+        parent::__construct($context, $customerSession, $resultPageFactory);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Address.php b/app/code/Magento/Customer/Controller/Address.php
index 60b2c38fd2676c8e5c1cbece3323dd6f5a959b6b..27f6b54271ee3b7f80037bb335922642c124eb04 100644
--- a/app/code/Magento/Customer/Controller/Address.php
+++ b/app/code/Magento/Customer/Controller/Address.php
@@ -54,11 +54,6 @@ class Address extends \Magento\Framework\App\Action\Action
      */
     protected $dataObjectHelper;
 
-    /**
-     * @var \Magento\Framework\Controller\Result\Redirect
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\Controller\Result\ForwardFactory
      */
@@ -79,7 +74,6 @@ class Address extends \Magento\Framework\App\Action\Action
      * @param \Magento\Customer\Api\Data\RegionInterfaceFactory $regionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -94,7 +88,6 @@ class Address extends \Magento\Framework\App\Action\Action
         \Magento\Customer\Api\Data\RegionInterfaceFactory $regionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
@@ -106,7 +99,6 @@ class Address extends \Magento\Framework\App\Action\Action
         $this->regionDataFactory = $regionDataFactory;
         $this->_dataProcessor = $dataProcessor;
         $this->dataObjectHelper = $dataObjectHelper;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultPageFactory = $resultPageFactory;
         parent::__construct($context);
diff --git a/app/code/Magento/Customer/Controller/Address/Index.php b/app/code/Magento/Customer/Controller/Address/Index.php
index cfb5fc0580777b96c93db111efc4d35560be671b..bf2975bb3b054738f7b215445af73ead7563163e 100644
--- a/app/code/Magento/Customer/Controller/Address/Index.php
+++ b/app/code/Magento/Customer/Controller/Address/Index.php
@@ -29,7 +29,6 @@ class Index extends \Magento\Customer\Controller\Address
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      * @param CustomerRepositoryInterface $customerRepository
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +43,6 @@ class Index extends \Magento\Customer\Controller\Address
         \Magento\Customer\Api\Data\RegionInterfaceFactory $regionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         CustomerRepositoryInterface $customerRepository
@@ -60,7 +58,6 @@ class Index extends \Magento\Customer\Controller\Address
             $regionDataFactory,
             $dataProcessor,
             $dataObjectHelper,
-            $resultRedirectFactory,
             $resultForwardFactory,
             $resultPageFactory
         );
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php
index 099e121b9de5d88ba311359e3f0177122564ae27..a77e904edbea387aa1674bb62d535ac2806e67fe 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php
@@ -8,25 +8,6 @@ namespace Magento\Customer\Controller\Adminhtml\Cart\Product\Composite\Cart;
 
 class Update extends \Magento\Customer\Controller\Adminhtml\Cart\Product\Composite\Cart
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Quote\Model\QuoteRepository $quoteRepository,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $quoteRepository);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * IFrame handler for submitted configuration for quote item
      *
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group.php b/app/code/Magento/Customer/Controller/Adminhtml/Group.php
index 47e6c1c04309b409e6cb9fe2f5cb659ab1e09a18..cfbca15cae3615922702eba5fa522179ca45480b 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group.php
@@ -30,11 +30,6 @@ class Group extends \Magento\Backend\App\Action
      */
     protected $groupDataFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -52,7 +47,6 @@ class Group extends \Magento\Backend\App\Action
      * @param \Magento\Framework\Registry $coreRegistry
      * @param GroupRepositoryInterface $groupRepository
      * @param GroupInterfaceFactory $groupDataFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      */
@@ -61,7 +55,6 @@ class Group extends \Magento\Backend\App\Action
         \Magento\Framework\Registry $coreRegistry,
         GroupRepositoryInterface $groupRepository,
         GroupInterfaceFactory $groupDataFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
@@ -69,7 +62,6 @@ class Group extends \Magento\Backend\App\Action
         $this->groupRepository = $groupRepository;
         $this->groupDataFactory = $groupDataFactory;
         parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultPageFactory = $resultPageFactory;
     }
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php b/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php
index 94581d7783830f3c3bbc5f10f20bdaa3dff3130a..614abdb1c686cccd324c4f44c5dfa8ddf2679e2a 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php
@@ -23,7 +23,6 @@ class Save extends \Magento\Customer\Controller\Adminhtml\Group
      * @param \Magento\Framework\Registry $coreRegistry
      * @param GroupRepositoryInterface $groupRepository
      * @param GroupInterfaceFactory $groupDataFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
@@ -33,7 +32,6 @@ class Save extends \Magento\Customer\Controller\Adminhtml\Group
         \Magento\Framework\Registry $coreRegistry,
         GroupRepositoryInterface $groupRepository,
         GroupInterfaceFactory $groupDataFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
@@ -44,7 +42,6 @@ class Save extends \Magento\Customer\Controller\Adminhtml\Group
             $coreRegistry,
             $groupRepository,
             $groupDataFactory,
-            $resultRedirectFactory,
             $resultForwardFactory,
             $resultPageFactory
         );
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index.php b/app/code/Magento/Customer/Controller/Adminhtml/Index.php
index eec31225f83eaf86c8d9ea536e45fd82c558e60f..2d84f59c80f84d81d66000c07bb485f694816b39 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index.php
@@ -133,11 +133,6 @@ class Index extends \Magento\Backend\App\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -172,7 +167,6 @@ class Index extends \Magento\Backend\App\Action
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      *
@@ -202,7 +196,6 @@ class Index extends \Magento\Backend\App\Action
         \Magento\Framework\View\LayoutFactory $layoutFactory,
         \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
     ) {
@@ -228,7 +221,6 @@ class Index extends \Magento\Backend\App\Action
         $this->layoutFactory = $layoutFactory;
         $this->resultLayoutFactory = $resultLayoutFactory;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultJsonFactory = $resultJsonFactory;
         parent::__construct($context);
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
index d6d46cb468d66b4c8e9bf218f397bbf9a382a848..9ca36cab18553645f184045ea47a657ac6dd9ca6 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
@@ -13,21 +13,27 @@ class Delete extends \Magento\Customer\Controller\Adminhtml\Index
      * Delete customer action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Exception
      */
     public function execute()
     {
         $this->_initCustomer();
         $customerId = $this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID);
         if (!empty($customerId)) {
-            try {
-                $this->_customerRepository->deleteById($customerId);
-                $this->messageManager->addSuccess(__('You deleted the customer.'));
-            } catch (\Exception $exception) {
-                $this->messageManager->addError($exception->getMessage());
-            }
+            $this->_customerRepository->deleteById($customerId);
+            $this->messageManager->addSuccess(__('You deleted the customer.'));
         }
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         $resultRedirect = $this->resultRedirectFactory->create();
-        $resultRedirect->setPath('customer/index');
-        return $resultRedirect;
+        return $resultRedirect->setPath('customer/index');
     }
 }
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php
index 86f937f8981a7fc110e63a31aee8e6ae0f40f1c6..aeb28057de13b555d37c18b0881d446bc345695a 100755
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php
@@ -11,7 +11,7 @@ use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Customer\Api\Data\AddressInterfaceFactory;
 use Magento\Customer\Api\Data\CustomerInterfaceFactory;
 use Magento\Customer\Model\Address\Mapper;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\ObjectFactory;
 
@@ -54,7 +54,6 @@ class Viewfile extends \Magento\Customer\Controller\Adminhtml\Index
      * @param \Magento\Framework\View\LayoutFactory $layoutFactory
      * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
@@ -86,7 +85,6 @@ class Viewfile extends \Magento\Customer\Controller\Adminhtml\Index
         \Magento\Framework\View\LayoutFactory $layoutFactory,
         \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
@@ -116,7 +114,6 @@ class Viewfile extends \Magento\Customer\Controller\Adminhtml\Index
             $layoutFactory,
             $resultLayoutFactory,
             $resultPageFactory,
-            $resultRedirectFactory,
             $resultForwardFactory,
             $resultJsonFactory
         );
@@ -148,7 +145,7 @@ class Viewfile extends \Magento\Customer\Controller\Adminhtml\Index
             );
             $plain = true;
         } else {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         /** @var \Magento\Framework\Filesystem $filesystem */
@@ -159,7 +156,7 @@ class Viewfile extends \Magento\Customer\Controller\Adminhtml\Index
         if (!$directory->isFile($fileName)
             && !$this->_objectManager->get('Magento\MediaStorage\Helper\File\Storage')->processStorageFile($path)
         ) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         if ($plain) {
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php b/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php
index 4a9028ee2968d2312ebe3f5115dae04ef34bf7d4..c1e7e8307c8344d914cf725acd704bcfe6d2acf5 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php
@@ -10,23 +10,6 @@ use Exception;
 
 class Update extends \Magento\Customer\Controller\Adminhtml\Wishlist\Product\Composite\Wishlist
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * IFrame handler for submitted configuration for wishlist item.
      *
diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php
index 129f46990118ab34ef0bd442198d93f5a5d325c3..d4b541e090af24cd638e03cc0e04e80c9c34413a 100644
--- a/app/code/Magento/Customer/Model/AccountManagement.php
+++ b/app/code/Magento/Customer/Model/AccountManagement.php
@@ -31,7 +31,7 @@ use Magento\Framework\Exception\State\ExpiredException;
 use Magento\Framework\Exception\State\InputMismatchException;
 use Magento\Framework\Exception\State\InvalidTransitionException;
 use Psr\Log\LoggerInterface as PsrLogger;
-use Magento\Framework\Mail\Exception as MailException;
+use Magento\Framework\Exception\MailException;
 use Magento\Framework\Mail\Template\TransportBuilder;
 use Magento\Framework\Math\Random;
 use Magento\Framework\Reflection\DataObjectProcessor;
@@ -839,6 +839,7 @@ class AccountManagement implements AccountManagementInterface
             $storeId = $this->getWebsiteStoreId($customer);
         }
 
+        $customerEmailData = $this->getFullCustomerObject($customer);
         /** @var \Magento\Framework\Mail\TransportInterface $transport */
         $transport = $this->transportBuilder->setTemplateIdentifier(
             $this->scopeConfig->getValue(
@@ -849,7 +850,7 @@ class AccountManagement implements AccountManagementInterface
         )->setTemplateOptions(
             ['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $storeId]
         )->setTemplateVars(
-            ['customer' => $customer, 'store' => $this->storeManager->getStore($storeId)]
+            ['customer' => $customerEmailData, 'store' => $this->storeManager->getStore($storeId)]
         )->setFrom(
             $this->scopeConfig->getValue(
                 self::XML_PATH_FORGOT_EMAIL_IDENTITY,
@@ -1046,12 +1047,13 @@ class AccountManagement implements AccountManagementInterface
         //TODO : Fix how template is built. Maybe Framework Object or create new Email template data model?
         // Check template to see what values need to be set in the data model to be passed
         // Need to set the reset_password_url property of the object
+        $store = $this->storeManager->getStore($customer->getStoreId());
         $resetUrl = $this->url->getUrl(
             'customer/account/createPassword',
             [
                 '_query' => ['id' => $customer->getId(), 'token' => $newPasswordToken],
                 '_store' => $customer->getStoreId(),
-                '_nosid' => true,
+                '_secure' => $store->isFrontUrlSecure(),
             ]
         );
 
@@ -1062,7 +1064,7 @@ class AccountManagement implements AccountManagementInterface
             $customer,
             self::XML_PATH_REMIND_EMAIL_TEMPLATE,
             self::XML_PATH_FORGOT_EMAIL_IDENTITY,
-            ['customer' => $customerEmailData, 'store' => $this->storeManager->getStore($customer->getStoreId())],
+            ['customer' => $customerEmailData, 'store' => $store],
             $customer->getStoreId()
         );
 
diff --git a/app/code/Magento/Customer/Model/Customer.php b/app/code/Magento/Customer/Model/Customer.php
index 414ec4dbefebaafb3f2b765d14ae63c7244eb431..d6792e7d47c2a33d77b8b6991754a7dad31c3e56 100644
--- a/app/code/Magento/Customer/Model/Customer.php
+++ b/app/code/Magento/Customer/Model/Customer.php
@@ -725,7 +725,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
 
         $primaryShipping = $this->getPrimaryShippingAddress();
         if ($primaryShipping) {
-            if ($primaryBilling->getId() == $primaryShipping->getId()) {
+            if ($primaryBilling && $primaryBilling->getId() == $primaryShipping->getId()) {
                 $primaryBilling->setIsPrimaryShipping(true);
             } else {
                 $primaryShipping->setIsPrimaryShipping(true);
diff --git a/app/code/Magento/Customer/Model/GroupManagement.php b/app/code/Magento/Customer/Model/GroupManagement.php
index 0e6792f095f42e6805e5fdec1b7bb767546cd387..fb05d732285d7e4d4e45a23fa952ac76020dc9ec 100644
--- a/app/code/Magento/Customer/Model/GroupManagement.php
+++ b/app/code/Magento/Customer/Model/GroupManagement.php
@@ -120,7 +120,7 @@ class GroupManagement implements \Magento\Customer\Api\GroupManagementInterface
                 \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
                 $storeId
             );
-        } catch (\Magento\Framework\App\InitException $e) {
+        } catch (\Magento\Framework\Exception\State\InitException $e) {
             throw NoSuchEntityException::singleField('storeId', $storeId);
         }
         try {
diff --git a/app/code/Magento/Customer/Model/Session.php b/app/code/Magento/Customer/Model/Session.php
index a534411d8f043bfb4c181e9d7418ba16a7058b5c..c01cd99d642cf7cb72c963fc20513f2e8e525235 100644
--- a/app/code/Magento/Customer/Model/Session.php
+++ b/app/code/Magento/Customer/Model/Session.php
@@ -291,6 +291,7 @@ class Session extends \Magento\Framework\Session\SessionManager
     /**
      * Retrieve customer id from current session
      *
+     * @api
      * @return int|null
      */
     public function getCustomerId()
@@ -356,6 +357,7 @@ class Session extends \Magento\Framework\Session\SessionManager
     /**
      * Checking customer login status
      *
+     * @api
      * @return bool
      */
     public function isLoggedIn()
@@ -420,6 +422,7 @@ class Session extends \Magento\Framework\Session\SessionManager
     /**
      * Authorization customer by identifier
      *
+     * @api
      * @param   int $customerId
      * @return  bool
      */
@@ -437,6 +440,7 @@ class Session extends \Magento\Framework\Session\SessionManager
     /**
      * Logout customer
      *
+     * @api
      * @return $this
      */
     public function logout()
diff --git a/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php b/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php
index c356f2f352c2907446d85ba4efc67372640b8879..f5404347c8c841a24ca630175235b6348fea6a95 100644
--- a/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php
@@ -166,7 +166,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testSetLayoutWithAlienAddress()
diff --git a/app/code/Magento/Customer/Test/Unit/Block/Adminhtml/Edit/Tab/View/PersonalInfoTest.php b/app/code/Magento/Customer/Test/Unit/Block/Adminhtml/Edit/Tab/View/PersonalInfoTest.php
index a196a2917f99477245f5f7e8cc7fd6b74533dfcb..29adf1a01cca112fc6833837accaef7d1c3864ad 100644
--- a/app/code/Magento/Customer/Test/Unit/Block/Adminhtml/Edit/Tab/View/PersonalInfoTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Block/Adminhtml/Edit/Tab/View/PersonalInfoTest.php
@@ -165,6 +165,14 @@ class PersonalInfoTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetCurrentStatus($status, $lastLoginAt, $lastVisitAt, $lastLogoutAt)
     {
+        $this->scopeConfig->expects($this->any())
+            ->method('getValue')
+            ->with(
+                'customer/online_customers/online_minutes_interval',
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+            ->willReturn(60); //TODO: it's value mocked because unit tests run data providers before all testsuite
+
         $this->customerLog->expects($this->any())->method('getLastLoginAt')->willReturn($lastLoginAt);
         $this->customerLog->expects($this->any())->method('getLastVisitAt')->willReturn($lastVisitAt);
         $this->customerLog->expects($this->any())->method('getLastLogoutAt')->willReturn($lastLogoutAt);
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php
index a4fe4832056411b7453b2eaa2b8b01ea04d3b010..bbcbfe8192d33cad464578de3b2b488284b3aea3 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php
@@ -144,19 +144,22 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
         $this->contextMock = $this->getMock('Magento\Framework\App\Action\Context', [], [], '', false);
         $this->contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $this->contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $this->contextMock->expects($this->any())
             ->method('getRedirect')
-            ->will($this->returnValue($this->redirectMock));
+            ->willReturn($this->redirectMock);
         $this->contextMock->expects($this->any())
             ->method('getView')
-            ->will($this->returnValue($viewMock));
+            ->willReturn($viewMock);
         $this->contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
+        $this->contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($redirectFactoryMock);
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
@@ -171,7 +174,6 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
                 'customerRepository' => $this->customerRepositoryMock,
                 'addressHelper' => $this->addressHelperMock,
                 'urlFactory' => $urlFactoryMock,
-                'resultRedirectFactory' => $redirectFactoryMock,
             ]
         );
     }
@@ -190,7 +192,30 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
         $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->model->execute());
     }
 
+    public function testGetDefaultRedirect()
+    {
+        $testUrl = 'http://example.com';
+        $this->urlMock->expects($this->once())
+            ->method('getUrl')
+            ->with('*/*/index', ['_secure' => true])
+            ->willReturn($testUrl);
+
+        $this->redirectMock->expects($this->once())
+            ->method('error')
+            ->with($testUrl)
+            ->willReturn($testUrl);
+
+        $this->redirectResultMock->expects($this->once())
+            ->method('setUrl')
+            ->with($testUrl)
+            ->willReturnSelf();
+
+        $this->model->getDefaultResult();
+    }
+
     /**
+     * @expectedException \Exception
+     * @expectedExceptionMessage Bad request.
      * @dataProvider getParametersDataProvider
      */
     public function testNoCustomerIdInRequest($customerId, $key)
@@ -208,27 +233,6 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('key'), false)
             ->will($this->returnValue($key));
 
-        $exception = new \Exception('Bad request.');
-        $this->messageManagerMock->expects($this->once())
-            ->method('addException')
-            ->with($this->equalTo($exception), $this->equalTo('There was an error confirming the account'));
-
-        $testUrl = 'http://example.com';
-        $this->urlMock->expects($this->once())
-            ->method('getUrl')
-            ->with($this->equalTo('*/*/index'), ['_secure' => true])
-            ->will($this->returnValue($testUrl));
-
-        $this->redirectMock->expects($this->once())
-            ->method('error')
-            ->with($this->equalTo($testUrl))
-            ->will($this->returnValue($testUrl));
-
-        $this->redirectResultMock->expects($this->once())
-            ->method('setUrl')
-            ->with($this->equalTo($testUrl))
-            ->willReturnSelf();
-
         $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->model->execute());
     }
 
@@ -313,9 +317,9 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
     public function getSuccessMessageDataProvider()
     {
         return [
-            [1, 1, false, null, __('Thank you for registering with')],
-            [1, 1, true, Address::TYPE_BILLING, __('enter you billing address for proper VAT calculation')],
-            [1, 1, true, Address::TYPE_SHIPPING, __('enter you shipping address for proper VAT calculation')],
+            [1, 1, false, null, 'Thank you for registering with'],
+            [1, 1, true, Address::TYPE_BILLING, 'enter you billing address for proper VAT calculation'],
+            [1, 1, true, Address::TYPE_SHIPPING, 'enter you shipping address for proper VAT calculation'],
         ];
     }
 
@@ -388,18 +392,18 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('*/*/index'), ['_secure' => true])
             ->will($this->returnValue($successUrl));
 
-        $this->redirectMock->expects($this->never())
+        $this->redirectMock->expects($this->once())
             ->method('success')
             ->with($this->equalTo($resultUrl))
-            ->will($this->returnValue($resultUrl));
+            ->willReturn($resultUrl);
 
-        $this->scopeConfigMock->expects($this->never())
+        $this->scopeConfigMock->expects($this->once())
             ->method('isSetFlag')
             ->with(
-                $this->equalTo(Url::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD),
-                $this->equalTo(ScopeInterface::SCOPE_STORE)
+                Url::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD,
+                ScopeInterface::SCOPE_STORE
             )
-            ->will($this->returnValue($isSetFlag));
+            ->willReturn($isSetFlag);
 
         $this->model->execute();
     }
@@ -417,7 +421,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
                 null,
                 'http://example.com/back',
                 true,
-                __('Thank you for registering with'),
+                'Thank you for registering with',
             ],
             [
                 1,
@@ -426,7 +430,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
                 'http://example.com/success',
                 'http://example.com/success',
                 true,
-                __('Thank you for registering with'),
+                'Thank you for registering with',
             ],
             [
                 1,
@@ -435,7 +439,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
                 'http://example.com/success',
                 'http://example.com/success',
                 false,
-                __('Thank you for registering with'),
+                'Thank you for registering with',
             ],
         ];
     }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php
index 46bd9cbf68c9c93fa72277f057bb28972f056251..41115e5ac8649409c8c6f1bb8499955edbd5b7b1 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php
@@ -198,30 +198,32 @@ class CreatePostTest extends \PHPUnit_Framework_TestCase
 
         $eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
 
+        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Framework\Controller\Result\RedirectFactory')
+            ->setMethods(['create'])
+            ->getMock();
+        $this->resultRedirectFactoryMock->expects($this->any())
+            ->method('create')
+            ->willReturn($this->redirectMock);
+
         $contextMock = $this->getMock('Magento\Framework\App\Action\Context', [], [], '', false);
         $contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $contextMock->expects($this->any())
             ->method('getRedirect')
-            ->will($this->returnValue($this->redirectMock));
+            ->willReturn($this->redirectMock);
         $contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
         $contextMock->expects($this->any())
             ->method('getEventManager')
-            ->will($this->returnValue($eventManagerMock));
-
-        $this->resultRedirectFactoryMock = $this->getMockBuilder(
-            'Magento\Framework\Controller\Result\RedirectFactory'
-        )->setMethods(['create'])
-            ->getMock();
-        $this->resultRedirectFactoryMock->expects($this->any())
-            ->method('create')
-            ->willReturn($this->redirectMock);
+            ->willReturn($eventManagerMock);
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $this->model = $objectManager->getObject(
             'Magento\Customer\Controller\Account\CreatePost',
@@ -243,7 +245,6 @@ class CreatePostTest extends \PHPUnit_Framework_TestCase
                 'escape' => $escaperMock,
                 'customerExtractor' => $this->customerExtractorMock,
                 'dataObjectHelper' => $this->dataObjectHelperMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
             ]
         );
     }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php
index 86113cef969df40aa3c6f1f1f1603acca0f148b2..eabe54ae5d46deb4fca77f3c0a8ebb8f7c06a3e4 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php
@@ -90,24 +90,26 @@ class EditPostTest extends \PHPUnit_Framework_TestCase
 
         $this->messageManager = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
 
+        $this->resultRedirectFactory = $this->getMock(
+            'Magento\Framework\Controller\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+
         $this->context = $this->objectManager->getObject(
             'Magento\Framework\App\Action\Context',
             [
                 'request' => $this->request,
                 'response' => $this->response,
-                'messageManager' => $this->messageManager
+                'messageManager' => $this->messageManager,
+                'resultRedirectFactory' => $this->resultRedirectFactory
             ]
         );
 
         $this->redirectResultMock = $this->getMock('Magento\Framework\Controller\Result\Redirect', [], [], '', false);
         $this->customerSession = $this->getMock('Magento\Customer\Model\Session', [], [], '', false);
-        $this->resultRedirectFactory = $this->getMock(
-            'Magento\Framework\Controller\Result\RedirectFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
         $this->resultPageFactory = $this->getMock('Magento\Framework\View\Result\PageFactory', [], [], '', false);
         $this->customerAccountManagement = $this->getMockForAbstractClass(
             'Magento\Customer\Api\AccountManagementInterface',
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
index 7837c811df305141807f92c816cc06155298ee00..ec6f760539217ba90f229ed0728b77d6e6350460 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
@@ -172,7 +172,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Customer\Controller\Account::getAllowedActions
+     * @covers \Magento\Customer\Controller\Account::getAllowedActions
      * @return void
      */
     public function testGetAllowedActions()
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php
index 53ffa02b353e2fdb921a19e0b1f52063359ac365..336877afcab7e52e0061276a6014abf672a8b9bf 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php
@@ -171,44 +171,29 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
             'getResponse',
             'getTitle',
             'getView',
+            'getResultRedirectFactory'
         ];
         $contextMock = $this->getMockBuilder(
             '\Magento\Backend\App\Action\Context'
         )->disableOriginalConstructor()->setMethods(
             $contextArgs
         )->getMock();
-        $contextMock->expects($this->any())->method('getRequest')->will($this->returnValue($this->_request));
-        $contextMock->expects($this->any())->method('getResponse')->will($this->returnValue($this->_response));
-        $contextMock->expects(
-            $this->any()
-        )->method(
-            'getObjectManager'
-        )->will(
-            $this->returnValue($this->_objectManager)
-        );
-        $contextMock->expects(
-            $this->any()
-        )->method(
-            'getFrontController'
-        )->will(
-            $this->returnValue($frontControllerMock)
-        );
-        $contextMock->expects($this->any())->method('getActionFlag')->will($this->returnValue($actionFlagMock));
-
-        $contextMock->expects($this->any())->method('getHelper')->will($this->returnValue($this->_helper));
-        $contextMock->expects($this->any())->method('getSession')->will($this->returnValue($this->_session));
-        $contextMock->expects(
-            $this->any()
-        )->method(
-            'getMessageManager'
-        )->will(
-            $this->returnValue($this->messageManager)
-        );
+        $contextMock->expects($this->any())->method('getRequest')->willReturn($this->_request);
+        $contextMock->expects($this->any())->method('getResponse')->willReturn($this->_response);
+        $contextMock->expects($this->any())->method('getObjectManager')->willReturn($this->_objectManager);
+        $contextMock->expects($this->any())->method('getFrontController')->willReturn($frontControllerMock);
+        $contextMock->expects($this->any())->method('getActionFlag')->willReturn($actionFlagMock);
+        $contextMock->expects($this->any())->method('getHelper')->willReturn($this->_helper);
+        $contextMock->expects($this->any())->method('getSession')->willReturn($this->_session);
+        $contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManager);
         $titleMock =  $this->getMockBuilder('\Magento\Framework\App\Action\Title')->getMock();
-        $contextMock->expects($this->any())->method('getTitle')->will($this->returnValue($titleMock));
+        $contextMock->expects($this->any())->method('getTitle')->willReturn($titleMock);
         $viewMock =  $this->getMockBuilder('\Magento\Framework\App\ViewInterface')->getMock();
-        $viewMock->expects($this->any())->method('loadLayout')->will($this->returnSelf());
-        $contextMock->expects($this->any())->method('getView')->will($this->returnValue($viewMock));
+        $viewMock->expects($this->any())->method('loadLayout')->willReturnSelf();
+        $contextMock->expects($this->any())->method('getView')->willReturn($viewMock);
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $this->_customerAccountManagementMock = $this->getMockBuilder(
             'Magento\Customer\Api\AccountManagementInterface'
@@ -222,7 +207,6 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
             'context' => $contextMock,
             'customerAccountManagement' => $this->_customerAccountManagementMock,
             'customerRepository' => $this->_customerRepositoryMock,
-            'resultRedirectFactory' => $this->resultRedirectFactoryMock
         ];
 
         $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php
index 0d38fb9a0ee18fc41c8c65bbf5e316f6dd661b1d..3021161364bf164c63eabb3e53aa0e30b2df77a2 100755
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php
@@ -94,8 +94,8 @@ class ViewfileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @throws \Magento\Framework\App\Action\NotFoundException
-     * @expectedException \Magento\Framework\App\Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
+     * @expectedException \Magento\Framework\Exception\NotFoundException
      */
     public function testExecuteNoParamsShouldThrowException()
     {
diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c7c2f1dde35575eb3cbdf2c98657bb05b16d496
--- /dev/null
+++ b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php
@@ -0,0 +1,311 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Customer\Test\Unit\Model;
+
+use Magento\Customer\Model\AccountManagement;
+use Magento\Framework\App\Area;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+use Magento\Store\Model\ScopeInterface;
+
+/**
+ * @SuppressWarnings(PHPMD.TooManyFields)
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class AccountManagementTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var AccountManagement */
+    protected $accountManagement;
+
+    /** @var ObjectManagerHelper */
+    protected $objectManagerHelper;
+
+    /** @var \Magento\Customer\Model\CustomerFactory|\PHPUnit_Framework_MockObject_MockObject */
+    protected $customerFactory;
+
+    /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $manager;
+
+    /** @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $storeManager;
+
+    /** @var \Magento\Framework\Math\Random|\PHPUnit_Framework_MockObject_MockObject */
+    protected $random;
+
+    /** @var \Magento\Customer\Model\Metadata\Validator|\PHPUnit_Framework_MockObject_MockObject */
+    protected $validator;
+
+    /** @var \Magento\Customer\Api\Data\ValidationResultsInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject */
+    protected $validationResultsInterfaceFactory;
+
+    /** @var \Magento\Customer\Api\AddressRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $addressRepository;
+
+    /** @var \Magento\Customer\Api\CustomerMetadataInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $customerMetadata;
+
+    /** @var \Magento\Customer\Model\CustomerRegistry|\PHPUnit_Framework_MockObject_MockObject */
+    protected $customerRegistry;
+
+    /** @var \Magento\Framework\Url|\PHPUnit_Framework_MockObject_MockObject */
+    protected $url;
+
+    /** @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $logger;
+
+    /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $encryptor;
+
+    /** @var \Magento\Customer\Model\Config\Share|\PHPUnit_Framework_MockObject_MockObject */
+    protected $share;
+
+    /** @var \Magento\Framework\Stdlib\String|\PHPUnit_Framework_MockObject_MockObject */
+    protected $string;
+
+    /** @var \Magento\Customer\Api\CustomerRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $customerRepository;
+
+    /** @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $scopeConfig;
+
+    /** @var \Magento\Framework\Mail\Template\TransportBuilder|\PHPUnit_Framework_MockObject_MockObject */
+    protected $transportBuilder;
+
+    /** @var \Magento\Framework\Reflection\DataObjectProcessor|\PHPUnit_Framework_MockObject_MockObject */
+    protected $dataObjectProcessor;
+
+    /** @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject */
+    protected $registry;
+
+    /** @var \Magento\Customer\Helper\View|\PHPUnit_Framework_MockObject_MockObject */
+    protected $customerViewHelper;
+
+    /** @var \Magento\Framework\Stdlib\DateTime|\PHPUnit_Framework_MockObject_MockObject */
+    protected $dateTime;
+
+    /** @var \Magento\Customer\Model\Customer|\PHPUnit_Framework_MockObject_MockObject */
+    protected $customer;
+
+    /** @var \Magento\Framework\ObjectFactory|\PHPUnit_Framework_MockObject_MockObject */
+    protected $objectFactory;
+
+    /** @var \Magento\Framework\Api\ExtensibleDataObjectConverter|\PHPUnit_Framework_MockObject_MockObject */
+    protected $extensibleDataObjectConverter;
+
+    /**
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    protected function setUp()
+    {
+        $this->customerFactory = $this->getMock('Magento\Customer\Model\CustomerFactory', [], [], '', false);
+        $this->manager = $this->getMock('Magento\Framework\Event\ManagerInterface');
+        $this->storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface');
+        $this->random = $this->getMock('Magento\Framework\Math\Random');
+        $this->validator = $this->getMock('Magento\Customer\Model\Metadata\Validator', [], [], '', false);
+        $this->validationResultsInterfaceFactory = $this->getMock(
+            'Magento\Customer\Api\Data\ValidationResultsInterfaceFactory',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->addressRepository = $this->getMock('Magento\Customer\Api\AddressRepositoryInterface');
+        $this->customerMetadata = $this->getMock('Magento\Customer\Api\CustomerMetadataInterface');
+        $this->customerRegistry = $this->getMock('Magento\Customer\Model\CustomerRegistry', [], [], '', false);
+        $this->url = $this->getMock('Magento\Framework\Url', [], [], '', false);
+        $this->logger = $this->getMock('Psr\Log\LoggerInterface');
+        $this->encryptor = $this->getMock('Magento\Framework\Encryption\EncryptorInterface');
+        $this->share = $this->getMock('Magento\Customer\Model\Config\Share', [], [], '', false);
+        $this->string = $this->getMock('Magento\Framework\Stdlib\String');
+        $this->customerRepository = $this->getMock('Magento\Customer\Api\CustomerRepositoryInterface');
+        $this->scopeConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
+        $this->transportBuilder = $this->getMock(
+            'Magento\Framework\Mail\Template\TransportBuilder',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->dataObjectProcessor = $this->getMock(
+            'Magento\Framework\Reflection\DataObjectProcessor',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->registry = $this->getMock('Magento\Framework\Registry');
+        $this->customerViewHelper = $this->getMock('Magento\Customer\Helper\View', [], [], '', false);
+        $this->dateTime = $this->getMock('Magento\Framework\Stdlib\DateTime');
+        $this->customer = $this->getMock('Magento\Customer\Model\Customer', [], [], '', false);
+        $this->objectFactory = $this->getMock('Magento\Framework\ObjectFactory', [], [], '', false);
+        $this->extensibleDataObjectConverter = $this->getMock(
+            'Magento\Framework\Api\ExtensibleDataObjectConverter',
+            [],
+            [],
+            '',
+            false
+        );
+
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->accountManagement = $this->objectManagerHelper->getObject(
+            'Magento\Customer\Model\AccountManagement',
+            [
+                'customerFactory' => $this->customerFactory,
+                'eventManager' => $this->manager,
+                'storeManager' => $this->storeManager,
+                'mathRandom' => $this->random,
+                'validator' => $this->validator,
+                'validationResultsDataFactory' => $this->validationResultsInterfaceFactory,
+                'addressRepository' => $this->addressRepository,
+                'customerMetadataService' => $this->customerMetadata,
+                'customerRegistry' => $this->customerRegistry,
+                'url' => $this->url,
+                'logger' => $this->logger,
+                'encryptor' => $this->encryptor,
+                'configShare' => $this->share,
+                'stringHelper' => $this->string,
+                'customerRepository' => $this->customerRepository,
+                'scopeConfig' => $this->scopeConfig,
+                'transportBuilder' => $this->transportBuilder,
+                'dataProcessor' => $this->dataObjectProcessor,
+                'registry' => $this->registry,
+                'customerViewHelper' => $this->customerViewHelper,
+                'dateTime' => $this->dateTime,
+                'customerModel' => $this->customer,
+                'objectFactory' => $this->objectFactory,
+                'extensibleDataObjectConverter' => $this->extensibleDataObjectConverter
+            ]
+        );
+    }
+
+    /**
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function testSendPasswordReminderEmail()
+    {
+        $customerId = 1;
+        $customerStoreId = 2;
+        $customerEmail = 'email@email.com';
+        $passwordToken = 'token';
+        $isFrontendSecure = true;
+        $resetUrl = 'reset url';
+        $customerData = ['key' => 'value'];
+        $customerName = 'Customer Name';
+        $templateIdentifier = 'Template Identifier';
+        $sender = 'Sender';
+
+        $customer = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterface')
+            ->getMock();
+        $customer->expects($this->any())
+            ->method('getStoreId')
+            ->willReturn($customerStoreId);
+        $customer->expects($this->any())
+            ->method('getId')
+            ->willReturn($customerId);
+        $customer->expects($this->any())
+            ->method('getEmail')
+            ->willReturn($customerEmail);
+
+        $store = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->storeManager->expects($this->any())
+            ->method('getStore')
+            ->with($customerStoreId)
+            ->willReturn($store);
+
+        $store->expects($this->any())
+            ->method('isFrontUrlSecure')
+            ->willReturn($isFrontendSecure);
+
+        $this->url->expects($this->once())
+            ->method('getUrl')
+            ->with(
+                'customer/account/createPassword',
+                [
+                    '_query' => ['id' => $customerId, 'token' => $passwordToken],
+                    '_store' => $customerStoreId,
+                    '_secure' => $isFrontendSecure,
+                ]
+            )->willReturn($resetUrl);
+
+        $customerSecure = $this->getMockBuilder('\Magento\Customer\Model\Data\CustomerSecure')
+            ->disableOriginalConstructor()
+            ->setMethods(['addData', 'setData', 'setResetPasswordUrl'])
+            ->getMock();
+
+        $this->customerRegistry->expects($this->once())
+            ->method('retrieveSecureData')
+            ->with($customerId)
+            ->willReturn($customerSecure);
+
+        $this->dataObjectProcessor->expects($this->once())
+            ->method('buildOutputDataArray')
+            ->with($customer, '\Magento\Customer\Api\Data\CustomerInterface')
+            ->willReturn($customerData);
+
+        $this->customerViewHelper->expects($this->any())
+            ->method('getCustomerName')
+            ->with($customer)
+            ->willReturn($customerName);
+
+        $customerSecure->expects($this->once())
+            ->method('addData')
+            ->with($customerData)
+            ->willReturnSelf();
+        $customerSecure->expects($this->once())
+            ->method('setData')
+            ->with('name', $customerName)
+            ->willReturnSelf();
+        $customerSecure->expects($this->once())
+            ->method('setResetPasswordUrl')
+            ->with($resetUrl);
+
+        $this->scopeConfig->expects($this->at(0))
+            ->method('getValue')
+            ->with(AccountManagement::XML_PATH_REMIND_EMAIL_TEMPLATE, ScopeInterface::SCOPE_STORE, $customerStoreId)
+            ->willReturn($templateIdentifier);
+        $this->scopeConfig->expects($this->at(1))
+            ->method('getValue')
+            ->with(AccountManagement::XML_PATH_FORGOT_EMAIL_IDENTITY, ScopeInterface::SCOPE_STORE, $customerStoreId)
+            ->willReturn($sender);
+
+        $transport = $this->getMockBuilder('Magento\Framework\Mail\TransportInterface')
+            ->getMock();
+
+        $this->transportBuilder->expects($this->once())
+            ->method('setTemplateIdentifier')
+            ->with($templateIdentifier)
+            ->willReturnSelf();
+        $this->transportBuilder->expects($this->once())
+            ->method('setTemplateOptions')
+            ->with(['area' => Area::AREA_FRONTEND, 'store' => $customerStoreId])
+            ->willReturnSelf();
+        $this->transportBuilder->expects($this->once())
+            ->method('setTemplateVars')
+            ->with(['customer' => $customerSecure, 'store' => $store])
+            ->willReturnSelf();
+        $this->transportBuilder->expects($this->once())
+            ->method('setFrom')
+            ->with($sender)
+            ->willReturnSelf();
+        $this->transportBuilder->expects($this->once())
+            ->method('addTo')
+            ->with($customerEmail, $customerName)
+            ->willReturnSelf();
+        $this->transportBuilder->expects($this->once())
+            ->method('getTransport')
+            ->willReturn($transport);
+
+        $transport->expects($this->once())
+            ->method('sendMessage');
+
+        $this->assertEquals(
+            $this->accountManagement,
+            $this->accountManagement->sendPasswordReminderEmail($customer, $passwordToken)
+        );
+    }
+}
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php b/app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php
index 5d9f67f24e56e09a51f142380ce5e27363b064ca..1094b73194e5b3a75ac84cb57c8b6c85ecac26b3 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php
@@ -217,7 +217,7 @@ class ServiceCollectionTest extends \PHPUnit_Framework_TestCase
      * @param string[] $fields
      * @param array $conditions
      *
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage When passing in a field array there must be a matching condition array
      * @dataProvider addFieldToFilterInconsistentArraysDataProvider
      */
diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json
index fac52511ebdd845a9b76fbb26ffa8acccbc2a5b6..aa814c3b434f9ca4becb84a524e2daaff6ac6154 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.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-newsletter": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-review": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-page-cache": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-authorization": "0.42.0-beta11",
-        "magento/module-integration": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-newsletter": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-review": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-page-cache": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-authorization": "0.74.0-beta2",
+        "magento/module-integration": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.42.0-beta11"
+        "magento/module-cookie": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Customer/etc/adminhtml/di.xml b/app/code/Magento/Customer/etc/adminhtml/di.xml
index 103a78335aa95789ae5457b8665f0639cbb501c7..e656bcb2eba01b4f2a6d3d3c118eb44b25efcd2b 100644
--- a/app/code/Magento/Customer/etc/adminhtml/di.xml
+++ b/app/code/Magento/Customer/etc/adminhtml/di.xml
@@ -12,11 +12,4 @@
             <argument name="modelName" xsi:type="string">Magento\Customer\Model\Backend\Customer</argument>
         </arguments>
     </type>
-    <type name="Magento\Framework\Url\SecurityInfo">
-        <arguments>
-            <argument name="secureUrlList" xsi:type="array">
-                <item name="customer" xsi:type="string">/customer/</item>
-            </argument>
-        </arguments>
-    </type>
 </config>
diff --git a/app/code/Magento/Customer/etc/data_source/customer_address.xml b/app/code/Magento/Customer/etc/data_source/customer_address.xml
index 3f3cdd4b0e30a273062e46dcf0fd9c770cd3a14f..e3e88b578a12604b97419639750b8317019d0e51 100644
--- a/app/code/Magento/Customer/etc/data_source/customer_address.xml
+++ b/app/code/Magento/Customer/etc/data_source/customer_address.xml
@@ -49,7 +49,7 @@
             </field>
             <field name="region" source="eav" formElement="input" visible="false"/>
 
-            <field name="postcode" source="eav" formElement="post_code_fix" >
+            <field name="postcode" source="eav" formElement="post_code" >
                 <constraints>
                     <validate name="required-entry"/>
                 </constraints>
diff --git a/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml b/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml
index 9d50ae75e0676730ce20e3950d0b01b1d80a35e2..12fa054b6398b5714ecedc796294822336b22b03 100644
--- a/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml
+++ b/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml
@@ -7,6 +7,7 @@
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <body>
+        <referenceContainer name="admin.scope.col.wrap" htmlClass="admin__old" /> <!-- ToDo UI: remove this wrapper with old styles removal. The class name "admin__old" is for tests only, we shouldn't use it in any way -->
         <referenceContainer name="content">
             <ui_component name="customer_form" component="form" />
         </referenceContainer>
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php
index 0ee06c93a5ee802dfdfd0fa4d582d72e7d59bccd..c65ced0ca675d39810394b2217b2fdc16fe02722 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php
@@ -247,7 +247,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method exportItem()
      *
-     * covers \Magento\CustomerImportExport\Model\Export\Address::exportItem
+     * @covers \Magento\CustomerImportExport\Model\Export\Address::exportItem
      */
     public function testExportItem()
     {
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php
index 1772c6d834613ed8bfd17822b1cbcd58b5e0e74c..69980ac8e37d86388070b7b01c9a4fbcead37225 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php
@@ -186,7 +186,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method exportItem()
      *
-     * covers \Magento\CustomerImportExport\Model\Export\Customer::exportItem
+     * @covers \Magento\CustomerImportExport\Model\Export\Customer::exportItem
      */
     public function testExportItem()
     {
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php
index 0b6e24e1920e5179f14a31b03902552eee6bf58b..bcfdb86cdf64d6cd64b388e0ced47f1a27e2a006 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php
@@ -565,8 +565,8 @@ class AddressTest extends \PHPUnit_Framework_TestCase
      * Test Address::validateRow()
      * with 2 rows with identical PKs in case when add/update behavior is performed
      *
-     * covers \Magento\CustomerImportExport\Model\Import\Address::validateRow
-     * covers \Magento\CustomerImportExport\Model\Import\Address::_validateRowForUpdate
+     * @covers \Magento\CustomerImportExport\Model\Import\Address::validateRow
+     * @covers \Magento\CustomerImportExport\Model\Import\Address::_validateRowForUpdate
      */
     public function testValidateRowForUpdateDuplicateRows()
     {
@@ -615,7 +615,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     /**
      * Test Address::validateRow() with delete action
      *
-     * covers \Magento\CustomerImportExport\Model\Import\Address::validateRow
+     * @covers \Magento\CustomerImportExport\Model\Import\Address::validateRow
      * @dataProvider validateRowForDeleteDataProvider
      *
      * @param array $rowData
@@ -664,7 +664,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     /**
      * Test if correct methods are invoked according to different custom behaviours
      *
-     * covers \Magento\CustomerImportExport\Model\Import\Address::_importData
+     * @covers \Magento\CustomerImportExport\Model\Import\Address::_importData
      */
     public function testImportDataWithCustomBehaviour()
     {
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php
index f99869e4f20c4754a079e9b23c495746e20c8327..a6f971e272dce792bfa5e6a7a4f09ab723805221 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php
@@ -82,9 +82,9 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::getNextBunch
-     * covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::_prepareRow
-     * covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::_prepareAddressRowData
+     * @covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::getNextBunch
+     * @covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::_prepareRow
+     * @covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::_prepareAddressRowData
      *
      * @dataProvider getNextBunchDataProvider
      * @param string $entityType
diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json
index 13e08d12eaa476831a6bcff80b833a797c93be2b..6163121f930528b81563fcbfd5166c6fbd3e75cb 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-import-export": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-import-export": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php
index 3a7213c67e7adeb629d04d229770adaf2a25a0fa..918f008e68065098e467a4a88061ffa616b2a78a 100644
--- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php
+++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php
@@ -89,7 +89,7 @@ class ImageSizing extends \Magento\Backend\Block\Widget\Form\Generic
                 \Magento\DesignEditor\Model\Editor\Tools\Controls\Factory::TYPE_IMAGE_SIZING,
                 $this->_themeContext->getStagingTheme()
             );
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $isFilePresent = false;
         }
 
diff --git a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Revert.php b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Revert.php
index 70fd186f3cc70726c24a3ec1a878ce79af927ea1..d2b47b2815926c1955a90897ca4e075f86c3873f 100644
--- a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Revert.php
+++ b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Revert.php
@@ -44,7 +44,9 @@ class Revert extends \Magento\DesignEditor\Controller\Adminhtml\System\Design\Ed
                     break;
 
                 default:
-                    throw new \Magento\Framework\Exception('Invalid revert mode "%s"', $revertTo);
+                    throw new \Magento\Framework\Exception\LocalizedException(
+                        __('Invalid revert mode "%1"', $revertTo)
+                    );
             }
             $response = ['message' => $message];
         } catch (\Exception $e) {
diff --git a/app/code/Magento/DesignEditor/Model/Config/Control/AbstractControl.php b/app/code/Magento/DesignEditor/Model/Config/Control/AbstractControl.php
index 78dc2dfe98ce03ebca729184785dd6c625504a93..363d73270fa898198e4b21750a36de95d0a7eb94 100644
--- a/app/code/Magento/DesignEditor/Model/Config/Control/AbstractControl.php
+++ b/app/code/Magento/DesignEditor/Model/Config/Control/AbstractControl.php
@@ -112,12 +112,12 @@ abstract class AbstractControl extends \Magento\Framework\Config\AbstractXml
      *
      * @param string $controlName
      * @return array
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getControlData($controlName)
     {
         if (!isset($this->_data[$controlName])) {
-            throw new \Magento\Framework\Exception("Unknown control: \"{$controlName}\"");
+            throw new \Magento\Framework\Exception\LocalizedException(__('Unknown control: "%1', $controlName));
         }
         return $this->_data[$controlName];
     }
diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php
index 8819a67da581f515090705bfb100c975ea64d23a..9799b2c78974eef96ff5d565558ecd833737bc2f 100644
--- a/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php
+++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php
@@ -75,12 +75,14 @@ class Factory
      * @param string $type
      * @param \Magento\Framework\View\Design\ThemeInterface $theme
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getFilePathByType($type, $theme)
     {
         if (!isset($this->_fileNames[$type])) {
-            throw new \Magento\Framework\Exception("Unknown control configuration type: \"{$type}\"");
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Unknown control configuration type: "%1"', $type)
+            );
         }
         return $this->assetRepo->createAsset(
             $this->_fileNames[$type],
@@ -97,7 +99,7 @@ class Factory
      * @param \Magento\Framework\View\Design\ThemeInterface $parentTheme
      * @param string[] $files
      * @return \Magento\DesignEditor\Model\Editor\Tools\Controls\Configuration
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create(
         $type,
@@ -114,7 +116,9 @@ class Factory
                 $class = 'Magento\DesignEditor\Model\Config\Control\ImageSizing';
                 break;
             default:
-                throw new \Magento\Framework\Exception("Unknown control configuration type: \"{$type}\"");
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Unknown control configuration type: "%1"', $type)
+                );
         }
         $rootDirectory = $this->filesystem->getDirectoryRead(DirectoryList::ROOT);
         $paths = [];
diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php
index f92754bacf369d605c012223ee81e037d3d6a31a..efbea06e7104493fe78457d5a1ea0edb8d7d7856 100644
--- a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php
+++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php
@@ -73,7 +73,7 @@ class Builder
                 $data['theme'],
                 $data['parent_theme']
             );
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $isFilePresent = false;
         }
 
diff --git a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/ContainerTest.php b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/ContainerTest.php
index 058d4d55ee52488e692d3fae61497bd898f55ac7..232781b829ad001fe8385ed6c25761cf903e8e90 100644
--- a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/ContainerTest.php
+++ b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/ContainerTest.php
@@ -37,8 +37,8 @@ class ContainerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Container::setFrameUrl
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Container::getFrameUrl
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Container::setFrameUrl
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Container::getFrameUrl
      */
     public function testGetSetFrameUrl()
     {
@@ -52,7 +52,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Container::_prepareLayout
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Container::_prepareLayout
      */
     public function testPrepareLayout()
     {
diff --git a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/CustomTest.php b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/CustomTest.php
index f8538e3a5e63104270184075abee07abc5605d48..079eec5479836f6b5a5d00e3e595a9d7e6bac8fb 100644
--- a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/CustomTest.php
+++ b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/CustomTest.php
@@ -80,7 +80,7 @@ class CustomTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Custom::getDownloadCustomCssUrl
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Custom::getDownloadCustomCssUrl
      */
     public function testGetDownloadCustomCssUrl()
     {
diff --git a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/JsTest.php b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/JsTest.php
index 78af39c17b9799798221a35ba3ec1d6af39c46de..bc4862eb8c8941bb74e80ba0536c0c1d24c49640 100644
--- a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/JsTest.php
+++ b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/Editor/Tools/Code/JsTest.php
@@ -88,7 +88,7 @@ class JsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getJsUploadUrl
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getJsUploadUrl
      */
     public function testGetDownloadCustomCssUrl()
     {
@@ -108,7 +108,7 @@ class JsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getJsReorderUrl
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getJsReorderUrl
      */
     public function testGetJsReorderUrl()
     {
@@ -128,7 +128,7 @@ class JsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getTitle
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getTitle
      */
     public function testGetTitle()
     {
@@ -136,7 +136,7 @@ class JsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getFiles
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Editor\Tools\Code\Js::getFiles
      */
     public function testGetJsFiles()
     {
diff --git a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/ThemeTest.php b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/ThemeTest.php
index 2c50ead0e4bdd2759d001d9d6fdd564ac2a2a04b..bd36831dc0ef319c1f9283b7c97409755adaddf0 100644
--- a/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/ThemeTest.php
+++ b/app/code/Magento/DesignEditor/Test/Unit/Block/Adminhtml/ThemeTest.php
@@ -8,9 +8,9 @@ namespace Magento\DesignEditor\Test\Unit\Block\Adminhtml;
 class ThemeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\DesignEditor\Block\Adminhtml\Theme::addButton
-     * covers \Magento\DesignEditor\Block\Adminhtml\Theme::clearButtons
-     * covers \Magento\DesignEditor\Block\Adminhtml\Theme::getButtonsHtml
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Theme::addButton
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Theme::clearButtons
+     * @covers \Magento\DesignEditor\Block\Adminhtml\Theme::getButtonsHtml
      */
     public function testButtons()
     {
diff --git a/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/BackgroundImageTest.php b/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/BackgroundImageTest.php
index c7afc969bbfffab72a7c64de3ee137c0f38f674c..72f8a22da0ca8a75859a06f98b508fe1f7ec9e64 100644
--- a/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/BackgroundImageTest.php
+++ b/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/BackgroundImageTest.php
@@ -12,7 +12,7 @@ namespace Magento\DesignEditor\Test\Unit\Model\Editor\QuickStyles\Renderer;
 class BackgroundImageTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer\BackgroundImage::toCss
+     * @covers \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer\BackgroundImage::toCss
      * @dataProvider backgroundImageData
      */
     public function testToCss($expectedResult, $data)
@@ -30,7 +30,7 @@ class BackgroundImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer\BackgroundImage::toCss
+     * @covers \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer\BackgroundImage::toCss
      * @dataProvider backgroundImageDataClearDefault
      */
     public function testToCssClearDefault($expectedResult, $data)
diff --git a/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/DefaultTest.php b/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/DefaultTest.php
index 1d471ac5a59e1e290d308bb2695f326fc38bcfb6..26c8e109038b575879706e370f855cb5c4efaabd 100644
--- a/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/DefaultTest.php
+++ b/app/code/Magento/DesignEditor/Test/Unit/Model/Editor/QuickStyles/Renderer/DefaultTest.php
@@ -12,7 +12,7 @@ namespace Magento\DesignEditor\Test\Unit\Model\Editor\QuickStyles\Renderer;
 class DefaultTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer\DefaultRenderer::toCss
+     * @covers \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer\DefaultRenderer::toCss
      * @dataProvider colorPickerData
      */
     public function testToCss($expectedResult, $data)
diff --git a/app/code/Magento/DesignEditor/composer.json b/app/code/Magento/DesignEditor/composer.json
index b586021a18a00604aae4aafaf79715569e724084..35909f252fa2800b842cd827b53d96d23e21a3f0 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.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-translation": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-translation": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.eot b/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.eot
deleted file mode 100644
index 78bd9fc51718fdebfb87534ceebcdca06a705ab2..0000000000000000000000000000000000000000
Binary files a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.eot and /dev/null differ
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.svg b/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.svg
deleted file mode 100644
index fbbadbc71344636b5413b61e149de0c0f8a3063e..0000000000000000000000000000000000000000
--- a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"><defs><font horiz-adv-x="512"><font-face units-per-em="512" ascent="480" descent="-32"/><glyph unicode="" d="M470.7 72.193l-2.688 2.688.006.008L360.505 182.41c14.938 25.73 23.612 55.563 23.816 87.45.63 97.615-77.98 177.243-175.593 177.857l-1.168.002c-97.06-.01-176.064-78.39-176.69-175.6-.62-97.61 78-177.24 175.597-177.86l1.155-.006c32.44 0 62.847 8.79 89 24.075L404.03 10.9l.015.01 2.688-2.69c8.125-8.122 21.293-8.113 29.41 0l34.562 34.558c8.114 8.117 8.117 21.292-.005 29.415zM300.39 177.58c-24.834-24.67-57.78-38.252-92.768-38.252h-.874c-72.59.467-131.27 59.908-130.813 132.503.465 72.13 59.516 130.817 131.626 130.82h.88c35.17-.22 68.15-14.124 92.857-39.15 24.704-25.03 38.184-58.18 37.964-93.355-.227-35.016-14.03-67.894-38.87-92.564zM128.503 287.997H287.5v-31.794H128.504z"/><glyph unicode="" d="M470.7 72.193l-2.688 2.688.006.008L360.505 182.41c14.938 25.73 23.612 55.563 23.816 87.45.63 97.615-77.98 177.243-175.593 177.857l-1.168.002c-97.06-.01-176.064-78.39-176.69-175.6-.62-97.61 78-177.24 175.597-177.86l1.155-.006c32.44 0 62.847 8.79 89 24.075L404.03 10.9l.015.01 2.688-2.69c8.125-8.122 21.293-8.113 29.41 0l34.562 34.558c8.114 8.117 8.117 21.292-.005 29.415zM300.39 177.58c-24.834-24.67-57.78-38.252-92.768-38.252h-.874c-72.59.467-131.27 59.908-130.813 132.503.465 72.13 59.516 130.817 131.626 130.82h.88c35.17-.22 68.15-14.124 92.857-39.15 24.704-25.03 38.184-58.18 37.964-93.355-.227-35.016-14.03-67.894-38.87-92.564zm-76.488 174.017h-31.798v-63.6h-63.6v-31.794h63.6v-63.6h31.798v63.6h63.6v31.794h-63.6z"/><glyph unicode="" d="M466.996 351.685c-3.893 12.27-9.538 21.313-21.31 21.313 0 0-80.18 11-189.35 11-109.17 0-188.678-11-188.678-11-11.77 0-16.89-8.316-21.313-21.313 0 0-13.67-31.687-13.67-127.685s13.67-131.685 13.67-131.685c5.282-11.107 9.543-21.313 21.313-21.313 0 0 92.343-7 188.34-7s189.688 9 189.688 9c11.77 0 18.218 10.248 21.31 21.313 0 0 13 49.185 13 129.185s-13 128.185-13 128.185zM192.002 134.882v178.236L346.358 224l-154.356-89.118z"/><glyph unicode="" d="M259.56 206.27L198.73 29.53c18.165-5.344 37.372-8.263 57.27-8.263 23.607 0 46.25 4.077 67.32 11.492-.54.863-1.04 1.79-1.45 2.79l-62.31 170.72zm133.295 27.96c0 25.063-9.006 42.405-16.72 55.905-10.272 16.708-19.91 30.844-19.91 47.55 0 18.63 14.13 35.98 34.044 35.98.89 0 1.75-.108 2.62-.165-36.065 33.048-84.12 53.225-136.897 53.225-70.82 0-133.128-36.34-169.375-91.37 4.757-.153 9.24-.244 13.044-.244 21.196 0 54.027 2.58 54.027 2.58 10.93.64 12.213-15.414 1.3-16.705 0 0-10.985-1.28-23.198-1.93l73.816-219.59 44.372 133.05-31.584 86.543c-10.92.645-21.266 1.926-21.266 1.926-10.927.647-9.646 17.348 1.288 16.708 0 0 33.47-2.575 53.39-2.575 21.2 0 54.03 2.577 54.03 2.577 10.93.64 12.218-15.413 1.298-16.706 0 0-11-1.28-23.202-1.926L357.2 101.14l20.23 67.56c8.75 28.05 15.424 48.183 15.424 65.533zM357.918 48.78c60.27 35.14 100.803 100.438 100.803 175.227 0 35.246-9 68.38-24.83 97.254.877-6.45 1.37-13.38 1.37-20.84 0-20.564-3.853-43.69-15.415-72.61L357.92 48.78zM53.28 224.007c0-80.24 46.624-149.592 114.26-182.448L70.833 306.51C59.58 281.297 53.28 253.396 53.28 224.006zM255.996-19.985c-134.53 0-243.98 109.457-243.98 243.993 0 134.527 109.448 243.978 243.98 243.978 134.528 0 243.988-109.45 243.988-243.978.002-134.536-109.458-243.993-243.988-243.993z"/><glyph unicode="" d="M511.998 192.1H224.002V7.49l287.996-39.5zm-319.996 0H-.012V39.67l192.014-29.254zm0 214.568L-.012 377.284V223.598h192.014zm319.996-183.07V447.5l-287.996-38.037V223.598z"/><glyph unicode="" d="M206.57 224.042c-23.638 12.147-46.616 18.31-68.314 18.31-2.95 0-5.92-.088-8.892-.35-27.686-2.292-52.974-9.595-69.24-15.273-4.313-1.59-8.735-3.26-13.29-5.11L2.33 67.34C32.9 78.66 59.948 84.16 84.71 84.16c40.053 0 69.127-14.966 93.14-30.373 11.375 38.604 38.666 131.833 46.81 159.694-5.922 3.61-11.93 7.22-18.09 10.567zm57.53-39.218L219.288 29.18c13.294-7.615 58.017-31.732 92.26-31.732 27.64 0 58.587 7.082 94.546 21.695l42.786 149.614c-29.05-9.375-56.915-14.13-82.97-14.13-47.54 0-80.814 15.408-101.81 30.197zm-116.69 110.13c38.207-.396 66.463-14.967 89.88-29.976l45.955 157.227c-9.685 5.547-35.08 19.37-53.438 24.08-12.082 2.815-24.782 4.268-38.25 4.268-25.664-.483-53.702-6.91-85.658-19.72L62.08 276.95c32.11 12.106 59.773 18.004 85.26 18.004h.067zm362.26 84.555c-29.14-11.32-57.576-17.08-84.736-17.08-45.426 0-78.922 15.754-100.623 30.9l-45.55-157.67c30.593-19.674 63.56-29.668 98.16-29.668 28.214 0 57.44 6.776 86.932 20.158l-.09 1.104 1.85.438 44.06 151.82z"/><glyph unicode="" d="M497.573 54.108l-229.14 386.526c-2.945 5.237-8.634 8.138-14.595 7.183-4.403-.7-8.153-3.41-10.27-7.183L14.43 54.108c-2.513-4.467-2.517-10.2 0-14.646 2.554-4.506 7.278-7.46 12.424-7.46h458.294c5.135 0 9.876 2.954 12.428 7.46 2.513 4.447 2.513 10.18 0 14.646zM61.17 64.148L256 395.106 450.557 64.15H61.17zm196.08 74.706c-13.654 0-24.723-11.32-24.723-25.29 0-13.97 11.068-25.29 24.724-25.29s24.73 11.32 24.73 25.29c0 13.97-11.07 25.29-24.724 25.29zm-17.415 21.148h32.858l7.118 159.996h-47.08z"/><glyph unicode="" d="M428.26 271.336H263.47s12.624 48.42 17.182 81.404c4.653 33.547-5.064 60.663-5.064 60.663s-16.546 42.303-21.052 44.116c-27.224 10.973-41.333-4.31-41.333-4.31v-71.32c0-7.92-1.445-13.6-1.445-13.6s-68.23-106.35-76.18-114.115C127.624 246.4 96.15 232.06 96.15 232.06V39.104c1.95-3.057 33.04 1.104 33.835-5.85C130.77 26.31 165.415 0 165.415 0h181.95s49.9 8.94 54.986 20.782c8.718 20.29-2.08 33.68-1.722 39.29.357 5.61 27.64 9.5 27.64 33.52 3.61 29.286-14.392 27.272-13.422 34.07.98 6.802 22.258 9.204 26.38 24.718 3.155 11.947 5.866 34.635-12.967 44.708 62.075 21.467 29.89 74.248.006 74.248z"/><glyph unicode="" d="M428.26 250.91c18.83 10.072 16.122 32.76 12.968 44.708-4.123 15.515-25.402 17.917-26.38 24.717-.973 6.8 17.033 4.783 13.42 34.07 0 24.022-27.28 27.91-27.635 33.52-.354 5.61 10.437 19.003 1.725 39.29-5.087 11.844-36.612 20.782-54.987 20.782H165.42s-34.638-26.308-35.43-33.25c-.793-6.955-31.88-2.792-33.83-5.85V215.933s31.474-14.338 39.428-22.117c7.948-7.764 76.183-114.11 76.183-114.11s1.44-5.685 1.44-13.6v-71.32s14.11-15.284 41.338-4.308c4.508 1.814 21.053 44.117 21.053 44.117s9.718 27.115 5.067 60.66c-4.56 32.984-17.187 81.404-17.187 81.404h164.79c29.873 0 62.06 52.78-.01 74.25z"/><glyph unicode="" d="M479.194 328.27C454.002 186.355 313.236 66.175 270.897 38.718c-42.348-27.455-80.973 10.994-94.983 40.054C159.88 111.938 111.81 291.64 99.23 306.537c-12.584 14.866-50.353-14.896-50.353-14.896L30.56 315.66s76.695 91.58 135.047 103.026c61.872 12.14 61.78-95.006 76.663-154.485 14.39-57.54 24.063-90.47 36.626-90.47 12.59 0 36.636 32.1 62.947 81.29 26.363 49.24-1.14 92.74-52.65 61.79 20.61 123.63 215.182 153.356 190 11.465z"/><glyph unicode="" d="M352.264 277.06V170.946L480 95.496v256L352.264 277.06zm-52.695 74.437H53.982c-11.77 0-21.313-9.542-21.313-21.313v-212.87c0-11.77 9.544-21.312 21.314-21.312h245.58c11.772 0 21.31 9.537 21.31 21.313v212.87c-.002 11.77-9.537 21.312-21.31 21.312"/><glyph unicode="" d="M412.316 125.95c-20.918 8.812-76.904 30.87-82.86 32.494-7.106 4.888-14.07 21.15-17.876 29.236-3.79.544-7.574 1.087-11.377 1.624.586 12.514 8.334 13.182 11.377 22.742 2.676 8.432.28 19.387 4.527 27.197 2.945 5.422 9.617 5.457 12.95 10.104 3.02 4.216 5.015 11.567 5.954 16.732 1.72 9.44 3.22 22.35-1.262 31.71-2.57 5.38-4.2 5.897-4.918 12.426-.868 7.914 2.33 33.72 2.466 39.3.326 14.477-.025 15.654-3.527 29.754 0 0-4.256 12.774-10.926 16.63l-13.295 2.3-8.22 7.615c-33.105 20.365-68.6 6.08-87.612-1.623-27.39-8.893-44.71-35.71-32.62-93.018 2.06-9.79-5.36-14.164-4.88-19.502 1.062-11.678 1.287-39.758 12.322-46.672 1.024-.642 8.854-2.605 8.803-2.068 1.085-11.375 2.167-22.754 3.247-34.125 2.756-7.553 9.366-8.383 11.288-19.063l-8.46-2.063c-3.8-8.08-10.77-24.34-17.874-29.23-5.955-1.624-61.94-23.683-82.86-32.495-19.05-8.035-34.544-21.346-34.544-47.36 0-26.013-.388-29.214-.058-45.957L447 31.713c0 17.816.058 33.316.058 46.878 0 23.55-15.69 39.328-34.742 47.36zm81.407 51.612c-11.002 4.635-40.446 16.237-43.58 17.09-3.738 2.57-7.4 11.125-9.402 15.377-1.99.28-3.98.57-5.98.85.31 6.58 4.386 6.932 5.986 11.96 1.408 4.433.148 10.2 2.383 14.304 1.55 2.85 5.057 2.87 6.81 5.313 1.587 2.22 2.638 6.084 3.13 8.8.9 4.966 1.69 11.76-.666 16.682-1.353 2.83-2.21 3.1-2.585 6.534-.46 4.163 1.224 17.735 1.296 20.67.172 7.615-.012 8.233-1.855 15.65 0 0-2.236 6.717-5.746 8.747l-6.99 1.207-4.322 4.007c-17.41 10.71-36.08 3.198-46.08-.854-14.402-4.676-23.513-18.78-17.152-48.922 1.085-5.148-2.82-7.45-2.566-10.257.56-6.14.677-20.91 6.48-24.546.54-.337 4.657-1.37 4.63-1.087l1.71-17.948c1.45-3.974 4.926-4.41 5.937-10.028l-4.45-1.084c-2-4.252-5.664-12.802-9.4-15.376-1.838-.5-12.73-4.7-23.644-9.022-2.174-.86 2.668-8.846 14.236-12.5 40.043-12.648 94.99-44.957 94.99-44.957l55.08-.175c0 9.37.03 17.52.03 24.654 0 12.385-8.252 20.68-18.273 24.91zm-475.448 0c11.002 4.635 40.447 16.237 43.58 17.09 3.74 2.57 7.4 11.125 9.403 15.377 1.993.28 3.983.57 5.983.85-.3 6.58-4.38 6.932-5.98 11.96-1.404 4.433-.144 10.2-2.38 14.304-1.55 2.85-5.06 2.87-6.81 5.313-1.59 2.22-2.64 6.084-3.132 8.8-.902 4.966-1.69 11.76.667 16.682 1.354 2.83 2.21 3.1 2.587 6.534.458 4.163-1.227 17.735-1.297 20.67-.172 7.615.012 8.233 1.855 15.65 0 0 2.237 6.717 5.746 8.747l6.994 1.207 4.32 4.007c17.414 10.71 36.083 3.198 46.082-.854 14.403-4.676 23.513-18.78 17.153-48.922-1.084-5.148 2.82-7.45 2.566-10.257-.56-6.14-.677-20.91-6.48-24.546-.54-.337-4.66-1.37-4.63-1.087l-1.71-17.948c-1.45-3.974-4.925-4.41-5.936-10.028l4.45-1.084c2-4.252 5.665-12.802 9.4-15.376 1.84-.5 12.73-4.7 23.644-9.022 2.173-.86-2.668-8.846-14.238-12.5-40.043-12.648-94.99-44.957-94.99-44.957L.03 128c0 9.37-.03 17.52-.03 24.654 0 12.383 8.25 20.68 18.27 24.908z"/><glyph unicode="" d="M461.996 351.998H50.002c-9.94 0-18-8.06-18-18V82.002c0-9.94 8.06-18 18-18h67.082s10.918 4.455 10.918 10.824v10.467c0 5.588-4.325 10.72-9.813 10.72h-11.67c-6.108 0-10.52 4.308-10.52 10.204v11.125s3.35 10.66 10.514 10.66h74.97c7.165 0 10.514-4.88 10.514-10.66v-11.125c0-5.896-4.41-10.203-10.514-10.203h-11.67c-5.488 0-9.813-5.133-9.813-10.72v-9.89c0-4.417 3.16-11.402 9.89-11.402H342.1c6.727 0 9.888 6.985 9.888 11.402v9.89c0 5.587-4.324 10.72-9.812 10.72h-11.67c-6.104 0-10.516 4.307-10.516 10.203v11.125s3.35 10.66 10.514 10.66h74.97c7.164 0 10.513-4.88 10.513-10.66v-11.125c0-5.896-4.41-10.203-10.515-10.203h-11.67c-5.49 0-9.814-5.133-9.814-10.72v-10.47c0-6.37 4.374-10.823 10.92-10.823H462c9.94 0 18 8.06 18 18v252c-.004 9.94-8.062 18-18.004 18zm-239.2-191.137H215.2c0 6.54.02 12.248.02 17.247 0 8.832-5.884 14.75-13.03 17.763-7.847 3.306-28.845 11.58-31.08 12.187-2.666 1.834-5.28 7.935-6.705 10.968-1.42.204-2.84.408-4.267.608.22 4.694 3.126 4.948 4.267 8.533 1.003 3.162.104 7.27 1.698 10.2 1.105 2.035 3.607 2.048 4.858 3.79 1.137 1.583 1.887 4.34 2.238 6.278.645 3.54 1.208 8.385-.474 11.897-.965 2.02-1.576 2.21-1.846 4.66-.325 2.97.875 12.65.926 14.744.12 5.43-.01 5.87-1.325 11.16 0 0-1.597 4.79-4.1 6.237l-4.986.86-3.08 2.856c-12.417 7.638-25.73 2.28-32.863-.608-10.27-3.336-16.77-13.396-12.233-34.89.774-3.672-2.01-5.313-1.83-7.315.398-4.38.483-14.914 4.623-17.507.38-.24 3.32-.976 3.3-.775l1.22-12.8c1.03-2.83 3.51-3.142 4.23-7.147l-3.173-.774c-1.427-3.034-4.04-9.13-6.706-10.97-2.23-.607-23.23-8.88-31.08-12.187-7.143-3.014-12.954-8.007-12.954-17.763 0-9.76-.145-10.96-.022-17.24h.818-7.48V319.5H222.8V160.86zm225.2 31.147H256.002V212.9h191.994v-20.897zm0 42.83H256.002v20.895h191.994v-20.9zm0 53.577H256.002v31.09h191.994v-31.09z"/><glyph unicode="" d="M341.438 405.093c4.086-16.444 4.494-17.816 4.115-34.7-.157-6.507-3.89-36.603-2.878-45.832.838-7.61 2.737-8.21 5.736-14.49 5.23-10.913 3.48-25.972 1.48-36.982-1.09-6.023-3.42-14.597-6.94-19.514-3.886-5.42-11.666-5.46-15.102-11.782-4.955-9.107-2.16-21.883-5.28-31.716-3.55-11.15-12.585-11.927-13.267-26.52 4.435-.626 8.848-1.26 13.267-1.895 4.44-9.43 12.56-28.395 20.848-34.095 6.947-1.896 72.236-27.62 96.633-37.898 22.216-9.37 40.514-27.77 40.514-55.23 0-15.815-.07-33.89-.07-54.667L31.608.834c-.385 19.527.067 23.26.067 53.6 0 30.334 18.068 45.857 40.284 55.23 24.395 10.275 89.687 36 96.63 37.894 8.285 5.704 16.41 24.662 20.846 34.09l9.865 2.406c-2.24 12.454-9.95 13.423-13.162 22.23-1.26 13.26-2.52 26.53-3.787 39.795.06-.626-9.07 1.665-10.266 2.413-12.87 8.062-13.13 40.81-14.37 54.428-.564 6.226 8.095 11.328 5.69 22.744-14.104 66.83 6.096 98.106 38.036 108.477 22.17 8.985 63.56 25.643 102.17 1.894l9.58-8.88 15.505-2.672c7.778-4.5 12.738-19.395 12.738-19.395"/><glyph unicode="" d="M388.92 302.163c-7.027 0-13.91-.61-20.617-1.732-16.737 54.69-68.557 94.56-129.936 94.56-74.92 0-135.636-59.366-135.636-132.605 0-6.533.51-12.955 1.45-19.246-3.595.412-7.23.69-10.933.69-50.938 0-92.237-40.385-92.237-90.17 0-49.81 41.3-90.172 92.236-90.172h130.76v64.52h-56.678l89.248 117.308L345.82 128.01H288V63.49h100.92c67.426 0 122.07 53.43 122.07 119.34.002 65.91-54.642 119.34-122.07 119.34z"/><glyph unicode="" d="M384 256L256 384 128 256h256zm-256-96L256 32l128 128H128z"/><glyph unicode="" d="M202.56 278.828l-55.69 55.69c28.067 27.735 66.522 44.82 109.13 44.82 42.995-.015 81.617-17.334 109.84-45.497C394 305.63 411.32 267 411.334 224h67.54C478.85 347.108 379.1 446.858 256 446.88c-61.13 0-116.63-24.702-156.896-64.598L47.707 433.68l.003-154.852h154.85zm163.848-164.053c-28.175-28.492-67.166-46.114-110.41-46.105-43.006.008-81.624 17.33-109.84 45.492-28.173 28.214-45.483 66.832-45.5 109.832H33.126C33.144 100.894 132.893 1.148 256 1.12c61.782.008 117.81 25.24 158.172 65.894l50.007-50.01V168.1h-151.1l53.322-53.325z"/><glyph unicode="" d="M402.127 224H199.585l-.003 72.49c0 28.3-10.74 54.276-28.52 73.284-17.707 19.012-43.015 31.258-70.918 31.235-27.905.02-53.21-12.23-70.917-31.24C11.442 350.765.707 324.79.705 296.49v-73.396h51.88v11.458L22.26 264.875h30.322v31.613c0 15.106 5.712 28.41 14.524 37.845 8.897 9.432 20.35 14.772 33.035 14.793 12.69-.02 24.13-5.36 33.03-14.793 8.826-9.436 15.44-22.738 15.43-37.845v-72.49h-38.73c-7.66 0-13.864-6.206-13.864-13.865v-164.2c0-7.66 6.21-13.868 13.87-13.868H402.13c7.664 0 13.87 6.21 13.87 13.87V210.13c0 7.66-6.205 13.867-13.87 13.867z"/><glyph unicode="" d="M224 92.186V-32L32 160l192 192V225.088C447.375 219.848 437.794 376.984 380.93 480 521.286 328.293 491.48 85.215 224 92.186z"/><glyph unicode="" d="M79.536 313.536c26.688 0 48.317 21.62 48.317 48.307 0 26.688-21.633 48.308-48.317 48.308-26.688 0-48.32-21.62-48.32-48.302s21.633-48.307 48.32-48.307zm1.096-40.14c-26.688 0-48.32-21.632-48.32-48.306 0-26.688 21.633-48.32 48.32-48.32 26.66 0 48.294 21.633 48.294 48.32 0 26.674-21.633 48.307-48.294 48.307zM79.536 134.49c-26.688 0-48.32-21.633-48.32-48.32s21.633-48.32 48.32-48.32 48.317 21.635 48.317 48.32c.003 26.687-21.63 48.32-48.317 48.32zM479.93 401.18H179.733v-82.19H479.93v82.19zM179.733 44.587h301.05v83.06h-301.05v-83.06zm0 219.96V181.5h301.05v83.046h-301.05z"/><glyph unicode="" d="M512 382.79c-18.84-8.353-39.082-14-60.33-16.54 21.686 13 38.343 33.586 46.186 58.116-20.298-12.04-42.778-20.78-66.705-25.49-19.16 20.415-46.46 33.17-76.67 33.17-58.01 0-105.04-47.03-105.04-105.04 0-8.232.93-16.25 2.72-23.938-87.3 4.382-164.7 46.2-216.51 109.753-9.04-15.51-14.223-33.552-14.223-52.803 0-36.444 18.544-68.596 46.73-87.433-17.22.546-33.417 5.27-47.577 13.14-.01-.44-.01-.88-.01-1.32 0-50.896 36.207-93.35 84.26-103-8.813-2.4-18.095-3.688-27.675-3.688-6.768 0-13.348.66-19.763 1.888 13.368-41.73 52.16-72.103 98.126-72.948-35.952-28.176-81.245-44.97-130.46-44.97-8.48 0-16.84.497-25.058 1.47C46.485 33.35 101.7 15.96 161.02 15.96c193.212 0 298.87 160.062 298.87 298.87 0 4.555-.105 9.085-.306 13.59 20.53 14.81 38.34 33.31 52.42 54.374z"/><glyph unicode="" d="M442.164 448.415l-141.79-.003L34.384 183.81 218.37-.184l261.464 261.466v149.463l-37.67 37.67zm-10.332-101.682c-14.828-14.833-38.88-14.833-53.71 0-14.833 14.827-14.833 38.876 0 53.707 14.827 14.84 38.882 14.84 53.71.004 14.832-14.834 14.833-38.885 0-53.71"/><glyph unicode="" d="M63.5 416.5h385v-385h-385v385z"/><glyph unicode="" d="M256.004 377.987l47.684-99.43c4.326-9.02 12.865-15.29 22.768-16.72l91.258-13.162-64.933-67.07c-6.17-6.375-9.2-15.157-8.28-23.983l10.296-98.526-82.57 52.256c-4.8 3.038-10.362 4.65-16.043 4.65h-.304l.13 261.985m.002 69.374L181.27 291.53 31.9 271.08l105.77-110.34L120.895.83 255.87 86.003h.305L391.06.64l-16.726 160.1 105.77 109.25-149.367 21.54-74.73 155.83z"/><glyph unicode="" d="M256.004 377.987l47.684-99.43c4.326-9.02 12.865-15.29 22.768-16.72l91.258-13.162-64.933-67.07c-6.17-6.375-9.2-15.157-8.28-23.983l10.296-98.526-82.57 52.256c-4.8 3.038-10.362 4.65-16.043 4.65h-.304c-5.668 0-11.22-1.605-16.01-4.63L157.182 59.2l10.32 98.41c.92 8.778-2.072 17.518-8.18 23.89L94.29 249.34l91.043 12.468c9.987 1.368 18.62 7.66 22.98 16.75l47.69 99.43m.003 69.373l-74.743-155.83-149.366-20.45 105.77-110.334L120.897.83 255.87 86.003h.305L391.06.64l-16.726 160.1 105.77 109.25-149.367 21.54-74.73 155.83z"/><glyph unicode="" d="M391.06.64l-16.726 160.1 105.77 109.248-149.367 21.542-74.73 155.83-74.744-155.83-149.366-20.454 105.77-110.336L120.897.83 255.87 86.003h.305L391.06.64z"/><glyph unicode="" d="M32.005 64.994H96.5V.496H32.005zm0 95.75h160.02V96.25H32.005zm0 95.752H288v-64.498H32.005zm0 95.75h351.99V287.75H32.005zm0 95.752h447.99V383.5H32.005z"/><glyph unicode="" d="M32.005 447.998H96.5V383.5H32.005zm0-95.75h160.02v-64.5H32.005zm0-95.752H288v-64.498H32.005zm0-95.752h351.99V96.247H32.005zm0-95.75h447.99V.494H32.005z"/><glyph unicode="" d="M160.187 61.865C144.062 61.865 131 48.8 131 32.675c0-16.127 13.062-29.188 29.187-29.188 16.113 0 29.188 13.062 29.188 29.188-.003 16.125-13.075 29.19-29.188 29.19zm95.73 0c-16.126 0-29.19-13.065-29.19-29.19 0-16.127 13.064-29.188 29.19-29.188 16.108 0 29.18 13.062 29.18 29.188 0 16.125-13.07 29.19-29.18 29.19zm-.008-48.09c-10.44 0-18.9 8.46-18.9 18.892 0 10.447 8.46 18.905 18.894 18.905 10.434 0 18.89-8.458 18.89-18.905 0-10.432-8.456-18.89-18.89-18.89zM32.48 416V96h449.246v320H32.48zm409.355-279.648H73.713l-.02 238.02h366.812v-.01h1.33V136.35zm-90.072-74.487c-16.126 0-29.188-13.065-29.188-29.19 0-16.127 13.063-29.188 29.188-29.188 16.112 0 29.183 13.062 29.183 29.188-.006 16.125-13.07 29.19-29.183 29.19zm-.008-48.09c-10.436 0-18.894 8.46-18.894 18.892 0 10.447 8.46 18.905 18.9 18.905 10.438 0 18.896-8.458 18.896-18.905-.004-10.432-8.462-18.89-18.895-18.89z"/><glyph unicode="" d="M470.7 72.193l-2.688 2.688.006.008L360.505 182.41c14.938 25.73 23.612 55.563 23.816 87.45.63 97.615-77.98 177.243-175.593 177.857l-1.168.002c-97.06-.01-176.064-78.39-176.69-175.6-.62-97.61 78-177.24 175.597-177.86l1.155-.006c32.44 0 62.847 8.79 89 24.075L404.03 10.9l.015.01 2.688-2.69c8.125-8.122 21.293-8.113 29.41 0l34.562 34.558c8.114 8.117 8.117 21.292-.005 29.415zM300.39 177.58c-24.834-24.67-57.78-38.252-92.768-38.252h-.874c-72.59.467-131.27 59.908-130.813 132.503.465 72.13 59.516 130.817 131.626 130.82h.88c35.17-.22 68.15-14.124 92.857-39.15 24.704-25.03 38.184-58.18 37.964-93.355-.227-35.016-14.03-67.894-38.87-92.564z"/><glyph unicode="" d="M33.736 60.543a60.868 61.532 180 1 0 121.736 0 60.868 61.532 180 1 0-121.736 0zM327.928-.987h-86.23c0 116.113-93.108 210.242-207.962 210.242v87.168c162.486 0 294.192-133.15 294.192-297.41zm60.87 0c0 198.243-158.96 358.948-355.062 358.948v89.74c245.118 0 443.826-200.882 443.826-448.683h-88.764z"/><glyph unicode="" d="M32.005 447.998h447.99V383.5H32.005zm0-95.75h447.99v-64.5H32.005zm0-95.752h447.99v-64.498H32.005zm0-95.752h447.99V96.247H32.005zm0-95.75h447.99V.494H32.005z"/><glyph unicode="" d="M224.01 351.904h-67.942l99.944 121.075 99.925-121.08h-67.932V96.092h67.93L255.99-24.98 156.063 96.098h67.943l.004 255.807z"/><glyph unicode="" d="M383.904 255.996v67.942l121.074-99.944L383.9 124.07V192l-255.803.002V124.07L7.022 224.016l121.076 99.926V256l255.806-.004z"/><glyph unicode="" d="M288 355.814V480l192-192L288 96v126.912C64.625 228.152 74.206 71.016 131.07-32-9.287 119.707 20.52 362.785 288 355.814z"/><glyph unicode="" d="M346.842 54.61c21.076 11.558 39.27 26.126 54.4 43.7 15.198 17.574 26.91 37.945 35.284 61.008 7.67 21.094 11.47 40.73 11.47 64.424 0 2.285-.104 192.828-.104 192.828H256V224.552h93.728c-.6-26.107-5.876-45.195-15.728-63.12-10.163-18.526-29.167-32.828-58.054-42.75l-3.2-1.093V31.81l5.312.703c24.7 3.168 47.638 10.555 68.784 22.096M51.917 118.3l-3.17-1.09V31.43l5.315.704c24.666 3.168 47.64 10.556 68.79 22.097 21.075 11.56 39.23 26.13 54.393 43.7 15.206 17.58 26.95 37.95 35.288 61.01 7.67 21.097 11.47 40.73 11.47 64.428l-.077 192.825H32.006V224.17h93.728c-.563-26.106-5.872-45.193-15.724-63.12-10.17-18.525-29.206-32.827-58.093-42.75"/><glyph unicode="" d="M133.16 393.39c-21.076-11.558-39.27-26.126-54.4-43.7-15.198-17.574-26.91-37.946-35.284-61.008-7.67-21.094-11.47-40.728-11.47-64.423 0-2.29.104-192.83.104-192.83h191.892V223.44h-93.728c.6 26.107 5.876 45.195 15.728 63.122 10.163 18.523 29.167 32.826 58.054 42.75l3.2 1.09v85.778l-5.312-.704c-24.7-3.167-47.638-10.555-68.784-22.095m294.925-63.69l3.17 1.09v85.78l-5.315-.704c-24.666-3.168-47.64-10.555-68.79-22.097-21.075-11.558-39.23-26.126-54.393-43.7-15.206-17.575-26.95-37.946-35.288-61.01C259.8 267.97 256 248.333 256 224.64l.076-192.825h191.92V223.83H354.27c.563 26.106 5.872 45.194 15.724 63.12 10.17 18.525 29.206 32.827 58.093 42.75"/><glyph unicode="" d="M461.998 287.998h-44.865v74.99l-85.277 85.21H96.004V288h-46c-9.94 0-18-8.06-18-18V82.002c0-9.94 8.06-18 18-18h46v-64.5h321.128v64.5h44.865c9.94 0 18 8.06 18 18v187.996c0 9.94-8.058 18-18 18zM96.004 97.5h-31.75v94.502h31.75V97.5zM319.37 415.375l64.453-63.377H319.37v63.377zm64.628-383.373H128.004v160h255.994v-160zm0 255.996H128.004v128h159.998v-96h95.996v-32zm64.3-190.498h-31.165v94.502H448.3V97.5zm-288.17-1.498H351.5V62.63H160.127zm0 65.435H351.5v-33.373H160.127z"/><glyph unicode="" d="M427.182 320.352H325.63c6.395 3.992 12.694 8.69 18.574 14.393 30.4 29.163 39.27 69.303 19.804 89.555-7.468 7.76-17.99 11.484-29.858 11.484-19.118 0-41.686-9.68-60.437-27.676-7.68-7.383-13.96-15.47-18.775-23.762-4.834 8.293-11.11 16.378-18.793 23.762-18.75 18-41.3 27.676-60.42 27.676-11.88 0-22.434-3.724-29.902-11.484-19.458-20.252-10.587-60.392 19.814-89.555 5.896-5.703 12.166-10.4 18.606-14.393H64.003v-98.164h32V.14h319.993v222.048h32v98.164h-20.814zm-154.97 33.606c2.513 11.443 10.075 23.888 20.734 34.136 15.29 14.705 31.298 19.92 41.21 19.92 2.606 0 7.36-.37 9.83-2.944 2.662-2.773 3.327-8.96 1.71-16.206-2.524-11.47-10.087-23.908-20.732-34.146-15.303-14.69-31.298-19.905-41.196-19.905-2.607 0-7.36.383-9.845 2.943-2.675 2.773-3.313 8.958-1.71 16.202zm3.558-37.615V224h-41.668v92.343h41.668zm-111.633 72.52c-1.6 7.245-.954 13.433 1.71 16.207 2.48 2.573 7.22 2.943 9.872 2.943 9.88 0 25.89-5.214 41.18-19.933 10.66-10.24 18.21-22.686 20.73-34.122 1.6-7.244.95-13.43-1.727-16.202-2.47-2.56-7.238-2.943-9.845-2.943-9.89 0-25.867 5.214-41.183 19.905-10.646 10.24-18.21 22.676-20.744 34.146zm247.76-260.86H275.77V3.873h-41.668V128H100.935v32.167h133.167v46h41.668v-46h136.126V128z"/><glyph unicode="" d="M255.982 360.004l163-231.994-325.964-.008z"/><glyph unicode="" d="M392.004 223.983l-231.994 163-.008-325.965z"/><glyph unicode="" d="M119.995 223.983l231.993 163 .008-325.965z"/><glyph unicode="" d="M255.982 87.996l163 231.994-325.964.008z"/><glyph unicode="" d="M415.996 255.998H287.998v128h-63.996v-128h-128v-63.996h128v-128h63.996v128h127.998z"/><glyph unicode="" d="M96.002 451.33L436.998 224 96.002-3.33v454.66z"/><glyph unicode="" d="M461.173 351.998H351.786l-25.91 53.007s-5.166 10.993-18.42 10.993h-102.89c-14.413 0-19.23-10.91-19.23-10.91L160.206 352H49.37c-9.94 0-18-8.06-18-18V82.262c0-9.94 8.06-18 18-18h411.8c9.942 0 18 8.06 18 18v251.736c0 9.94-8.058 18-18 18zM255.27 105.43c-60.683 0-110.006 49.37-110.006 110.016 0 60.665 49.34 110.012 110.007 110.012 60.66 0 110.028-49.347 110.028-110.012 0-60.655-49.365-110.016-110.022-110.016zm0 176.026c-36.396 0-66.006-29.597-66.006-66.01 0-36.39 29.61-66 66.007-66 36.41 0 66.01 29.61 66.01 66 0 36.413-29.6 66.01-66.01 66.01z"/><glyph unicode="" d="M351.528 188.046c-6.412 3.97-16.018 2.87-21.464-2.468l-42.484-42.472c-5.434-5.34-14.086-5.34-19.425 0l-95.473 95.506c-5.345 5.346-5.345 14.08 0 19.424l40.016 40.003c5.353 5.34 6.13 14.76 1.798 20.93l-72.8 103.21c-4.3 6.16-12.725 7.37-18.627 2.67 0 0-56.798-45.066-56.798-86.47 0-169.442 137.367-306.795 306.795-306.795 41.425 0 81.71 76.01 81.71 76.01 3.54 6.664 1.192 15.41-5.22 19.38l-98.034 61.065z"/><glyph unicode="" d="M440.316 414.613c12.85-6.288 24.047-15.243 32.25-26.24 17.27-23.15 22.12-54.687 14.42-93.734-7.78-39.52-25.21-72.87-50.584-97.028-4.64-4.852-9.61-9.373-14.902-13.54-27.178-21.4-61.498-32.714-99.254-32.714h-120.03L169.936 0h-66.212l5.043 23.15h23.064l32.28 151.363h94.14c90.125 0 165.47 55.538 185.63 149.967C466.74 431.398 390.08 480 324.17 480H99.533L0 23.15h76.016L64-32h131.83l32.28 151.363h94.136c90.125 0 165.47 55.54 185.63 149.968 16.857 78.84-20.402 125.97-67.56 145.288zM211.172 386.96h64.565c32.296 0 53.8-27.77 44.394-62.48-8.062-34.72-41.69-62.487-75.32-62.487h-61.873l28.24 124.966z"/><glyph unicode="" d="M96.002 415.333h96V32.666h-96v382.667zm225.41 0h94.584V32.666h-94.583v382.667z"/><glyph unicode="" d="M68.436 311.144h22.88v113.628H72.67c0-.99-.272-2.505-.858-4.54-.99-3.39-2.465-6.123-4.367-8.16-2.813-2.974-6.48-4.956-10.958-5.947-2.813-.63-7.74-1.1-14.763-1.42v-15.192h26.712v-78.37zm-3.75-92.14c-11.844-8.467-19.346-16.45-22.533-24.033-3.296-6.72-5.033-14.17-5.252-22.312h77.73v19.666H65.09c1.393 2.357 3.135 4.396 5.197 6.16 2.063 1.797 5.895 4.664 11.49 8.63l8.926 6.323c7.525 5.33 12.938 10.153 16.233 14.494 5.01 6.523 7.528 13.985 7.528 22.385 0 10.96-3.563 19.76-10.663 26.406-7.1 6.66-16.66 9.98-28.663 9.98-15.19 0-25.774-5.652-31.723-16.985-3.14-5.95-4.876-13.746-5.25-23.392h21.674c.27 6.363 1.1 11 2.492 13.933 2.464 5.053 7.07 7.584 13.88 7.584 4.954 0 8.76-1.596 11.41-4.77 2.65-3.19 3.99-7.168 3.99-11.978 0-5.894-2.33-11.32-6.967-16.275-3.023-3.187-9.667-8.452-19.956-15.807zM110.15 86.538c-4.18 3.83-7.363 5.73-9.59 5.73 2.946 1.147 5.812 3.298 8.546 6.433 4.34 5.04 6.515 11.2 6.515 18.52 0 10.343-3.61 18.566-10.9 24.73-7.26 6.134-16.824 9.216-28.72 9.216-6.38 0-11.79-.777-16.157-2.33-4.396-1.527-8.2-3.78-11.39-6.673-4.284-4.125-7.423-8.6-9.432-13.45-1.875-5.545-2.946-11.412-3.16-17.575h22.8c-.104 6.11 1.183 10.985 3.89 14.656s6.937 5.494 12.7 5.494c5.01 0 8.895-1.5 11.65-4.447 2.76-3 4.152-6.86 4.152-11.573 0-7.342-2.706-12.164-8.12-14.576-3.134-1.44-8.653-2.19-16.56-2.303v-17.5c8.066 0 13.984-.77 17.767-2.304 6.59-2.76 9.912-8.2 9.912-16.37 0-6.163-1.796-10.905-5.36-14.2-3.562-3.27-7.716-4.897-12.512-4.897-7.823 0-13.21 2.974-16.156 8.976-1.6 3.276-2.41 7.4-2.41 12.36h-23.98c.402-9.894 2.385-17.87 6.002-23.98 6.83-11.495 19.05-17.228 36.625-17.228 14.256 0 25.027 3.986 32.31 11.944 7.29 7.958 10.94 17.2 10.94 27.73-.004 9.99-3.14 17.867-9.356 23.63zm369.995 314.756H179.95v-82.19h300.187l.008 82.19zM179.95 44.704H481v83.06H179.95v-83.06zm0 219.96v-83.046H481v83.045H179.95z"/><glyph unicode="" d="M409.947 370.39c-12.927 12.917-33.873 12.917-46.794 0-12.92-12.922-12.92-33.87 0-46.794v.006c29.647-29.682 44.347-68.266 44.382-107.154-.035-38.892-14.73-77.478-44.382-107.157-29.673-29.642-68.26-44.333-107.15-44.37-38.895.037-77.48 14.73-107.145 44.376-29.653 29.68-44.353 68.267-44.39 107.158.037 38.895 14.732 77.473 44.385 107.15 12.92 12.92 12.926 33.87.005 46.79-12.92 12.92-33.87 12.92-46.79.004-42.455-42.422-63.812-98.335-63.77-153.94-.038-55.607 21.314-111.52 63.77-153.945C144.488 20.06 200.4-1.297 256.006-1.26h.142c55.563-.003 111.41 21.35 153.8 63.765 42.444 42.425 63.813 98.338 63.767 153.944.036 55.6-21.32 111.51-63.768 153.94zM256.704 191.357c18.27 0 33.085 14.812 33.085 33.083v188.838c0 18.27-14.82 33.085-33.09 33.085-18.275 0-33.087-14.816-33.087-33.085V224.442c0-18.27 14.81-33.085 33.086-33.085z"/><glyph unicode="" d="M90.68 160.51l36.062-36.063 126.976 126.98 126.973-126.98 36.07 36.063-163.04 163.04z"/><glyph unicode="" d="M196.73 60.963l-36.064 36.062L287.643 224 160.667 350.976l36.062 36.062L359.762 224z"/><glyph unicode="" d="M317.207 60.963l36.063 36.062L226.29 224l126.98 126.975-36.063 36.062L154.167 224z"/><glyph unicode="" d="M416.754 287.49l-36.063 36.063-126.97-126.98-126.973 126.98L90.68 287.49l163.036-163.04z"/><glyph unicode="" d="M504.98 223.994l-121.076 99.944v-67.942h-95.9V351.9h67.933l-99.925 121.08-99.945-121.076h67.943v-95.906h-95.912v67.944L7.02 224.016 128.1 124.07v67.932h95.91V96.098h-67.945L255.99-24.98 355.936 96.1h-67.932V192H383.9v-67.93z"/><glyph unicode="" d="M96.002 255.998h319.994v-63.996H96.002z"/><glyph unicode="" d="M256 447.998c-83.058 0-150.374-67.286-150.374-150.374 0-73.704 64.874-169.622 116.446-249.79 39.066-60.728 29.33-61.07 67.853-.003 50.575 80.177 116.45 176.09 116.45 249.78C406.375 380.652 339.058 448 256 448zm0-222.213c-39.67 0-71.858 32.16-71.858 71.858 0 39.7 32.188 71.84 71.858 71.84s71.857-32.16 71.857-71.86c0-39.698-32.188-71.838-71.857-71.838z"/><glyph unicode="" d="M256.398 162.378c-4.897 0-9.814 1.545-13.934 4.642L32.156 324.88V90.677c0-16.487 13.413-27.675 29.9-27.675h388.676c16.492 0 29.263 11.188 29.263 27.675V324.88L270 167.02c-4.118-3.097-8.712-4.642-13.602-4.642zm194.884 189.64l-194.884-146.3-194.885 146.3z"/><glyph unicode="" d="M255.875 451.175L63.605 334.688V113.32l49.933-29.4v221.37l142.38 86.565 142.49-86.43.6-.343-.06-220.832 49.446 29.07v221.368l-192.52 116.487zM281.322 314.9V56.097L255.875 40.53l-25.477 15.624v258.543l-65.943-40.617V52.767l91.42-55.942 92.2 56.333v221.076L281.322 314.9z"/><glyph unicode="" d="M402.127 223.937h-38.71l-.005 64.06c0 30.668-11.64 58.793-30.863 79.346-19.16 20.557-46.45 33.753-76.548 33.73-30.104.023-57.396-13.173-76.55-33.73-19.234-20.553-30.872-48.68-30.877-79.345v-64.06h-38.71c-7.66 0-13.87-6.206-13.87-13.865v-164.2c0-7.66 6.21-13.87 13.87-13.87H402.12c7.666 0 13.87 6.21 13.87 13.87V210.07c0 7.66-6.204 13.867-13.87 13.867zm-89.723 0H199.588v64.06c0 17.7 6.7 33.357 17.115 44.5 10.497 11.136 24.163 17.545 39.304 17.567 15.13-.022 28.798-6.427 39.287-17.566 10.416-11.143 17.11-26.8 17.11-44.5v-64.06z"/><glyph unicode="" d="M221.533 116.203L184.5 81.873c-8.995-8.32-20.297-12.08-31.93-11.68-11.11.453-21.96 5.06-30.33 14.056l-3.38 3.662c-8.304 8.996-12.085 20.234-11.68 31.698.462 11.304 5.052 22.16 14.053 30.525l85.934 79.644c5.046 4.66 10.772 7.89 16.835 9.762 0 8.613.088 61.287.088 72.72-23.642-2.68-46.787-12.71-65.5-30.063l-85.936-79.64c-23.266-21.53-35.834-50.785-36.92-80.225-1.156-29.4 9.046-59.642 30.7-83.012l3.384-3.65c21.434-23.15 50.545-35.81 80.027-36.92l.164-.006c29.32-1.118 59.62 8.967 83.06 30.702l37.03 34.31c14.473 13.413 15.334 36.02 1.92 50.493-13.408 14.48-36.017 15.342-50.49 1.945zm254.723 209.645c1.204 29.423-9.102 59.554-30.66 82.823l-3.383 3.67c-21.592 23.32-50.937 35.83-80.354 36.917-29.42 1.152-59.6-9.082-82.9-30.69l-35.34-32.747c-14.477-13.43-15.34-36.04-1.928-50.514s36.02-15.337 50.497-1.925l35.336 32.75c9.028 8.333 20.23 12.1 31.603 11.715 11.4-.483 22.283-5.09 30.62-14.085l3.417-3.655c8.302-9.012 12.08-20.215 11.682-31.537-.47-11.435-5.097-22.336-14.097-30.703l-85.932-79.628c-5.01-4.634-10.73-7.86-16.825-9.736v-72.71c23.513 2.7 46.64 12.63 65.39 30.03l85.968 79.63c23.34 21.638 35.84 50.98 36.898 80.403zM119.3 339.488c2.928-2.93 6.767-4.395 10.605-4.395s7.678 1.464 10.606 4.394c5.86 5.858 5.86 15.355 0 21.213l-96.19 96.197c-5.857 5.858-15.355 5.858-21.213 0-5.857-5.858-5.857-15.355 0-21.213l96.2-96.197zm72.7 12.606c8.284 0 15 6.716 15 15v79.34c0 8.285-6.716 15-15 15s-15-6.715-15-15v-79.34c0-8.284 6.716-15 15-15zm-65.66-64.182c0 8.284-6.715 15-15 15H32c-8.284 0-15-6.716-15-15s6.716-15 15-15h79.34c8.285 0 15 6.716 15 15zM392.62 108.95c-5.858 5.856-15.356 5.856-21.214 0-5.858-5.858-5.858-15.356 0-21.214l96.2-96.196c2.93-2.93 6.768-4.395 10.606-4.395s7.678 1.465 10.606 4.394c5.858 5.85 5.858 15.35 0 21.21l-96.198 96.2zm-72.703-12.61c-8.285 0-15-6.715-15-15V2.003c0-8.285 6.715-15 15-15s15 6.715 15 15v79.34c0 8.284-6.717 15-15 15zm65.657 64.18c0-8.282 6.716-15 15-15h79.342c8.283 0 15 6.718 15 15s-6.717 15-15 15h-79.343c-8.284 0-15-6.713-15-15z"/><glyph unicode="" d="M221.533 116.203L184.5 81.873c-8.995-8.32-20.297-12.08-31.93-11.68-11.11.453-21.96 5.06-30.33 14.056l-3.38 3.662c-8.304 8.996-12.085 20.234-11.68 31.698.462 11.304 5.052 22.16 14.053 30.525l85.934 79.644c9.028 8.334 20.233 12.1 31.64 11.7 11.367-.468 22.25-5.077 30.62-14.075l3.38-3.67 52.42 48.59-3.385 3.652-6.175 6.646c-2.637 2.84-5.61 5.156-8.84 6.96-19.25 14.6-42.242 22.474-65.31 23.32-29.45 1.155-59.625-9.097-82.928-30.707l-85.94-79.64c-23.27-21.53-35.837-50.785-36.92-80.225-1.16-29.4 9.043-59.64 30.7-83.01l3.38-3.65C91.247 12.52 120.358-.14 149.84-1.25l.164-.006c29.32-1.117 59.624 8.968 83.062 30.703l37.03 34.314c14.476 13.417 15.337 36.025 1.922 50.497-13.408 14.48-36.017 15.34-50.49 1.944zM445.597 408.67l-3.384 3.67c-21.592 23.318-50.937 35.823-80.354 36.91-29.42 1.153-59.6-9.08-82.9-30.69l-35.34-32.746c-14.477-13.428-15.34-36.038-1.928-50.513s36.02-15.33 50.497-1.92l35.336 32.75c9.028 8.333 20.23 12.1 31.603 11.715 11.4-.483 22.283-5.09 30.62-14.085l3.417-3.655c8.302-9.012 12.08-20.215 11.682-31.537-.47-11.435-5.097-22.336-14.097-30.703l-85.932-79.63c-8.995-8.317-20.265-12.1-31.93-11.686-11.11.445-21.927 5.043-30.295 14.06l-3.387 3.65-52.42-48.585 3.38-3.654c21.4-23.132 50.51-35.81 79.994-36.896l.195-.008c29.32-1.118 59.59 8.954 83.024 30.702l85.967 79.63c23.34 21.64 35.84 50.98 36.9 80.403 1.205 29.426-9.1 59.556-30.658 82.825z"/><glyph unicode="" d="M351.996 415.998V237.18L96.002 448V0l255.994 210.82V32.002h96v383.996z"/><glyph unicode="" d="M482.178 233.834L342.742 379.832c-2.575 2.665-6.122 4.166-9.828 4.166H45.484c-7.56 0-13.687-6.126-13.687-13.688V78.315c0-7.562 6.126-13.688 13.687-13.688h287.43c3.706 0 7.253 1.502 9.828 4.166L482.178 214.79c5.146 5.308 5.146 13.737 0 19.044zM327.112 95.93H64.002v256.194h263.11l126.18-127.81L327.112 95.93zm-59.685 229.382l-73.664-74.96-73.67 74.96-26.033-25.588 74.118-75.412-74.118-75.418 26.034-25.588 73.67 74.964 73.663-74.964 26.037 25.588-74.115 75.418 74.11 75.412z"/><glyph unicode="" d="M29.815 214.79L169.25 68.794c2.576-2.664 6.123-4.166 9.83-4.166h287.428c7.562 0 13.688 6.127 13.688 13.688V370.31c0 7.56-6.126 13.688-13.688 13.688h-287.43c-3.705 0-7.252-1.5-9.827-4.166L29.82 233.834c-5.146-5.307-5.146-13.736 0-19.043zm28.886 9.522l126.18 127.81h263.11V95.93H184.88L58.7 224.312zm159.83 75.412l74.12-75.412-74.116-75.418 26.037-25.588 73.663 74.964 73.667-74.964 26.032 25.588-74.116 75.418 74.118 75.412-26.033 25.588-73.67-74.96-73.66 74.96z"/><glyph unicode="" d="M48.073.002l79.01.017.01 45.523 49.23.013.008 50.45 47.68-.01-.005 45.555 50.567.01 37.57 32.034c44.066-12.065 92.903-1.09 127.278 33.167 51.184 51.348 50.762 134.8-.91 186.7-51.782 51.555-135.24 51.98-186.4.613-34.485-34.34-45.464-83.307-33.298-127.415L32 79.86l.29-64.07C32.356 4.206 36.602.243 48.072.002zM361.38 316.957c-13.714 13.92-13.843 36.085-.298 49.49 13.64 13.763 35.798 13.644 49.488-.3 13.755-13.5 13.886-35.67.313-49.5-13.61-13.347-35.775-13.218-49.503.31z"/><glyph unicode="" d="M295.446 31.498H108.404l3.648 21.205c21.455 8.767 42.38 14.598 62.836 17.525l91.34 305.806c-9.793 1.964-45.406 14.313-54.793 18.273l5.114 21.19h187.04l-4.4-21.19c-22.02-8.825-58.624-17.432-62.835-18.273L245.05 70.228c10.51-2.12 47.09-13.814 54.07-17.525l-3.674-21.205z"/><glyph unicode="" d="M335.49 115.19c-9.558 0-47.096-58-67.553-58-5.46 0-8.17 4.788-8.17 9.56 0 10.908 7.506 27.978 11.58 38.215l49.13 133.01c24.56 66.192-6.834 83.923-36.15 83.923-39.573 0-75.063-19.786-102.333-45.708-5.076-5.068-16.97-16.65-26.377-27.822-7.69-9.13-6.813-18.64-2.32-21.406 5.626-3.464 14.265 3.05 18.405 7.886 14.99 17.518 34.313 42.02 50.52 42.02 5.463 0 11.606-6.137 6.833-18.408l-47.737-120.078c-4.796-11.606-27.983-67.556-27.983-100.294 0-25.93 17.05-37.517 41.61-37.517 68.91 0 148.724 84.61 148.724 104.39-.007 6.15-4.78 10.23-8.18 10.23zm-13.662 332.233c-30.018 0-55.938-24.553-55.938-54.568 0-27.98 18.435-46.41 46.398-46.41 30.703 0 56.615 23.196 56.615 54.59 0 27.98-19.766 46.388-47.075 46.388z"/><glyph unicode="" d="M352.38 251.944c19.51 0 35.293 16 35.293 35.758 0 19.743-15.784 35.765-35.292 35.765-19.45 0-35.27-16.022-35.27-35.765 0-19.758 15.826-35.758 35.276-35.758zM244.8 175.92l-88.126 94.967-59.926-112.3v-30.94h297.645C356.49 160.777 276.54 231.63 276.54 231.63l-31.74-55.71zM32 384V64.218h447.5V384H32zm41.072-279.458l-.02 237.854H438.44v-.012h1.32l.005-237.842H73.073z"/><glyph unicode="" d="M395.84 276.128v83.904h-55.938v-27.968L256 415.968 32.255 191.932H96.5V31.598h128.05v128h63.95v-128h128v160.334h63.242z"/><glyph unicode="" d="M415.46 383.458c-42.594 42.593-99.225 66.05-159.46 66.05-60.235 0-116.865-23.457-159.458-66.05C53.95 340.865 30.492 284.235 30.492 224S53.95 107.134 96.542 64.54C139.135 21.95 195.765-1.51 256-1.51s116.866 23.46 159.46 66.05 66.05 99.225 66.05 159.46-23.458 116.865-66.05 159.458zM256 31.092C149.63 31.092 63.093 117.63 63.093 224c0 106.37 86.538 192.907 192.907 192.907 106.37 0 192.908-86.538 192.908-192.907 0-106.37-86.538-192.908-192.908-192.908zm86.29 325.394c-21.753 19.24-51.032 28.86-87.84 28.86-34.987 0-63.24-9.506-84.76-28.518-21.525-19.015-27.814-41.74-29.486-68.966l55.262.27c4.107 19.012 9.93 25.195 20.88 34.475 10.952 9.275 24.564 13.917 40.844 13.917 16.882 0 30.305-4.45 40.27-13.346 9.958-8.898 14.942-19.586 14.942-32.056 0-8.976-2.816-17.19-8.44-24.64-3.652-4.717-14.83-14.68-33.54-29.888-18.71-15.212-31.185-28.917-37.42-41.083-6.238-12.17-9.277-27.14-9.125-35.502h64.113c-.307 17.643 10.188 26.305 23.728 37.56 26.158 21.767 43.235 38.953 51.22 51.58 7.986 12.623 11.98 26.01 11.98 40.154-.002 25.55-10.88 47.947-32.627 67.19zM223.878 128.01h64.113V63.904h-64.11z"/><glyph unicode="" d="M32.002 447.998h128v-128h-128zm159.998 0h128v-128H192zm159.996 0h128v-128h-128zM32.002 288h128V160h-128zM192 288h128V160H192zm159.996 0h128V160h-128zM32.002 128.002h128v-128h-128zm159.998 0h128v-128H192zm159.996 0h128v-128h-128z"/><glyph unicode="" d="M279.533 448h-133.97c-60.06 0-116.586-45.503-116.586-98.21 0-53.864 40.94-97.334 102.044-97.334 4.25 0 8.38.085 12.427.376-3.965-7.593-6.8-16.144-6.8-25.02 0-14.97 8.05-27.106 18.233-37.013-7.694 0-15.12-.23-23.228-.23C57.258 190.572 0 143.192 0 94.062 0 45.677 62.77 15.41 137.167 15.41c84.812 0 131.652 48.122 131.652 96.514 0 38.8-11.45 62.036-46.85 87.067-12.106 8.57-35.264 29.42-35.264 41.67 0 14.36 4.1 21.438 25.714 38.327 22.157 17.312 37.837 41.65 37.837 69.958 0 33.704-15.01 66.55-43.184 77.387h42.477L279.53 448zM232.74 120.27c1.063-4.485 1.642-9.103 1.642-13.813 0-39.1-25.196-69.655-97.487-69.655-51.42 0-88.558 32.552-88.558 71.65 0 38.32 46.063 70.222 97.48 69.666 12-.127 23.186-2.058 33.336-5.345 27.913-19.414 47.94-30.38 53.587-52.502zm-82.33 145.842c-34.52 1.032-67.32 38.613-73.277 83.93-5.958 45.333 17.185 80.02 51.694 78.995 34.505-1.037 67.318-37.407 73.278-82.73 5.954-45.33-17.194-81.228-51.696-80.195zM416 352v96h-32v-96h-96v-32h96v-96h32v96h96v32h-96z"/><glyph unicode="" d="M248.023 234.684l-.673 1.125-.787 2.242.56.673-.337 1.572-2.022-1.574.45-1.35.56-2.133h-1.01v-1.01l1.125-.675zm-6.068 1.575l.338-1.58 1.686.786.44 1.35-.672.672zm2.135 8.87l.336.9-.897.9-1.8.11.11-1.347zm12.248 8.876l.56-.223.114.896-.674.34.447 1.122-2.02-1.123.785-1.684zm4.94 3.26l-1.12.56-.788-.788 1.46-.224zM256 449.076c-124.305 0-225.078-100.77-225.078-225.08S131.695-1.075 256-1.075c124.303 0 225.078 100.77 225.078 225.078S380.303 449.08 256 449.08zM62.028 224c0 41.132 12.838 79.24 34.674 110.627l2.504-1.877-1.513-6.073 5.56-1.52-1.014 8.092 4.55.5v10.622h4.55s.8-2.062 1.64-4.224c.924-2.376 1.9-4.88 1.9-4.88l5.055-5.568s-6.07-1.508-8.09-1.508c-2.02 0-1.012-8.093-1.012-8.093l7.076-2.525 4.572 8.443 10.6 11.782 5.057 15.674 9.612 9.11-5.565 4.033 6.073 4.046.508 5.568-17.7-5.055-.56.663c9.64 8.19 20.078 15.456 31.202 21.654l8.3-3.613-5.56-10.623h-11.13l-2.026-9.603h9.106l13.15 8.095 9.106 9.095 1.513 8.6-13.15 1.01 9.1 6.07 8.6-1.52-1.515-9.1L198.84 399l2.026-5.566 2.53-8.095-6.577-8.098-7.088-6.572-10.623 1.52 5.06-10.617-9.61 1.517-16.18-16.69 4.044-5.566 13.15 1.018 11.127 3.546 14.168 1.507 6.57 1.52s0 4.045-.51 6.57c-.5 2.53 5.06-.5 5.06-.5l6.07 3.533 4.554 14.167 16.688 7.595-2.525 4.037 4.046 5.063-13.147 2.026 3.537 5.055-16.692 5.57h-8.6l3.036 7.58 3.54 3.55-.284.286c14.076 3.244 28.72 5.018 43.787 5.018 23.48 0 45.98-4.17 66.81-11.816l-.508-1.19-8.424.562v-5.065l3.377-2.245v-4.494l2.805-3.93-10.11 6.176-6.736-3.37 3.367-7.874 1.687-8.986 4.493-5.064 10.665-1.684-2.244-4.493-2.25-6.75 9.557-6.177-.563-2.81-17.98 15.178-1.115-5.626 7.86-7.864 4.49-1.685-10.11-2.245-1.126-5.064-7.297 7.317-4.5 9.548-1.69 9.56-4.5-5.617 3.376-13.488 5.616-3.944-2.24-12.913-3.378 1.687.562-6.752-5.063.564-5.052 7.316h-6.174l-8.995 1.125-9-.562-8.42-6.752-5.624-9.547L235.763 310l-1.127-5.055v-6.19l2.81-6.177 5.622 4.492 1.683-3.367 2.815-5.056.564-1.136 2.81-3.37 5.06 3.368-.564 12.367 6.177 7.87s.31 1.333.662 2.87c.48 2.046 1.023 4.433 1.023 4.433l2.242 6.19 3.94-.563-1.12-5.065-2.26-11.233 10.69 1.125 3.935-1.125-8.435-2.255 1.12-5.618-9.556-6.177.562-6.19-8.423-2.25-1.685-4.493-6.748 2.248h-4.497v9.557l-5.06-1.7v-5.054l-14.05-11.245-7.87-2.81-3.37-3.93-11.244 2.81-.56-5.055 7.302-2.817-.563-10.105-20.234.567-2.81-4.493-2.81-7.874-3.375-6.752 5.06-5.617 5.624-6.74L207.11 224l1.124 6.74 3.94 3.38 6.742 2.246-.563 4.493 6.185 1.682 8.988 1.684 5.623-6.74 10.11-7.314 4.495-7.297v-3.37l5.613 3.37-2.805 5.05 1.12 5.626-5.056 2.248-4.497 6.175 2.81 9 5.05-7.313 7.302-5.618 2.805-10.12 7.31-5.615 1.7-6.19 3.37 7.31-1.124 3.373 1.684 2.81 10.664 8.992 2.25 11.246 4.503 3.37 5.618-.562 8.433 8.435.563-6.75 12.35-3.93v-6.19h-10.1l-15.176-7.86-12.366-6.75 3.37-7.303 11.234-2.246 6.19-2.81 6.742 4.494.554-19.113-19.112-3.93-20.21 5.63-7.873-6.19 3.367-3.368-6.19 1.124-19.662 7.31-5.618-.57-4.496 7.31v8.995h-10.12l-5.616 1.125-17.988-3.944-14.05 1.137-6.18-3.38-3.936-.564-2.25-7.297-12.925-9-17.99-13.484-1.125-17.413-5.06-11.246.563-6.734 4.498-7.878 12.93-21.91 13.488-6.185 22.48-1.687-1.124 9.562-5.06 2.805 2.247 5.055 3.94-4.492 3.93-11.805 16.86-1.124 6.744-6.734 9.554-3.94 1.125-16.3 10.122-12.926 9.553-16.856-8.428-10.12 8.606-13.39C145.056 33.97 62.028 119.27 62.028 224zm260.44-182.277l23.45 17.047-8.424 20.802 26.975 35.397 8.42 22.48 3.93 12.37-14.03-6.757-8.44-1.688-20.79 12.932-6.19 14.05-7.867 7.87-10.11 22.47 8.422-6.74 15.746-17.42 5.62-7.87 11.23-5.617 3.374-14.61 13.494 8.986 16.29 20.24 7.87 20.79-6.187 5.05-3.372 6.19-3.937-7.312-7.864-8.985-11.24 12.365-3.368 9.542 7.87-1.687 7.863-3.93 11.24 3.93 6.755-2.244 17.966 12.364 10.135-5.626 6.177 3.38 13.438-21.157 6.656 6.35.134 8.062.554 24.17 4.132 11.45c1.007-7.99 1.582-16.117 1.582-24.38-.003-83.768-53.116-155.14-127.507-182.274z"/><glyph unicode="" d="M116.838 355.64c-25.396 0-47.242-8.403-65.542-25.208-19.043-17.926-28.57-40.33-28.57-67.218 0-17.926 5.188-34.73 15.647-50.416 9.337-14.563 19.09-23.903 31.89-28.012v-1.12c-12.8-5.225-18.483-18.296-18.483-39.21 0-16.062 5.686-28.01 18.482-35.854v-1.12c-35.327-11.574-51.496-33.05-51.496-64.416 0-27.268 11.874-47.244 35.033-59.94C72.09-26.958 95.582-32 123.97-32c69.085 0 103.703 28.94 103.703 86.832 0 36.223-26.66 58.44-80.063 66.658-12.323 1.863-21.644 6.348-27.99 13.445-4.855 4.854-7.272 9.71-7.272 14.563 0 13.816 7.48 21.848 22.41 24.088 22.78 3.357 41.364 13.912 55.743 31.648 14.38 17.74 21.57 38.56 21.57 62.458 0 7.47-2.26 15.498-5.244 24.086 9.71 2.244 16.524 4.297 21.646 6.166v57.696c-22.526-8.964-43.495-13.442-61.42-13.442-15.69 8.96-31.914 13.442-50.212 13.442zM123 76.115c31.372 0 47.052-9.52 47.052-28.57 0-20.168-14.377-30.246-43.132-30.246-32.862 0-49.293 9.71-49.293 29.12 0 19.796 15.122 29.69 45.373 29.69zM119.08 224c-23.528 0-35.294 12.882-35.294 38.654 0 27.63 11.766 41.453 35.293 41.453 11.2 0 19.973-4.298 26.32-12.884 5.23-7.845 7.845-17.18 7.845-28.01 0-26.14-11.394-39.213-34.17-39.213zm170.315 256c-10.828 0-20.07-4.107-27.727-12.324-7.66-8.218-11.49-18.108-11.49-29.688 0-11.205 3.83-20.91 11.49-29.13 7.654-8.216 16.896-12.32 27.727-12.32 10.455 0 19.514 4.105 27.17 12.32 7.656 8.22 11.48 17.925 11.48 29.13 0 11.58-3.824 21.472-11.48 29.688-7.66 8.217-16.715 12.324-27.17 12.324zm31.373-128h-63.303c.748-7.167-.32-18.02-.32-35.57V142.216c0-17.928 1.068-32.387.32-38.018h63.303c-.75 8.188-2.697 22.334-2.697 41.38V317.55c0 16.43 1.95 27.283 2.7 34.45zM460.37 157.9c-16.436 0-24.54 12.514-24.54 37.533v103.32h24.932c4.48 0 8.516.246 13.56-.123 5.042-.374 7.075-.125 9.64-.125V352h-48.13v23.808c0 8.96 1.407 17.15 2.526 22.27h-64.98c1.122-5.12 1.015-12.937 1.015-23.394V352h-28.16v-53.494c7.683 1.12 14.545 1.678 19.398 1.678l8.768-.56v-101.39c0-31.37 3.98-54.337 11.818-68.9 10.462-19.42 28.812-29.13 56.068-29.13 19.426 0 36.56 3.732 49.358 11.205v56.01c-10.236-6.35-19.69-9.523-31.263-9.523z"/><glyph unicode="" d="M444.797 255.998l-46.724 46.723 81.762 81.767-63.35 63.35-81.76-81.76L288 412.797V256zm-377.674 0l46.724 46.723-81.762 81.767 63.35 63.35 81.76-81.76L223.92 412.8V256zm377.674-64.078l-46.724-46.724 81.762-81.76-63.35-63.35-81.76 81.76L288 35.123V191.92zm-377.674 0l46.724-46.724-81.762-81.76L95.435.086l81.76 81.76 46.725-46.723V191.92z"/><glyph unicode="" d="M177.285 208.636l-98.56-98.56-46.72 46.725V.01H188.8l-46.72 46.72 98.556 98.557zm11.516 239.36H32.01V291.2l46.722 46.722 98.56-98.558 63.35 63.35-98.558 98.558zm145.92-239.36l-63.35-63.35 98.56-98.558L323.197.004h156.796V156.8l-46.724-46.723zm-11.52 239.36l46.723-46.724-98.56-98.558 63.35-63.35 98.56 98.558 46.723-46.723v156.79z"/><glyph unicode="" d="M466.766 288.6H110c-21.5 0-26.203-21.412-26.203-21.412L55.08 82.854c-1.24-7.888-14.837-6.083-13.466 2.646L57.25 287.998S61.5 320.6 96.5 320.6h351.496v14.71c0 9.222-7.475 16.688-16.69 16.688h-214.55l-43.623 58.994-.09-.026c-3.03 3.094-7.243 5.032-11.915 5.032H48.686c-9.21 0-16.683-7.475-16.683-22.56L33.508 81.25c0-9.223 7.472-16.688 16.683-16.688h381.12c9.218 0 16.69 7.465 16.69 16.688l35.6 185.334s5.74 21.7-16.83 22.013z"/><glyph unicode="" d="M431.305 351.998H216.757l-43.624 58.994-.09-.026c-3.03 3.094-7.243 5.032-11.915 5.032H48.686c-9.21 0-16.683-7.475-16.683-22.56L33.508 81.25c0-9.223 7.472-16.688 16.683-16.688h381.12c9.218 0 16.69 7.465 16.69 16.688v254.06c0 9.222-7.473 16.688-16.69 16.688zM240 95.205c-62.186 0-112.596 50.41-112.596 112.596 0 62.187 50.41 112.597 112.596 112.597 62.184 0 112.596-50.41 112.596-112.59C352.596 145.62 302.184 95.21 240 95.21zM223.48 241.22l-62.478.003v-66.477h62.476v-44.67l94.396 77.905-94.394 77.92z"/><glyph unicode="" d="M160.5 223.696h159v-31.794h-159zm270.805 128.302H216.757l-43.624 58.994-.09-.026c-3.03 3.094-7.243 5.032-11.915 5.032H48.686c-9.21 0-16.683-7.475-16.683-22.56L33.508 81.25c0-9.223 7.472-16.688 16.683-16.688h381.12c9.218 0 16.69 7.465 16.69 16.688v254.06c0 9.222-7.473 16.688-16.69 16.688zM240 95.205c-62.186 0-112.596 50.41-112.596 112.596 0 62.187 50.41 112.597 112.596 112.597 62.184 0 112.596-50.41 112.596-112.59C352.596 145.62 302.184 95.21 240 95.21z"/><glyph unicode="" d="M431.305 351.998H216.757l-43.624 58.994-.09-.026c-3.03 3.094-7.243 5.032-11.915 5.032H48.686c-9.21 0-16.683-7.475-16.683-22.56L33.508 81.25c0-9.223 7.472-16.688 16.683-16.688h381.12c9.218 0 16.69 7.465 16.69 16.688v254.06c0 9.222-7.473 16.688-16.69 16.688zM240 95.205c-62.186 0-112.596 50.41-112.596 112.596 0 62.187 50.41 112.597 112.596 112.597 62.184 0 112.596-50.41 112.596-112.59C352.596 145.62 302.184 95.21 240 95.21zm15.898 192.092h-31.796v-63.6H160.5V191.9h63.602v-63.6h31.796v63.6H319.5v31.794h-63.602z"/><glyph unicode="" d="M431.305 351.998H216.757l-43.624 58.994-.09-.026c-3.03 3.094-7.243 5.032-11.915 5.032H48.686c-9.21 0-16.683-7.475-16.683-22.56L33.508 81.25c0-9.223 7.472-16.688 16.683-16.688h381.12c9.218 0 16.69 7.465 16.69 16.688v254.06c0 9.222-7.473 16.688-16.69 16.688z"/><glyph unicode="" d="M63.252 447.998H95.65V.002H63.252zm338.22-32l-95.14-95.145 96.833-96.85H160.01v191.995h241.46m77.253 32H128.01V192.002h352.4l-128.827 128.85 127.14 127.146z"/><glyph unicode="" d="M351.583 320.85L478.723 448H128.01V192.002h352.4zM63.253 448H95.65V.002H63.252z"/><glyph unicode="" d="M160.003 415.998V237.18L415.996 448V0L160.003 210.82V32.002h-96v383.996z"/><glyph unicode="" d="M63.145 447.998v-64l150-171.712V40.86l85.71-42.857v214.283l150 171.712v64z"/><glyph unicode="" d="M503.61 146.99l-45.413 44.55c13.105 11.495 24.19 22.29 32.663 31.17-2.193 2.338-23.248 22.274-27.113 26.14-2.402-2.13-104.908-114.77-207.756-114.77-86.44 0-181.75 86.35-207.22 115.06-7.36-6.77-24.63-23.638-27.436-26.43 8.803-9.075 19.85-19.75 32.66-30.984L8.39 146.99c-8.29-8.13-8.42-21.44-.288-29.727 4.118-4.196 9.56-6.3 15.007-6.3 5.31 0 10.63 2 14.72 6.016l48.97 48.04c15.042-11.326 31.434-22.42 48.718-32.3l-29.785-62.36c-5.004-10.48-.57-23.03 9.908-28.038 2.05-.98 4.183-1.594 6.317-1.876 8.783-1.16 17.69 3.36 21.715 11.783l29.5 61.76c20.12-8.457 40.924-14.61 61.8-17.17V32.63c0-11.61 9.413-21.022 21.024-21.022S277.02 21.02 277.02 32.63v64.198c20.775 2.55 41.49 8.65 61.52 17.008l30.168-61.632c4.11-8.39 13.057-12.824 21.827-11.583 2.134.31 4.26.947 6.3 1.95 10.425 5.107 14.74 17.696 9.636 28.125l-30.235 61.77c17.486 9.932 34.025 21.075 49.12 32.4l48.81-47.88c4.095-4.018 9.41-6.018 14.72-6.018 5.45 0 10.89 2.105 15.01 6.302 8.13 8.287 8 21.6-.29 29.73z"/><glyph unicode="" d="M255.992 349.715c-116.967 0-234.758-127.177-234.758-127.177S139.024 95.372 255.992 95.372c116.984 0 234.773 127.166 234.773 127.166S372.977 349.715 255.992 349.715zm0-215.81c-49.705 0-90 40.26-90 90.01 0 49.704 40.296 89.99 90 89.99 49.73 0 90.023-40.286 90.023-89.99.003-49.75-40.294-90.01-90.023-90.01zm0 134.1c-24.32 0-44.104-19.78-44.104-44.09 0-24.312 19.784-44.11 44.104-44.11 24.332 0 44.126 19.8 44.126 44.11.002 24.31-19.792 44.09-44.126 44.09z"/><glyph unicode="" d="M468.328 387.262l-47.784 48.15c-12.065 12.14-31.647 12.19-43.8.157l-30.197-29.97 91.373-92.05 30.208 29.93c12.143 12.07 12.253 31.655.2 43.776zM85.75 146.692l91.38-92.023 238.882 237.06-91.432 92.095L85.75 146.693zm-36.214-81.57L32.512 2.57l62.703 16.563 58.26 15.346-88.153 88.86-15.786-58.22z"/><glyph unicode="" d="M322.097 448.198H64.002V-.498H416.53V354.5l-94.433 93.698zm-2.73-32.823l64.454-63.377h-64.45v63.377zm64.63-383.373H96v383.996h192v-96h95.996V32.002zm-256.593 175.8c0-62.187 50.41-112.597 112.596-112.597 62.184 0 112.596 50.41 112.596 112.596 0 62.187-50.412 112.597-112.596 112.597-62.186 0-112.596-50.41-112.596-112.59zM319.5 223.695V191.9h-159v31.795h159z"/><glyph unicode="" d="M322.097 448.198H64.002V-.498H416.53V354.5l-94.433 93.698zm-2.73-32.823l64.454-63.377h-64.45v63.377zm64.63-383.373H96v383.996h192v-96h95.996V32.002zm-256.593 175.8c0-62.187 50.41-112.597 112.596-112.597 62.184 0 112.596 50.41 112.596 112.596 0 62.187-50.412 112.597-112.596 112.597-62.186 0-112.596-50.41-112.596-112.59zM319.5 223.695V191.9h-63.602v-63.6H224.1v63.602h-63.6v31.794h63.602v63.6H255.9v-63.6h63.6z"/><glyph unicode="" d="M322.097 448.198H64.002V-.498H416.53V354.5l-94.433 93.698zm-2.73-32.823l64.454-63.377h-64.45v63.377zM96.003 32.002v383.996H288v-96h95.996V32.002H96.002z"/><glyph unicode="" d="M339.23 149.373c.008-.672.053-1.32.053-1.988 0-68.036-55.35-123.383-123.39-123.383-68.03 0-123.383 55.347-123.383 123.383 0 41.116 20.236 77.58 51.258 100.014l-4.197 36.86c-47.95-26.84-80.46-78.12-80.46-136.876C59.11 60.93 129.44-9.4 215.897-9.4c73.287 0 134.963 50.55 152.064 118.605l-28.73 40.166zM155.87 409.356a39.893 39.893 180 1 0 79.787 0 39.893 39.893 180 1 0-79.786 0zM452.94 100.23l-89.517 125.165c-4.685 6.555-12.505 9.654-20.44 8.976-.592.06-1.185.11-1.784.11H238.94l-2.538 22.264h76.006c8.842 0 16.01 7.165 16.01 16.004 0 8.837-7.168 16-16.01 16H232.76l-4.156 36.557c-2.432 21.384-21.74 36.74-43.12 34.308-21.382-2.436-36.74-21.74-34.304-43.116l11.75-103.236c2.275-19.966 19.246-34.657 38.882-34.55.067 0 .13-.014.2-.014h133.795l76.77-107.34c7.328-10.256 22.315-12.11 33.468-4.13 11.143 7.972 14.232 22.754 6.896 33.01z"/><glyph unicode="" d="M380.476 96.165a36.94 36.94 180 1 0 73.88 0 36.94 36.94 180 1 0-73.88 0zm-243.392 36.94c-20.396 0-36.936-16.54-36.936-36.94s16.54-36.94 36.936-36.94c20.406 0 36.945 16.54 36.945 36.94s-16.54 36.94-36.95 36.94zM32.09 351.998h287.906V160.002H32.09zm415.906-64h-96.123V133.11H165.726c11.016-8.554 18.113-21.914 18.113-36.944h186.82c0 25.823 20.924 46.754 46.75 46.754 25.82 0 46.752-20.93 46.752-46.754h6.414c5.15 0 9.33 4.176 9.33 9.332V224l-31.915 63.998zm-63.7-78.46l.114 46.224h41.3l22.286-46.223h-63.7zM108.443 133.11H32.196l-.096-13.762s-1.21-23.182 22.168-23.182H90.33c0 15.03 7.098 28.39 18.114 36.944z"/><glyph unicode="" d="M462.88 367.12l-63.76 63.765L256 287.77 111.883 431.882 48.12 368.12 192.233 224 47.113 78.885l63.766-63.77L256 160.238 400.125 16.11l63.758 63.77L319.763 224z"/><glyph unicode="" d="M256.5 450.167c-123.433 0-223.495-30.976-223.495-58.084v-86C33.005 278.975 133.068 248 256.5 248c123.434 0 223.496 30.975 223.496 58.083v86c0 27.107-100.062 58.084-223.496 58.084zm0-97.95c-92.096 0-166.755 16.966-166.755 34.192 0 17.22 74.66 37.19 166.755 37.19 92.097 0 166.757-19.97 166.757-37.19 0-17.23-74.66-34.197-166.757-34.197zm0-277.25c-121.174 0-219.815 27.18-223.385 53.602-.066-.498-.11-.99-.11-1.488v-78C33.005 21.977 133.068-9 256.5-9c123.434 0 223.496 30.977 223.496 58.085v78c0 .496-.044.99-.11 1.482-3.57-26.424-102.21-53.603-223.386-53.603zm0 124.717c-121.174 0-219.815 30.18-223.385 56.602-.066-.492-.11-.986-.11-1.482v-78c0-27.108 100.063-58.084 223.495-58.084 123.434 0 223.496 30.976 223.496 58.084v78c0 .496-.044.99-.11 1.482-3.57-26.423-102.21-56.602-223.386-56.602z"/><glyph unicode="" d="M32.003 384.085V128.002h447.994v256.083H32.003zm415.994-192.083c-16.98 0-31.844-16.662-31.844-32H96.66c0 15.988-12.48 33.004-32.657 33.004V319.91c23.808 0 30.772 17.437 30.772 32.176h321.537c0-15.313 14.154-31.52 31.685-31.52V192zm-252.232 64.04a60.235 76.165 180 1 0 120.47 0 60.235 76.165 180 1 0-120.47 0zM32.003 96.002h447.994v-32H32.003z"/><glyph unicode="" d="M479.748 355.514c0 15.757-12.77 28.528-28.528 28.528H60.78c-15.756 0-28.528-12.77-28.528-28.528V92.487c0-15.76 12.772-28.528 28.528-28.528h390.44c15.76 0 28.528 12.77 28.528 28.522V355.51zm-404.585-3.472h362.455c5.122 0 10.63-5.51 10.63-10.628V288.24H64.25v53.174c0 5.12 5.795 10.628 10.91 10.628zM437.617 96.046H75.163c-5.116 0-10.91 3.203-10.91 8.32v118.85h383.994v-118.85c0-5.117-5.508-8.32-10.63-8.32z"/><glyph unicode="" d="M259.116 414.717C136.07 417.137 34.79 341.32 32.9 245.367c-.652-33.36 10.793-64.75 31.17-91.627h-.003C99.112 108.714 32.002 17.756 32.002 17.756L173.795 79.95c24.33-7.69 50.77-12.168 78.473-12.714 123.042-2.428 224.325 73.396 226.217 169.35 1.884 95.954-96.33 175.705-219.37 178.13z"/><glyph unicode="" d="M256-.496C132.21-.496 31.504 100.216 31.504 224c0 123.79 100.707 224.496 224.496 224.496 123.79 0 224.496-100.708 224.496-224.496C480.496 100.216 379.79-.496 256-.496zm0 395.113c-94.078 0-170.617-76.54-170.617-170.617 0-94.082 76.54-170.617 170.617-170.617 94.087 0 170.617 76.535 170.617 170.617 0 94.078-76.53 170.617-170.617 170.617zM357.43 238.94h-83.642v102.79c0 12.34-9.996 22.34-22.345 22.34-12.34 0-22.344-10-22.344-22.34V216.278c0-12.165 9.87-22.025 22.023-22.025H357.43c12.34 0 22.345 10.005 22.345 22.344 0 12.34-10.006 22.345-22.345 22.345z"/><glyph unicode="" d="M182.964 32.002c-25.798 69.72-85.798 136.165-148.65 176.98l29.582 48.594c36.183-14.44 115.92-60.484 144.845-103.773 47.26 107.1 130.2 204.28 238.45 265.65l30.5-48.478C371.207 291.517 292.76 155.67 255.53 32.002h-72.566z"/><glyph unicode="" d="M463.27 351.953H127.856l-74.126 73.56c-10.404 10.322-27.207 10.257-37.53-.146s-10.258-27.205.145-37.528l86.328-85.67 34.09-156.648c0-9.678 7.846-17.525 17.525-17.525h268.546c9.686 0 17.525 7.85 17.525 17.525l40.43 188.903c0 9.68-7.84 17.52-17.524 17.52zM334.076 48.083a47.978 47.978 180 1 0 95.956 0 47.978 47.978 180 1 0-95.955 0zm-189.816 0a47.978 47.978 180 1 0 95.955 0 47.978 47.978 180 1 0-95.956 0z"/><glyph unicode="" d="M256 447.998C132.29 447.998 32 347.71 32 224S132.29.002 256 .002 480 100.29 480 224 379.71 447.998 256 447.998zm-110.308-113.69c29.464 29.463 68.64 45.69 110.308 45.69 28.047 0 54.958-7.36 78.544-21.152L121.152 145.46c-13.79 23.584-21.15 50.494-21.15 78.54 0 41.668 16.226 80.843 45.69 110.307zm220.616-220.615c-29.464-29.465-68.64-45.69-110.308-45.69-28.047 0-54.958 7.36-78.544 21.152L390.843 302.55C404.637 278.96 412 252.05 412 224c0-41.67-16.228-80.843-45.692-110.307z"/><glyph unicode="" d="M172.063 193.823h45.78v-45.757h-45.78zm64.457-61.225h45.722v-45.75H236.52zm-64.457 0h45.78v-45.75h-45.78zm0 122.452h45.78v-45.73h-45.78zm196.412 89.124c10.47 0 18.95 8.495 18.95 18.977v65.39c-.002 10.48-8.482 18.964-18.95 18.964-10.494 0-18.98-8.483-18.98-18.964v-65.39c.005-10.48 8.486-18.976 18.98-18.976zm-224.103 0c10.467 0 18.946 8.495 18.946 18.977v65.39c0 10.48-8.48 18.964-18.946 18.964-10.495 0-18.98-8.483-18.98-18.964v-65.39c.003-10.48 8.485-18.976 18.98-18.976zm-36.77-150.35h45.758v-45.758h-45.757zm0-61.226h45.758v-45.75h-45.757zm128.918 61.225h45.722v-45.757H236.52zm128.88 0h45.755v-45.757H365.4zm0 61.227h45.755v-45.73H365.4zm28.276 159.943v-20.09c7.886-6.973 12.886-17.155 12.886-28.52 0-21.04-17.044-38.116-38.088-38.116-21.07 0-38.114 17.076-38.114 38.116 0 11.365 5 21.547 12.885 28.52v20.09h-173.67v-20.09c7.885-6.973 12.885-17.155 12.885-28.52 0-21.04-17.044-38.116-38.087-38.116-21.07 0-38.114 17.076-38.114 38.116 0 11.365 5 21.547 12.88 28.52v20.09H32.91V-.027h447.103v415.02h-86.337zM75.33 42.393v265.254h363.135V42.393H75.332zM236.52 255.05h45.722v-45.73H236.52zm64.452 0h45.755v-45.73h-45.755zm0-122.452h45.755v-45.75h-45.755zm0 61.225h45.755v-45.757h-45.755z"/><glyph unicode="" d="M317.874 207.586l-94.394 77.92v-44.68l-62.478.002v-66.476l62.476-.002v-44.668zm-190.47.215c0 33.48 14.616 63.54 37.808 84.16l-133.21 44.29V75.998L224.5 12v84.27c-54.85 7.552-97.096 54.603-97.096 111.53zM240 320.398c15.104 0 29.512-2.982 42.674-8.377l166.323 55.293-208.497 69.32L32.002 367.31l165.772-55.11c13.04 5.278 27.292 8.192 42.226 8.192zm112.596-112.59c0-56.84-42.12-103.834-96.848-111.495V12l192.497 63.995v260.247L314.855 291.9c23.153-20.624 37.74-50.656 37.74-84.1z"/><glyph unicode="" d="M32.002 75.997L224.5 12.002V272.25L32.002 336.243zM240.5 436.634L32.002 367.31 240.5 297.994l208.497 69.314zm15.248-424.632l192.497 63.995v260.247L255.748 272.25z"/><glyph unicode="" d="M381.254 375.126c11.73-16.323 17.626-35.857 17.626-58.604 0-23.444-5.932-42.296-17.78-56.524-6.646-7.99-16.385-15.3-29.295-21.893 19.58-7.107 34.383-18.403 44.35-33.856 9.958-15.46 14.955-34.23 14.955-56.27 0-22.744-5.71-43.132-17.1-61.192-7.23-11.98-16.294-22.063-27.19-30.225-12.257-9.372-26.717-15.826-43.382-19.27-16.664-3.51-34.728-5.214-54.244-5.214h-173v383.93h185.54c46.827-.684 80-14.32 99.52-40.885zm-208.472-25.788v-84.655h93.312c16.665 0 30.194 3.166 40.59 9.496 10.396 6.34 15.61 17.58 15.61 33.742 0 17.875-6.894 29.682-20.64 35.423-11.854 3.986-26.97 5.987-45.366 5.987h-83.506zm0-148.223V98.77h93.22c16.632 0 29.604 2.23 38.885 6.766 16.813 8.317 25.23 24.298 25.23 47.914 0 19.983-8.162 33.698-24.48 41.147-9.093 4.188-21.88 6.324-38.354 6.518h-94.5z"/><glyph unicode="" d="M448.146 103.733c-32.37 33.626-39.422 96.247-46.244 144.357C391.786 319.403 389.655 399.545 288 410.034v12.917c0 12.96-19.774 23.47-32.732 23.47-12.957 0-31.266-10.506-31.266-23.464V410.02c-100.815-10.56-104.324-90.675-114.348-161.95-6.768-48.13-13.766-110.76-45.87-144.4-6.48-6.796-8.294-16.798-4.6-25.43 3.698-8.64 12.184-14.237 21.576-14.237h350.482c9.406 0 17.907 5.62 21.597 14.286 3.67 8.65 1.83 18.67-4.7 25.44zM256-14.555c25.712 0 46.557 20.845 46.557 46.557h-93.113c0-25.712 20.843-46.557 46.556-46.557z"/><glyph unicode="" d="M460.282 399.933c-29.56 29.43-80.832 26.523-110.294-3.05l-208.33-209.376c-21.037-21.13-23.085-57.45-1.915-78.236 21.114-21.162 57.36-19.01 78.394 2.12L347.59 241.67c5.136 4.71 5.526 12.354.21 18.147-4.96 5.41-15.47 5.63-19.812 1.268L199.015 131.4c-12.636-12.63-25.91-14.955-38.576-2.518-12.68 12.53-12.26 27.253.34 39.915L367.665 376.69l-.04.038c21.007 21.043 50.964 23.467 72 2.515 20.73-20.977 21.542-54.067.265-75.11l.01.044L186.925 49.795l.01-.03c-28.166-26.054-75.066-31.573-106.8-.542-29.504 29.422-26.094 77.855.507 107.7L256.117 333.39c2.717 2.804 5.62 13.407-.29 18.62-5.188 4.578-15.31 5.954-18.933 2.313L61.86 177.89C18.622 132.437 20.346 65.4 58.394 27.683c38.01-37.904 106.534-40.826 149.494 2.51L461.1 284.58c29.532 29.45 28.753 85.92-.818 115.353z"/><glyph unicode="" d="M256.023 463.354L32.188 192.187h128.348L160.53-1.098h190.962l.006 193.278h128.315z"/><glyph unicode="" d="M496.124 223.978L224.957 447.812V319.464l-193.285.005V128.502l193.277-.006V.19z"/><glyph unicode="" d="M15.544 223.978L286.71 447.812V319.464l193.286.005V128.502L286.72 128.5V.19z"/><glyph unicode="" d="M255.977-15.256l223.836 271.168h-128.35l.006 193.286H160.5L160.5 255.92H32.19z"/><glyph unicode="" d="M395.786 207.95c-.646 64.858 52.894 95.964 55.287 97.51-30.085 44.02-76.946 50.052-93.647 50.748-39.88 4.04-77.818-23.48-98.06-23.48-20.188 0-51.422 22.884-84.5 22.28-43.47-.645-83.55-25.274-105.934-64.206C23.768 212.432 57.367 96.33 101.386 32.77c21.51-31.112 47.16-66.058 80.835-64.81 32.43 1.296 44.7 20.984 83.9 20.984 39.21 0 50.23-20.983 84.55-20.34 34.9.65 57.01 31.708 78.37 62.915 24.7 36.09 34.87 71.032 35.47 72.83-.77.353-68.045 26.13-68.72 103.6zM331.3 398.286c17.875 21.685 29.94 51.77 26.648 81.783-25.746-1.05-56.954-17.15-75.426-38.79-16.575-19.194-31.083-49.826-27.194-79.24 28.74-2.243 58.08 14.605 75.973 36.242z"/><glyph unicode="" d="M432 320c-17.6 0-32-14.4-32-32V160c0-17.6 14.4-32 32-32s32 14.4 32 32v128c0 17.6-14.4 32-32 32zm-384 0c-17.6 0-32-14.4-32-32V160c0-17.6 14.4-32 32-32s32 14.4 32 32v128c0 17.6-14.4 32-32 32zm48-208c0-26.51 21.49-48 48-48h16V0c0-17.6 14.4-32 32-32s32 14.4 32 32v64h32V0c0-17.6 14.4-32 32-32s32 14.4 32 32v64h16c26.51 0 48 21.49 48 48v176H96V112zm203.3 323.253l20.25 38.903c1.017 1.95.25 4.38-1.7 5.395-1.95 1.02-4.38.25-5.396-1.7l-20.56-39.49C275.798 444.58 258.3 448 240 448c-18.298 0-35.796-3.42-51.898-9.643l-20.558 39.492c-1.017 1.95-3.443 2.71-5.396 1.7-1.952-1.02-2.717-3.448-1.7-5.4l20.25-38.904c-45.315-20.51-78.12-63.79-83.81-115.25h286.22c-5.688 51.46-38.494 94.742-83.81 115.252zM176 344.8c-12.813 0-23.2 10.387-23.2 23.2s10.387 23.2 23.2 23.2c12.813 0 23.2-10.387 23.2-23.2 0-12.813-10.387-23.2-23.2-23.2zm128 0c-12.813 0-23.2 10.387-23.2 23.2s10.388 23.2 23.2 23.2 23.198-10.387 23.198-23.2-10.385-23.2-23.198-23.2z"/><glyph unicode="" d="M32.74 415.823v-64.65H480v64.65H32.74zM480 320.15H32.74V255.5H480v64.65zm0-96.32H32.74v-64.666H480v64.667zm-.146-96H241.426V63.165h238.428v64.667z"/><glyph unicode="" d="M32.74 415.823v-64.65H480v64.65H32.74zm0-159.962H480v64.658H32.74V255.86zm0-96.69H480v64.666H32.74V159.17zm.147-96h238.427v64.667H32.887v-64.67z"/><glyph unicode="" d="M32.37 415.823v-64.65h447.26v64.65H32.37zm0-159.962h447.26v64.658H32.37V255.86zm0-96.87h447.26v64.67H32.37v-64.67zm104.416-95.82h238.428v64.668H136.786v-64.67z"/><glyph unicode="" d="M55.773 415.998l33.47-350.02 90.755 90.756 136.66-136.677 135.03 135.03L315.026 291.76l90.733 90.73z"/><glyph unicode="" d="M451.69 415.998l-33.47-350.02-90.755 90.756-136.66-136.677-135.032 135.03L192.438 291.76l-90.733 90.73z"/><glyph unicode="" d="M55.773 28.153l33.47 350.025 90.755-90.756L316.658 424.1l135.03-135.03-136.663-136.677 90.733-90.732z"/><glyph unicode="" d="M451.69 28.153l-33.47 350.025-90.755-90.756L190.805 424.1 55.772 289.07l136.665-136.677-90.733-90.732z"/><glyph unicode="" d="M255.5 479L31.938 255.437h127.75V-32h191.625v287.437h127.75z"/><glyph unicode="" d="M142.056-32.65L-.91 156.134l88.93 67.317L182.044 99.3 418.53 479l94.682-58.958L233.86-32.65z"/><glyph unicode="" d="M511.352 435.355l-43.998 43.996L256 268 44.646 479.35.65 435.356 212.002 224 .65 12.647 44.645-31.35 256 180.003 467.354-31.35l43.998 43.997L299.997 224z"/><glyph unicode="" d="M432.324 224.013c0 27.226 16.74 48.712 41.994 63.48-4.563 15.177-10.563 29.738-17.998 43.43-28.278-7.384-51.198 3.69-70.452 22.97-19.254 19.23-25.15 42.15-17.74 70.454-13.69 7.41-28.254 13.434-43.457 17.972-14.76-25.26-41.45-42-68.68-42-27.225 0-53.89 16.74-68.68 41.994-15.205-4.54-29.74-10.564-43.457-17.973 7.41-28.303 1.51-51.224-17.742-70.452-19.253-19.28-42.15-30.354-70.452-22.97-7.41-13.693-13.434-28.254-17.972-43.43 25.23-14.77 41.997-36.254 41.997-63.48 0-27.23-16.77-53.94-41.998-68.71 4.54-15.178 10.564-29.74 17.973-43.43 28.304 7.382 51.2 1.49 70.453-17.74 19.254-19.28 25.15-42.176 17.74-70.455 13.717-7.437 28.25-13.46 43.458-17.998C202.1 30.905 228.764 47.67 255.99 47.67c27.23 0 53.916-16.765 68.683-41.992 15.206 4.537 29.77 10.56 43.46 17.996-7.383 28.278-1.513 51.173 17.74 70.453 19.255 19.23 42.175 30.326 70.453 22.917 7.436 13.693 13.436 28.254 17.998 43.483-25.252 14.768-41.993 36.252-41.993 63.48zM255.986 129.05c-52.428 0-94.936 42.51-94.936 94.963 0 52.43 42.508 94.91 94.936 94.91 52.456 0 94.938-42.48 94.938-94.91 0-52.454-42.482-94.962-94.938-94.962z"/><glyph unicode="" d="M427.555 397.486H84.457L55.65 342.648h400.7l-28.795 54.838zm-106.135 51.92H189.754v-26.548H321.42v26.547zM114.156-1.404h283.702l28.795 317.867H85.348l28.808-317.87zM322.633 288.83h25.488V27.337H322.64V288.83zm-80.21 0h26.315V27.337h-26.314V288.83zm-79.383 0h26.328V27.337H163.04V288.83z"/><glyph class="hidden" unicode="" d="M0 480L512-32H0z" horiz-adv-x="0"/></font></defs></svg>
\ No newline at end of file
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.ttf b/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.ttf
deleted file mode 100644
index ad27935ff5672575c593a4b1b86e8bd019b50456..0000000000000000000000000000000000000000
Binary files a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.ttf and /dev/null differ
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.woff b/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.woff
deleted file mode 100644
index 699a9a667f4701a1cacffaf63f4951fc48f11c6c..0000000000000000000000000000000000000000
Binary files a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.woff and /dev/null differ
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.woff2 b/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.woff2
deleted file mode 100644
index 564c3e2191b5eeffceefd1b4c882e5b326f7fb30..0000000000000000000000000000000000000000
Binary files a/app/code/Magento/DesignEditor/view/adminhtml/web/css/fonts/MUI-Icons.woff2 and /dev/null differ
diff --git a/app/code/Magento/Developer/Model/Less/FileGenerator/PublicationDecorator.php b/app/code/Magento/Developer/Model/Less/FileGenerator/PublicationDecorator.php
new file mode 100644
index 0000000000000000000000000000000000000000..d99f32d515e38db2784169e6f21c5fa0fe4034ed
--- /dev/null
+++ b/app/code/Magento/Developer/Model/Less/FileGenerator/PublicationDecorator.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Developer\Model\Less\FileGenerator;
+
+use Magento\Framework\Less\FileGenerator\RelatedGenerator;
+use Magento\Framework\View\Asset\LocalInterface;
+
+/**
+ * Class PublicationDecorator
+ * Decorates generator of related assets and publishes them
+ *
+ * @package Magento\Developer\Model\Less\FileGenerator
+ */
+class PublicationDecorator extends RelatedGenerator
+{
+    /**
+     * @var \Magento\Framework\App\View\Asset\Publisher
+     */
+    private $publisher;
+
+    /**
+     * @param \Magento\Framework\Filesystem $filesystem
+     * @param \Magento\Framework\View\Asset\Repository $assetRepo
+     * @param \Magento\Framework\Less\File\Temporary $temporaryFile
+     * @param \Magento\Framework\App\View\Asset\Publisher $publisher
+     */
+    public function __construct(
+        \Magento\Framework\Filesystem $filesystem,
+        \Magento\Framework\View\Asset\Repository $assetRepo,
+        \Magento\Framework\Less\File\Temporary $temporaryFile,
+        \Magento\Framework\App\View\Asset\Publisher $publisher
+    ) {
+        parent::__construct($filesystem, $assetRepo, $temporaryFile);
+        $this->publisher = $publisher;
+    }
+
+    /**
+     * {inheritdoc}
+     */
+    protected function generateRelatedFile($relatedFileId, LocalInterface $asset)
+    {
+        $relatedAsset = parent::generateRelatedFile($relatedFileId, $asset);
+        $this->publisher->publish($relatedAsset);
+        return $relatedAsset;
+    }
+}
diff --git a/app/code/Magento/Developer/Model/View/Page/Config/ClientSideLessCompilation/Renderer.php b/app/code/Magento/Developer/Model/View/Page/Config/ClientSideLessCompilation/Renderer.php
index 59e3441a782e30214138e7bcc872c02e737961f3..eaf588a27cc671b76d66a0d74169fe4043b14317 100644
--- a/app/code/Magento/Developer/Model/View/Page/Config/ClientSideLessCompilation/Renderer.php
+++ b/app/code/Magento/Developer/Model/View/Page/Config/ClientSideLessCompilation/Renderer.php
@@ -125,7 +125,7 @@ class Renderer extends Config\Renderer
                     $result .= sprintf($template, $asset->getUrl());
                 }
             }
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->logger->critical($e);
             $result .= sprintf($template, $this->urlBuilder->getUrl('', ['_direct' => 'core/index/notFound']));
         }
diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json
index 97d4a9ab9538d681a73400e500b4c4f8b002dc75..4481cd9cef6b380a943b5c9090bbded76cf2a2c4 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.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json
index 6c64a3d0f59f0196fa54970d40fb641cf582323c..0b55a5e7fb7583d45e8f575500caeec4108fbf84 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json
index d13968038ae92aa7d937ba680efeaaf6f043de8f..9fe7db235aa15e9e2fc07d008c844581b73ece0b 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
index da5b79ad9dbec8a79cead48922eedbb0a1b7befc..bb986e14a26c9352c86a866ef652630d881e49d2 100644
--- a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
+++ b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
@@ -173,6 +173,8 @@ class Links extends \Magento\Backend\Block\Template
             $this->_sourceModel->toOptionArray()
         )->setValue(
             $this->getProduct()->getLinksPurchasedSeparately()
+        )->setClass(
+            'admin__control-select'
         );
 
         return $select->getHtml();
diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json
index bc329ac59326dfd8271a8a56d34c5fed9634adf1..e1c4c4f63618d9fc705d4722a1ee9cda57b5f62a 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/module-gift-message": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-msrp": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/module-gift-message": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-msrp": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Downloadable/view/adminhtml/layout/catalog_product_downloadable.xml b/app/code/Magento/Downloadable/view/adminhtml/layout/catalog_product_downloadable.xml
index 136c8c3a07307f0d1131d52456f14204e73deba9..91234c097f475a6e26b6cac1b83ad4a637e374bf 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/layout/catalog_product_downloadable.xml
+++ b/app/code/Magento/Downloadable/view/adminhtml/layout/catalog_product_downloadable.xml
@@ -8,6 +8,10 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <body>
         <referenceBlock name="product_tabs">
+            <!-- @todo ui: remove arguments within .admin__scope-old -->
+            <arguments>
+                <argument name="excluded_panel" xsi:type="string">product_info_tabs_downloadable_items_content</argument>
+            </arguments>
             <action method="addTab">
                 <argument name="name" xsi:type="string">downloadable_items</argument>
                 <argument name="block" xsi:type="string">Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable</argument>
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
index db3a01d67c3cf61a3b8469d5b995c2dbd79b0810..b09be18c66169f4c3d0e1242cdd2585609a50499 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
@@ -26,7 +26,7 @@ require([
 var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                                 '<div id="<%- data.id %>" class="file-row file-row-narrow">' +
                                     '<span class="file-info">' +
-                                        '<span class="file-info-name"><%- data.name %></span>' +
+                                        '<span class="file-info-name"><%= data.name %></span>' +
                                         ' ' +
                                         '<span class="file-info-size">(<%- data.size %>)</span>' +
                                     '</span>' +
@@ -41,7 +41,7 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                                 '</div>';
 
     var fileListTemplate = '<span class="file-info">' +
-                                '<span class="file-info-name"><%- data.name %></span>' +
+                                '<span class="file-info-name"><%= data.name %></span>' +
                                 ' ' +
                                 '<span class="file-info-size">(<%- data.size %>)</span>' +
                             '</span>';
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index bf2b72140ba8a082faa3e7824016fe7310ce724b..dada69c3e47a9ba4ee7732276d71affd02ea4667 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -15,59 +15,60 @@
 ?>
 <?php $_product = $block->getProduct()?>
 <?php $block->getConfigJson() ?>
-<div class="form-inline">
-    <div class="field">
-        <label class="label" for="name"><span><?php echo __('Title')?></span></label>
-        <div class="control">
-            <input type="text" class="input-text" id="downloadable_links_title" name="product[links_title]" value="<?php echo $block->getLinksTitle() ?>" <?php echo($_product->getStoreId() && $block->getUsedDefault()) ? 'disabled="disabled"' : '' ?>>
+<fieldset class="admin__fieldset downloadable-form">
+
+    <div class="admin__field" <?php echo !$block->isSingleStoreMode() ? ' data-config-scope="' . __('[STORE VIEW]') . '"' : ''; ?>>
+        <label class="admin__field-label" for="downloadable_links_title"><span><?php echo __('Title')?></span></label>
+        <div class="admin__field-control">
+            <input type="text" class="admin__control-text" id="downloadable_links_title" name="product[links_title]" value="<?php echo $block->getLinksTitle() ?>" <?php echo($_product->getStoreId() && $block->getUsedDefault()) ? 'disabled="disabled"' : '' ?>>
             <?php if ($_product->getStoreId()): ?>
-                <input id="link_title_default" type="checkbox" name="use_default[]" value="links_title" onclick="toggleValueElements(this, this.parentNode.parentNode)" <?php echo $block->getUsedDefault() ? 'checked="checked"' : '' ?> />
-                <label class="normal" for="link_title_default"><?php echo __('Use Default Value'); ?></label>
+                <div class="admin__field admin__field-option">
+                    <input id="link_title_default" class="admin__control-checkbox" type="checkbox" name="use_default[]" value="links_title" onclick="toggleValueElements(this, this.parentNode.parentNode)" <?php echo $block->getUsedDefault() ? 'checked="checked"' : '' ?> />
+                    <label class="admin__field-label" for="link_title_default"><span><?php echo __('Use Default Value'); ?></span></label>
+                </div>
             <?php endif; ?>
         </div>
-        <div class="field-service">
-            <?php echo !$block->isSingleStoreMode() ? __('[STORE VIEW]') : ''; ?>
-        </div>
     </div>
 
-    <div class="field">
-        <label class="label" for="name"><span><?php echo __('Links can be purchased separately')?></span></label>
-        <div class="control">
+    <div class="admin__field" <?php echo !$block->isSingleStoreMode() ? ' data-config-scope="' . __('[GLOBAL]') . '"' : ''; ?>>
+        <label class="admin__field-label" for="downloadable_link_purchase_type"><span><?php echo __('Links can be purchased separately')?></span></label>
+        <div class="admin__field-control">
             <?php echo $block->getPurchasedSeparatelySelect()?>
         </div>
-        <div class="field-service">
-            <?php echo !$block->isSingleStoreMode() ? __('[GLOBAL]') : ''; ?>
+    </div>
+    <div class="admin__field admin__field-wide">
+        <div class="admin__field-control">
+            <div class="admin__control-table-wrapper">
+                <table cellspacing="0" class="admin__control-table">
+                    <thead>
+                        <tr>
+                            <th class="col-title _required"><span><?php echo __('Title') ?></span></th>
+                            <?php if ($block->getCanReadPrice() !== false) : ?>
+                                <th class="col-price"><span><?php echo __('Price') ?></span></th>
+                            <?php endif; ?>
+                            <th class="col-limit"><span><?php echo __('Max. Downloads') ?></span></th>
+                            <th class="col-option"><span><?php echo __('Shareable') ?></span></th>
+                            <th class="col-sample"><span><?php echo __('Sample') ?></span></th>
+                            <th class="col-file"><span><?php echo __('File') ?></span></th>
+                            <th class="col-sort"><span><?php echo __('Sort Order') ?></span></th>
+                            <th class="col-actions">&nbsp;</th>
+                        </tr>
+                    </thead>
+                    <tfoot>
+                        <tr>
+                            <td class="col-actions-add" colspan="8"><?php echo $block->getAddButtonHtml() ?></td>
+                        </tr>
+                    </tfoot>
+                    <tbody id="link_items_body">
+                    </tbody>
+                </table>
+            </div>
+            <div class="admin__field-note">
+                <span><?php echo __('Alphanumeric, dash and underscore characters are recommended for filenames. Improper characters are replaced with \'_\'.')?></span>
+            </div>
         </div>
     </div>
-
-    <table cellspacing="0" class="data-table">
-        <thead>
-            <tr>
-                <th><?php echo __('Title')?> <span class="required">*</span></th>
-                <?php if ($block->getCanReadPrice() !== false) : ?>
-                <th><?php echo __('Price')?></th>
-                <?php endif; ?>
-                <th><?php echo __('Max. Downloads')?></th>
-                <th><?php echo __('Shareable')?></th>
-                <th><?php echo __('Sample')?></th>
-                <th><?php echo __('File')?></th>
-                <th><?php echo __('Sort Order')?></th>
-                <th class="col-delete">&nbsp;</th>
-            </tr>
-        </thead>
-        <tfoot>
-            <tr>
-                <td colspan="8" class="col-actions-add"><?php echo $block->getAddButtonHtml()?></td>
-            </tr>
-        </tfoot>
-        <tbody id="link_items_body">
-        </tbody>
-    </table>
-
-<div><small><?php echo __('Alphanumeric, dash and underscore characters are recommended for filenames. Improper characters are replaced with \'_\'.')?></small></div>
-
-
-</div>
+</fieldset>
 <script>
 require([
     'jquery',
@@ -79,15 +80,15 @@ require([
 ], function(jQuery, registry, mageTemplate){
     registry.get('downloadable', function (Downloadable) {
         var linkTemplate = '<tr>'+
-            '<td>'+
+            '<td class="col-title">'+
                 '<input type="hidden" class="__delete__" name="downloadable[link][<%- data.id %>][is_delete]" value="" />'+
                 '<input type="hidden" name="downloadable[link][<%- data.id %>][link_id]" value="<%- data.link_id %>" />'+
-                '<input type="text" class="required-entry input-text" name="downloadable[link][<%- data.id %>][title]" value="<%- data.title %>" />'+
+                '<input type="text" class="required-entry input-text admin__control-text" name="downloadable[link][<%- data.id %>][title]" value="<%- data.title %>" />'+
                 '<?php echo $_product->getStoreId() ? '<input type="checkbox" id="downloadable_link_<%- data.id %>_title" name="downloadable[link][<%- data.id %>][use_default_title]" value="1" /><label class="normal" for="downloadable_link_<%- data.id %>_title">Use Default Value</label>' : '' ?>'+
             '</td>'+
             <?php if ($block->getCanReadPrice() !== false) : ?>
-            '<td class="input-price">'+
-                '<input type="text" id="downloadable_link_<%- data.id %>_price_value" class="input-text validate-number link-prices<?php if ($block->getCanEditPrice() === false) : ?> disabled<?php endif; ?>" name="downloadable[link][<%- data.id %>][price]" value="<%- data.price %>"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> /> ' +
+            '<td class="input-price col-price">'+
+                '<input type="text" id="downloadable_link_<%- data.id %>_price_value" class="input-text admin__control-text validate-number link-prices<?php if ($block->getCanEditPrice() === false) : ?> disabled<?php endif; ?>" name="downloadable[link][<%- data.id %>][price]" value="<%- data.price %>"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> /> ' +
                 '<label>[<?php echo $block->getBaseCurrencyCode($_product->getStoreId()) ?>]</label>' +
                 <?php if ($_product->getStoreId() && $block->getIsPriceWebsiteScope()) : ?>
                 '<br /><input type="checkbox" id="downloadable_link_<%- data.id %>_price" name="downloadable[link][<%- data.id %>][use_default_price]" value="1"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> /> <label for="downloadable_link_<%- data.id %>_price">Use Default Value</label>' +
@@ -99,16 +100,16 @@ require([
             '<input type="hidden" id="downloadable_link_<%- data.id %>_price" name="downloadable[link][<%- data.id %>][use_default_price]" value="1" />' +
             <?php endif; ?>
             <?php endif; ?>
-            '<td><input type="text" id="downloadable_link_<%- data.id %>_downloads" name="downloadable[link][<%- data.id %>][number_of_downloads]" class="input-text downloads" value="<%- data.number_of_downloads %>" />'+
-            '<p><input type="checkbox" class="checkbox" id="downloadable_link_<%- data.id %>_is_unlimited" name="downloadable[link][<%- data.id %>][is_unlimited]" value="1" <%- data.is_unlimited %> /> <label for="downloadable_link_<%- data.id %>_is_unlimited">Unlimited</label></p></td>'+
-            '<td>'+
-                '<select id="downloadable_link _<%- data.id %>_shareable" name="downloadable[link][<%- data.id %>][is_shareable]">'+
+            '<td class="col-limit"><input type="text" id="downloadable_link_<%- data.id %>_downloads" name="downloadable[link][<%- data.id %>][number_of_downloads]" class="input-text admin__control-text downloads" value="<%- data.number_of_downloads %>" />'+
+            '<p><input type="checkbox" class="checkbox admin__control-checkbox" id="downloadable_link_<%- data.id %>_is_unlimited" name="downloadable[link][<%- data.id %>][is_unlimited]" value="1" <%- data.is_unlimited %> /> <label for="downloadable_link_<%- data.id %>_is_unlimited">Unlimited</label></p></td>'+
+            '<td class="col-share">'+
+                '<select id="downloadable_link _<%- data.id %>_shareable" class="admin__control-select" name="downloadable[link][<%- data.id %>][is_shareable]">'+
                     '<option value="1">Yes</option>'+
                     '<option value="0">No</option>'+
                     '<option value="2" selected="selected">Use config</option>'+
                 '</select>'+
             '</td>'+
-            '<td>'+
+            '<td class="col-file">'+
                 '<div class="files">'+
                     '<div class="row">'+
                         '<label for="downloadable_link_<%- data.id %>_sample_file_type"><input type="radio" class="radio" id="downloadable_link_<%- data.id %>_sample_file_type" name="downloadable[link][<%- data.id %>][sample][type]" value="file"<%- data.sample_file_checked %> /> File:</label>'+
@@ -127,14 +128,14 @@ require([
                         '</div>'+
                     '</div>'+
                     '<div class="row">'+
-                        '<label for="downloadable_link_<%- data.id %>_sample_url_type"><input type="radio" class="radio" id="downloadable_link_<%- data.id %>_sample_url_type" name="downloadable[link][<%- data.id %>][sample][type]" value="url"<%- data.sample_url_checked %> /> URL:</label><input type="text" class="input-text validate-downloadable-url validate-url" name="downloadable[link][<%- data.id %>][sample][url]" value="<%- data.sample_url %>" />'+
+                        '<label for="downloadable_link_<%- data.id %>_sample_url_type"><input type="radio" class="radio" id="downloadable_link_<%- data.id %>_sample_url_type" name="downloadable[link][<%- data.id %>][sample][type]" value="url"<%- data.sample_url_checked %> /> URL:</label><input type="text" class="input-text admin__control-text validate-downloadable-url validate-url" name="downloadable[link][<%- data.id %>][sample][url]" value="<%- data.sample_url %>" />'+
                     '</div>'+
                     '<div>'+
                         '<span id="downloadable_link_<%- data.id %>_sample_container"></span>'+
                     '</div>'+
                 '</div>'+
             '</td>'+
-            '<td>'+
+            '<td class="col-file">'+
                 '<div class="files">'+
                     '<div class="row">'+
                         '<label for="downloadable_link_<%- data.id %>_file_type"><input type="radio" class="radio validate-one-required-by-name" id="downloadable_link_<%- data.id %>_file_type" name="downloadable[link][<%- data.id %>][type]" value="file"<%- data.file_checked %> /> File:</label>'+
@@ -153,16 +154,16 @@ require([
                         '</div>'+
                     '</div>'+
                     '<div class="row">'+
-                        '<label for="downloadable_link_<%- data.id %>_url_type"><input type="radio" class="radio validate-one-required-by-name" id="downloadable_link_<%- data.id %>_url_type" name="downloadable[link][<%- data.id %>][type]" value="url"<%- data.url_checked %> /> URL:</label><input type="text" class="validate-downloadable-url validate-url input-text" name="downloadable[link][<%- data.id %>][link_url]" value="<%- data.link_url %>" />'+
+                        '<label for="downloadable_link_<%- data.id %>_url_type"><input type="radio" class="radio validate-one-required-by-name" id="downloadable_link_<%- data.id %>_url_type" name="downloadable[link][<%- data.id %>][type]" value="url"<%- data.url_checked %> /> URL:</label><input type="text" class="validate-downloadable-url validate-url input-text admin__control-text" name="downloadable[link][<%- data.id %>][link_url]" value="<%- data.link_url %>" />'+
                     '</div>'+
                     '<div>'+
                         '<span id="downloadable_link_<%- data.id %>_link_container"></span>'+
                     '</div>'+
                 '</div>'+
             '</td>'+
-            '<td><input type="text" name="downloadable[link][<%- data.id %>][sort_order]" value="<%- data.sort_order %>" class="input-text sort" /></td>'+
-            '<td class="col-delete">'+
-                '<button id="downloadable_link_<%- data.id %>_delete_button" type="button" class="action- scalable delete delete-link-item"><span><span><span><?php echo __('Delete'); ?></span></span></span></button>'+
+            '<td class="col-sort"><input type="text" name="downloadable[link][<%- data.id %>][sort_order]" value="<%- data.sort_order %>" class="input-text admin__control-text sort" /></td>'+
+            '<td class="col-action">'+
+                '<button id="downloadable_link_<%- data.id %>_delete_button" type="button" class="action-remove"><span><?php echo __('Delete'); ?></span></button>'+
             '</td>'+
         '</tr>';
 
@@ -309,7 +310,7 @@ require([
                 }
             },
             bindRemoveButtons : function(){
-                var buttons = $$('tbody#link_items_body .delete-link-item');
+                var buttons = $$('tbody#link_items_body .action-remove');
                 for(var i=0;i<buttons.length;i++){
                     if(!$(buttons[i]).binded && !$(buttons[i]).hasClassName('disabled')){
                         $(buttons[i]).binded = true;
@@ -351,7 +352,7 @@ require([
                             if ($(id + ' .progressbar-container').length) {
                                 $(id + ' .progressbar-container').parent().remove();
                             }
-                            
+
                             fileSize = typeof file.size == "undefined" ?
                                 $.mage.__('We could not detect a size.') :
                                 byteConvert(file.size);
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
index 525009f591747a531c55553aeb251e81cad8d6b4..82ba490f0cf862ddce3e8a84944e889443979a62 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
@@ -15,41 +15,46 @@
 $_product = $block->getProduct();
 $block->getConfigJson();
 ?>
-<div class="form-inline">
-    <div class="field">
-        <label class="label" for="name"><span><?php echo __('Title')?></span></label>
-        <div class="control">
-            <input type="text" class="input-text" name="product[samples_title]" value="<?php echo $block->getSamplesTitle() ?>" <?php echo($_product->getStoreId() && $block->getUsedDefault()) ? 'disabled="disabled"' : '' ?>>
+<fieldset class="admin__fieldset downloadable-form">
+    <div class="admin__field"<?php echo !$block->isSingleStoreMode() ? ' data-config-scope="' . __('[STORE VIEW]') . '"' : ''; ?>>
+        <label class="admin__field-label" for="downloadable_samples_title"><span><?php echo __('Title')?></span></label>
+        <div class="admin__field-control">
+            <input type="text" class="admin__control-text" id="downloadable_samples_title" name="product[samples_title]" value="<?php echo $block->getSamplesTitle() ?>" <?php echo($_product->getStoreId() && $block->getUsedDefault()) ? 'disabled="disabled"' : '' ?>>
             <?php if ($_product->getStoreId()): ?>
-                <input id="sample_title_default" type="checkbox" name="use_default[]" value="samples_title" onclick="toggleValueElements(this, this.parentNode.parentNode)" <?php echo $block->getUsedDefault() ? 'checked="checked"' : '' ?> />
-                <label class="normal" for="sample_title_default">Use Default Value</label>
+                <div class="admin__field admin__field-option">
+                    <input id="sample_title_default" class="admin__control-checkbox" type="checkbox" name="use_default[]" value="samples_title" onclick="toggleValueElements(this, this.parentNode.parentNode)" <?php echo $block->getUsedDefault() ? 'checked="checked"' : '' ?> />
+                    <label class="admin__field-label" for="sample_title_default"><span>Use Default Value</span></label>
+                </div>
             <?php endif; ?>
         </div>
-        <div class="field-service">
-            <?php echo !$block->isSingleStoreMode() ? __('[STORE VIEW]') : ''; ?>
+    </div>
+    <div class="admin__field admin__field-wide">
+        <div class="admin__field-control">
+            <div class="admin__control-table-wrapper">
+                <table cellspacing="0" class="admin__control-table">
+                    <thead>
+                        <tr>
+                            <th class="_required col-title"><span><?php echo __('Title') ?></span></th>
+                            <th class="col-file"><span><?php echo __('File') ?></span></th>
+                            <th class="col-sort"><span><?php echo __('Sort Order') ?></span></th>
+                            <th class="col-actions">&nbsp;</th>
+                        </tr>
+                    </thead>
+                    <tfoot>
+                        <tr>
+                            <td colspan="4" class="col-actions"><?php echo $block->getAddButtonHtml() ?></td>
+                        </tr>
+                    </tfoot>
+                    <tbody id="sample_items_body">
+                    </tbody>
+                </table>
+            </div>
+            <div class="admin__field-note">
+                <span><?php echo __('Alphanumeric, dash and underscore characters are recommended for filenames. Improper characters are replaced with \'_\'.')?></span>
+            </div>
         </div>
     </div>
-
-    <table cellspacing="0" class="data-table">
-        <thead>
-            <tr>
-                <th><?php echo __('Title') ?> <span class="required">*</span></th>
-                <th><?php echo __('File') ?></th>
-                <th><?php echo __('Sort Order') ?></th>
-                <th class="col-delete">&nbsp;</th>
-            </tr>
-        </thead>
-        <tfoot>
-            <tr>
-                <td colspan="4" class="col-actions-add"><?php echo $block->getAddButtonHtml() ?></td>
-            </tr>
-        </tfoot>
-        <tbody id="sample_items_body">
-        </tbody>
-    </table>
-
-    <div><small><?php echo __('Alphanumeric, dash and underscore characters are recommended for filenames. Improper characters are replaced with \'_\'.')?></small></div>
-</div>
+</fieldset>
 <script>
 require([
     'jquery',
@@ -60,13 +65,13 @@ require([
 ], function (jQuery, registry, mageTemplate) {
     registry.get('downloadable', function (Downloadable) {
         var sampleTemplate = '<tr>'+
-                            '<td>'+
+                            '<td class="col-title">'+
                                 '<input type="hidden" class="__delete__" name="downloadable[sample][<%- data.id %>][is_delete]" value="" />'+
                                 '<input type="hidden" name="downloadable[sample][<%- data.id %>][sample_id]" value="<%- data.sample_id %>" />'+
-                                '<input type="text" class="required-entry input-text" name="downloadable[sample][<%- data.id %>][title]" value="<%- data.title %>" />'+
+                                '<input type="text" class="required-entry input-text admin__control-text" name="downloadable[sample][<%- data.id %>][title]" value="<%- data.title %>" />'+
                                 '<?php echo $_product->getStoreId() ? '<br /><input type="checkbox" id="downloadable_sample_<%- data.id %>_title" name="downloadable[sample][<%- data.id %>][use_default_title]" value="1" /><label class="normal" for="downloadable_sample_<%- data.id %>_title">Use Default Value</label>' : '' ?>'+
                             '</td>'+
-                            '<td>'+
+                            '<td class="col-file">'+
                                 '<div class="files-wide">'+
                                     '<div class="row">'+
                                         '<label for="downloadable_sample_<%- data.id %>_file_type"><input type="radio" class="radio validate-one-required-by-name" id="downloadable_sample_<%- data.id %>_file_type" name="downloadable[sample][<%- data.id %>][type]" value="file"<%- data.file_checked %> /> File:</label>'+
@@ -87,7 +92,7 @@ require([
                                         '</div>'+
                                     '</div>'+
                                     '<div class="row">'+
-                                        '<label for="downloadable_sample_<%- data.id %>_url_type"><input type="radio" class="radio validate-one-required-by-name" id="downloadable_sample_<%- data.id %>_url_type" name="downloadable[sample][<%- data.id %>][type]" value="url"<%- data.url_checked %> /> URL:</label> <input type="text" class="validate-downloadable-url validate-url input-text" name="downloadable[sample][<%- data.id %>][sample_url]" value="<%- data.sample_url %>" />'+
+                                        '<label for="downloadable_sample_<%- data.id %>_url_type"><input type="radio" class="radio validate-one-required-by-name" id="downloadable_sample_<%- data.id %>_url_type" name="downloadable[sample][<%- data.id %>][type]" value="url"<%- data.url_checked %> /> URL:</label> <input type="text" class="validate-downloadable-url validate-url input-text admin__control-text" name="downloadable[sample][<%- data.id %>][sample_url]" value="<%- data.sample_url %>" />'+
                                     '</div>'+
                                     '<div>'+
                                         '<span id="downloadable_sample_<%- data.id %>_container"></span>'+
@@ -95,9 +100,9 @@ require([
                                 '</div>'+
 
                             '</td>'+
-                            '<td><input type="text" name="downloadable[sample][<%- data.id %>][sort_order]" value="<%- data.sort_order %>" class="input-text sort" /></td>'+
-                            '<td class="col-delete">'+
-                                '<button type="button" class="action- scalable delete icon-btn delete-sample-item"><span>Delete</span></button>'+
+                            '<td class="col-sort"><input type="text" name="downloadable[sample][<%- data.id %>][sort_order]" value="<%- data.sort_order %>" class="input-text sort admin__control-text" /></td>'+
+                            '<td class="col-actions">'+
+                                '<button type="button" class="action-remove"><span>Delete</span></button>'+
                             '</td>'+
                         '</tr>';
         sampleItems = {
@@ -178,7 +183,7 @@ require([
                 }
             },
             bindRemoveButtons: function() {
-                var buttons = $$('tbody#sample_items_body .delete-sample-item');
+                var buttons = $$('tbody#sample_items_body .action-remove');
                 for(var i=0;i<buttons.length;i++){
                     if(!$(buttons[i]).binded){
                         $(buttons[i]).binded = true;
diff --git a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php
index bc7196634e0e80410fd37a4a665d5ec838f0e94b..597b4f563dd279b154b1518c1673a11e3178667f 100644
--- a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php
+++ b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php
@@ -210,7 +210,6 @@ abstract class AbstractMain extends \Magento\Backend\Block\Widget\Form\Generic
                 'name' => 'default_value_date',
                 'label' => __('Default Value'),
                 'title' => __('Default Value'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'value' => $attributeObject->getDefaultValue(),
                 'date_format' => $dateFormat
             ]
diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
index 6c2dcc71ed12a164f6a8675b18aef512523a97d0..cc3d3950d01b2d66fe48129d35506daa3a967a91 100644
--- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
@@ -733,7 +733,7 @@ abstract class AbstractEntity extends \Magento\Framework\Model\Resource\Abstract
                     /** @var \Magento\Eav\Model\Entity\Attribute\Exception $e */
                     $e = $this->_universalFactory->create(
                         'Magento\Eav\Model\Entity\Attribute\Exception',
-                        ['message' => $e->getMessage()]
+                        ['phrase' => __($e->getMessage())]
                     );
                     $e->setAttributeCode($attrCode)->setPart($part);
                     throw $e;
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Exception.php b/app/code/Magento/Eav/Model/Entity/Attribute/Exception.php
index b74c562458caa827cd330684f549a37c1e5fcd27..423c51fb6554bbb4dffcefd32caf68827c074504 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Exception.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Exception.php
@@ -10,7 +10,7 @@ namespace Magento\Eav\Model\Entity\Attribute;
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-class Exception extends \Exception
+class Exception extends \Magento\Framework\Exception\LocalizedException
 {
     /**
      * Eav entity attribute
diff --git a/app/code/Magento/Eav/Test/Unit/Helper/DataTest.php b/app/code/Magento/Eav/Test/Unit/Helper/DataTest.php
index 85191d49f74409a1c1c002b5d6680ec9a80e089e..bfe1c345dc78cec4b2c81ab77b43f1bd3eb0032a 100644
--- a/app/code/Magento/Eav/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Helper/DataTest.php
@@ -67,8 +67,8 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Helper\Data::getFrontendClasses
-     * covers \Magento\Eav\Helper\Data::_getDefaultFrontendClasses
+     * @covers \Magento\Eav\Helper\Data::getFrontendClasses
+     * @covers \Magento\Eav\Helper\Data::_getDefaultFrontendClasses
      */
     public function testGetFrontendClasses()
     {
@@ -79,7 +79,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Helper\Data::getAttributeLockedFields
+     * @covers \Magento\Eav\Helper\Data::getAttributeLockedFields
      */
     public function testGetAttributeLockedFieldsNoEntityCode()
     {
@@ -88,7 +88,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Helper\Data::getAttributeLockedFields
+     * @covers \Magento\Eav\Helper\Data::getAttributeLockedFields
      */
     public function testGetAttributeLockedFieldsNonCachedLockedFiled()
     {
@@ -100,7 +100,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Helper\Data::getAttributeLockedFields
+     * @covers \Magento\Eav\Helper\Data::getAttributeLockedFields
      */
     public function testGetAttributeLockedFieldsCachedLockedFiled()
     {
@@ -114,7 +114,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Helper\Data::getAttributeLockedFields
+     * @covers \Magento\Eav\Helper\Data::getAttributeLockedFields
      */
     public function testGetAttributeLockedFieldsNoLockedFields()
     {
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/AbstractDataTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/AbstractDataTest.php
index 21107ccaf8d5066e1b942e50814108c4edeab97b..dea0ef0f1e430708d3763660532ed0a4086eb146 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/AbstractDataTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/AbstractDataTest.php
@@ -29,8 +29,8 @@ class AbstractDataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\AbstractData::getEntity
-     * covers \Magento\Eav\Model\Attribute\Data\AbstractData::setEntity
+     * @covers \Magento\Eav\Model\Attribute\Data\AbstractData::getEntity
+     * @covers \Magento\Eav\Model\Attribute\Data\AbstractData::setEntity
      */
     public function testGetEntity()
     {
@@ -43,7 +43,7 @@ class AbstractDataTest extends \PHPUnit_Framework_TestCase
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Entity object is undefined
      *
-     * covers \Magento\Eav\Model\Attribute\Data\AbstractData::getEntity
+     * @covers \Magento\Eav\Model\Attribute\Data\AbstractData::getEntity
      */
     public function testGetEntityWhenEntityNotSet()
     {
@@ -51,8 +51,8 @@ class AbstractDataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\AbstractData::getExtractedData
-     * covers \Magento\Eav\Model\Attribute\Data\AbstractData::setExtractedData
+     * @covers \Magento\Eav\Model\Attribute\Data\AbstractData::getExtractedData
+     * @covers \Magento\Eav\Model\Attribute\Data\AbstractData::setExtractedData
      *
      * @param string $index
      * @param mixed $expectedResult
@@ -88,7 +88,7 @@ class AbstractDataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\AbstractData::_getRequestValue
+     * @covers \Magento\Eav\Model\Attribute\Data\AbstractData::_getRequestValue
      *
      * @param string $requestScope
      * @param string $value
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/BooleanTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/BooleanTest.php
index d5fbb948539950066a76a876e51bd675d7a8bf8a..0633716c029839c59d6794ae0aac565ac5a26995 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/BooleanTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/BooleanTest.php
@@ -22,7 +22,7 @@ class BooleanTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Boolean::_getOptionText
+     * @covers \Magento\Eav\Model\Attribute\Data\Boolean::_getOptionText
      *
      * @param string $format
      * @param mixed $value
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/DateTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/DateTest.php
index 7bf65f0ba3e1edade9c346643e13375f6b5541a2..bef0db9bd32329b9a9d7ddb7e933f8901edf2c75 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/DateTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/DateTest.php
@@ -23,11 +23,15 @@ class DateTest extends \PHPUnit_Framework_TestCase
         $loggerMock = $this->getMock('\Psr\Log\LoggerInterface', [], [], '', false);
         $localeResolverMock = $this->getMock('\Magento\Framework\Locale\ResolverInterface');
 
-        $this->model = new \Magento\Eav\Model\Attribute\Data\Date($this->timezoneMock, $loggerMock, $localeResolverMock);
+        $this->model = new \Magento\Eav\Model\Attribute\Data\Date(
+            $this->timezoneMock,
+            $loggerMock,
+            $localeResolverMock
+        );
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Date::outputValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Date::outputValue
      *
      * @param string $format
      * @param mixed $value
@@ -70,7 +74,7 @@ class DateTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Date::validateValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Date::validateValue
      *
      * @param mixed $value
      * @param array $rules
@@ -146,7 +150,7 @@ class DateTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Date::compactValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Date::compactValue
      *
      * @param string $value
      * @param string $expectedResult
@@ -177,7 +181,7 @@ class DateTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Date::compactValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Date::compactValue
      */
     public function testCompactValueWithFalseValue()
     {
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/FileTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/FileTest.php
index 1819870bcd0309321962ab7b72a33a5d8ab1408c..b7c7504fdd04fcaaca9da6ed70977720c430e243 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/FileTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/FileTest.php
@@ -43,7 +43,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\File::outputValue
+     * @covers \Magento\Eav\Model\Attribute\Data\File::outputValue
      *
      * @param string $format
      * @param mixed $value
@@ -94,8 +94,8 @@ class FileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\File::validateValue
-     * covers \Magento\Eav\Model\Attribute\Data\File::_validateByRules
+     * @covers \Magento\Eav\Model\Attribute\Data\File::validateValue
+     * @covers \Magento\Eav\Model\Attribute\Data\File::_validateByRules
      *
      * @param mixed $value
      * @param mixed $originalValue
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/ImageTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/ImageTest.php
index 1d57f9b066cb6e8a2b1d20f215c9bc95a1598066..44ec2364980d068a7751ffc98374360e0281744e 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/ImageTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/ImageTest.php
@@ -36,7 +36,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
      * Attention: this test depends on mock of "is_uploaded_file" function in ./FileTest.php,
      * so validates method successfully in batch run of directory tests, separately will fail.
      *
-     * covers \Magento\Eav\Model\Attribute\Data\Image::_validateByRules
+     * @covers \Magento\Eav\Model\Attribute\Data\Image::_validateByRules
      *
      * @param mixed $value
      * @param mixed $originalValue
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultilineTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultilineTest.php
index 091293f4c97e23cbb02823d91f55912e9c3e7e7f..c4ec4af05058892035ae407bcc7a813c8e33d55f 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultilineTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultilineTest.php
@@ -24,11 +24,16 @@ class MultilineTest extends \PHPUnit_Framework_TestCase
         $localeResolverMock = $this->getMock('\Magento\Framework\Locale\ResolverInterface');
         $this->stringMock = $this->getMock('\Magento\Framework\Stdlib\String', [], [], '', false);
 
-        $this->model = new \Magento\Eav\Model\Attribute\Data\Multiline($timezoneMock, $loggerMock, $localeResolverMock, $this->stringMock);
+        $this->model = new \Magento\Eav\Model\Attribute\Data\Multiline(
+            $timezoneMock,
+            $loggerMock,
+            $localeResolverMock,
+            $this->stringMock
+        );
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Multiline::extractValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Multiline::extractValue
      *
      * @param mixed $param
      * @param mixed $expectedResult
@@ -64,7 +69,7 @@ class MultilineTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Multiline::outputValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Multiline::outputValue
      *
      * @param string $format
      * @param mixed $expectedResult
@@ -108,8 +113,8 @@ class MultilineTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Multiline::validateValue
-     * covers \Magento\Eav\Model\Attribute\Data\Text::validateValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Multiline::validateValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Text::validateValue
      *
      * @param mixed $value
      * @param bool $isAttributeRequired
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultiselectTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultiselectTest.php
index 909ebe782e76272ea28ae1c07e5ad7af809a74fa..535343e60dccfac3925206395d04bb17ef922898 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultiselectTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/MultiselectTest.php
@@ -18,11 +18,15 @@ class MultiselectTest extends \PHPUnit_Framework_TestCase
         $loggerMock = $this->getMock('\Psr\Log\LoggerInterface', [], [], '', false);
         $localeResolverMock = $this->getMock('\Magento\Framework\Locale\ResolverInterface');
 
-        $this->model = new \Magento\Eav\Model\Attribute\Data\Multiselect($timezoneMock, $loggerMock, $localeResolverMock);
+        $this->model = new \Magento\Eav\Model\Attribute\Data\Multiselect(
+            $timezoneMock,
+            $loggerMock,
+            $localeResolverMock
+        );
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Multiselect::extractValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Multiselect::extractValue
      *
      * @param mixed $param
      * @param mixed $expectedResult
@@ -62,7 +66,7 @@ class MultiselectTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Multiselect::outputValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Multiselect::outputValue
      *
      * @param string $format
      * @param mixed $expectedResult
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/SelectTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/SelectTest.php
index 4ef6f7c615e30f11a60eb88428dc88e100be6434..47ebb1c766c7dd89649ef13e5861f016acaa8d1c 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/SelectTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/SelectTest.php
@@ -22,7 +22,7 @@ class SelectTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Select::outputValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Select::outputValue
      *
      * @param string $format
      * @param mixed $value
@@ -70,7 +70,7 @@ class SelectTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Select::validateValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Select::validateValue
      *
      * @param mixed $value
      * @param mixed $originalValue
@@ -132,7 +132,7 @@ class SelectTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Select::compactValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Select::compactValue
      */
     public function testCompactValue()
     {
@@ -148,7 +148,7 @@ class SelectTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Attribute\Data\Select::compactValue
+     * @covers \Magento\Eav\Model\Attribute\Data\Select::compactValue
      */
     public function testCompactValueWithFalseValue()
     {
diff --git a/app/code/Magento/Eav/Test/Unit/Model/AttributeFactoryTest.php b/app/code/Magento/Eav/Test/Unit/Model/AttributeFactoryTest.php
index fb5a4048a73d2603ebc763e22d9d002d8fb3ebc3..bbb578c31492430cdc84a4e9eb5e0979e3d323f4 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/AttributeFactoryTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/AttributeFactoryTest.php
@@ -43,7 +43,7 @@ class AttributeFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\AttributeFactory::createAttribute
+     * @covers \Magento\Eav\Model\AttributeFactory::createAttribute
      */
     public function testCreateAttribute()
     {
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/BooleanTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/BooleanTest.php
index ed531b86d23ad759debeed1e59cc9064e5ea03e9..12ce30d94c25a3ee7a281e72b257a18f65ef5a52 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/BooleanTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/BooleanTest.php
@@ -53,7 +53,7 @@ class BooleanTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Entity\Attribute\Source\Boolean::addValueSortToCollection
+     * @covers \Magento\Eav\Model\Entity\Attribute\Source\Boolean::addValueSortToCollection
      *
      * @dataProvider addValueSortToCollectionDataProvider
      * @param string $direction
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php
index acd0d2ecfbf720b8952f20081e43d91d0fc44204..bcc3efc76a954fea06a3d936d833ce74b9daebb1 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php
@@ -11,7 +11,7 @@ namespace Magento\Eav\Test\Unit\Model\Resource\Entity;
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
+     * @covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
      */
     public function testSaveOptionSystemAttribute()
     {
@@ -80,7 +80,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
+     * @covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
      */
     public function testSaveOptionNewUserDefinedAttribute()
     {
@@ -174,7 +174,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
+     * @covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
      */
     public function testSaveOptionNoValue()
     {
diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json
index 4c271cf979449080663ef1781112db155a6cc3e7..837f27f1db1cd0fec7b61a883878092b47ff7ae7 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Email/Model/AbstractTemplate.php b/app/code/Magento/Email/Model/AbstractTemplate.php
index 94cf7b362fa7261538f396ca165bd8f0318eef63..4eba984b8fcfa243c684cce9019a51444cad3283 100644
--- a/app/code/Magento/Email/Model/AbstractTemplate.php
+++ b/app/code/Magento/Email/Model/AbstractTemplate.php
@@ -143,12 +143,12 @@ abstract class AbstractTemplate extends AbstractModel implements TemplateTypesIn
      *
      * @param array $config
      * @return $this
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function setDesignConfig(array $config)
     {
         if (!isset($config['area']) || !isset($config['store'])) {
-            throw new \Magento\Framework\Exception('Design config must have area and store.');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Design config must have area and store.'));
         }
         $this->getDesignConfig()->setData($config);
         return $this;
diff --git a/app/code/Magento/Email/Model/Template.php b/app/code/Magento/Email/Model/Template.php
index 5a331546d5831ca7bfafa0a00b84a85b342c5c91..577393b498924af0885edb1affd4f97c6feec9bb 100644
--- a/app/code/Magento/Email/Model/Template.php
+++ b/app/code/Magento/Email/Model/Template.php
@@ -8,6 +8,7 @@ namespace Magento\Email\Model;
 use Magento\Email\Model\Template\Filter;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filter\Template as FilterTemplate;
+use Magento\Store\Model\ScopeInterface;
 use Magento\Store\Model\StoreManagerInterface;
 
 /**
@@ -213,7 +214,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
         $store = $this->_storeManager->getStore($store);
         $fileName = $this->_scopeConfig->getValue(
             self::XML_PATH_DESIGN_EMAIL_LOGO,
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            ScopeInterface::SCOPE_STORE,
             $store
         );
         if ($fileName) {
@@ -252,7 +253,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
         $store = $this->_storeManager->getStore($store);
         $alt = $this->_scopeConfig->getValue(
             self::XML_PATH_DESIGN_EMAIL_LOGO_ALT,
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            ScopeInterface::SCOPE_STORE,
             $store
         );
         if ($alt) {
@@ -379,7 +380,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
     /**
      * Return true if this template can be used for sending queue as main template
      *
-     * @return boolean
+     * @return bool
      */
     public function isValidForSend()
     {
@@ -409,7 +410,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      *
      * @param array $variables
      * @return string
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      */
     public function getProcessedTemplate(array $variables = [])
     {
@@ -439,7 +440,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
             $processedResult = $processor->setStoreId($storeId)->filter($this->getPreparedTemplateText());
         } catch (\Exception $e) {
             $this->_cancelDesignConfig();
-            throw new \Magento\Framework\Mail\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\MailException(__($e->getMessage()), $e);
         }
         return $processedResult;
     }
@@ -480,6 +481,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      * Get exception, generated during send() method
      *
      * @return \Exception|null
+     * @codeCoverageIgnore
      */
     public function getSendingException()
     {
@@ -491,7 +493,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      *
      * @param array $variables
      * @return string
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      */
     public function getProcessedTemplateSubject(array $variables)
     {
@@ -509,7 +511,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
             $processedResult = $processor->setStoreId($storeId)->filter($this->getTemplateSubject());
         } catch (\Exception $e) {
             $this->_cancelDesignConfig();
-            throw new \Magento\Framework\Mail\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\MailException(__($e->getMessage()), $e);
         }
         $this->_cancelDesignConfig();
         return $processedResult;
@@ -520,6 +522,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      *
      * @param string|array $bcc
      * @return $this
+     * @codeCoverageIgnore
      */
     public function addBcc($bcc)
     {
@@ -532,6 +535,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      *
      * @param string $email
      * @return $this
+     * @codeCoverageIgnore
      */
     public function setReturnPath($email)
     {
@@ -544,6 +548,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      *
      * @param string $email
      * @return $this
+     * @codeCoverageIgnore
      */
     public function setReplyTo($email)
     {
@@ -591,17 +596,17 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
     /**
      * Validate email template code
      *
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      * @return $this
      */
     public function beforeSave()
     {
         $code = $this->getTemplateCode();
         if (empty($code)) {
-            throw new \Magento\Framework\Mail\Exception(__('The template Name must not be empty.'));
+            throw new \Magento\Framework\Exception\MailException(__('The template Name must not be empty.'));
         }
         if ($this->_getResource()->checkCodeUsage($this)) {
-            throw new \Magento\Framework\Mail\Exception(__('Duplicate Of Template Name'));
+            throw new \Magento\Framework\Exception\MailException(__('Duplicate Of Template Name'));
         }
         return parent::beforeSave();
     }
@@ -610,7 +615,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
      * Get processed template
      *
      * @return string
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      */
     public function processTemplate()
     {
@@ -622,7 +627,9 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
         }
 
         if (!$this->getId()) {
-            throw new \Magento\Framework\Mail\Exception(__('Invalid transactional email code: %1', $templateId));
+            throw new \Magento\Framework\Exception\MailException(
+                __('Invalid transactional email code: %1', $templateId)
+            );
         }
 
         $this->setUseAbsoluteLinks(true);
diff --git a/app/code/Magento/Email/Model/Template/Filter.php b/app/code/Magento/Email/Model/Template/Filter.php
index 3c152b34f5a339fb71c7d23b1756c0974cddaafa..c95b3f4e21572e16f38fdb967abf3ccc25a582e8 100644
--- a/app/code/Magento/Email/Model/Template/Filter.php
+++ b/app/code/Magento/Email/Model/Template/Filter.php
@@ -526,7 +526,7 @@ class Filter extends \Magento\Framework\Filter\Template
      * also allow additional parameter "store"
      *
      * @param string[] $construction
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      * @return string
      */
     public function protocolDirective($construction)
@@ -537,7 +537,9 @@ class Filter extends \Magento\Framework\Filter\Template
             try {
                 $store = $this->_storeManager->getStore($params['store']);
             } catch (\Exception $e) {
-                throw new \Magento\Framework\Mail\Exception(__('Requested invalid store "%1"', $params['store']));
+                throw new \Magento\Framework\Exception\MailException(
+                    __('Requested invalid store "%1"', $params['store'])
+                );
             }
         }
         $isSecure = $this->_storeManager->getStore($store)->isCurrentlySecure();
diff --git a/app/code/Magento/Email/Model/Template/SenderResolver.php b/app/code/Magento/Email/Model/Template/SenderResolver.php
index f1e1a4b659883e8b36323e63c62abd2f530adf54..761aaffd756df505e460a8582f3a3da338199ee0 100644
--- a/app/code/Magento/Email/Model/Template/SenderResolver.php
+++ b/app/code/Magento/Email/Model/Template/SenderResolver.php
@@ -45,7 +45,7 @@ class SenderResolver implements \Magento\Framework\Mail\Template\SenderResolverI
         }
 
         if (!isset($result['name']) || !isset($result['email'])) {
-            throw new \Magento\Framework\Mail\Exception(__('Invalid sender data'));
+            throw new \Magento\Framework\Exception\MailException(__('Invalid sender data'));
         }
 
         return $result;
diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Edit/FormTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Edit/FormTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5d1fefa9c28797f686e8247f61d1e696fbf3454
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Edit/FormTest.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Block\Adminhtml\Template\Edit;
+
+/**
+ * @covers \Magento\Email\Block\Adminhtml\Template\Edit\Form
+ */
+class FormTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Email\Block\Adminhtml\Template\Edit\Form */
+    protected $form;
+
+    /** @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject */
+    protected $registryMock;
+
+    /** @var \Magento\Email\Model\Source\Variables|\PHPUnit_Framework_MockObject_MockObject */
+    protected $variablesMock;
+
+    /** @var \Magento\Variable\Model\VariableFactory|\PHPUnit_Framework_MockObject_MockObject */
+    protected $variableFactoryMock;
+
+    /** @var \Magento\Variable\Model\Variable|\PHPUnit_Framework_MockObject_MockObject */
+    protected $variableMock;
+
+    /** @var \Magento\Email\Model\Template|\PHPUnit_Framework_MockObject_MockObject */
+    protected $templateMock;
+
+    public function setUp()
+    {
+        $this->registryMock = $this->getMockBuilder('Magento\Framework\Registry')
+            ->disableOriginalConstructor()
+            ->setMethods(['registry'])
+            ->getMock();
+        $this->variablesMock = $this->getMockBuilder('Magento\Email\Model\Source\Variables')
+            ->disableOriginalConstructor()
+            ->setMethods(['toOptionArray'])
+            ->getMock();
+        $this->variableFactoryMock = $this->getMockBuilder('Magento\Variable\Model\VariableFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->variableMock = $this->getMockBuilder('Magento\Variable\Model\Variable')
+            ->disableOriginalConstructor()
+            ->setMethods(['getVariablesOptionArray'])
+            ->getMock();
+        $this->templateMock = $this->getMockBuilder('Magento\Email\Model\Template')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', 'getVariablesOptionArray'])
+            ->getMock();
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->form = $objectManager->getObject(
+            'Magento\Email\Block\Adminhtml\Template\Edit\Form',
+            [
+                'registry' => $this->registryMock,
+                'variableFactory' => $this->variableFactoryMock,
+                'variables' => $this->variablesMock
+            ]
+        );
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Edit\Form::getVariables
+     */
+    public function testGetVariables()
+    {
+        $this->variablesMock->expects($this->once())
+            ->method('toOptionArray')
+            ->willReturn(['var1', 'var2', 'var3']);
+        $this->variableFactoryMock->expects($this->once())
+            ->method('create')
+            ->willReturn($this->variableMock);
+        $this->variableMock->expects($this->once())
+            ->method('getVariablesOptionArray')
+            ->willReturn(['custom var 1', 'custom var 2']);
+        $this->registryMock->expects($this->once())
+            ->method('registry')
+            ->willReturn($this->templateMock);
+        $this->templateMock->expects($this->once())
+            ->method('getId')
+            ->willReturn(1);
+        $this->templateMock->expects($this->once())
+            ->method('getVariablesOptionArray')
+            ->willReturn(['template var 1', 'template var 2']);
+        $this->assertEquals(
+            [['var1', 'var2', 'var3'], ['custom var 1', 'custom var 2'], ['template var 1', 'template var 2']],
+            $this->form->getVariables()
+        );
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Edit\Form::getEmailTemplate
+     */
+    public function testGetEmailTemplate()
+    {
+        $this->registryMock->expects($this->once())
+            ->method('registry')
+            ->with('current_email_template');
+        $this->form->getEmailTemplate();
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/ActionTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/ActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc41f9ff4aaf2b88e3227ac0f0ab9bb4f876a1c8
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/ActionTest.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Block\Adminhtml\Template\Grid\Renderer;
+
+/**
+ * @covers Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Action
+ */
+class ActionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Action
+     */
+    protected $action;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $columnMock;
+
+    protected function setUp()
+    {
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->columnMock = $this->getMockBuilder('Magento\Backend\Block\Widget\Grid\Column')
+            ->disableOriginalConstructor()
+            ->setMethods(['setActions', 'getActions'])
+            ->getMock();
+        $this->action = $objectManager->getObject('Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Action');
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Action::render
+     */
+    public function testRenderNoActions()
+    {
+        $this->columnMock->expects($this->once())
+            ->method('setActions');
+        $this->columnMock->expects($this->once())
+            ->method('getActions')
+            ->willReturn('');
+        $this->action->setColumn($this->columnMock);
+        $row = new \Magento\Framework\Object();
+        $this->assertEquals('&nbsp;', $this->action->render($row));
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Action::render
+     */
+    public function testRender()
+    {
+        $this->columnMock->expects($this->once())
+            ->method('setActions');
+        $this->columnMock->expects($this->once())
+            ->method('getActions')
+            ->willReturn(['url', 'popup', 'caption']);
+        $this->action->setColumn($this->columnMock);
+        $row = new \Magento\Framework\Object();
+        $row->setId(1);
+        $this->assertContains('action-select', $this->action->render($row));
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/SenderTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/SenderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..572b341759f50c4a7a92daf40444bdd028a05078
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/SenderTest.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Block\Adminhtml\Template\Grid\Renderer;
+
+/**
+ * @covers Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender
+ */
+class SenderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender
+     */
+    protected $sender;
+
+    protected function setUp()
+    {
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->sender = $objectManager->getObject('Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender');
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender::render
+     */
+    public function testRenderName()
+    {
+        $row = new \Magento\Framework\Object();
+        $row->setTemplateSenderName('Sender Name');
+        $this->assertEquals('Sender Name ', $this->sender->render($row));
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender::render
+     */
+    public function testRenderEmail()
+    {
+        $row = new \Magento\Framework\Object();
+        $row->setTemplateSenderEmail('Sender Email');
+        $this->assertEquals('[Sender Email]', $this->sender->render($row));
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender::render
+     */
+    public function testRenderNameAndEmail()
+    {
+        $row = new \Magento\Framework\Object();
+        $row->setTemplateSenderName('Sender Name');
+        $row->setTemplateSenderEmail('Sender Email');
+        $this->assertEquals('Sender Name [Sender Email]', $this->sender->render($row));
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Sender::render
+     */
+    public function testRenderEmpty()
+    {
+        $row = new \Magento\Framework\Object();
+        $this->assertEquals('---', $this->sender->render($row));
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/TypeTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/TypeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e91708653a13afadd0af9a44dc282e5a0b83210
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/Grid/Renderer/TypeTest.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Block\Adminhtml\Template\Grid\Renderer;
+
+/**
+ * @covers Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Type
+ */
+class TypeTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Type
+     */
+    protected $type;
+
+    protected function setUp()
+    {
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->type = $objectManager->getObject('Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Type');
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Type::render
+     */
+    public function testRenderHtml()
+    {
+        $row = new \Magento\Framework\Object();
+        $row->setTemplateType(\Magento\Framework\App\TemplateTypesInterface::TYPE_HTML);
+        $this->assertEquals('HTML', $this->type->render($row));
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Type::render
+     */
+    public function testRenderText()
+    {
+        $row = new \Magento\Framework\Object();
+        $row->setTemplateType(\Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT);
+        $this->assertEquals('Text', $this->type->render($row));
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Grid\Renderer\Type::render
+     */
+    public function testRenderUnknown()
+    {
+        $row = new \Magento\Framework\Object();
+        $row->setTemplateType('xx');
+        $this->assertEquals('Unknown', $this->type->render($row));
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
index 42ecbba29562e2becee389badd395f8c3f9b3683..29f65b1f795ad795faeffd1855b24675910ea6fa 100644
--- a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
@@ -118,7 +118,7 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
     /**
      * Test exception with no store found
      *
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Design config must have area and store.
      */
     public function testToHtmlWithException()
diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/TemplateTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/TemplateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..57cb9a6392f52fa592190c66b367c7af2f24c862
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/TemplateTest.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Block\Adminhtml;
+
+/**
+ * @covers Magento\Email\Block\Adminhtml\Template
+ */
+class TemplateTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Email\Block\Adminhtml\Template */
+    protected $template;
+
+    /** @var \Magento\Backend\Block\Template\Context */
+    protected $context;
+
+    /** @var \Magento\Framework\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $urlBuilderMock;
+
+    /** @var \Magento\Backend\Block\Widget\Button\ItemFactory|\PHPUnit_Framework_MockObject_MockObject */
+    protected $itemFactoryMock;
+
+    /** @var \Magento\Backend\Block\Widget\Button\ButtonList */
+    protected $buttonList;
+
+    /** @var \Magento\Backend\Block\Widget\Button\Item|\PHPUnit_Framework_MockObject_MockObject */
+    protected $buttonMock;
+
+    /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->itemFactoryMock = $this->getMockBuilder('Magento\Backend\Block\Widget\Button\ItemFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->buttonMock = $this->getMockBuilder('Magento\Backend\Block\Widget\Button\Item')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->itemFactoryMock->expects($this->any())
+            ->method('create')
+            ->willReturn($this->buttonMock);
+        $this->buttonList = $this->objectManager->getObject(
+            'Magento\Backend\Block\Widget\Button\ButtonList',
+            [ 'itemFactory' => $this->itemFactoryMock]
+        );
+        $this->urlBuilderMock = $this->getMockForAbstractClass(
+            'Magento\Framework\UrlInterface',
+            [],
+            '',
+            false,
+            true,
+            true,
+            ['getUrl']
+        );
+        $this->context = $this->objectManager->getObject(
+            'Magento\Backend\Block\Template\Context',
+            [
+                'urlBuilder' => $this->urlBuilderMock
+            ]
+        );
+        $this->template = $this->objectManager->getObject(
+            'Magento\Email\Block\Adminhtml\Template',
+            [
+                'context' => $this->context,
+                'buttonList' => $this->buttonList
+            ]
+        );
+    }
+
+    public function testAddButton()
+    {
+        $this->template->addButton('1', ['title' => 'My Button']);
+        $buttons = $this->buttonList->getItems()[0];
+        $this->assertContains('1', array_keys($buttons));
+    }
+
+    public function testUpdateButton()
+    {
+        $this->testAddButton();
+        $this->buttonMock->expects($this->once())
+            ->method('setData')
+            ->with('title', 'Updated Button')
+            ->willReturnSelf();
+        $result = $this->template->updateButton('1', 'title', 'Updated Button');
+        $this->assertSame($this->template, $result);
+    }
+
+    public function testRemoveButton()
+    {
+        $this->testAddButton();
+        $this->template->removeButton('1');
+        $buttons = $this->buttonList->getItems()[0];
+        $this->assertNotContains('1', array_keys($buttons));
+    }
+
+    public function testGetCreateUrl()
+    {
+        $this->urlBuilderMock->expects($this->once())
+            ->method('getUrl')
+            ->with('adminhtml/*/new', []);
+        $this->template->getCreateUrl();
+    }
+
+    public function testGetHeaderText()
+    {
+        $this->assertEquals('Transactional Emails', $this->template->getHeaderText());
+    }
+
+    public function testCanRender()
+    {
+        $this->buttonMock->expects($this->once())
+            ->method('isDeleted')
+            ->willReturn(false);
+        $this->assertTrue($this->template->canRender($this->buttonMock));
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..905318c274a3901b8f43cfc3f8afed87b4e04bdc
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php
@@ -0,0 +1,259 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Controller\Adminhtml\Email\Template;
+
+/**
+ * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit
+ */
+class EditTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Email\Controller\Adminhtml\Email\Template\Edit
+     */
+    protected $editController;
+
+    /**
+     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $registryMock;
+
+    /**
+     * @var \Magento\Backend\App\Action\Context
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Framework\App\Request|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestMock;
+
+    /**
+     * @var \Magento\Framework\App\View|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $viewMock;
+
+    /**
+     * @var \Magento\Framework\View\Layout|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $layoutMock;
+
+    /**
+     * @var \Magento\Backend\Block\Menu|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $menuBlockMock;
+
+    /**
+     * @var \Magento\Backend\Block\Widget\Breadcrumbs|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $breadcrumbsBlockMock;
+
+    /**
+     * @var \Magento\Backend\Block\Widget\Breadcrumbs|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $editBlockMock;
+
+    /**
+     * @var \Magento\Framework\View\Result\Page|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultPageMock;
+
+    /**
+     * @var \Magento\Framework\View\Page\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageConfigMock;
+
+    /**
+     * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageTitleMock;
+
+    /**
+     * @return void
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    protected function setUp()
+    {
+        $this->registryMock = $this->getMockBuilder('Magento\Framework\Registry')
+            ->disableOriginalConstructor()
+            ->setMethods(['registry', 'register'])
+            ->getMock();
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->viewMock = $this->getMockBuilder('Magento\Framework\App\View')
+            ->disableOriginalConstructor()
+            ->setMethods(['loadLayout', 'getLayout', 'getPage', 'renderLayout'])
+            ->getMock();
+        $this->layoutMock = $this->getMockBuilder('Magento\Framework\View\Layout')
+            ->disableOriginalConstructor()
+            ->setMethods(['getBlock', 'createBlock', 'setChild'])
+            ->getMock();
+        $this->menuBlockMock = $this->getMockBuilder('\Magento\Backend\Block\Menu')
+            ->disableOriginalConstructor()
+            ->setMethods(['setActive', 'getMenuModel', 'getParentItems'])
+            ->getMock();
+        $this->breadcrumbsBlockMock = $this->getMockBuilder('\Magento\Backend\Block\Widget\Breadcrumbs')
+            ->disableOriginalConstructor()
+            ->setMethods(['addLink'])
+            ->getMock();
+        $this->editBlockMock = $this->getMockBuilder('\Magento\Backend\Block\Widget\Breadcrumbs')
+            ->disableOriginalConstructor()
+            ->setMethods(['setEditMode'])
+            ->getMock();
+        $this->resultPageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page')
+            ->disableOriginalConstructor()
+            ->setMethods(['setActiveMenu', 'getConfig', 'addBreadcrumb'])
+            ->getMock();
+        $this->pageConfigMock = $this->getMockBuilder('Magento\Framework\View\Page\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->pageTitleMock = $this->getMockBuilder('Magento\Framework\View\Page\Title')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->viewMock->expects($this->atLeastOnce())
+            ->method('getLayout')
+            ->willReturn($this->layoutMock);
+        $this->layoutMock->expects($this->any())
+            ->method('getBlock')
+            ->willReturnMap(
+                [
+                    ['menu', $this->menuBlockMock],
+                    ['breadcrumbs', $this->breadcrumbsBlockMock],
+                    ['edit', $this->editBlockMock]
+                ]
+            );
+        $this->menuBlockMock->expects($this->any())
+            ->method('getMenuModel')
+            ->will($this->returnSelf());
+        $this->menuBlockMock->expects($this->any())
+            ->method('getParentItems')
+            ->will($this->returnValue([]));
+        $this->viewMock->expects($this->any())
+            ->method('getPage')
+            ->willReturn($this->resultPageMock);
+        $this->resultPageMock->expects($this->any())
+            ->method('getConfig')
+            ->willReturn($this->pageConfigMock);
+        $this->pageConfigMock->expects($this->any())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+        $this->layoutMock->expects($this->once())
+            ->method('createBlock')
+            ->with('Magento\Email\Block\Adminhtml\Template\Edit', 'template_edit', [])
+            ->willReturn($this->editBlockMock);
+        $this->editBlockMock->expects($this->once())
+            ->method('setEditMode')
+            ->willReturnSelf();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $templateMock = $this->getMockBuilder('Magento\Email\Model\Template')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $templateMock->expects($this->once())
+            ->method('getId')
+            ->willReturn(1);
+        $templateMock->expects($this->any())
+            ->method('getTemplateCode')
+            ->willReturn('My Template');
+        $objectManagerMock = $this->getMockBuilder('Magento\Framework\App\ObjectManager')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $objectManagerMock->expects($this->once())
+            ->method('create')
+            ->with('Magento\Email\Model\BackendTemplate')
+            ->willReturn($templateMock);
+        $this->context = $objectManager->getObject(
+            'Magento\Backend\App\Action\Context',
+            [
+                'request' => $this->requestMock,
+                'objectManager' => $objectManagerMock,
+                'view' => $this->viewMock
+            ]
+        );
+        $this->editController = $objectManager->getObject(
+            'Magento\Email\Controller\Adminhtml\Email\Template\Edit',
+            [
+                'context' => $this->context,
+                'coreRegistry' => $this->registryMock
+            ]
+        );
+    }
+
+    /**
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit::execute
+     */
+    public function testExecuteNewTemplate()
+    {
+        $this->requestMock->expects($this->any())
+            ->method('getParam')
+            ->with('id')
+            ->willReturn(0);
+        $this->registryMock->expects($this->atLeastOnce())
+            ->method('registry')
+            ->willReturnMap(
+                [
+                    ['email_template', true],
+                    ['current_email_template', true]
+                ]
+            );
+        $this->pageTitleMock->expects($this->any())
+            ->method('prepend')
+            ->willReturnMap(
+                [
+                    ['Email Templates', $this->returnSelf()],
+                    ['New Template', $this->returnSelf()]
+                ]
+            );
+        $this->breadcrumbsBlockMock->expects($this->any())
+            ->method('addLink')
+            ->willReturnMap(
+                [
+                    ['Transactional Emails', 'Transactional Emails', null, $this->returnSelf()],
+                    ['New Template', 'New System Template', null, $this->returnSelf()]
+                ]
+            );
+
+        $this->assertNull($this->editController->execute());
+    }
+
+    /**
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit::execute
+     */
+    public function testExecuteEdit()
+    {
+        $this->requestMock->expects($this->any())
+            ->method('getParam')
+            ->with('id')
+            ->willReturn(1);
+        $this->registryMock->expects($this->atLeastOnce())
+            ->method('registry')
+            ->willReturnMap(
+                [
+                    ['email_template', false],
+                    ['current_email_template', false]
+                ]
+            );
+        $this->pageTitleMock->expects($this->any())
+            ->method('prepend')
+            ->willReturnMap(
+                [
+                    ['Email Templates', $this->returnSelf()],
+                    ['My Template', $this->returnSelf()]
+                ]
+            );
+        $this->breadcrumbsBlockMock->expects($this->any())
+            ->method('addLink')
+            ->willReturnMap(
+                [
+                    ['Transactional Emails', 'Transactional Emails', null, $this->returnSelf()],
+                    ['Edit Template', 'Edit System Template', null, $this->returnSelf()]
+                ]
+            );
+
+        $this->assertNull($this->editController->execute());
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5ada6573f6b86c0c52a99a850944c56aacfc26b
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
@@ -0,0 +1,192 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Controller\Adminhtml\Email\Template;
+
+/**
+ * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index
+ */
+class IndexTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Email\Controller\Adminhtml\Email\Template\Index
+     */
+    protected $indexController;
+
+    /**
+     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $registryMock;
+
+    /**
+     * @var \Magento\Backend\App\Action\Context
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Framework\App\Request|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestMock;
+
+    /**
+     * @var \Magento\Framework\App\View|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $viewMock;
+
+    /**
+     * @var \Magento\Framework\View\Layout|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $layoutMock;
+
+    /**
+     * @var \Magento\Backend\Block\Menu|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $menuBlockMock;
+
+    /**
+     * @var \Magento\Backend\Block\Widget\Breadcrumbs|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $breadcrumbsBlockMock;
+
+    /**
+     * @var \Magento\Framework\View\Result\Page|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultPageMock;
+
+    /**
+     * @var \Magento\Framework\View\Page\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageConfigMock;
+
+    /**
+     * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageTitleMock;
+
+    protected function setUp()
+    {
+        $this->registryMock = $this->getMockBuilder('Magento\Framework\Registry')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->viewMock = $this->getMockBuilder('Magento\Framework\App\View')
+            ->disableOriginalConstructor()
+            ->setMethods(['loadLayout', 'getLayout', 'getPage', 'renderLayout'])
+            ->getMock();
+        $this->layoutMock = $this->getMockBuilder('Magento\Framework\View\Layout')
+            ->disableOriginalConstructor()
+            ->setMethods(['getBlock'])
+            ->getMock();
+        $this->menuBlockMock = $this->getMockBuilder('\Magento\Backend\Block\Menu')
+            ->disableOriginalConstructor()
+            ->setMethods(['setActive', 'getMenuModel', 'getParentItems'])
+            ->getMock();
+        $this->breadcrumbsBlockMock = $this->getMockBuilder('\Magento\Backend\Block\Widget\Breadcrumbs')
+            ->disableOriginalConstructor()
+            ->setMethods(['addLink'])
+            ->getMock();
+        $this->resultPageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page')
+            ->disableOriginalConstructor()
+            ->setMethods(['setActiveMenu', 'getConfig', 'addBreadcrumb'])
+            ->getMock();
+        $this->pageConfigMock = $this->getMockBuilder('Magento\Framework\View\Page\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->pageTitleMock = $this->getMockBuilder('Magento\Framework\View\Page\Title')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->context = $objectManager->getObject(
+            'Magento\Backend\App\Action\Context',
+            [
+                'request' => $this->requestMock,
+                'view' => $this->viewMock
+            ]
+        );
+        $this->indexController = $objectManager->getObject(
+            'Magento\Email\Controller\Adminhtml\Email\Template\Index',
+            [
+                'context' => $this->context,
+                'coreRegistry' => $this->registryMock
+            ]
+        );
+    }
+
+    /**
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::execute
+     */
+    public function testExecute()
+    {
+        $this->prepareExecute();
+
+        $this->viewMock->expects($this->atLeastOnce())
+            ->method('getLayout')
+            ->willReturn($this->layoutMock);
+        $this->layoutMock->expects($this->at(0))
+            ->method('getBlock')
+            ->with('menu')
+            ->will($this->returnValue($this->menuBlockMock));
+        $this->menuBlockMock->expects($this->any())
+            ->method('getMenuModel')
+            ->will($this->returnSelf());
+        $this->menuBlockMock->expects($this->any())
+            ->method('getParentItems')
+            ->will($this->returnValue([]));
+        $this->viewMock->expects($this->once())
+            ->method('getPage')
+            ->willReturn($this->resultPageMock);
+        $this->resultPageMock->expects($this->once())
+            ->method('getConfig')
+            ->willReturn($this->pageConfigMock);
+        $this->pageConfigMock->expects($this->once())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+        $this->pageTitleMock->expects($this->once())
+            ->method('prepend')
+            ->with('Email Templates');
+        $this->layoutMock->expects($this->at(1))
+            ->method('getBlock')
+            ->with('breadcrumbs')
+            ->will($this->returnValue($this->breadcrumbsBlockMock));
+        $this->breadcrumbsBlockMock->expects($this->any())
+            ->method('addLink')
+            ->willReturnSelf();
+
+        $this->assertNull($this->indexController->execute());
+    }
+
+    /**
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::execute
+     */
+    public function testExecuteAjax()
+    {
+        $this->prepareExecute(true);
+        $indexController = $this->getMockBuilder('Magento\Email\Controller\Adminhtml\Email\Template\Index')
+            ->setMethods(['getRequest', '_forward'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $indexController->expects($this->once())
+            ->method('getRequest')
+            ->will($this->returnValue($this->requestMock));
+        $indexController->expects($this->once())
+            ->method('_forward')
+            ->with('grid');
+        $this->assertNull($indexController->execute());
+    }
+
+    /**
+     * @param bool $ajax
+     */
+    protected function prepareExecute($ajax = false)
+    {
+        $this->requestMock->expects($this->once())
+            ->method('getQuery')
+            ->with('ajax')
+            ->willReturn($ajax);
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Model/AbstractTemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/AbstractTemplateTest.php
index bfdd32f7e55421599563f7da80f170a757111b31..d0bd4041ac324bf41e9d5a93fe45b62d07b6a7b6 100644
--- a/app/code/Magento/Email/Test/Unit/Model/AbstractTemplateTest.php
+++ b/app/code/Magento/Email/Test/Unit/Model/AbstractTemplateTest.php
@@ -39,7 +39,7 @@ class AbstractTemplateTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param array $config
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @dataProvider invalidInputParametersDataProvider
      */
     public function testSetDesignConfigWithInvalidInputParametersThrowsException($config)
diff --git a/app/code/Magento/Email/Test/Unit/Model/Source/VariablesTest.php b/app/code/Magento/Email/Test/Unit/Model/Source/VariablesTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e74ee0d625c59904e80c1e974f5edff2314be4c4
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Model/Source/VariablesTest.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Model\Source;
+
+use Magento\Store\Model\Store;
+
+/**
+ * Unit test for Magento\Email\Model\Source\Variables
+ */
+class VariablesTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * Variables model
+     *
+     * @var \Magento\Email\Model\Source\Variables
+     */
+    protected $model;
+
+    /**
+     * Config variables
+     *
+     * @var array
+     */
+    protected $configVariables;
+
+    protected function setup()
+    {
+        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->model = $helper->getObject('Magento\Email\Model\Source\Variables');
+        $this->configVariables = [
+            [
+                'value' => Store::XML_PATH_UNSECURE_BASE_URL,
+                'label' => __('Base Unsecure URL'),
+            ],
+            ['value' => Store::XML_PATH_SECURE_BASE_URL, 'label' => __('Base Secure URL')],
+            ['value' => 'trans_email/ident_general/name', 'label' => __('General Contact Name')],
+            ['value' => 'trans_email/ident_general/email', 'label' => __('General Contact Email')],
+            ['value' => 'trans_email/ident_sales/name', 'label' => __('Sales Representative Contact Name')],
+            ['value' => 'trans_email/ident_sales/email', 'label' => __('Sales Representative Contact Email')],
+            ['value' => 'trans_email/ident_custom1/name', 'label' => __('Custom1 Contact Name')],
+            ['value' => 'trans_email/ident_custom1/email', 'label' => __('Custom1 Contact Email')],
+            ['value' => 'trans_email/ident_custom2/name', 'label' => __('Custom2 Contact Name')],
+            ['value' => 'trans_email/ident_custom2/email', 'label' => __('Custom2 Contact Email')],
+            ['value' => 'general/store_information/name', 'label' => __('Store Name')],
+            ['value' => 'general/store_information/phone', 'label' => __('Store Phone Number')],
+            ['value' => 'general/store_information/country_id', 'label' => __('Country')],
+            ['value' => 'general/store_information/region_id', 'label' => __('Region/State')],
+            ['value' => 'general/store_information/postcode', 'label' => __('Zip/Postal Code')],
+            ['value' => 'general/store_information/city', 'label' => __('City')],
+            ['value' => 'general/store_information/street_line1', 'label' => __('Street Address 1')],
+            ['value' => 'general/store_information/street_line2', 'label' => __('Street Address 2')],
+        ];
+    }
+
+    public function testToOptionArrayWithoutGroup()
+    {
+        $optionArray = $this->model->toOptionArray();
+        $this->assertEquals(count($this->configVariables), count($optionArray));
+
+        $index = 0;
+        foreach ($optionArray as $variable) {
+            $expectedValue = '{{config path="' . $this->configVariables[$index]['value'] . '"}}';
+            $expectedLabel = $this->configVariables[$index]['label'];
+            $this->assertEquals($expectedValue, $variable['value']);
+            $this->assertEquals($expectedLabel, $variable['label']->getText());
+            $index++;
+        }
+    }
+
+    public function testToOptionArrayWithGroup()
+    {
+        $optionArray = $this->model->toOptionArray(true);
+        $this->assertEquals('Store Contact Information', $optionArray['label']->getText());
+
+        $optionArrayValues = $optionArray['value'];
+        $this->assertEquals(count($this->configVariables), count($optionArrayValues));
+
+        $index = 0;
+        foreach ($optionArrayValues as $variable) {
+            $expectedValue = '{{config path="' . $this->configVariables[$index]['value'] . '"}}';
+            $expectedLabel = $this->configVariables[$index]['label'];
+            $this->assertEquals($expectedValue, $variable['value']);
+            $this->assertEquals($expectedLabel, $variable['label']->getText());
+            $index++;
+        }
+    }
+}
diff --git a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php
index 304621aa78b5ee06d108e5a8ddb4f83c448e2ef1..c18cab16cf5844c798af57c0bc12b19711802c76 100644
--- a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php
+++ b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php
@@ -5,8 +5,737 @@
  */
 namespace Magento\Email\Test\Unit\Model;
 
+use Magento\Email\Model\Template\Filter;
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Filter\Template as FilterTemplate;
+
+/**
+ * Covers \Magento\Email\Model\Template
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class TemplateTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $context;
+
+    /**
+     * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $design;
+
+    /**
+     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $registry;
+
+    /**
+     * @var \Magento\Store\Model\App\Emulation|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $appEmulation;
+
+    /**
+     * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $storeManager;
+
+    /**
+     * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filesystem;
+
+    /**
+     * @var \Magento\Framework\View\Asset\Repository|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $assetRepo;
+
+    /**
+     * @var \Magento\Framework\View\FileSystem|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $viewFileSystem;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $scopeConfig;
+
+    /**
+     * @var \Magento\Email\Model\Template\FilterFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $emailFilterFactory;
+
+    /**
+     * @var \Magento\Email\Model\Template\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $emailConfig;
+
+    public function setUp()
+    {
+        $this->context = $this->getMockBuilder('Magento\Framework\Model\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->design = $this->getMockBuilder('Magento\Framework\View\DesignInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->registry = $this->getMockBuilder('Magento\Framework\Registry')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->appEmulation = $this->getMockBuilder('Magento\Store\Model\App\Emulation')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->storeManager = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->filesystem = $this->getMockBuilder('Magento\Framework\Filesystem')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->assetRepo = $this->getMockBuilder('Magento\Framework\View\Asset\Repository')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->viewFileSystem = $this->getMockBuilder('Magento\Framework\View\FileSystem')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->scopeConfig = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->emailFilterFactory = $this->getMockBuilder('Magento\Email\Model\Template\FilterFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->emailConfig = $this->getMockBuilder('Magento\Email\Model\Template\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
+
+    /**
+     * Return the model under test with additional methods mocked.
+     *
+     * @param $mockedMethods array
+     * @return \Magento\Email\Model\Template|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getModelMock(array $mockedMethods = [])
+    {
+        return $this->getMockBuilder('Magento\Email\Model\Template')
+            ->setMethods(array_merge($mockedMethods, ['__wakeup', '__sleep', '_init']))
+            ->setConstructorArgs(
+                [
+                    $this->context,
+                    $this->design,
+                    $this->registry,
+                    $this->appEmulation,
+                    $this->storeManager,
+                    $this->filesystem,
+                    $this->assetRepo,
+                    $this->viewFileSystem,
+                    $this->scopeConfig,
+                    $this->emailFilterFactory,
+                    $this->emailConfig
+                ]
+            )
+            ->getMock();
+    }
+
+    public function testGetDefaultEmailLogo()
+    {
+        $model = $this->getModelMock();
+        $value = 'urlWithParamsValue';
+        $this->assetRepo->method('getUrlWithParams')
+            ->with('Magento_Email::logo_email.png', ['area' => \Magento\Framework\App\Area::AREA_FRONTEND])
+            ->will($this->returnValue($value));
+        $this->assertEquals($value, $model->getDefaultEmailLogo());
+    }
+
+    public function testSetAndGetTemplateFilter()
+    {
+        $model = $this->getModelMock();
+        $filterTemplate = $this->getMockBuilder('Magento\Framework\Filter\Template')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $model->setTemplateFilter($filterTemplate);
+        $this->assertSame($filterTemplate, $model->getTemplateFilter());
+    }
+
+    public function testGetTemplateFilterWithEmptyValue()
+    {
+        $filterTemplate = $this->getMockBuilder('Magento\Framework\Filter\Template')
+            ->setMethods(['setUseAbsoluteLinks', 'setStoreId'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $filterTemplate->expects($this->once())
+            ->method('setUseAbsoluteLinks')
+            ->will($this->returnSelf());
+        $filterTemplate->expects($this->once())
+            ->method('setStoreId')
+            ->will($this->returnSelf());
+        $this->emailFilterFactory->method('create')
+            ->will($this->returnValue($filterTemplate));
+        $designConfig = $this->getMockBuilder('Magento\Framework\Object')
+            ->setMethods(['getStore'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $model = $this->getModelMock(['getUseAbsoluteLinks', 'getDesignConfig']);
+        $model->expects($this->once())
+            ->method('getDesignConfig')
+            ->will($this->returnValue($designConfig));
+
+        $this->assertSame($filterTemplate, $model->getTemplateFilter());
+    }
+
+    /**
+     * @param $templateType string
+     * @param $templateText string
+     * @param $parsedTemplateText string
+     * @param $expectedTemplateSubject string|null
+     * @param $expectedOrigTemplateVariables array|null
+     * @param $expectedTemplateStyles string|null
+     * @dataProvider loadDefaultDataProvider
+     */
+    public function testLoadDefault(
+        $templateType,
+        $templateText,
+        $parsedTemplateText,
+        $expectedTemplateSubject,
+        $expectedOrigTemplateVariables,
+        $expectedTemplateStyles
+    ) {
+        $model = $this->getModelMock();
+
+        $templateId = 'templateId';
+
+        $templateFile = 'templateFile';
+        $this->emailConfig->expects($this->once())
+            ->method('getTemplateFilename')
+            ->with($templateId)
+            ->will($this->returnValue($templateFile));
+        $this->emailConfig->expects($this->once())
+            ->method('getTemplateType')
+            ->with($templateId)
+            ->will($this->returnValue($templateType));
+
+        $modulesDir = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\ReadInterface')
+            ->setMethods(['readFile', 'getRelativePath'])
+            ->getMockForAbstractClass();
+
+        $relativePath = 'relativePath';
+        $modulesDir->expects($this->once())
+            ->method('getRelativePath')
+            ->with($templateFile)
+            ->will($this->returnValue($relativePath));
+        $modulesDir->expects($this->once())
+            ->method('readFile')
+            ->will($this->returnValue($templateText));
+
+        $this->filesystem->expects($this->once())
+            ->method('getDirectoryRead')
+            ->with(\Magento\Framework\App\Filesystem\DirectoryList::MODULES)
+            ->will($this->returnValue($modulesDir));
+
+        $model->loadDefault($templateId);
+
+        if ($templateType === 'html') {
+            $this->assertEquals(\Magento\Email\Model\Template::TYPE_HTML, $model->getTemplateType());
+        } else {
+            $this->assertEquals(\Magento\Email\Model\Template::TYPE_TEXT, $model->getTemplateType());
+        }
+        $this->assertEquals($templateId, $model->getId());
+        $this->assertEquals($parsedTemplateText, $model->getTemplateText());
+        $this->assertEquals($expectedTemplateSubject, $model->getTemplateSubject());
+        $this->assertEquals($expectedOrigTemplateVariables, $model->getData('orig_template_variables'));
+        $this->assertEquals($expectedTemplateStyles, $model->getTemplateStyles());
+    }
+
+    public function loadDefaultDataProvider()
+    {
+        return [
+            'empty' => [
+                'templateType' => 'html',
+                'templateText' => '',
+                'parsedTemplateText' => '',
+                'expectedTemplateSubject' => null,
+                'expectedOrigTemplateVariables' => null,
+                'expectedTemplateStyles' => null,
+            ],
+            'copyright in Plain Text Removed' => [
+                'templateType' => 'text',
+                'templateText' => '<!-- Copyright © 2015 Magento. All rights reserved. -->',
+                'parsedTemplateText' => '',
+                'expectedTemplateSubject' => null,
+                'expectedOrigTemplateVariables' => null,
+                'expectedTemplateStyles' => null,
+            ],
+            'copyright in HTML Remains' => [
+                'templateType' => 'html',
+                'templateText' => '<!-- Copyright © 2015 Magento. All rights reserved. -->',
+                'parsedTemplateText' => '<!-- Copyright © 2015 Magento. All rights reserved. -->',
+                'expectedTemplateSubject' => null,
+                'expectedOrigTemplateVariables' => null,
+                'expectedTemplateStyles' => null,
+            ],
+            'subject set' => [
+                'templateType' => 'html',
+                'templateText' => '<!--@subject Email Subject @-->',
+                'parsedTemplateText' => '',
+                'expectedTemplateSubject' => 'Email Subject',
+                'expectedOrigTemplateVariables' => null,
+                'expectedTemplateStyles' => null,
+            ],
+            'orig_template_variables set' => [
+                'templateType' => 'html',
+                'templateText' => '<!--@vars {"store url=\"\"":"Store Url"} @-->Some Other Text',
+                'parsedTemplateText' => 'Some Other Text',
+                'expectedTemplateSubject' => null,
+                'expectedOrigTemplateVariables' => '{"store url=\"\"":"Store Url"}',
+                'expectedTemplateStyles' => null,
+            ],
+            'styles' => [
+                'templateType' => 'html',
+                'templateText' => '<!--@vars {"store url=\"\"":"Store Url"} @-->Some Other Text',
+                'parsedTemplateText' => 'Some Other Text',
+                'expectedTemplateSubject' => null,
+                'expectedOrigTemplateVariables' => '{"store url=\"\"":"Store Url"}',
+                'expectedTemplateStyles' => null,
+            ],
+        ];
+    }
+
+    public function testLoadByCode()
+    {
+        $templateCode = 'templateCode';
+        $templateData = ['templateData'];
+        $resource = $this->getMockBuilder('Magento\Email\Model\Resource\Template')
+            ->setMethods(['loadByCode'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $resource->expects($this->once())
+            ->method('loadByCode')
+            ->with($templateCode)
+            ->will($this->returnValue($templateData));
+        $model = $this->getModelMock(['addData', 'getResource']);
+        $model->expects($this->once())
+            ->method('getResource')
+            ->will($this->returnValue($resource));
+        $model->expects($this->once())
+            ->method('addData')
+            ->with($templateData);
+        $this->assertEquals($model, $model->loadByCode($templateCode));
+    }
+
+    public function testGetAndSetId()
+    {
+        $model = $this->getModelMock();
+        $templateId = 'templateId';
+        $this->assertEquals($model, $model->setId($templateId));
+        $this->assertEquals($templateId, $model->getId());
+    }
+
+    /**
+     * @param $isSMTPDisabled bool
+     * @param $senderName string
+     * @param $senderEmail string
+     * @param $templateSubject string
+     * @dataProvider isValidForSendDataProvider
+     */
+    public function testIsValidForSend($isSMTPDisabled, $senderName, $senderEmail, $templateSubject, $expectedValue)
+    {
+        $this->scopeConfig->expects($this->once())
+            ->method('isSetFlag')
+            ->with('system/smtp/disable', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)
+            ->will($this->returnValue($isSMTPDisabled));
+        $model = $this->getModelMock(['getSenderName', 'getSenderEmail', 'getTemplateSubject']);
+        $model->expects($this->any())
+            ->method('getSenderName')
+            ->will($this->returnValue($senderName));
+        $model->expects($this->any())
+            ->method('getSenderEmail')
+            ->will($this->returnValue($senderEmail));
+        $model->expects($this->any())
+            ->method('getTemplateSubject')
+            ->will($this->returnValue($templateSubject));
+        $this->assertEquals($expectedValue, $model->isValidForSend());
+    }
+
+    public function isValidForSendDataProvider()
+    {
+        return [
+            'should be valid' => [
+                'isSMTPDisabled' => false,
+                'senderName' => 'sender name',
+                'senderEmail' => 'email@example.com',
+                'templateSubject' => 'template subject',
+                'expectedValue' => true
+            ],
+            'no smtp so not valid' => [
+                'isSMTPDisabled' => true,
+                'senderName' => 'sender name',
+                'senderEmail' => 'email@example.com',
+                'templateSubject' => 'template subject',
+                'expectedValue' => false
+            ],
+            'no sender name so not valid' => [
+                'isSMTPDisabled' => false,
+                'senderName' => '',
+                'senderEmail' => 'email@example.com',
+                'templateSubject' => 'template subject',
+                'expectedValue' => false
+            ],
+            'no sender email so not valid' => [
+                'isSMTPDisabled' => false,
+                'senderName' => 'sender name',
+                'senderEmail' => '',
+                'templateSubject' => 'template subject',
+                'expectedValue' => false
+            ],
+            'no subject so not valid' => [
+                'isSMTPDisabled' => false,
+                'senderName' => 'sender name',
+                'senderEmail' => 'email@example.com',
+                'templateSubject' => '',
+                'expectedValue' => false
+            ],
+        ];
+    }
+
+    /**
+     * @param $variables array
+     * @param $templateType string
+     * @param $storeId int
+     * @param $expectedVariables array
+     * @param $expectedResult string
+     * @dataProvider getProcessedTemplateProvider
+     */
+    public function testGetProcessedTemplate($variables, $templateType, $storeId, $expectedVariables, $expectedResult)
+    {
+        $filterTemplate = $this->getMockBuilder('Magento\Framework\Filter\Template')
+            ->setMethods([
+                'setUseSessionInUrl',
+                'setPlainTemplateMode',
+                'setVariables',
+                'setStoreId',
+                'filter',
+                'getStoreId',
+            ])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $filterTemplate->expects($this->once())
+            ->method('setUseSessionInUrl')
+            ->with(false)
+            ->will($this->returnSelf());
+        $filterTemplate->expects($this->once())
+            ->method('setPlainTemplateMode')
+            ->with($templateType === \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT)
+            ->will($this->returnSelf());
+        $filterTemplate->expects($this->any())
+            ->method('setStoreId')
+            ->will($this->returnSelf());
+        $filterTemplate->expects($this->any())
+            ->method('getStoreId')
+            ->will($this->returnValue($storeId));
+
+        $store = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->setMethods(['getFrontendName'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $store->expects($this->any())
+            ->method('getFrontendName')
+            ->will($this->returnValue('frontendName'));
+        $this->storeManager->expects($this->any())
+            ->method('getStore')
+            ->will($this->returnValue($store));
+
+        $model = $this->getModelMock(['getDesignConfig', '_applyDesignConfig', 'getPreparedTemplateText']);
+        $model->setTemplateFilter($filterTemplate);
+        $model->setTemplateType($templateType);
+
+        $designConfig = $this->getMockBuilder('Magento\Framework\Object')
+            ->setMethods(['getStore'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $storeId = 'storeId';
+        $designConfig->expects($this->once())
+            ->method('getStore')
+            ->will($this->returnValue($storeId));
+        $model->expects($this->once())
+            ->method('getDesignConfig')
+            ->will($this->returnValue($designConfig));
+        $filterTemplate->expects($this->once())
+            ->method('setVariables')
+            ->with(array_merge([ 'this' => $model], $expectedVariables));
+
+        $preparedTemplateText = 'prepared text';
+        $model->expects($this->once())
+            ->method('getPreparedTemplateText')
+            ->will($this->returnValue($preparedTemplateText));
+        $filterTemplate->expects($this->once())
+            ->method('filter')
+            ->with($preparedTemplateText)
+            ->will($this->returnValue($expectedResult));
+
+        $this->assertEquals($expectedResult, $model->getProcessedTemplate($variables));
+    }
+
+    /**
+     * @return array
+     */
+    public function getProcessedTemplateProvider()
+    {
+        return [
+            'default' => [
+                'variables' => [],
+                'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT,
+                'storeId' => 1,
+                'expectedVariables' => [
+                    'logo_url' => null,
+                    'logo_alt' => 'frontendName',
+                ],
+                'expectedResult' => 'expected result',
+            ],
+            'logo variables set' => [
+                'variables' => [
+                    'logo_url' => 'http://example.com/logo',
+                    'logo_alt' => 'Logo Alt',
+                ],
+                'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_HTML,
+                'storeId' => 1,
+                'expectedVariables' => [
+                    'logo_url' => 'http://example.com/logo',
+                    'logo_alt' => 'Logo Alt',
+                ],
+                'expectedResult' => 'expected result',
+            ],
+        ];
+    }
+
+    /**
+     * @param $templateType string
+     * @param $templateStyles string
+     * @param $templateText string
+     * @param $expectedResult string
+     * @dataProvider getPreparedTemplateTextProvider
+     */
+    public function testGetPreparedTemplateText($templateType, $templateStyles, $templateText, $expectedResult)
+    {
+        $model = $this->getModelMock();
+        $model->setTemplateType($templateType);
+        $model->setTemplateStyles($templateStyles);
+        $model->setTemplateText($templateText);
+        $this->assertEquals($expectedResult, $model->getPreparedTemplateText());
+    }
+
+    public function getPreparedTemplateTextProvider()
+    {
+        return [
+            'plain text' => [
+                'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT,
+                'templateStyles' => '<style>',
+                'templateText' => 'template text',
+                'expectedResult' => 'template text',
+            ],
+            'html no style' => [
+                'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_HTML,
+                'templateStyles' => '',
+                'templateText' => 'template text',
+                'expectedResult' => 'template text',
+            ],
+            'html with style' => [
+                'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_HTML,
+                'templateStyles' => '.body { color: orange }',
+                'templateText' => 'template text',
+                'expectedResult' =>
+                    '<style type="text/css">' . "\n.body { color: orange }\n</style>\n" . 'template text',
+            ],
+        ];
+    }
+
+    public function testGetProcessedTemplateSubject()
+    {
+        $model = $this->getModelMock(['getTemplateFilter', 'getDesignConfig', '_applyDesignConfig']);
+
+        $templateSubject = 'templateSubject';
+        $model->setTemplateSubject($templateSubject);
+
+        $filterTemplate = $this->getMockBuilder('Magento\Framework\Filter\Template')
+            ->setMethods(['setVariables', 'setStoreId', 'filter'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $model->expects($this->once())
+            ->method('getTemplateFilter')
+            ->will($this->returnValue($filterTemplate));
+
+        $model->expects($this->once())
+            ->method('_applyDesignConfig');
+
+        $designConfig = $this->getMockBuilder('Magento\Framework\Object')
+            ->setMethods(['getStore'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $storeId = 'storeId';
+        $designConfig->expects($this->once())
+            ->method('getStore')
+            ->will($this->returnValue($storeId));
+        $model->expects($this->once())
+            ->method('getDesignConfig')
+            ->will($this->returnValue($designConfig));
+
+        $filterTemplate->expects($this->once())
+            ->method('setStoreId')
+            ->with($storeId)
+            ->will($this->returnSelf());
+        $expectedResult = 'expected';
+        $filterTemplate->expects($this->once())
+            ->method('filter')
+            ->with($templateSubject)
+            ->will($this->returnValue($expectedResult));
+
+        $variables = [ 'key' => 'value' ];
+        $filterTemplate->expects($this->once())
+            ->method('setVariables')
+            ->with(array_merge($variables, ['this' => $model]));
+        $this->assertEquals($expectedResult, $model->getProcessedTemplateSubject($variables));
+    }
+
+    /**
+     * @param $withGroup bool
+     * @param $templateVariables string
+     * @param $expectedResult array
+     * @dataProvider getVariablesOptionArrayDataProvider
+     */
+    public function testGetVariablesOptionArray($withGroup, $templateVariables, $expectedResult)
+    {
+        $model = $this->getModelMock();
+        $model->setData('orig_template_variables', $templateVariables);
+        $this->assertEquals($expectedResult, $model->getVariablesOptionArray($withGroup));
+    }
+
+    public function getVariablesOptionArrayDataProvider()
+    {
+        return [
+            'empty variables' => [
+                'withGroup' => false,
+                'templateVariables' => '',
+                'expectedResult' => [],
+            ],
+            'empty variables with grouped option' => [
+                'withGroup' => true,
+                'templateVariables' => '',
+                'expectedResult' => [],
+            ],
+            'customer account new variables' => [
+                'withGroup' => false,
+                'templateVariables' => '{"store url=\"\"":"Store Url","var logo_url":"Email Logo Image Url",'
+                . '"escapehtml var=$customer.name":"Customer Name"}',
+                'expectedResult' => [
+                    [
+                        'value' => '{{store url=""}}',
+                        'label' => __('%1', 'Store Url'),
+                    ],
+                    [
+                        'value' => '{{var logo_url}}',
+                        'label' => __('%1', 'Email Logo Image Url'),
+                    ],
+                    [
+                        'value' => '{{escapehtml var=$customer.name}}',
+                        'label' => __('%1', 'Customer Name'),
+                    ],
+                ],
+            ],
+            'customer account new variables with grouped option' => [
+                'withGroup' => true,
+                'templateVariables' => '{"store url=\"\"":"Store Url","var logo_url":"Email Logo Image Url",'
+                . '"escapehtml var=$customer.name":"Customer Name"}',
+                'expectedResult' => [
+                    'label' => __('Template Variables'),
+                    'value' => [
+                        [
+                            'value' => '{{store url=""}}',
+                            'label' => __('%1', 'Store Url'),
+                        ],
+                        [
+                            'value' => '{{var logo_url}}',
+                            'label' => __('%1', 'Email Logo Image Url'),
+                        ],
+                        [
+                            'value' => '{{escapehtml var=$customer.name}}',
+                            'label' => __('%1', 'Customer Name'),
+                        ],
+                    ],
+                ],
+            ],
+        ];
+    }
+
+    /**
+     * @param $templateId string|int
+     * @param $expectedResult string
+     * @dataProvider processTemplateVariable
+     */
+    public function testProcessTemplate($templateId, $expectedResult)
+    {
+        $model = $this->getModelMock([
+            'load',
+            'loadDefault',
+            'getProcessedTemplate'
+        ]);
+        $model->setId($templateId);
+        if (is_numeric($templateId)) {
+            $model->expects($this->once())
+                ->method('load')
+                ->with($templateId);
+        } else {
+            $model->expects($this->once())
+                ->method('loadDefault')
+                ->with($templateId);
+        }
+
+        $vars = [ 'key' => 'value' ];
+        $model->setVars($vars);
+        $model->expects($this->once())
+            ->method('getProcessedTemplate')
+            ->with($vars, true)
+            ->will($this->returnValue($expectedResult));
+
+        $this->assertEquals($expectedResult, $model->processTemplate());
+        $this->assertTrue($model->getUseAbsoluteLinks());
+    }
+
+    public function processTemplateVariable()
+    {
+        return [
+            'numeric id' => [
+                'templateId' => 1,
+                'expectedResult' => 'expected result',
+            ],
+            'string id' => [
+                'templateId' => 'my id',
+                'expectedResult' => 'expected result',
+            ],
+        ];
+    }
+
+    public function testGetSubject()
+    {
+        $variables = [ 'key' => 'value' ];
+        $model = $this->getModelMock(['getProcessedTemplateSubject']);
+        $model->setVars($variables);
+        $expectedResult = 'result';
+        $model->expects($this->once())
+            ->method('getProcessedTemplateSubject')
+            ->with($variables)
+            ->will($this->returnValue($expectedResult));
+        $this->assertEquals($expectedResult, $model->getSubject());
+    }
+
+    public function testSetOptions()
+    {
+        $options = ['someOption' => 'someValue'];
+        $model = $this->getModelMock(['setDesignConfig']);
+        $model->expects($this->once())
+            ->method('setDesignConfig')
+            ->with($options);
+        $model->setOptions($options);
+    }
+
     /**
      * @dataProvider getTypeDataProvider
      * @param string $templateType
diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json
index cf75e8fdd529bb89688f2cc12bdd4d92efc527f0..1ea2d97faf7463293d39d9e65617cfa53ae03886 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-variable": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-variable": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Fedex/Setup/InstallData.php b/app/code/Magento/Fedex/Setup/InstallData.php
index ce35f99800209d55db02447bcdec8f61c0a19bbe..55363c9acc31db62d062092e70aff7541e946ef1 100755
--- a/app/code/Magento/Fedex/Setup/InstallData.php
+++ b/app/code/Magento/Fedex/Setup/InstallData.php
@@ -96,7 +96,7 @@ class InstallData implements InstallDataInterface
                         $mapNew[] = $shippingMethod;
                     }
                 }
-                $mapNew = implode($mapNew, ',');
+                $mapNew = implode(',', $mapNew);
             } else {
                 continue;
             }
diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json
index 8997dc97ac88704304a484e44b7062d5a0399953..090e04498b0459ffd3621b67917a16f83004e0e6 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.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GiftMessage/Api/CartRepositoryInterface.php b/app/code/Magento/GiftMessage/Api/CartRepositoryInterface.php
index 62a7916c14ca9479e2a9feefa458aa2c8aacf5ed..7e34c18ed0d6531fef0ce82b093e9b0551aa549f 100644
--- a/app/code/Magento/GiftMessage/Api/CartRepositoryInterface.php
+++ b/app/code/Magento/GiftMessage/Api/CartRepositoryInterface.php
@@ -8,7 +8,7 @@ namespace Magento\GiftMessage\Api;
 interface CartRepositoryInterface
 {
     /**
-     * Returns the gift message for a specified order.
+     * Return the gift message for a specified order.
      *
      * @param int $cartId The shopping cart ID.
      * @return \Magento\GiftMessage\Api\Data\MessageInterface Gift message.
@@ -16,7 +16,7 @@ interface CartRepositoryInterface
     public function get($cartId);
 
     /**
-     * Sets the gift message for an entire order.
+     * Set the gift message for an entire order.
      *
      * @param int $cartId The cart ID.
      * @param \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage The gift message.
diff --git a/app/code/Magento/GiftMessage/Api/Data/MessageInterface.php b/app/code/Magento/GiftMessage/Api/Data/MessageInterface.php
index a044e7c0ab0c72253dc3b375c1ed2677fb47c389..5faf04f77045c257707bc84fd3e9466380aa6349 100644
--- a/app/code/Magento/GiftMessage/Api/Data/MessageInterface.php
+++ b/app/code/Magento/GiftMessage/Api/Data/MessageInterface.php
@@ -18,14 +18,14 @@ interface MessageInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
     /**#@-*/
 
     /**
-     * Returns the gift message ID.
+     * Return the gift message ID.
      *
      * @return int|null Gift message ID. Otherwise, null.
      */
     public function getGiftMessageId();
 
     /**
-     * Sets the gift message ID.
+     * Set the gift message ID.
      *
      * @param int|null $id
      * @return $this
@@ -33,14 +33,14 @@ interface MessageInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
     public function setGiftMessageId($id);
 
     /**
-     * Returns the customer ID.
+     * Return the customer ID.
      *
      * @return int|null Customer ID. Otherwise, null.
      */
     public function getCustomerId();
 
     /**
-     * Sets the customer ID.
+     * Set the customer ID.
      *
      * @param int|null $id
      * @return $this
@@ -48,14 +48,14 @@ interface MessageInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
     public function setCustomerId($id);
 
     /**
-     * Returns the sender name.
+     * Return the sender name.
      *
      * @return string Sender name.
      */
     public function getSender();
 
     /**
-     * Sets the sender name.
+     * Set the sender name.
      *
      * @param string $sender
      * @return $this
@@ -63,14 +63,14 @@ interface MessageInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
     public function setSender($sender);
 
     /**
-     * Returns the recipient name.
+     * Return the recipient name.
      *
      * @return string Recipient name.
      */
     public function getRecipient();
 
     /**
-     * Gets the recipient name.
+     * Get the recipient name.
      *
      * @param string $recipient
      * @return $this
@@ -78,14 +78,14 @@ interface MessageInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
     public function setRecipient($recipient);
 
     /**
-     * Returns the message text.
+     * Return the message text.
      *
      * @return string Message text.
      */
     public function getMessage();
 
     /**
-     * Sets the message text.
+     * Set the message text.
      *
      * @param string $message
      * @return $this
diff --git a/app/code/Magento/GiftMessage/Api/ItemRepositoryInterface.php b/app/code/Magento/GiftMessage/Api/ItemRepositoryInterface.php
index f0141740b3ed9b34f40822415c3d301e16e27876..3e2f771fad1337908d2fa1759d8760911c7b0bf7 100644
--- a/app/code/Magento/GiftMessage/Api/ItemRepositoryInterface.php
+++ b/app/code/Magento/GiftMessage/Api/ItemRepositoryInterface.php
@@ -8,7 +8,7 @@ namespace Magento\GiftMessage\Api;
 interface ItemRepositoryInterface
 {
     /**
-     * Returns the gift message for a specified item in a specified shopping cart.
+     * Return the gift message for a specified item in a specified shopping cart.
      *
      * @param int $cartId The shopping cart ID.
      * @param int $itemId The item ID.
@@ -18,7 +18,7 @@ interface ItemRepositoryInterface
     public function get($cartId, $itemId);
 
     /**
-     * Sets the gift message for a specified item in a specified shopping cart.
+     * Set the gift message for a specified item in a specified shopping cart.
      *
      * @param int $cartId The cart ID.
      * @param \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage The gift message.
diff --git a/app/code/Magento/GiftMessage/Api/OrderItemRepositoryInterface.php b/app/code/Magento/GiftMessage/Api/OrderItemRepositoryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b94af3ce5f6155fb451021ed6ae1b581b9fbf8f
--- /dev/null
+++ b/app/code/Magento/GiftMessage/Api/OrderItemRepositoryInterface.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\GiftMessage\Api;
+
+interface OrderItemRepositoryInterface
+{
+    /**
+     * Return the gift message for a specified item in a specified order.
+     *
+     * @param int $orderId The order ID.
+     * @param int $orderItemId The item ID.
+     * @return \Magento\GiftMessage\Api\Data\MessageInterface Gift message.
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function get($orderId, $orderItemId);
+
+    /**
+     * Set the gift message for a specified item in a specified order.
+     *
+     * @param int $orderId The order ID.
+     * @param int $orderItemId The item ID.
+     * @param \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage The gift message.
+     * @return bool
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     * @throws \Magento\Framework\Exception\State\InvalidTransitionException
+     * @throws \Magento\Framework\Exception\CouldNotSaveException
+     */
+    public function save($orderId, $orderItemId, \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage);
+}
diff --git a/app/code/Magento/GiftMessage/Api/OrderRepositoryInterface.php b/app/code/Magento/GiftMessage/Api/OrderRepositoryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..28f5b54dde526722c322f5c319cfb8c48b1c943e
--- /dev/null
+++ b/app/code/Magento/GiftMessage/Api/OrderRepositoryInterface.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\GiftMessage\Api;
+
+interface OrderRepositoryInterface
+{
+    /**
+     * Return the gift message for a specified order.
+     *
+     * @param int $orderId The order ID.
+     * @return \Magento\GiftMessage\Api\Data\MessageInterface Gift message.
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function get($orderId);
+
+    /**
+     * Set the gift message for an entire order.
+     *
+     * @param int $orderId The order ID.
+     * @param \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage The gift message.
+     * @return bool
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     * @throws \Magento\Framework\Exception\InputException
+     * @throws \Magento\Framework\Exception\CouldNotSaveException
+     * @throws \Magento\Framework\Exception\State\InvalidTransitionException
+     */
+    public function save($orderId, \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage);
+}
diff --git a/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Form.php b/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Form.php
index 44933c3de7c0ce179be214e10f64ec62bc047491..c5d2d46cccfb1f1904b25be12d0a83610de04f2b 100644
--- a/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Form.php
+++ b/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Form.php
@@ -47,6 +47,6 @@ class Form extends \Magento\Backend\Block\Template
     public function canDisplayGiftmessageForm()
     {
         $quote = $this->_sessionQuote->getQuote();
-        return $this->_messageHelper->getIsMessagesAvailable('items', $quote, $quote->getStore());
+        return $this->_messageHelper->isMessagesAllowed('items', $quote, $quote->getStore());
     }
 }
diff --git a/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Items.php b/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Items.php
index ebd3613070da152027828aa917a87d1514f9e2a5..f343fce19c7d8d64243d6806bb1bb42784af755e 100644
--- a/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Items.php
+++ b/app/code/Magento/GiftMessage/Block/Adminhtml/Sales/Order/Create/Items.php
@@ -52,7 +52,7 @@ class Items extends \Magento\Backend\Block\Template
         if (!$item) {
             return false;
         }
-        return $this->_messageHelper->getIsMessagesAvailable('item', $item, $item->getStoreId());
+        return $this->_messageHelper->isMessagesAllowed('item', $item, $item->getStoreId());
     }
 
     /**
diff --git a/app/code/Magento/GiftMessage/Block/Message/Inline.php b/app/code/Magento/GiftMessage/Block/Message/Inline.php
index 71edfa4fe880d23684edf68185276ec1c6d2677f..4a7640f3aa7814cbdfb04a47430d3905d7236065 100644
--- a/app/code/Magento/GiftMessage/Block/Message/Inline.php
+++ b/app/code/Magento/GiftMessage/Block/Message/Inline.php
@@ -317,7 +317,7 @@ class Inline extends \Magento\Framework\View\Element\Template
      */
     public function isMessagesAvailable()
     {
-        return $this->_giftMessageMessage->isMessagesAvailable('quote', $this->getEntity());
+        return $this->_giftMessageMessage->isMessagesAllowed('quote', $this->getEntity());
     }
 
     /**
@@ -329,7 +329,7 @@ class Inline extends \Magento\Framework\View\Element\Template
     public function isItemMessagesAvailable($item)
     {
         $type = substr($this->getType(), 0, 5) == 'multi' ? 'address_item' : 'item';
-        return $this->_giftMessageMessage->isMessagesAvailable($type, $item);
+        return $this->_giftMessageMessage->isMessagesAllowed($type, $item);
     }
 
     /**
diff --git a/app/code/Magento/GiftMessage/Helper/Message.php b/app/code/Magento/GiftMessage/Helper/Message.php
index a54b8c5db8c53d005aa7c6968e8ac4c4767d3594..e2ab3e3eefa6fcce05032ef3437ee17b771616b4 100644
--- a/app/code/Magento/GiftMessage/Helper/Message.php
+++ b/app/code/Magento/GiftMessage/Helper/Message.php
@@ -109,7 +109,7 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
      */
     public function getInline($type, \Magento\Framework\Object $entity, $dontDisplayContainer = false)
     {
-        if (!$this->skipPage($type) && !$this->isMessagesAvailable($type, $entity)) {
+        if (!$this->skipPage($type) && !$this->isMessagesAllowed($type, $entity)) {
             return '';
         }
         return $this->_layoutFactory->create()->createBlock('Magento\GiftMessage\Block\Message\Inline')
@@ -129,7 +129,7 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * Check availability of giftmessages for specified entity.
+     * Check if giftmessages is allowed for specified entity.
      *
      * @param string $type
      * @param \Magento\Framework\Object $entity
@@ -137,12 +137,16 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
      * @return bool|string|null
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function isMessagesAvailable($type, \Magento\Framework\Object $entity, $store = null)
+    public function isMessagesAllowed($type, \Magento\Framework\Object $entity, $store = null)
     {
         if ($type == 'items') {
             $items = $entity->getAllItems();
             if (!is_array($items) || empty($items)) {
-                return $this->scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store);
+                return $this->scopeConfig->getValue(
+                    self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS,
+                    \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                    $store
+                );
             }
             if ($entity instanceof \Magento\Quote\Model\Quote) {
                 $_type = $entity->getIsMultiShipping() ? 'address_item' : 'item';
@@ -153,7 +157,7 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
                 if ($item->getParentItem()) {
                     continue;
                 }
-                if ($this->isMessagesAvailable($_type, $item, $store)) {
+                if ($this->isMessagesAllowed($_type, $item, $store)) {
                     return true;
                 }
             }
@@ -177,7 +181,11 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
                 $store
             );
         } else {
-            return $this->scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store);
+            return $this->scopeConfig->getValue(
+                self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                $store
+            );
         }
         return false;
     }
@@ -191,7 +199,10 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
      */
     protected function _getDependenceFromStoreConfig($productGiftMessageAllow, $store = null)
     {
-        $result = $this->scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store);
+        $result = $this->scopeConfig->getValue(
+            self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store
+        );
         if ($productGiftMessageAllow === '' || is_null($productGiftMessageAllow)) {
             return $result;
         } else {
@@ -199,19 +210,6 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
         }
     }
 
-    /**
-     * Alias for isMessagesAvailable(...)
-     *
-     * @param string $type
-     * @param \Magento\Framework\Object $entity
-     * @param \Magento\Store\Model\Store|int|null $store
-     * @return bool|null|string
-     */
-    public function getIsMessagesAvailable($type, \Magento\Framework\Object $entity, $store = null)
-    {
-        return $this->isMessagesAvailable($type, $entity, $store);
-    }
-
     /**
      * Retrieve escaped and preformated gift message text for specified entity
      *
@@ -293,7 +291,7 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
     public function getAvailableForQuoteItems($quote, $store = null)
     {
         foreach ($quote->getAllItems() as $item) {
-            if ($this->isMessagesAvailable('item', $item, $store)) {
+            if ($this->isMessagesAllowed('item', $item, $store)) {
                 return true;
             }
         }
@@ -311,7 +309,7 @@ class Message extends \Magento\Framework\App\Helper\AbstractHelper
     public function getAvailableForAddressItems($items, $store = null)
     {
         foreach ($items as $item) {
-            if ($this->isMessagesAvailable('address_item', $item, $store)) {
+            if ($this->isMessagesAllowed('address_item', $item, $store)) {
                 return true;
             }
         }
diff --git a/app/code/Magento/GiftMessage/Model/CartRepository.php b/app/code/Magento/GiftMessage/Model/CartRepository.php
index bb1b66db7d20d0f5b42e2321eaf354030e4661f9..4fe6b988236c6258fc0d7f7068a72f803468debb 100644
--- a/app/code/Magento/GiftMessage/Model/CartRepository.php
+++ b/app/code/Magento/GiftMessage/Model/CartRepository.php
@@ -107,7 +107,7 @@ class CartRepository implements \Magento\GiftMessage\Api\CartRepositoryInterface
         if ($quote->isVirtual()) {
             throw new InvalidTransitionException(__('Gift Messages is not applicable for virtual products'));
         }
-        if (!$this->helper->getIsMessagesAvailable('quote', $quote, $this->storeManager->getStore())) {
+        if (!$this->helper->isMessagesAllowed('quote', $quote, $this->storeManager->getStore())) {
             throw new CouldNotSaveException(__('Gift Message is not available'));
         }
         $this->giftMessageManager->setMessage($quote, 'quote', $giftMessage);
diff --git a/app/code/Magento/GiftMessage/Model/ItemRepository.php b/app/code/Magento/GiftMessage/Model/ItemRepository.php
index 16d442a769240fef8fb93ced6c29ea8fc479d022..d7220d2516f7a2b934d9365a83c481f13249b1c2 100644
--- a/app/code/Magento/GiftMessage/Model/ItemRepository.php
+++ b/app/code/Magento/GiftMessage/Model/ItemRepository.php
@@ -121,7 +121,7 @@ class ItemRepository implements \Magento\GiftMessage\Api\ItemRepositoryInterface
         if ($item->getIsVirtual()) {
             throw new InvalidTransitionException(__('Gift Messages is not applicable for virtual products'));
         }
-        if (!$this->helper->getIsMessagesAvailable('items', $quote, $this->storeManager->getStore())) {
+        if (!$this->helper->isMessagesAllowed('items', $quote, $this->storeManager->getStore())) {
             throw new CouldNotSaveException(__('Gift Message is not available'));
         }
         $this->giftMessageManager->setMessage($quote, 'quote_item', $giftMessage, $itemId);
diff --git a/app/code/Magento/GiftMessage/Model/Observer.php b/app/code/Magento/GiftMessage/Model/Observer.php
index 696b4f38f5f6ae96d869838106d96d524bafeb81..342bc8cb133106011900935328a3d356036a47c4 100644
--- a/app/code/Magento/GiftMessage/Model/Observer.php
+++ b/app/code/Magento/GiftMessage/Model/Observer.php
@@ -74,7 +74,7 @@ class Observer extends \Magento\Framework\Object
             return $this;
         }
 
-        if (!$this->_giftMessageMessage->isMessagesAvailable('order', $order, $order->getStore())) {
+        if (!$this->_giftMessageMessage->isMessagesAllowed('order', $order, $order->getStore())) {
             return $this;
         }
         $giftMessageId = $order->getGiftMessageId();
@@ -102,7 +102,7 @@ class Observer extends \Magento\Framework\Object
             return $this;
         }
 
-        $isAvailable = $this->_giftMessageMessage->isMessagesAvailable(
+        $isAvailable = $this->_giftMessageMessage->isMessagesAllowed(
             'order_item',
             $orderItem,
             $orderItem->getStoreId()
diff --git a/app/code/Magento/GiftMessage/Model/OrderItemRepository.php b/app/code/Magento/GiftMessage/Model/OrderItemRepository.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c71f599f0b1fe88dba1c1a4948c1b7db8db07a4
--- /dev/null
+++ b/app/code/Magento/GiftMessage/Model/OrderItemRepository.php
@@ -0,0 +1,155 @@
+<?php
+/**
+ *
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\GiftMessage\Model;
+
+use Magento\Framework\Exception\CouldNotSaveException;
+use Magento\Framework\Exception\NoSuchEntityException;
+use Magento\Framework\Exception\State\InvalidTransitionException;
+
+/**
+ * Order item gift message repository object.
+ */
+class OrderItemRepository implements \Magento\GiftMessage\Api\OrderItemRepositoryInterface
+{
+    /**
+     * Order factory.
+     *
+     * @var \Magento\Sales\Model\OrderFactory
+     */
+    protected $orderFactory;
+
+    /**
+     * Store manager interface.
+     *
+     * @var \Magento\Store\Model\StoreManagerInterface
+     */
+    protected $storeManager;
+
+    /**
+     * Gift message save model.
+     *
+     * @var \Magento\GiftMessage\Model\Save
+     */
+    protected $giftMessageSaveModel;
+
+    /**
+     * Message helper.
+     *
+     * @var \Magento\GiftMessage\Helper\Message
+     */
+    protected $helper;
+
+    /**
+     * Message factory.
+     *
+     * @var \Magento\GiftMessage\Model\MessageFactory
+     */
+    protected $messageFactory;
+
+    /**
+     * @param \Magento\Sales\Model\OrderFactory $orderFactory
+     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\GiftMessage\Model\Save $giftMessageSaveModel
+     * @param \Magento\GiftMessage\Helper\Message $helper
+     * @param MessageFactory $messageFactory
+     */
+    public function __construct(
+        \Magento\Sales\Model\OrderFactory $orderFactory,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\GiftMessage\Model\Save $giftMessageSaveModel,
+        \Magento\GiftMessage\Helper\Message $helper,
+        \Magento\GiftMessage\Model\MessageFactory $messageFactory
+    ) {
+        $this->orderFactory = $orderFactory;
+        $this->giftMessageSaveModel = $giftMessageSaveModel;
+        $this->storeManager = $storeManager;
+        $this->helper = $helper;
+        $this->messageFactory = $messageFactory;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function get($orderId, $orderItemId)
+    {
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        if (!$orderItem = $this->getItemById($orderId, $orderItemId)) {
+            throw new NoSuchEntityException(__('There is no item with provided id in the order'));
+        };
+
+        if (!$this->helper->isMessagesAllowed('order_item', $orderItem, $this->storeManager->getStore())) {
+            throw new NoSuchEntityException(
+                __('There is no item with provided id in the order or gift message isn\'t allowed')
+            );
+        }
+
+        $messageId = $orderItem->getGiftMessageId();
+        if (!$messageId) {
+            throw new NoSuchEntityException(__('There is no item with provided id in the order'));
+        }
+
+        return $this->messageFactory->create()->load($messageId);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function save($orderId, $orderItemId, \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage)
+    {
+        /** @var \Magento\Sales\Api\Data\OrderInterface $order */
+        $order = $this->orderFactory->create()->load($orderId);
+
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        if (!$orderItem = $this->getItemById($orderId, $orderItemId)) {
+            throw new NoSuchEntityException(__('There is no item with provided id in the order'));
+        };
+
+        if ($order->getIsVirtual()) {
+            throw new InvalidTransitionException(__('Gift Messages is not applicable for virtual products'));
+        }
+        if (!$this->helper->isMessagesAllowed('order_item', $orderItem, $this->storeManager->getStore())) {
+            throw new CouldNotSaveException(__('Gift Message is not available'));
+        }
+
+        $message = [];
+        $message[$orderItemId] = [
+            'type' => 'order_item',
+            'sender' => $giftMessage->getSender(),
+            'recipient' => $giftMessage->getRecipient(),
+            'message' => $giftMessage->getMessage(),
+        ];
+
+        $this->giftMessageSaveModel->setGiftmessages($message);
+        try {
+            $this->giftMessageSaveModel->saveAllInOrder();
+        } catch (\Exception $e) {
+            throw new CouldNotSaveException(__('Could not add gift message to order: "%1"', $e->getMessage()), $e);
+        }
+        return true;
+    }
+
+    /**
+     * Get order item by id
+     *
+     * @param int $orderId
+     * @param int $orderItemId
+     * @return \Magento\Sales\Api\Data\OrderItemInterface|bool
+     */
+    protected function getItemById($orderId, $orderItemId)
+    {
+        /** @var \Magento\Sales\Api\Data\OrderInterface $order */
+        $order = $this->orderFactory->create()->load($orderId);
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $item */
+        foreach ($order->getItems() as $item) {
+            if ($item->getItemId() === $orderItemId) {
+                return $item;
+            }
+        }
+        return false;
+    }
+}
diff --git a/app/code/Magento/GiftMessage/Model/OrderRepository.php b/app/code/Magento/GiftMessage/Model/OrderRepository.php
new file mode 100644
index 0000000000000000000000000000000000000000..5bbff94c44bf9cb0d26b84683964dfc051ed1a17
--- /dev/null
+++ b/app/code/Magento/GiftMessage/Model/OrderRepository.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ *
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\GiftMessage\Model;
+
+use Magento\Framework\Exception\CouldNotSaveException;
+use Magento\Framework\Exception\InputException;
+use Magento\Framework\Exception\State\InvalidTransitionException;
+use Magento\Framework\Exception\NoSuchEntityException;
+
+/**
+ * Order gift message repository object.
+ */
+class OrderRepository implements \Magento\GiftMessage\Api\OrderRepositoryInterface
+{
+    /**
+     * Order factory.
+     *
+     * @var \Magento\Sales\Model\OrderFactory
+     */
+    protected $orderFactory;
+
+    /**
+     * Store manager interface.
+     *
+     * @var \Magento\Store\Model\StoreManagerInterface
+     */
+    protected $storeManager;
+
+    /**
+     * Gift message save model.
+     *
+     * @var \Magento\GiftMessage\Model\Save
+     */
+    protected $giftMessageSaveModel;
+
+    /**
+     * Message helper.
+     *
+     * @var \Magento\GiftMessage\Helper\Message
+     */
+    protected $helper;
+
+    /**
+     * Message factory.
+     *
+     * @var \Magento\GiftMessage\Model\MessageFactory
+     */
+    protected $messageFactory;
+
+    /**
+     * @param \Magento\Sales\Model\OrderFactory $orderFactory
+     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\GiftMessage\Model\Save $giftMessageSaveModel
+     * @param \Magento\GiftMessage\Helper\Message $helper
+     * @param MessageFactory $messageFactory
+     */
+    public function __construct(
+        \Magento\Sales\Model\OrderFactory $orderFactory,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\GiftMessage\Model\Save $giftMessageSaveModel,
+        \Magento\GiftMessage\Helper\Message $helper,
+        \Magento\GiftMessage\Model\MessageFactory $messageFactory
+    ) {
+        $this->orderFactory = $orderFactory;
+        $this->giftMessageSaveModel = $giftMessageSaveModel;
+        $this->storeManager = $storeManager;
+        $this->helper = $helper;
+        $this->messageFactory = $messageFactory;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function get($orderId)
+    {
+        /** @var \Magento\Sales\Api\Data\OrderInterface $order */
+        $order = $this->orderFactory->create()->load($orderId);
+
+        if (!$this->helper->isMessagesAllowed('order', $order, $this->storeManager->getStore())) {
+            throw new NoSuchEntityException(
+                __('There is no order with provided id or gift message isn\'t allowed')
+            );
+        }
+
+        $messageId = $order->getGiftMessageId();
+        if (!$messageId) {
+            throw new NoSuchEntityException(__('There is no item with provided id in the order'));
+        }
+
+        return $this->messageFactory->create()->load($messageId);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function save($orderId, \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage)
+    {
+        /** @var \Magento\Sales\Api\Data\OrderInterface $order */
+        $order = $this->orderFactory->create()->load($orderId);
+        if (!$order->getEntityId()) {
+            throw new NoSuchEntityException(__('There is no order with provided id'));
+        };
+
+        if (0 == $order->getTotalItemCount()) {
+            throw new InputException(__('Gift Messages is not applicable for empty order'));
+        }
+
+        if ($order->getIsVirtual()) {
+            throw new InvalidTransitionException(__('Gift Messages is not applicable for virtual products'));
+        }
+        if (!$this->helper->isMessagesAllowed('order', $order, $this->storeManager->getStore())) {
+            throw new CouldNotSaveException(__('Gift Message is not available'));
+        }
+
+        $message = [];
+        $message[$orderId] = [
+            'type' => 'order',
+            $giftMessage::CUSTOMER_ID => $giftMessage->getCustomerId(),
+            $giftMessage::SENDER => $giftMessage->getSender(),
+            $giftMessage::RECIPIENT => $giftMessage->getRecipient(),
+            $giftMessage::MESSAGE => $giftMessage->getMessage(),
+        ];
+
+        $this->giftMessageSaveModel->setGiftmessages($message);
+        try {
+            $this->giftMessageSaveModel->saveAllInOrder();
+        } catch (\Exception $e) {
+            throw new CouldNotSaveException(__('Could not add gift message to order: "%1"', $e->getMessage()), $e);
+        }
+        return true;
+    }
+}
diff --git a/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php b/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php
new file mode 100644
index 0000000000000000000000000000000000000000..c63a726d8e8449e3ebe709aac5828803a12961de
--- /dev/null
+++ b/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ *
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\GiftMessage\Model\Plugin;
+
+use Magento\Framework\Exception\NoSuchEntityException;
+
+class OrderGet
+{
+    /** @var \Magento\GiftMessage\Api\OrderRepositoryInterface */
+    protected $giftMessageOrderRepository;
+
+    /** @var \Magento\GiftMessage\Api\OrderItemRepositoryInterface */
+    protected $giftMessageOrderItemRepository;
+
+    /** @var \Magento\Sales\Api\Data\OrderExtensionFactory */
+    protected $orderExtensionFactory;
+
+    /** @var \Magento\Sales\Api\Data\OrderItemExtensionFactory */
+    protected $orderItemExtensionFactory;
+
+    /**
+     * Init plugin
+     *
+     * @param \Magento\GiftMessage\Api\OrderRepositoryInterface $giftMessageOrderRepository
+     * @param \Magento\GiftMessage\Api\OrderItemRepositoryInterface $giftMessageOrderItemRepository
+     * @param \Magento\Sales\Api\Data\OrderExtensionFactory $orderExtensionFactory
+     * @param \Magento\Sales\Api\Data\OrderItemExtensionFactory $orderItemExtensionFactory
+     */
+    public function __construct(
+        \Magento\GiftMessage\Api\OrderRepositoryInterface $giftMessageOrderRepository,
+        \Magento\GiftMessage\Api\OrderItemRepositoryInterface $giftMessageOrderItemRepository,
+        \Magento\Sales\Api\Data\OrderExtensionFactory $orderExtensionFactory,
+        \Magento\Sales\Api\Data\OrderItemExtensionFactory $orderItemExtensionFactory
+    ) {
+        $this->giftMessageOrderRepository = $giftMessageOrderRepository;
+        $this->giftMessageOrderItemRepository = $giftMessageOrderItemRepository;
+        $this->orderExtensionFactory = $orderExtensionFactory;
+        $this->orderItemExtensionFactory = $orderItemExtensionFactory;
+    }
+
+    /**
+     * Get gift message
+     *
+     * @param \Magento\Sales\Api\OrderRepositoryInterface $subject
+     * @param callable $proceed
+     * @param int $orderId
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function aroundGet(
+        \Magento\Sales\Api\OrderRepositoryInterface $subject,
+        \Closure $proceed,
+        $orderId
+    ) {
+        /** @var \Magento\Sales\Api\Data\OrderInterface $resultOrder */
+        $resultOrder = $proceed($orderId);
+
+        $resultOrder = $this->getOrderGiftMessage($resultOrder);
+        $resultOrder = $this->getOrderItemGiftMessage($resultOrder);
+
+        return $resultOrder;
+    }
+
+    /**
+     * Get gift message for order
+     *
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     */
+    protected function getOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)
+    {
+        if ($order->getExtensionAttributes() && $order->getExtensionAttributes()->getGiftMessage()) {
+            return $order;
+        }
+
+        try {
+            /** @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
+            $giftMessage = $this->giftMessageOrderRepository->get($order->getEntityId());
+        } catch (NoSuchEntityException $e) {
+            return $order;
+        }
+
+        /** @var \Magento\Sales\Api\Data\OrderExtension $orderExtension */
+        $orderExtension = $this->orderExtensionFactory->create();
+        $orderExtension->setGiftMessage($giftMessage);
+        $order->setExtensionAttributes($orderExtension);
+
+        return $order;
+    }
+
+    /**
+     * Get gift message for items of order
+     *
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     */
+    protected function getOrderItemGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)
+    {
+        if (null !== $order->getItems()) {
+            /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+            foreach ($order->getItems() as $orderItem) {
+                if ($orderItem->getExtensionAttributes() && $orderItem->getExtensionAttributes()->getGiftMessage()) {
+                    continue;
+                }
+
+                try {
+                    /* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
+                    $giftMessage = $this->giftMessageOrderItemRepository->get(
+                        $order->getEntityId(),
+                        $orderItem->getItemId()
+                    );
+                } catch (NoSuchEntityException $e) {
+                    continue;
+                }
+
+                /** @var \Magento\Sales\Api\Data\OrderItemExtension $orderItemExtension */
+                $orderItemExtension = $this->orderItemExtensionFactory->create();
+                $orderItemExtension->setGiftMessage($giftMessage);
+                $orderItem->setExtensionAttributes($orderItemExtension);
+            }
+        }
+        return $order;
+    }
+}
diff --git a/app/code/Magento/GiftMessage/Model/Plugin/OrderSave.php b/app/code/Magento/GiftMessage/Model/Plugin/OrderSave.php
new file mode 100644
index 0000000000000000000000000000000000000000..8acac4ecd67e230d8e0dc7c75ff7e0daee0301d9
--- /dev/null
+++ b/app/code/Magento/GiftMessage/Model/Plugin/OrderSave.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ *
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\GiftMessage\Model\Plugin;
+
+use Magento\Framework\Exception\CouldNotSaveException;
+
+class OrderSave
+{
+    /** @var \Magento\GiftMessage\Api\OrderRepositoryInterface */
+    protected $giftMessageOrderRepository;
+
+    /** @var \Magento\GiftMessage\Api\OrderItemRepositoryInterface */
+    protected $giftMessageOrderItemRepository;
+
+    /**
+     * Init plugin
+     *
+     * @param \Magento\GiftMessage\Api\OrderRepositoryInterface $giftMessageOrderRepository
+     * @param \Magento\GiftMessage\Api\OrderItemRepositoryInterface $giftMessageOrderItemRepository
+     */
+    public function __construct(
+        \Magento\GiftMessage\Api\OrderRepositoryInterface $giftMessageOrderRepository,
+        \Magento\GiftMessage\Api\OrderItemRepositoryInterface $giftMessageOrderItemRepository
+    ) {
+        $this->giftMessageOrderRepository = $giftMessageOrderRepository;
+        $this->giftMessageOrderItemRepository = $giftMessageOrderItemRepository;
+    }
+
+    /**
+     * Save gift message
+     *
+     * @param \Magento\Sales\Api\OrderRepositoryInterface $subject
+     * @param callable $proceed
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function aroundSave(
+        \Magento\Sales\Api\OrderRepositoryInterface $subject,
+        \Closure $proceed,
+        \Magento\Sales\Api\Data\OrderInterface $order
+    ) {
+        /** @var \Magento\Sales\Api\Data\OrderInterface $resultOrder */
+        $resultOrder = $proceed($order);
+        $resultOrder = $this->saveOrderGiftMessage($resultOrder);
+        $resultOrder = $this->saveOrderItemGiftMessage($resultOrder);
+
+        return $resultOrder;
+    }
+
+    /**
+     * Save gift message for order
+     *
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     */
+    protected function saveOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)
+    {
+        if (
+            null !== $order->getExtensionAttributes() &&
+            null !== $order->getExtensionAttributes()->getGiftMessage()
+        ) {
+            /* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
+            $giftMessage = $order->getExtensionAttributes()->getGiftMessage();
+            if (null !== $giftMessage) {
+                try {
+                    $this->giftMessageOrderRepository->save($order->getEntityId(), $giftMessage);
+                } catch (\Exception $e) {
+                    throw new CouldNotSaveException(
+                        __('Could not add gift message to order: "%1"', $e->getMessage()),
+                        $e
+                    );
+                }
+            }
+        }
+        return $order;
+    }
+
+    /**
+     * Save gift message for items of order
+     *
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     */
+    protected function saveOrderItemGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)
+    {
+        if (null !== $order->getItems()) {
+            /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+            foreach ($order->getItems() as $orderItem) {
+                if (
+                    null !== $orderItem->getExtensionAttributes() &&
+                    null !== $orderItem->getExtensionAttributes()->getGiftMessage()
+                ) {
+                    /* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
+                    $giftMessage = $orderItem->getExtensionAttributes()->getGiftMessage();
+                    try {
+                        $this->giftMessageOrderItemRepository->save(
+                            $order->getEntityId(),
+                            $orderItem->getItemId(),
+                            $giftMessage
+                        );
+                    } catch (\Exception $e) {
+                        throw new CouldNotSaveException(
+                            __('Could not add gift message to order\'s item: "%1"', $e->getMessage()),
+                            $e
+                        );
+                    }
+                }
+            }
+        }
+        return $order;
+    }
+}
diff --git a/app/code/Magento/GiftMessage/Model/Plugin/QuoteItem.php b/app/code/Magento/GiftMessage/Model/Plugin/QuoteItem.php
index f2538b84b6a2353b25108cb1ad2162ad0784519e..9889f7261d2310678930b16aced1e23bec09d08b 100644
--- a/app/code/Magento/GiftMessage/Model/Plugin/QuoteItem.php
+++ b/app/code/Magento/GiftMessage/Model/Plugin/QuoteItem.php
@@ -39,7 +39,7 @@ class QuoteItem
     ) {
         /** @var $orderItem Item */
         $orderItem = $proceed($item, $additional);
-        $isAvailable = $this->_helper->isMessagesAvailable('item', $item, $item->getStoreId());
+        $isAvailable = $this->_helper->isMessagesAllowed('item', $item, $item->getStoreId());
 
         $orderItem->setGiftMessageId($item->getGiftMessageId());
         $orderItem->setGiftMessageAvailable($isAvailable);
diff --git a/app/code/Magento/GiftMessage/Model/Save.php b/app/code/Magento/GiftMessage/Model/Save.php
index 131624415b58208aa61e1fce40f4e8e69cba396f..7841e2f37867c7395203ef3ec4d90f273a79e6b2 100644
--- a/app/code/Magento/GiftMessage/Model/Save.php
+++ b/app/code/Magento/GiftMessage/Model/Save.php
@@ -265,7 +265,7 @@ class Save extends \Magento\Framework\Object
      */
     public function isGiftMessagesAvailable($item)
     {
-        return $this->_giftMessageMessage->getIsMessagesAvailable('item', $item, $item->getStore());
+        return $this->_giftMessageMessage->isMessagesAllowed('item', $item, $item->getStore());
     }
 
     /**
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Helper/MessageTest.php b/app/code/Magento/GiftMessage/Test/Unit/Helper/MessageTest.php
index 3821d4f05b760a9dc1d6542e08fbcdd10c4a9451..9b1748b1052c1a4cfbdcfb8dad31d19e62a3b78a 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Helper/MessageTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Helper/MessageTest.php
@@ -29,7 +29,7 @@ class MessageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Make sure that isMessagesAvailable is not called
+     * Make sure that isMessagesAllowed is not called
      */
     public function testGetInlineForCheckout()
     {
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php
index c510e993f35c3355f96eda09fa189a6fb5e56924..6974c1f131cda2f511408dde59205c496619a7a1 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/CartRepositoryTest.php
@@ -163,7 +163,6 @@ class CartRepositoryTest extends \PHPUnit_Framework_TestCase
     {
         $this->quoteMock->expects($this->once())->method('getItemsCount')->will($this->returnValue(1));
         $this->quoteMock->expects($this->once())->method('isVirtual')->will($this->returnValue(true));
-
         $this->cartRepository->save($this->cartId, $this->messageMock);
     }
 
@@ -173,7 +172,7 @@ class CartRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->quoteMock->expects($this->once())->method('getItemsCount')->will($this->returnValue(1));
         $this->storeManagerMock->expects($this->once())->method('getStore')->will($this->returnValue($this->storeMock));
         $this->helperMock->expects($this->once())
-            ->method('getIsMessagesAvailable')
+            ->method('isMessagesAllowed')
             ->with('quote', $this->quoteMock, $this->storeMock)
             ->will($this->returnValue(true));
         $this->giftMessageManagerMock->expects($this->once())
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
index a97f5f9bd380007f3a0e238a3d940cf1c30ba2d5..5caa71f1b2bd2a492dc92b99c63c92970169d1bf 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/ItemRepositoryTest.php
@@ -211,7 +211,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
         $quoteItem->expects($this->once())->method('getIsVirtual')->will($this->returnValue(0));
         $this->storeManagerMock->expects($this->once())->method('getStore')->will($this->returnValue($this->storeMock));
         $this->helperMock->expects($this->once())
-            ->method('getIsMessagesAvailable')
+            ->method('isMessagesAllowed')
             ->with('items', $this->quoteMock, $this->storeMock)
             ->will($this->returnValue(true));
         $this->giftMessageManagerMock->expects($this->once())
diff --git a/app/code/Magento/GiftMessage/Test/Unit/Model/Plugin/QuoteItemTest.php b/app/code/Magento/GiftMessage/Test/Unit/Model/Plugin/QuoteItemTest.php
index 61afb0c179fc69e84d8b16316dbd57ff5982a23d..b748345a177d1cf92bf81258c5b0c5bebdb1f329 100644
--- a/app/code/Magento/GiftMessage/Test/Unit/Model/Plugin/QuoteItemTest.php
+++ b/app/code/Magento/GiftMessage/Test/Unit/Model/Plugin/QuoteItemTest.php
@@ -60,7 +60,7 @@ class QuoteItemTest extends \PHPUnit_Framework_TestCase
         $this->subjectMock = $this->getMock('Magento\Quote\Model\Quote\Item\ToOrderItem', [], [], '', false);
         $this->helperMock = $this->getMock(
             'Magento\GiftMessage\Helper\Message',
-            ['setGiftMessageId', 'isMessagesAvailable'],
+            ['setGiftMessageId', 'isMessagesAllowed'],
             [],
             '',
             false
@@ -86,7 +86,7 @@ class QuoteItemTest extends \PHPUnit_Framework_TestCase
         $this->helperMock->expects(
             $this->once()
         )->method(
-            'isMessagesAvailable'
+            'isMessagesAllowed'
         )->with(
             'item',
             $this->quoteItemMock,
diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json
index 575d83a28cc8e0fd75f7b8262697cfe213d19845..32828754a4c6050ddcb32c41fa72777194e61729 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-multishipping": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-multishipping": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GiftMessage/etc/adminhtml/di.xml b/app/code/Magento/GiftMessage/etc/adminhtml/di.xml
deleted file mode 100644
index 961c8c6ff61369d74a53d6a9a943c067933e6345..0000000000000000000000000000000000000000
--- a/app/code/Magento/GiftMessage/etc/adminhtml/di.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
-    <type name="Magento\GiftMessage\Model\Plugin\QuoteItem" shared="false" />
-    <type name="Magento\Quote\Model\Quote\Item\ToOrderItem">
-        <plugin name="gift_message_quote_item_conversion" type="Magento\GiftMessage\Model\Plugin\QuoteItem"/>
-    </type>
-</config>
diff --git a/app/code/Magento/GiftMessage/etc/data_object.xml b/app/code/Magento/GiftMessage/etc/data_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a1255cc8a161a5a8d28090697088a87ede8920e7
--- /dev/null
+++ b/app/code/Magento/GiftMessage/etc/data_object.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Api/etc/data_object.xsd">
+    <custom_attributes for="Magento\Sales\Api\Data\OrderInterface">
+        <attribute code="gift_message" type="Magento\GiftMessage\Api\Data\MessageInterface" />
+    </custom_attributes>
+    <custom_attributes for="Magento\Sales\Api\Data\OrderItemInterface">
+        <attribute code="gift_message" type="Magento\GiftMessage\Api\Data\MessageInterface" />
+    </custom_attributes>
+</config>
diff --git a/app/code/Magento/GiftMessage/etc/di.xml b/app/code/Magento/GiftMessage/etc/di.xml
index 2c674334652effc113de85057424dc8be4f74d73..d8ea087e62d735c09063af6d8f3cf518179df33f 100644
--- a/app/code/Magento/GiftMessage/etc/di.xml
+++ b/app/code/Magento/GiftMessage/etc/di.xml
@@ -15,5 +15,15 @@
     </type>
     <preference for="Magento\GiftMessage\Api\CartRepositoryInterface" type="Magento\GiftMessage\Model\CartRepository"/>
     <preference for="Magento\GiftMessage\Api\ItemRepositoryInterface" type="Magento\GiftMessage\Model\ItemRepository"/>
+    <preference for="Magento\GiftMessage\Api\OrderRepositoryInterface" type="Magento\GiftMessage\Model\OrderRepository"/>
+    <preference for="Magento\GiftMessage\Api\OrderItemRepositoryInterface" type="Magento\GiftMessage\Model\OrderItemRepository"/>
     <preference for="Magento\GiftMessage\Api\Data\MessageInterface" type="Magento\GiftMessage\Model\Message"/>
+    <type name="Magento\GiftMessage\Model\Plugin\QuoteItem" shared="false" />
+    <type name="Magento\Quote\Model\Quote\Item\ToOrderItem">
+        <plugin name="gift_message_quote_item_conversion" type="Magento\GiftMessage\Model\Plugin\QuoteItem"/>
+    </type>
+    <type name="Magento\Sales\Api\OrderRepositoryInterface">
+        <plugin name="save_gift_message" type="Magento\GiftMessage\Model\Plugin\OrderSave"/>
+        <plugin name="get_gift_message" type="Magento\GiftMessage\Model\Plugin\OrderGet"/>
+    </type>
 </config>
diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json
index 26d64df002ac0cb033536d6d4a34405ad24a2160..5910e7b7bd1c3e6ecf4ede31914c3b0742d2c8b8 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.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json
index 3891893165ee1636f560dc84798d312323a3aae3..3df1f85b5e00267b40039d4eea1a7420f8b1c032 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.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-cookie": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-cookie": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json
index d2a1b785709773c230e05a27869321d6daeec8c8..7d9229a0ae1edfb7bb880df7b31bd5e20e13563f 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.42.0-beta11",
-        "magento/module-google-analytics": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-google-analytics": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Delete.php b/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Delete.php
index a2abe73a45fca38f0279e99110f5049a4ef6b147..b9098d3c1e48004b5c20c439506874eb46e0230b 100644
--- a/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Delete.php
+++ b/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Delete.php
@@ -11,22 +11,30 @@ class Delete extends \Magento\GoogleShopping\Controller\Adminhtml\Googleshopping
     /**
      * Delete attribute set mapping
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Exception
      */
     public function execute()
     {
-        try {
-            $id = $this->getRequest()->getParam('id');
-            $model = $this->_objectManager->create('Magento\GoogleShopping\Model\Type');
-            $model->load($id);
-            if ($model->getTypeId()) {
-                $model->delete();
-            }
-            $this->messageManager->addSuccess(__('Attribute set mapping was deleted'));
-        } catch (\Exception $e) {
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
-            $this->messageManager->addError(__("We can't delete Attribute Set Mapping."));
+        $id = $this->getRequest()->getParam('id');
+        $model = $this->_objectManager->create('Magento\GoogleShopping\Model\Type');
+        $model->load($id);
+        if ($model->getTypeId()) {
+            $model->delete();
         }
-        $this->_redirect('adminhtml/*/index', ['store' => $this->_getStore()->getId()]);
+        $this->messageManager->addSuccess(__('Attribute set mapping was deleted'));
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('adminhtml/*/index', ['store' => $this->_getStore()->getId()]);
     }
 }
diff --git a/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/LoadAttributeSets.php b/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/LoadAttributeSets.php
index 40f937d29059c5d3988ea145d273fd78ed9e47d0..6cb5d6885d1355e0049abc808c63bc297ea878c4 100644
--- a/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/LoadAttributeSets.php
+++ b/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/LoadAttributeSets.php
@@ -12,21 +12,14 @@ class LoadAttributeSets extends \Magento\GoogleShopping\Controller\Adminhtml\Goo
      * Get available attribute sets
      *
      * @return void
+     * @throws \Exception
      */
     public function execute()
     {
-        try {
-            $this->getResponse()->setBody(
-                $this->_view->getLayout()->getBlockSingleton(
-                    'Magento\GoogleShopping\Block\Adminhtml\Types\Edit\Form'
-                )->getAttributeSetsSelectElement(
-                    $this->getRequest()->getParam('target_country')
-                )->toHtml()
-            );
-        } catch (\Exception $e) {
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
-            // just need to output text with error
-            $this->messageManager->addError(__("We can't load attribute sets."));
-        }
+        $this->getResponse()->setBody(
+            $this->_view->getLayout()->getBlockSingleton('Magento\GoogleShopping\Block\Adminhtml\Types\Edit\Form')
+                ->getAttributeSetsSelectElement($this->getRequest()->getParam('target_country'))
+                ->toHtml()
+        );
     }
 }
diff --git a/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Save.php b/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Save.php
index 43f836ddb771c13e6c0304702dde50c4eb8081ff..f8e4e7a1a7cd32c59ad2b9adab55dd06b403fac6 100644
--- a/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Save.php
+++ b/app/code/Magento/GoogleShopping/Controller/Adminhtml/Googleshopping/Types/Save.php
@@ -11,7 +11,8 @@ class Save extends \Magento\GoogleShopping\Controller\Adminhtml\Googleshopping\T
     /**
      * Save attribute set mapping
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Exception
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     public function execute()
@@ -23,59 +24,56 @@ class Save extends \Magento\GoogleShopping\Controller\Adminhtml\Googleshopping\T
             $typeModel->load($id);
         }
 
-        try {
-            $typeModel->setCategory($this->getRequest()->getParam('category'));
-            if ($typeModel->getId()) {
-                $collection = $this->_objectManager->create(
-                    'Magento\GoogleShopping\Model\Resource\Attribute\Collection'
-                )->addTypeFilter(
-                    $typeModel->getId()
-                )->load();
-                foreach ($collection as $attribute) {
-                    $attribute->delete();
-                }
-            } else {
-                $typeModel->setAttributeSetId(
-                    $this->getRequest()->getParam('attribute_set_id')
-                )->setTargetCountry(
-                    $this->getRequest()->getParam('target_country')
-                );
+        $typeModel->setCategory($this->getRequest()->getParam('category'));
+        if ($typeModel->getId()) {
+            $collection = $this->_objectManager->create('Magento\GoogleShopping\Model\Resource\Attribute\Collection')
+                ->addTypeFilter($typeModel->getId())
+                ->load();
+            foreach ($collection as $attribute) {
+                $attribute->delete();
             }
-            $typeModel->save();
+        } else {
+            $typeModel->setAttributeSetId($this->getRequest()->getParam('attribute_set_id'))
+                ->setTargetCountry($this->getRequest()->getParam('target_country'));
+        }
+        $typeModel->save();
 
-            $attributes = $this->getRequest()->getParam('attributes');
-            $requiredAttributes = $this->_objectManager->get(
-                'Magento\GoogleShopping\Model\Config'
-            )->getRequiredAttributes();
-            if (is_array($attributes)) {
-                $typeId = $typeModel->getId();
-                foreach ($attributes as $attrInfo) {
-                    if (isset($attrInfo['delete']) && $attrInfo['delete'] == 1) {
-                        continue;
-                    }
-                    $this->_objectManager->create(
-                        'Magento\GoogleShopping\Model\Attribute'
-                    )->setAttributeId(
-                        $attrInfo['attribute_id']
-                    )->setGcontentAttribute(
-                        $attrInfo['gcontent_attribute']
-                    )->setTypeId(
-                        $typeId
-                    )->save();
-                    unset($requiredAttributes[$attrInfo['gcontent_attribute']]);
+        $attributes = $this->getRequest()->getParam('attributes');
+        $requiredAttributes = $this->_objectManager->get('Magento\GoogleShopping\Model\Config')
+            ->getRequiredAttributes();
+        if (is_array($attributes)) {
+            $typeId = $typeModel->getId();
+            foreach ($attributes as $attrInfo) {
+                if (isset($attrInfo['delete']) && $attrInfo['delete'] == 1) {
+                    continue;
                 }
+                $this->_objectManager->create('Magento\GoogleShopping\Model\Attribute')
+                    ->setAttributeId($attrInfo['attribute_id'])
+                    ->setGcontentAttribute($attrInfo['gcontent_attribute'])
+                    ->setTypeId($typeId)
+                    ->save();
+                unset($requiredAttributes[$attrInfo['gcontent_attribute']]);
             }
+        }
 
-            $this->messageManager->addSuccess(__('The attribute mapping has been saved.'));
-            if (!empty($requiredAttributes)) {
-                $this->messageManager->addSuccess(
-                    $this->_objectManager->get('Magento\GoogleShopping\Helper\Category')->getMessage()
-                );
-            }
-        } catch (\Exception $e) {
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
-            $this->messageManager->addError(__("We can't save Attribute Set Mapping."));
+        $this->messageManager->addSuccess(__('The attribute mapping has been saved.'));
+        if (!empty($requiredAttributes)) {
+            $this->messageManager->addSuccess(
+                $this->_objectManager->get('Magento\GoogleShopping\Helper\Category')->getMessage()
+            );
         }
-        $this->_redirect('adminhtml/*/index', ['store' => $this->_getStore()->getId()]);
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('adminhtml/*/index', ['store' => $this->_getStore()->getId()]);
     }
 }
diff --git a/app/code/Magento/GoogleShopping/composer.json b/app/code/Magento/GoogleShopping/composer.json
index fdf25142814a5a9ad5a9024dc353b862885674c8..d1c57e9befe38f5d1d813b751043ebedd83cd8cf 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleShopping/view/adminhtml/templates/captcha.phtml b/app/code/Magento/GoogleShopping/view/adminhtml/templates/captcha.phtml
index ba0d01345700119c949a48e3f48e24372d5e983b..9d206cf76d080882935ce49267d9a98cd2e7d755 100644
--- a/app/code/Magento/GoogleShopping/view/adminhtml/templates/captcha.phtml
+++ b/app/code/Magento/GoogleShopping/view/adminhtml/templates/captcha.phtml
@@ -9,11 +9,9 @@
 ?>
 
 <?php if ($block->getGcontentCaptchaToken() && $block->getGcontentCaptchaUrl()): ?>
-<div class="admin__scope">
-    <div class="messages">
-        <div class="message message-error error">
-            <div><img src="<?php echo $block->getGcontentCaptchaUrl() ?>"> <input type="text" id="user_confirm"> <?php echo $block->getConfirmButtonHtml() ?></div>
-        </div>
+<div class="messages">
+    <div class="message message-error error">
+        <div><img src="<?php echo $block->getGcontentCaptchaUrl() ?>"> <input type="text" id="user_confirm"> <?php echo $block->getConfirmButtonHtml() ?></div>
     </div>
 </div>
 <?php endif; ?>
diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json
index b260194c32c4a107dc06e237a66b3cf0852fb696..5a287d286f7f3ba465d0ff7b3192be469a41e2af 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.42.0-beta11",
-        "magento/module-import-export": "0.42.0-beta11",
-        "magento/module-catalog-import-export": "0.42.0-beta11",
-        "magento/module-grouped-product": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-import-export": "0.74.0-beta2",
+        "magento/module-catalog-import-export": "0.74.0-beta2",
+        "magento/module-grouped-product": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php b/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php
index 76330dcbf1fccb1f3726318d772a279f93fcb51c..d856527779116c8c6795c79d704fc90a892bfcd2 100644
--- a/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php
+++ b/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php
@@ -326,6 +326,32 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
         return $this;
     }
 
+    /**
+     * @param \Magento\Framework\Object $buyRequest
+     * @param \Magento\Catalog\Model\Product $product
+     * @param bool $isStrictProcessMode
+     * @return array|string
+     */
+    protected function getProductInfo(\Magento\Framework\Object $buyRequest, $product, $isStrictProcessMode)
+    {
+        $productsInfo = $buyRequest->getSuperGroup() ?: [];
+        $associatedProducts = $this->getAssociatedProducts($product);
+
+        if (!is_array($productsInfo)) {
+            return __('Please specify the quantity of product(s).')->render();
+        }
+        foreach ($associatedProducts as $subProduct) {
+            if (!isset($productsInfo[$subProduct->getId()])) {
+                if ($isStrictProcessMode && !$subProduct->getQty()) {
+                    return __('Please specify the quantity of product(s).')->render();
+                }
+                $productsInfo[$subProduct->getId()] = intval($subProduct->getQty());
+            }
+        }
+
+        return $productsInfo;
+    }
+
     /**
      * Prepare product and its configuration to be added to some products list.
      * Perform standard preparation process and add logic specific to Grouped product type.
@@ -335,70 +361,66 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
      * @param string $processMode
      * @return \Magento\Framework\Phrase|array|string
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     protected function _prepareProduct(\Magento\Framework\Object $buyRequest, $product, $processMode)
     {
-        $productsInfo = $buyRequest->getSuperGroup();
+        $products = [];
+        $associatedProductsInfo = [];
         $isStrictProcessMode = $this->_isStrictProcessMode($processMode);
-
-        if (!$isStrictProcessMode || !empty($productsInfo) && is_array($productsInfo)) {
-            $products = [];
-            $associatedProductsInfo = [];
-            $associatedProducts = $this->getAssociatedProducts($product);
-            if ($associatedProducts || !$isStrictProcessMode) {
-                foreach ($associatedProducts as $subProduct) {
-                    $subProductId = $subProduct->getId();
-                    if (isset($productsInfo[$subProductId])) {
-                        $qty = $productsInfo[$subProductId];
-                        if (!empty($qty) && is_numeric($qty)) {
-                            $_result = $subProduct->getTypeInstance()->_prepareProduct(
-                                $buyRequest,
-                                $subProduct,
-                                $processMode
-                            );
-                            if (is_string($_result) && !is_array($_result)) {
-                                return $_result;
-                            }
-
-                            if (!isset($_result[0])) {
-                                return __('We cannot process the item.')->render();
-                            }
-
-                            if ($isStrictProcessMode) {
-                                $_result[0]->setCartQty($qty);
-                                $_result[0]->addCustomOption(
-                                    'info_buyRequest',
-                                    serialize(
-                                        [
-                                            'super_product_config' => [
-                                                'product_type' => self::TYPE_CODE,
-                                                'product_id' => $product->getId(),
-                                            ],
-                                        ]
-                                    )
-                                );
-                                $products[] = $_result[0];
-                            } else {
-                                $associatedProductsInfo[] = [$subProductId => $qty];
-                                $product->addCustomOption('associated_product_' . $subProductId, $qty);
-                            }
-                        }
-                    }
-                }
+        $productsInfo = $this->getProductInfo($buyRequest, $product, $isStrictProcessMode);
+        if (is_string($productsInfo)) {
+            return $productsInfo;
+        }
+        $associatedProducts = !$isStrictProcessMode || !empty($productsInfo)
+            ? $this->getAssociatedProducts($product)
+            : false;
+
+        foreach ($associatedProducts as $subProduct) {
+            $qty = $productsInfo[$subProduct->getId()];
+            if (!is_numeric($qty)) {
+                continue;
             }
 
-            if (!$isStrictProcessMode || count($associatedProductsInfo)) {
-                $product->addCustomOption('product_type', self::TYPE_CODE, $product);
-                $product->addCustomOption('info_buyRequest', serialize($buyRequest->getData()));
+            $_result = $subProduct->getTypeInstance()->_prepareProduct($buyRequest, $subProduct, $processMode);
 
-                $products[] = $product;
+            if (is_string($_result)) {
+                return $_result;
+            } elseif (!isset($_result[0])) {
+                return __('Cannot process the item.')->render();
             }
 
-            if (count($products)) {
-                return $products;
+            if ($isStrictProcessMode) {
+                $_result[0]->setCartQty($qty);
+                $_result[0]->addCustomOption(
+                    'info_buyRequest',
+                    serialize(
+                        [
+                            'super_product_config' => [
+                                'product_type' => self::TYPE_CODE,
+                                'product_id' => $product->getId(),
+                            ],
+                        ]
+                    )
+                );
+                $products[] = $_result[0];
+            } else {
+                $associatedProductsInfo[] = [$subProduct->getId() => $qty];
+                $product->addCustomOption('associated_product_' . $subProduct->getId(), $qty);
             }
         }
 
+        if (!$isStrictProcessMode || count($associatedProductsInfo)) {
+            $product->addCustomOption('product_type', self::TYPE_CODE, $product);
+            $product->addCustomOption('info_buyRequest', serialize($buyRequest->getData()));
+
+            $products[] = $product;
+        }
+
+        if (count($products)) {
+            return $products;
+        }
+
         return __('Please specify the quantity of product(s).')->render();
     }
 
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/GroupedTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/GroupedTest.php
index c849b1de1789ed9101e1d2fdc139b7d5900fc5cb..caaa76db8362447af861b1cb9d91a357fc174595 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/GroupedTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/GroupedTest.php
@@ -63,7 +63,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getProduct
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getProduct
      */
     public function testGetProductPositive()
     {
@@ -86,7 +86,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getProduct
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getProduct
      */
     public function testGetProductNegative()
     {
@@ -130,7 +130,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getAssociatedProducts
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getAssociatedProducts
      */
     public function testGetAssociatedProducts()
     {
@@ -166,7 +166,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::setPreconfiguredValue
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::setPreconfiguredValue
      */
     public function testSetPreconfiguredValue()
     {
@@ -213,7 +213,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getCanShowProductPrice
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getCanShowProductPrice
      */
     public function testGetCanShowProductPrice()
     {
@@ -221,7 +221,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getIsLastFieldset
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getIsLastFieldset
      */
     public function testGetIsLastFieldsetPositive()
     {
@@ -236,7 +236,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
      * @param array|bool $options
      * @param bool $expectedResult
      *
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getIsLastFieldset
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getIsLastFieldset
      * @dataProvider getIsLastFieldsetDataProvider
      */
     public function testGetIsLastFieldsetNegative($options, $expectedResult)
@@ -274,7 +274,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getCurrencyPrice
+     * @covers \Magento\GroupedProduct\Block\Adminhtml\Product\Composite\Fieldset\Grouped::getCurrencyPrice
      */
     public function testGetCurrencyPrice()
     {
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProducts/ListAssociatedProductsTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProducts/ListAssociatedProductsTest.php
index 804cb62c857576b450747716d4fb6e1afc63b616..f03cf75237208d909dafd7d6a8670165656466d2 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProducts/ListAssociatedProductsTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProducts/ListAssociatedProductsTest.php
@@ -72,11 +72,15 @@ class ListAssociatedProductsTest extends \PHPUnit_Framework_TestCase
 
         $this->priceCurrency = $this->getMockBuilder('Magento\Framework\Pricing\PriceCurrencyInterface')->getMock();
 
-        $this->block = new \Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts\ListAssociatedProducts($this->contextMock, $this->registryMock, $this->priceCurrency);
+        $this->block = new \Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts\ListAssociatedProducts(
+            $this->contextMock,
+            $this->registryMock,
+            $this->priceCurrency
+        );
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts\ListAssociatedProducts
+     * @covers \Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts\ListAssociatedProducts
      *     ::getAssociatedProducts
      */
     public function testGetAssociatedProducts()
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProductsTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProductsTest.php
index 633b0025153e1889a5879990fc25d6611e93c72a..b32cded0747f95689d722fb37f9b34f5700a2fce 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProductsTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Block/Product/Grouped/AssociatedProductsTest.php
@@ -24,7 +24,7 @@ class AssociatedProductsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts::getParentTab
+     * @covers \Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts::getParentTab
      */
     public function testGetParentTab()
     {
@@ -32,7 +32,7 @@ class AssociatedProductsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts::getTabLabel
+     * @covers \Magento\GroupedProduct\Block\Product\Grouped\AssociatedProducts::getTabLabel
      */
     public function testGetTabLabel()
     {
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Helper/Product/Configuration/Plugin/GroupedTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Helper/Product/Configuration/Plugin/GroupedTest.php
index 642b5345e23af33a8788f70e224d812383bed772..683477dfcec666667e9877c5c3b3c27e1c3feb84 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Helper/Product/Configuration/Plugin/GroupedTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Helper/Product/Configuration/Plugin/GroupedTest.php
@@ -70,7 +70,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped::aroundGetOptions
+     * @covers \Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped::aroundGetOptions
      */
     public function testAroundGetOptionsGroupedProductWithAssociated()
     {
@@ -136,7 +136,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped::aroundGetOptions
+     * @covers \Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped::aroundGetOptions
      */
     public function testAroundGetOptionsGroupedProductWithoutAssociated()
     {
@@ -173,7 +173,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped::aroundGetOptions
+     * @covers \Magento\GroupedProduct\Helper\Product\Configuration\Plugin\Grouped::aroundGetOptions
      */
     public function testAroundGetOptionsAnotherProductType()
     {
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/Grouped/PriceTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/Grouped/PriceTest.php
index fd02a7d501c8074cfa9e711da27377441dc892b7..3e9523d19787a4abd1fc652b1ed563e420603123 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/Grouped/PriceTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/Grouped/PriceTest.php
@@ -29,7 +29,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers Magento\GroupedProduct\Model\Product\Type\Grouped\Price::getFinalPrice
+     * @covers \Magento\GroupedProduct\Model\Product\Type\Grouped\Price::getFinalPrice
      */
     public function testGetFinalPriceIfQtyIsNullAndFinalPriceExist()
     {
@@ -55,7 +55,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
      * @param $expectedFinalPrice
      *
      * @dataProvider getFinalPriceDataProvider
-     * covers Magento\GroupedProduct\Model\Product\Type\Grouped\Price::getFinalPrice
+     * @covers \Magento\GroupedProduct\Model\Product\Type\Grouped\Price::getFinalPrice
      */
     public function testGetFinalPrice(
         array $associatedProducts,
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php
index 077fa278da47bd96b50fe8dce163fc0315fbd355..4cf5af00c029444d88bda643c4f61d6a62a174f9 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php
@@ -300,20 +300,82 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
 
     public function testPrepareForCartAdvancedEmpty()
     {
+        $this->product = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
         $buyRequest = new \Magento\Framework\Object();
         $expectedMsg = "Please specify the quantity of product(s).";
 
-        $this->assertEquals(
-            $expectedMsg,
-            $this->_model->prepareForCartAdvanced($buyRequest, $this->product)
+        $productCollection = $this->getMock(
+            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection',
+            [],
+            [],
+            '',
+            false
         );
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('setFlag')
+            ->willReturnSelf();
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('setIsStrongMode')
+            ->willReturnSelf();
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('setProduct');
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('addAttributeToSelect')
+            ->willReturnSelf();
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('addFilterByRequiredOptions')
+            ->willReturnSelf();
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('setPositionOrder')
+            ->willReturnSelf();
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('addStoreFilter')
+            ->willReturnSelf();
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('addAttributeToFilter')
+            ->willReturnSelf();
+        $items = [
+            $this->getMock('Magento\Catalog\Model\Product', [], [], '', false),
+            $this->getMock('Magento\Catalog\Model\Product', [], [], '', false)
+        ];
+        $productCollection
+            ->expects($this->atLeastOnce())
+            ->method('getIterator')
+            ->willReturn(new \ArrayIterator($items));
+
+        $link = $this->getMock('Magento\Catalog\Model\Product\Link', [], [], '', false);
+        $link
+            ->expects($this->any())
+            ->method('setLinkTypeId');
+        $link
+            ->expects($this->atLeastOnce())
+            ->method('getProductCollection')
+            ->willReturn($productCollection);
+
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('getLinkInstance')
+            ->willReturn($link);
+
+        $this->product
+            ->expects($this->any())
+            ->method('getData')
+            ->willReturn($items);
 
-        $buyRequest->setSuperGroup([]);
         $this->assertEquals(
             $expectedMsg,
             $this->_model->prepareForCartAdvanced($buyRequest, $this->product)
         );
 
+
         $buyRequest->setSuperGroup(1);
         $this->assertEquals(
             $expectedMsg,
@@ -329,8 +391,14 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
 
         $cached = true;
         $associatedProducts = [];
-        $this->product->expects($this->once())->method('hasData')->will($this->returnValue($cached));
-        $this->product->expects($this->once())->method('getData')->will($this->returnValue($associatedProducts));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('hasData')
+            ->will($this->returnValue($cached));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('getData')
+            ->will($this->returnValue($associatedProducts));
 
         $this->assertEquals(
             $expectedMsg,
@@ -345,8 +413,14 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
 
         $cached = true;
         $associatedProducts = [];
-        $this->product->expects($this->once())->method('hasData')->will($this->returnValue($cached));
-        $this->product->expects($this->once())->method('getData')->will($this->returnValue($associatedProducts));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('hasData')
+            ->will($this->returnValue($cached));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('getData')
+            ->will($this->returnValue($associatedProducts));
 
         $this->assertEquals(
             [0 => $this->product],
@@ -358,7 +432,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     {
         $associatedProduct = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
         $associatedId = 9384;
-        $associatedProduct->expects($this->once())->method('getId')->will($this->returnValue($associatedId));
+        $associatedProduct->expects($this->atLeastOnce())->method('getId')->will($this->returnValue($associatedId));
 
         $typeMock = $this->getMock(
             'Magento\Catalog\Model\Product\Type\AbstractType',
@@ -376,8 +450,14 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $buyRequest->setSuperGroup([$associatedId => 1]);
 
         $cached = true;
-        $this->product->expects($this->once())->method('hasData')->will($this->returnValue($cached));
-        $this->product->expects($this->once())->method('getData')->will($this->returnValue([$associatedProduct]));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('hasData')
+            ->will($this->returnValue($cached));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('getData')
+            ->will($this->returnValue([$associatedProduct]));
 
         $this->assertEquals(
             $associatedPrepareResult,
@@ -387,10 +467,10 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
 
     public function testPrepareForCartAdvancedWithProductsStrictFalseEmptyArrayResult()
     {
-        $expectedMsg = "We cannot process the item.";
+        $expectedMsg = "Cannot process the item.";
         $associatedProduct = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
         $associatedId = 9384;
-        $associatedProduct->expects($this->once())->method('getId')->will($this->returnValue($associatedId));
+        $associatedProduct->expects($this->atLeastOnce())->method('getId')->will($this->returnValue($associatedId));
 
         $typeMock = $this->getMock(
             'Magento\Catalog\Model\Product\Type\AbstractType',
@@ -408,8 +488,14 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $buyRequest->setSuperGroup([$associatedId => 1]);
 
         $cached = true;
-        $this->product->expects($this->once())->method('hasData')->will($this->returnValue($cached));
-        $this->product->expects($this->once())->method('getData')->will($this->returnValue([$associatedProduct]));
+        $this->product->
+        expects($this->atLeastOnce())
+            ->method('hasData')
+            ->will($this->returnValue($cached));
+        $this->product->
+        expects($this->atLeastOnce())
+            ->method('getData')
+            ->will($this->returnValue([$associatedProduct]));
 
         $this->assertEquals(
             $expectedMsg,
@@ -421,7 +507,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     {
         $associatedProduct = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
         $associatedId = 9384;
-        $associatedProduct->expects($this->once())->method('getId')->will($this->returnValue($associatedId));
+        $associatedProduct->expects($this->atLeastOnce())->method('getId')->will($this->returnValue($associatedId));
 
         $typeMock = $this->getMock(
             'Magento\Catalog\Model\Product\Type\AbstractType',
@@ -439,8 +525,14 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $buyRequest->setSuperGroup([$associatedId => 1]);
 
         $cached = true;
-        $this->product->expects($this->once())->method('hasData')->will($this->returnValue($cached));
-        $this->product->expects($this->once())->method('getData')->will($this->returnValue([$associatedProduct]));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('hasData')
+            ->will($this->returnValue($cached));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('getData')
+            ->will($this->returnValue([$associatedProduct]));
 
         $this->assertEquals(
             [$this->product],
@@ -452,7 +544,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
     {
         $associatedProduct = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
         $associatedId = 9384;
-        $associatedProduct->expects($this->once())->method('getId')->will($this->returnValue($associatedId));
+        $associatedProduct->expects($this->atLeastOnce())->method('getId')->will($this->returnValue($associatedId));
 
         $typeMock = $this->getMock(
             'Magento\Catalog\Model\Product\Type\AbstractType',
@@ -470,8 +562,14 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $buyRequest->setSuperGroup([$associatedId => 1]);
 
         $cached = true;
-        $this->product->expects($this->once())->method('hasData')->will($this->returnValue($cached));
-        $this->product->expects($this->once())->method('getData')->will($this->returnValue([$associatedProduct]));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('hasData')
+            ->will($this->returnValue($cached));
+        $this->product
+            ->expects($this->atLeastOnce())
+            ->method('getData')
+            ->will($this->returnValue([$associatedProduct]));
 
         $this->assertEquals(
             $associatedPrepareResult,
diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json
index 66be65aaa588bba8e18420a2d2bf973a27555ecd..7d0848de8487442f4374094c8f1166dfafcaee0b 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/module-msrp": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/module-msrp": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "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 363841686c8aee2b9792ecd42ea5522feb8acccc..c5437123aea58b42d4c3cb41d21a076709d3a7eb 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
@@ -121,6 +121,8 @@ define([
 
                     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');
diff --git a/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php b/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php
index 4f0408598040781afb0783254bf0ff4fc15c447a..0dfd086c2d0fe443af7450ea65be44826973abaf 100644
--- a/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php
+++ b/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php
@@ -80,7 +80,6 @@ class Filter extends \Magento\Backend\Block\Widget\Grid\Extended
             'date_format' => $this->_localeDate->getDateFormat(
                 \IntlDateFormatter::SHORT
             ),
-            'image' => $this->getViewFileUrl('images/grid-cal.png'),
         ];
         /** @var $selectBlock \Magento\Framework\View\Element\Html\Date */
         $dateBlock = $this->_layout->createBlock(
diff --git a/app/code/Magento/ImportExport/Model/Import.php b/app/code/Magento/ImportExport/Model/Import.php
index c09a012798e1d6f3fc9075440cedf77aa8277c38..b3aaeec836d2a737056bfc2029f1952dbc81bf8a 100644
--- a/app/code/Magento/ImportExport/Model/Import.php
+++ b/app/code/Magento/ImportExport/Model/Import.php
@@ -494,7 +494,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel
                     $this->_varDirectory->getRelativePath($uploadedFile),
                     $sourceFileRelative
                 );
-            } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+            } catch (\Magento\Framework\Exception\FileSystemException $e) {
                 throw new \Magento\Framework\Exception\LocalizedException(__('Source file moving failed'));
             }
         }
diff --git a/app/code/Magento/ImportExport/Model/Import/Source/Csv.php b/app/code/Magento/ImportExport/Model/Import/Source/Csv.php
index 8941368a8f061b5e67c692b14bb61b405be0f296..386f4aea620f1bbf7b80bf0b236725958e502337 100644
--- a/app/code/Magento/ImportExport/Model/Import/Source/Csv.php
+++ b/app/code/Magento/ImportExport/Model/Import/Source/Csv.php
@@ -44,7 +44,7 @@ class Csv extends \Magento\ImportExport\Model\Import\AbstractSource
     ) {
         try {
             $this->_file = $directory->openFile($directory->getRelativePath($file), 'r');
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             throw new \LogicException("Unable to open file: '{$file}'");
         }
         $this->_delimiter = $delimiter;
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Entity/AbstractEavTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Entity/AbstractEavTest.php
index 73170fc7371671b9ab5ec9bc3d9bb58951a6c547..036af4df99be1851f501c7ad1ab10936dfd642c0 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Entity/AbstractEavTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Entity/AbstractEavTest.php
@@ -50,7 +50,7 @@ class AbstractEavTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method _addAttributesToCollection()
      *
-     * covers \Magento\ImportExport\Model\Export\Entity\AbstractEav::_addAttributesToCollection
+     * @covers \Magento\ImportExport\Model\Export\Entity\AbstractEav::_addAttributesToCollection
      */
     public function testAddAttributesToCollection()
     {
@@ -70,8 +70,8 @@ class AbstractEavTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for methods _addAttributeValuesToRow()
      *
-     * covers \Magento\ImportExport\Model\Export\Entity\AbstractEav::_initAttributeValues
-     * covers \Magento\ImportExport\Model\Export\Entity\AbstractEav::_addAttributeValuesToRow
+     * @covers \Magento\ImportExport\Model\Export\Entity\AbstractEav::_initAttributeValues
+     * @covers \Magento\ImportExport\Model\Export\Entity\AbstractEav::_addAttributeValuesToRow
      */
     public function testAddAttributeValuesToRow()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Export/EntityAbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Export/EntityAbstractTest.php
index 4d90c639ce39cdfdfab9dabe22e649729bb9e858..4899445316b8b44952b9b46dc8183995d5b6a1b3 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Export/EntityAbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Export/EntityAbstractTest.php
@@ -14,8 +14,8 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for setter and getter of file name property
      *
-     * covers \Magento\ImportExport\Model\Export\AbstractEntity::getFileName
-     * covers \Magento\ImportExport\Model\Export\AbstractEntity::setFileName
+     * @covers \Magento\ImportExport\Model\Export\AbstractEntity::getFileName
+     * @covers \Magento\ImportExport\Model\Export\AbstractEntity::setFileName
      */
     public function testGetFileNameAndSetFileName()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/AbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/AbstractTest.php
index 1ad7acd3a41803760bcc36a266bcdf8b90d898d4..915632e86021748869ee024f05cf1e6e1da9026e 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/AbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/AbstractTest.php
@@ -67,7 +67,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Columns number: "1" have empty headers
      */
@@ -80,7 +80,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Columns number: "1" have empty headers
      */
@@ -93,7 +93,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Column names: "_test1" are invalid
      */
@@ -107,7 +107,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
      * Test for method isAttributeValid()
      *
      * @dataProvider isAttributeValidDataProvider
-     * covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::isAttributeValid
+     * @covers \Magento\ImportExport\Model\Import\Entity\AbstractEntity::isAttributeValid
      *
      * @param string $attrCode
      * @param array $attrParams
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php
index 5843560833a7283517a08f4ead58bbcfa1a54b6b..d3a43b4355b99990978cce3e7eb1acea4b001d40 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php
@@ -136,7 +136,7 @@ class EavAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test entity type id getter
      *
-     * covers \Magento\ImportExport\Model\Import\Entity\AbstractEav::getEntityTypeId
+     * @covers \Magento\ImportExport\Model\Import\Entity\AbstractEav::getEntityTypeId
      */
     public function testGetEntityTypeId()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php
index e8d0bbdfc5603e4d4a818015e934cb19c545a34b..fbd4bfb1331d22b2cba6d1e3ff40d717eef80d15 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php
@@ -82,7 +82,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method _prepareRowForDb()
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::_prepareRowForDb
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::_prepareRowForDb
      */
     public function testPrepareRowForDb()
     {
@@ -211,7 +211,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method getBehavior() with $rowData argument = null
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::getBehavior
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::getBehavior
      */
     public function testGetBehaviorWithoutRowData()
     {
@@ -375,7 +375,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method getBehavior() with $rowData argument = null
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::getBehavior
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::getBehavior
      *
      * @dataProvider dataProviderForTestGetBehaviorWithRowData
      * @param $inputBehavior
@@ -524,7 +524,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testValidateDataPermanentAttributes()
@@ -543,7 +543,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testValidateDataEmptyColumnName()
@@ -555,7 +555,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testValidateDataColumnNameWithWhitespaces()
@@ -567,7 +567,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for method validateData()
      *
-     * covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
+     * @covers \Magento\ImportExport\Model\Import\AbstractEntity::validateData
      * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testValidateDataAttributeNames()
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Source/CsvTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Source/CsvTest.php
index 2cea74eb72dd28d15b9fc4e072b61604df1d0b2d..25e6e1a441c0835a90a111262eb08b1cc675838e 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Source/CsvTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Source/CsvTest.php
@@ -37,13 +37,9 @@ class CsvTest extends \PHPUnit_Framework_TestCase
      */
     public function testConstructException()
     {
-        $this->_directoryMock->expects(
-            $this->any()
-        )->method(
-            'openFile'
-        )->will(
-            $this->throwException(new \Magento\Framework\Filesystem\FilesystemException())
-        );
+        $this->_directoryMock->expects($this->any())
+            ->method('openFile')
+            ->willThrowException(new \Magento\Framework\Exception\FileSystemException(__('Error message')));
         new \Magento\ImportExport\Model\Import\Source\Csv(__DIR__ . '/invalid_file', $this->_directoryMock);
     }
 
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php
index ce3243ef5c97ba13c88931cf16cd5a03f23244e9..a39d5b55bd0e14bc709046e19d478765d87df42a 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php
@@ -27,7 +27,7 @@ class CollectionByPagesIteratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\ImportExport\Model\Resource\CollectionByPagesIterator::iterate
+     * @covers \Magento\ImportExport\Model\Resource\CollectionByPagesIterator::iterate
      */
     public function testIterate()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/BasicTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/BasicTest.php
index 460d2aa2ea6f6067a2ac07d9d40391c7b83a5b6c..1476d35fcf6e2745a4a60e31394b2691b980b406 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/BasicTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/BasicTest.php
@@ -38,7 +38,7 @@ class BasicTest extends \Magento\ImportExport\Test\Unit\Model\Source\Import\Abst
     /**
      * Test toArray method
      *
-     * covers \Magento\ImportExport\Model\Source\Import\Behavior\Basic::toArray
+     * @covers \Magento\ImportExport\Model\Source\Import\Behavior\Basic::toArray
      */
     public function testToArray()
     {
@@ -50,7 +50,7 @@ class BasicTest extends \Magento\ImportExport\Test\Unit\Model\Source\Import\Abst
     /**
      * Test behavior group code
      *
-     * covers \Magento\ImportExport\Model\Source\Import\Behavior\Basic::getCode
+     * @covers \Magento\ImportExport\Model\Source\Import\Behavior\Basic::getCode
      */
     public function testGetCode()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/CustomTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/CustomTest.php
index f27a5630c32e31b378aad4c1c115c044d1414c9a..e5be1a91ba14733c6d7122518d6ba742c65617b0 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/CustomTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/Behavior/CustomTest.php
@@ -38,7 +38,7 @@ class CustomTest extends \Magento\ImportExport\Test\Unit\Model\Source\Import\Abs
     /**
      * Test toArray method
      *
-     * covers \Magento\ImportExport\Model\Source\Import\Behavior\Custom::toArray
+     * @covers \Magento\ImportExport\Model\Source\Import\Behavior\Custom::toArray
      */
     public function testToArray()
     {
@@ -50,7 +50,7 @@ class CustomTest extends \Magento\ImportExport\Test\Unit\Model\Source\Import\Abs
     /**
      * Test behavior group code
      *
-     * covers \Magento\ImportExport\Model\Source\Import\Behavior\Custom::getCode
+     * @covers \Magento\ImportExport\Model\Source\Import\Behavior\Custom::getCode
      */
     public function testGetCode()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/BehaviorAbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/BehaviorAbstractTest.php
index 8e4d792650408cfe4b4499c4ccc3e203eee05c45..e2a1682eb3738a1833e552af36418c69c24ed972 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/BehaviorAbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Source/Import/BehaviorAbstractTest.php
@@ -49,7 +49,7 @@ class BehaviorAbstractTest extends \Magento\ImportExport\Test\Unit\Model\Source\
     /**
      * Test for toOptionArray method
      *
-     * covers \Magento\ImportExport\Model\Source\Import\AbstractBehavior::toOptionArray
+     * @covers \Magento\ImportExport\Model\Source\Import\AbstractBehavior::toOptionArray
      */
     public function testToOptionArray()
     {
diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json
index 910e6c723cf186716ac5069324d63cb8800f60c2..0babfceb059a23506fb519fbc4fe9d095221eb44 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-indexer": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-indexer": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/busy.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/busy.phtml
index 49c4283cc60e81c3f490e4ff247e65f9878a0dad..db1ffd3e47096bbe81af91505799de67e60e004b 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/busy.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/busy.phtml
@@ -8,11 +8,9 @@
     <div class="legend">
         <span><?php echo __('Status'); ?></span>
     </div><br>
-    <div class="admin__scope">
-        <div class="messages">
-            <div class="message message-success success">
-                <div><?php echo $block->getStatusMessage(); ?>hh</div>
-            </div>
+    <div class="messages">
+        <div class="message message-success success">
+            <div><?php echo $block->getStatusMessage(); ?>hh</div>
         </div>
     </div>
 </div>
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/after.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/after.phtml
index bfc09cbbdf22a7bb7f7ab0489f4a5ecaec17f765..98557c0254c317fbcb7b6803508e9759e222e90b 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/after.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/after.phtml
@@ -9,7 +9,7 @@
         <span class="icon-head head-edit-form fieldset-legend"
             id="import_validation_container_header"><?php echo __('Validation Results'); ?></span>
     </div><br>
-    <div id="import_validation_messages" class="fieldset "><!-- --></div>
+    <div id="import_validation_messages" class="fieldset admin__scope"><!-- --></div>
 </div>
 <script>
 require(['jquery', 'prototype'], function(jQuery){
diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json
index f11f09d8331950e9a9068f1e2b082bd9034d94b7..29b3528dad550e62e60d931a2166f146d100f54f 100644
--- a/app/code/Magento/Indexer/composer.json
+++ b/app/code/Magento/Indexer/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-page-cache": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-page-cache": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php
index 141784d46b976d27ebeee62c4d3187c33353d74c..89a575dac808014fc1ab9375ad19bade912b82d2 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php
@@ -7,55 +7,61 @@
 namespace Magento\Integration\Controller\Adminhtml\Integration;
 
 use Magento\Integration\Block\Adminhtml\Integration\Edit\Tab\Info;
-use Magento\Framework\Exception\IntegrationException;
 
 class Delete extends \Magento\Integration\Controller\Adminhtml\Integration
 {
     /**
      * Delete the integration.
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     * @throws \Exception
      */
     public function execute()
     {
         $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID);
-        try {
-            if ($integrationId) {
-                $integrationData = $this->_integrationService->get($integrationId);
-                if ($this->_integrationData->isConfigType($integrationData)) {
-                    $this->messageManager->addError(
-                        __(
-                            "Uninstall the extension to remove integration '%1'.",
-                            $this->escaper->escapeHtml($integrationData[Info::DATA_NAME])
-                        )
-                    );
-                    $this->_redirect('*/*/');
-                    return;
-                }
-                $integrationData = $this->_integrationService->delete($integrationId);
-                if (!$integrationData[Info::DATA_ID]) {
-                    $this->messageManager->addError(__('This integration no longer exists.'));
-                } else {
-                    //Integration deleted successfully, now safe to delete the associated consumer data
-                    if (isset($integrationData[Info::DATA_CONSUMER_ID])) {
-                        $this->_oauthService->deleteConsumer($integrationData[Info::DATA_CONSUMER_ID]);
-                    }
-                    $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData);
-                    $this->messageManager->addSuccess(
-                        __(
-                            "The integration '%1' has been deleted.",
-                            $this->escaper->escapeHtml($integrationData[Info::DATA_NAME])
-                        )
-                    );
-                }
+
+        if ($integrationId) {
+            $integrationData = $this->_integrationService->get($integrationId);
+            if ($this->_integrationData->isConfigType($integrationData)) {
+                $this->messageManager->addError(
+                    __(
+                        "Uninstall the extension to remove integration '%1'.",
+                        $this->escaper->escapeHtml($integrationData[Info::DATA_NAME])
+                    )
+                );
+                return $this->getDefaultResult();
+            }
+            $integrationData = $this->_integrationService->delete($integrationId);
+            if (!$integrationData[Info::DATA_ID]) {
+                $this->messageManager->addError(__('This integration no longer exists.'));
             } else {
-                $this->messageManager->addError(__('Integration ID is not specified or is invalid.'));
+                //Integration deleted successfully, now safe to delete the associated consumer data
+                if (isset($integrationData[Info::DATA_CONSUMER_ID])) {
+                    $this->_oauthService->deleteConsumer($integrationData[Info::DATA_CONSUMER_ID]);
+                }
+                $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData);
+                $this->messageManager->addSuccess(
+                    __(
+                        "The integration '%1' has been deleted.",
+                        $this->escaper->escapeHtml($integrationData[Info::DATA_NAME])
+                    )
+                );
             }
-        } catch (IntegrationException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->_logger->critical($e);
+        } else {
+            $this->messageManager->addError(__('Integration ID is not specified or is invalid.'));
         }
-        $this->_redirect('*/*/');
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('*/*/');
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php
index aebe506f736a3cd0c1b365267a1dfb1a0f72a5f3..f2b69c6a65751dc5e7181c70fad2635baf90f3a5 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php
@@ -14,144 +14,109 @@ use Magento\Framework\Exception\IntegrationException;
 
 class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\IntegrationTest
 {
+    /**
+     * @var \Magento\Integration\Controller\Adminhtml\Integration\Delete
+     */
+    protected $integrationController;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->integrationController = $this->_createIntegrationController('Delete');
+
+        $resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $resultRedirect->expects($this->any())
+            ->method('setPath')
+            ->with('*/*/')
+            ->willReturnSelf();
+
+        $this->resultRedirectFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($resultRedirect);
+    }
+
     public function testDeleteAction()
     {
         $intData = $this->_getSampleIntegrationData();
-        $this->_requestMock->expects(
-            $this->once()
-        )->method(
-                'getParam'
-            )->will(
-                $this->returnValue(self::INTEGRATION_ID)
-            );
-        $this->_integrationSvcMock->expects(
-            $this->any()
-        )->method(
-                'get'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
-        $this->_integrationSvcMock->expects(
-            $this->any()
-        )->method(
-                'delete'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
+        $this->_requestMock->expects($this->once())
+            ->method('getParam')
+            ->willReturn(self::INTEGRATION_ID);
+        $this->_integrationSvcMock->expects($this->any())
+            ->method('get')
+            ->with($this->anything())
+            ->willReturn($intData);
+        $this->_integrationSvcMock->expects($this->any())
+            ->method('delete')
+            ->with($this->anything())
+            ->willReturn($intData);
         // Use real translate model
         $this->_translateModelMock = null;
         // verify success message
-        $this->_messageManager->expects(
-            $this->once()
-        )->method(
-                'addSuccess'
-            )->with(
-                __('The integration \'%1\' has been deleted.', $intData[Info::DATA_NAME])
-            );
-        $integrationContr = $this->_createIntegrationController('Delete');
-        $integrationContr->execute();
+        $this->_messageManager->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('The integration \'%1\' has been deleted.', $intData[Info::DATA_NAME]));
+
+        $this->integrationController->execute();
     }
 
     public function testDeleteActionWithConsumer()
     {
         $intData = $this->_getSampleIntegrationData();
         $intData[Info::DATA_CONSUMER_ID] = 1;
-        $this->_requestMock->expects(
-            $this->once()
-        )->method(
-                'getParam'
-            )->will(
-                $this->returnValue(self::INTEGRATION_ID)
-            );
-        $this->_integrationSvcMock->expects(
-            $this->any()
-        )->method(
-                'get'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
-        $this->_integrationSvcMock->expects(
-            $this->once()
-        )->method(
-                'delete'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
-        $this->_oauthSvcMock->expects(
-            $this->once()
-        )->method(
-                'deleteConsumer'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
+        $this->_requestMock->expects($this->once())
+            ->method('getParam')
+            ->willReturn(self::INTEGRATION_ID);
+        $this->_integrationSvcMock->expects($this->any())
+            ->method('get')
+            ->with($this->anything())
+            ->willReturn($intData);
+        $this->_integrationSvcMock->expects($this->once())
+            ->method('delete')
+            ->with($this->anything())
+            ->willReturn($intData);
+        $this->_oauthSvcMock->expects($this->once())
+            ->method('deleteConsumer')
+            ->with($this->anything())
+            ->willReturn($intData);
         // Use real translate model
         $this->_translateModelMock = null;
         // verify success message
-        $this->_messageManager->expects(
-            $this->once()
-        )->method(
-                'addSuccess'
-            )->with(
-                __('The integration \'%1\' has been deleted.', $intData[Info::DATA_NAME])
-            );
-        $integrationContr = $this->_createIntegrationController('Delete');
-        $integrationContr->execute();
+        $this->_messageManager->expects($this->once())
+            ->method('addSuccess')
+            ->with(__('The integration \'%1\' has been deleted.', $intData[Info::DATA_NAME]));
+
+        $this->integrationController->execute();
     }
 
     public function testDeleteActionConfigSetUp()
     {
         $intData = $this->_getSampleIntegrationData();
         $intData[Info::DATA_SETUP_TYPE] = IntegrationModel::TYPE_CONFIG;
-        $this->_requestMock->expects(
-            $this->once()
-        )->method(
-                'getParam'
-            )->will(
-                $this->returnValue(self::INTEGRATION_ID)
-            );
-        $this->_integrationSvcMock->expects(
-            $this->any()
-        )->method(
-                'get'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
-        $this->_integrationHelperMock->expects(
-            $this->once()
-        )->method(
-                'isConfigType'
-            )->with(
-                $intData
-            )->will(
-                $this->returnValue(true)
-            );
+        $this->_requestMock->expects($this->once())
+            ->method('getParam')
+            ->willReturn(self::INTEGRATION_ID);
+        $this->_integrationSvcMock->expects($this->any())
+            ->method('get')
+            ->with($this->anything())
+            ->willReturn($intData);
+        $this->_integrationHelperMock->expects($this->once())
+            ->method('isConfigType')
+            ->with($intData)
+            ->willReturn(true);
         // verify error message
-        $this->_messageManager->expects(
-            $this->once()
-        )->method(
-                'addError'
-            )->with(
-                __('Uninstall the extension to remove integration \'%1\'.', $intData[Info::DATA_NAME])
-            );
+        $this->_messageManager->expects($this->once())
+            ->method('addError')
+            ->with(__('Uninstall the extension to remove integration \'%1\'.', $intData[Info::DATA_NAME]));
         $this->_integrationSvcMock->expects($this->never())->method('delete');
         // Use real translate model
         $this->_translateModelMock = null;
         // verify success message
         $this->_messageManager->expects($this->never())->method('addSuccess');
-        $integrationContr = $this->_createIntegrationController('Delete');
-        $integrationContr->execute();
+
+        $this->integrationController->execute();
     }
 
     public function testDeleteActionMissingId()
@@ -161,85 +126,62 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
         // Use real translate model
         $this->_translateModelMock = null;
         // verify error message
-        $this->_messageManager->expects(
-            $this->once()
-        )->method(
-                'addError'
-            )->with(
-                __('Integration ID is not specified or is invalid.')
-            );
-        $integrationContr = $this->_createIntegrationController('Delete');
-        $integrationContr->execute();
+        $this->_messageManager->expects($this->once())
+            ->method('addError')
+            ->with(__('Integration ID is not specified or is invalid.'));
+
+        $this->integrationController->execute();
     }
 
+    /**
+     * @expectedException \Exception
+     * @expectedExceptionMessage Integration with ID '1' doesn't exist.
+     */
     public function testDeleteActionForServiceIntegrationException()
     {
         $intData = $this->_getSampleIntegrationData();
-        $this->_integrationSvcMock->expects(
-            $this->any()
-        )->method(
-                'get'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
-        $this->_requestMock->expects(
-            $this->once()
-        )->method(
-                'getParam'
-            )->will(
-                $this->returnValue(self::INTEGRATION_ID)
-            );
+        $this->_integrationSvcMock->expects($this->any())
+            ->method('get')
+            ->with($this->anything())
+            ->willReturn($intData);
+        $this->_requestMock->expects($this->once())
+            ->method('getParam')
+            ->willReturn(self::INTEGRATION_ID);
         // Use real translate model
         $this->_translateModelMock = null;
         $exceptionMessage = __("Integration with ID '%1' doesn't exist.", $intData[Info::DATA_ID]);
         $invalidIdException = new IntegrationException($exceptionMessage);
-        $this->_integrationSvcMock->expects(
-            $this->once()
-        )->method(
-                'delete'
-            )->will(
-                $this->throwException($invalidIdException)
-            );
-        $this->_messageManager->expects($this->once())->method('addError')->with($exceptionMessage);
-        $integrationContr = $this->_createIntegrationController('Delete');
-        $integrationContr->execute();
+        $this->_integrationSvcMock->expects($this->once())
+            ->method('delete')
+            ->willThrowException($invalidIdException);
+        $this->_messageManager->expects($this->never())->method('addError');
+
+        $this->integrationController->execute();
     }
 
+    /**
+     * @expectedException \Exception
+     * @expectedExceptionMessage Integration with ID '1' doesn't exist.
+     */
     public function testDeleteActionForServiceGenericException()
     {
         $intData = $this->_getSampleIntegrationData();
-        $this->_integrationSvcMock->expects(
-            $this->any()
-        )->method(
-                'get'
-            )->with(
-                $this->anything()
-            )->will(
-                $this->returnValue($intData)
-            );
-        $this->_requestMock->expects(
-            $this->once()
-        )->method(
-                'getParam'
-            )->will(
-                $this->returnValue(self::INTEGRATION_ID)
-            );
+        $this->_integrationSvcMock->expects($this->any())
+            ->method('get')
+            ->with($this->anything())
+            ->willReturn($intData);
+        $this->_requestMock->expects($this->once())
+            ->method('getParam')
+            ->willReturn(self::INTEGRATION_ID);
         // Use real translate model
         $this->_translateModelMock = null;
         $exceptionMessage = __("Integration with ID '%1' doesn't exist.", $intData[Info::DATA_ID]);
         $invalidIdException = new \Exception($exceptionMessage);
-        $this->_integrationSvcMock->expects(
-            $this->once()
-        )->method(
-                'delete'
-            )->will(
-                $this->throwException($invalidIdException)
-            );
-        //Generic Exception(non-Service) should never add the message in session for user display
+        $this->_integrationSvcMock->expects($this->once())
+            ->method('delete')
+            ->willThrowException($invalidIdException);
         $this->_messageManager->expects($this->never())->method('addError');
-        $integrationContr = $this->_createIntegrationController('Delete');
-        $integrationContr->execute();
+
+        $this->integrationController->execute();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php
index 0e3fdb67644ddf7496919e9b5180bf9b096893b4..d3fd636940bacea0caaecbccc8fde7f3de6b4694 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php
@@ -96,6 +96,11 @@ abstract class IntegrationTest extends \PHPUnit_Framework_TestCase
      */
     protected $_escaper;
 
+    /**
+     * @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirectFactory;
+
     /** Sample integration ID */
     const INTEGRATION_ID = 1;
 
@@ -210,6 +215,11 @@ abstract class IntegrationTest extends \PHPUnit_Framework_TestCase
             ->willReturn($this->pageTitleMock);
         $this->_escaper->expects($this->any())->method('escapeHtml')->will($this->returnArgument(0));
 
+        $this->resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
         $contextParameters = [
             'view' => $this->_viewMock,
             'objectManager' => $this->_objectManagerMock,
@@ -218,6 +228,7 @@ abstract class IntegrationTest extends \PHPUnit_Framework_TestCase
             'request' => $this->_requestMock,
             'response' => $this->_responseMock,
             'messageManager' => $this->_messageManager,
+            'resultRedirectFactory' => $this->resultRedirectFactory
         ];
 
         $this->_backendActionCtxMock = $this->_objectManagerHelper->getObject(
diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json
index 72465a630aff983bc73eb2ab9053a79902b4652e..70db5bfe2d95a86570d9ab2039d1c91229373435 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-user": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-authorization": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-user": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-authorization": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/activate/permissions.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/activate/permissions.phtml
index 201baa3fd24c39cd963b89029ff7358e4e23bfd5..1efdefbb0206ee0e0b6a63629a5a81509f0a5a7c 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/activate/permissions.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/activate/permissions.phtml
@@ -9,9 +9,7 @@
  */
 ?>
 <div><p><?php echo __('The integration you selected asks you to approve access to the following:'); ?></p></div>
-<div class="admin__scope">
-    <div id="integration-activate-permissions-tabs">
-        <?php echo $block->getChildHtml('tabs'); ?>
-    </div>
-    <div id="integrations-activate-permissions-content"></div>
-</div>
\ No newline at end of file
+<div id="integration-activate-permissions-tabs">
+    <?php echo $block->getChildHtml('tabs'); ?>
+</div>
+<div id="integrations-activate-permissions-content"></div>
\ No newline at end of file
diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
index 7c4083e2387ed2526f55ee887a4bc6c3ec95b00c..c30380511ed23927563d16f7f0f725154e78b5e8 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
@@ -74,7 +74,7 @@ require([
 
 <div id="integration-popup-container" style="display: none;"></div>
 <div id="integration-delete-container"
-     class="messages admin__scope"
+     class="messages"
      style="display: none;"
      title="<?php echo __('Are you sure ?'); ?>">
     <div class="message message-notice notice">
diff --git a/app/code/Magento/LayeredNavigation/Test/Unit/Block/NavigationTest.php b/app/code/Magento/LayeredNavigation/Test/Unit/Block/NavigationTest.php
index 6b2e8bb15b3dc2bf9e92d29da8fb9358229e1770..8bd548294cdb6cbbb80ba1fd2977526794fb9b55 100644
--- a/app/code/Magento/LayeredNavigation/Test/Unit/Block/NavigationTest.php
+++ b/app/code/Magento/LayeredNavigation/Test/Unit/Block/NavigationTest.php
@@ -85,9 +85,9 @@ class NavigationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\LayeredNavigation\Block\Navigation::getLayer()
-     * covers \Magento\LayeredNavigation\Block\Navigation::getFilters()
-     * covers \Magento\LayeredNavigation\Block\Navigation::canShowBlock()
+     * @covers \Magento\LayeredNavigation\Block\Navigation::getLayer()
+     * @covers \Magento\LayeredNavigation\Block\Navigation::getFilters()
+     * @covers \Magento\LayeredNavigation\Block\Navigation::canShowBlock()
      */
     public function testCanShowBlock()
     {
diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json
index ed080fb84e1d4d63980ef1581cd6d78fd42c74d5..d0f240acf188433f974962216238443f4075689c 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Log/composer.json b/app/code/Magento/Log/composer.json
index ea86b5146ee38d3ff25628fee70ab424a47258de..55ef40e0c62e08b89a1ab092e266a95993e212bb 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.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php b/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php
index 527a932ee63ea47bb473fb4cd48c21dd84eaaa11..3d2b755575ad00c7391ba92af82e10b33b958cec 100644
--- a/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php
+++ b/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php
@@ -83,7 +83,7 @@ class Status extends \Magento\MediaStorage\Controller\Adminhtml\System\Config\Sy
                             $this->_objectManager->get(
                                 'Psr\Log\LoggerInterface'
                             )->critical(
-                                new \Magento\Framework\Exception(
+                                new \Magento\Framework\Exception\LocalizedException(
                                     __('The timeout limit for response from synchronize process was reached.')
                                 )
                             );
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Config.php b/app/code/Magento/MediaStorage/Model/File/Storage/Config.php
index e56b7af11f1b5632d0b7efa781f40cc83f67beec..404434584903b317a9d6d6958e6449b0ade8e8b0 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Config.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Config.php
@@ -8,7 +8,7 @@ namespace Magento\MediaStorage\Model\File\Storage;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem\Directory\WriteInterface as DirectoryWrite;
 use Magento\Framework\Filesystem\File\Write;
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class Config
 {
@@ -82,7 +82,7 @@ class Config
             $file->write(json_encode($this->config));
             $file->unlock();
             $file->close();
-        } catch (FilesystemException $e) {
+        } catch (FileSystemException $e) {
             $file->close();
         }
     }
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Response.php b/app/code/Magento/MediaStorage/Model/File/Storage/Response.php
index ba0f47afacaac18635c4c03a34e8af61c758321a..bedbef698965cde0c29b5778ee6904e319bf7f72 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Response.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Response.php
@@ -29,15 +29,17 @@ class Response extends Http implements \Magento\Framework\App\Response\FileInter
      * @param CookieManagerInterface $cookieManager
      * @param CookieMetadataFactory $cookieMetadataFactory
      * @param \Magento\Framework\App\Http\Context $context
+     * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\File\Transfer\Adapter\Http $transferAdapter
      */
     public function __construct(
         CookieManagerInterface $cookieManager,
         CookieMetadataFactory $cookieMetadataFactory,
         \Magento\Framework\App\Http\Context $context,
+        \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\File\Transfer\Adapter\Http $transferAdapter
     ) {
-        parent::__construct($cookieManager, $cookieMetadataFactory, $context);
+        parent::__construct($cookieManager, $cookieMetadataFactory, $context, $dateTime);
         $this->_transferAdapter = $transferAdapter;
     }
 
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Synchronization.php b/app/code/Magento/MediaStorage/Model/File/Storage/Synchronization.php
index decccfd2ba0d5089739c10cba3165a36060a8923..88a72ad5c6e6bfb12f5d9165fa7860ff283b4e44 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Synchronization.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Synchronization.php
@@ -8,7 +8,7 @@ namespace Magento\MediaStorage\Model\File\Storage;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem\Directory\WriteInterface as DirectoryWrite;
 use Magento\Framework\Filesystem\File\Write;
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 /**
  * Class Synchronization
@@ -65,7 +65,7 @@ class Synchronization
                 $file->write($storage->getContent());
                 $file->unlock();
                 $file->close();
-            } catch (FilesystemException $e) {
+            } catch (FileSystemException $e) {
                 $file->close();
             }
         }
diff --git a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php b/app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php
index 511ae4dad60e4d24663c16dc3a12d857d15e52d8..2682dd691a46d839efa2e223b46a8653a9402ed1 100644
--- a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php
+++ b/app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php
@@ -125,7 +125,7 @@ class File
                 $directoryInstance->writeFile($filePath, $content);
                 return true;
             }
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             $this->_logger->info($e->getMessage());
             throw new \Magento\Framework\Exception\LocalizedException(__('Unable to save file: %1', $filePath));
         }
diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json
index ccc5a944717a31326fcdcb7af0248c7781ab14ce..bddfdffd918bdb3462c7f604fa558076879079d2 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json
index 1202688cb167fa8727bb7d384c12ab4c3307ec11..27b2fad7748b152f986ffee32f54ff46472aecbf 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.42.0-beta11",
-        "magento/module-bundle": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-downloadable": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-grouped-product": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-bundle": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-downloadable": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-grouped-product": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml b/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml
index 1bd26773cd483696932f4817d8074011b17510f1..dec37ad6d2e775888c6978208b970410549475bf 100644
--- a/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml
+++ b/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml
@@ -46,7 +46,7 @@ if ($product->isSaleable()) {
 }
 ?>
 <?php if ($product->getMsrp()): ?>
-    <span class="old-price map-old-price msrp-price-wrapper"><?php echo $msrpPrice ?></span>
+    <span class="old-price map-old-price"><?php echo $msrpPrice ?></span>
 <?php endif; ?>
 
 <?php if ($priceType->isShowPriceOnGesture()): ?>
diff --git a/app/code/Magento/Multishipping/Controller/Checkout.php b/app/code/Magento/Multishipping/Controller/Checkout.php
index 5482e8239be1f985f541198cc99423e83782cd06..ded1bf1b308214a55c3c401abe74b7deaae2c029 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout.php
@@ -23,21 +23,18 @@ class Checkout extends \Magento\Checkout\Controller\Action implements
      * @param \Magento\Customer\Model\Session $customerSession
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $accountManagement
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
         \Magento\Customer\Model\Session $customerSession,
         CustomerRepositoryInterface $customerRepository,
-        AccountManagementInterface $accountManagement,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
+        AccountManagementInterface $accountManagement
     ) {
         parent::__construct(
             $context,
             $customerSession,
             $customerRepository,
-            $accountManagement,
-            $resultRedirectFactory
+            $accountManagement
         );
     }
 
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php b/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php
index 5dd2f85ddefe6190cb9e975ff88df667612cb984..a782a26e6bfa1bf4d851ab1a55a6ac93f389d8bc 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php
@@ -27,7 +27,6 @@ class OverviewPost extends \Magento\Multishipping\Controller\Checkout
      * @param \Magento\Customer\Model\Session $customerSession
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $accountManagement
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
      */
     public function __construct(
@@ -35,7 +34,6 @@ class OverviewPost extends \Magento\Multishipping\Controller\Checkout
         \Magento\Customer\Model\Session $customerSession,
         CustomerRepositoryInterface $customerRepository,
         AccountManagementInterface $accountManagement,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
     ) {
         $this->formKeyValidator = $formKeyValidator;
@@ -43,8 +41,7 @@ class OverviewPost extends \Magento\Multishipping\Controller\Checkout
             $context,
             $customerSession,
             $customerRepository,
-            $accountManagement,
-            $resultRedirectFactory
+            $accountManagement
         );
     }
 
diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json
index fb450ad1bb22b553d05a1a25f15b75d9c31805b9..437f0d8c722e7021258e8e6e0b92a60266836cdc 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.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Edit/Form.php b/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Edit/Form.php
index b590aa30c731f0a90799f55bee4a6926feeab409..e6fe3f8f8341e240a0af4e173546b45ffdb3e348 100644
--- a/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Edit/Form.php
+++ b/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Edit/Form.php
@@ -92,8 +92,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
                     'name' => 'start_at',
                     'date_format' => $dateFormat,
                     'time_format' => $timeFormat,
-                    'label' => __('Queue Date Start'),
-                    'image' => $this->getViewFileUrl('images/grid-cal.png')
+                    'label' => __('Queue Date Start')
                 ]
             );
 
@@ -104,7 +103,6 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
                     [
                         'name' => 'stores[]',
                         'label' => __('Subscribers From'),
-                        'image' => $this->getViewFileUrl('images/grid-cal.png'),
                         'values' => $this->_systemStore->getStoreValuesForForm(),
                         'value' => $queue->getStores()
                     ]
@@ -126,8 +124,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
                     'style' => 'width:38%;',
                     'date_format' => $dateFormat,
                     'time_format' => $timeFormat,
-                    'label' => __('Queue Date Start'),
-                    'image' => $this->getViewFileUrl('images/grid-cal.png')
+                    'label' => __('Queue Date Start')
                 ]
             );
 
@@ -138,7 +135,6 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
                     [
                         'name' => 'stores[]',
                         'label' => __('Subscribers From'),
-                        'image' => $this->getViewFileUrl('images/grid-cal.png'),
                         'required' => true,
                         'values' => $this->_systemStore->getStoreValuesForForm(),
                         'value' => $queue->getStores()
diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php
index 33becad798415fa853a4962fdd3a3e79f7e6c43e..4c34f3419f10ad6f41717fd31d5b656d2d849ffb 100644
--- a/app/code/Magento/Newsletter/Model/Queue.php
+++ b/app/code/Magento/Newsletter/Model/Queue.php
@@ -239,7 +239,7 @@ class Queue extends \Magento\Email\Model\AbstractTemplate
 
             try {
                 $transport->sendMessage();
-            } catch (\Magento\Framework\Mail\Exception $e) {
+            } catch (\Magento\Framework\Exception\MailException $e) {
                 /** @var \Magento\Newsletter\Model\Problem $problem */
                 $problem = $this->_problemFactory->create();
                 $problem->addSubscriberData($item);
diff --git a/app/code/Magento/Newsletter/Model/Subscriber.php b/app/code/Magento/Newsletter/Model/Subscriber.php
index a1cb1547bda898f223e0b5980b11cad2d09f17c3..f2885610281947d30f55abdccb526e6a270c6ac4 100644
--- a/app/code/Magento/Newsletter/Model/Subscriber.php
+++ b/app/code/Magento/Newsletter/Model/Subscriber.php
@@ -8,7 +8,7 @@ namespace Magento\Newsletter\Model;
 use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Framework\Exception\NoSuchEntityException;
-use Magento\Framework\Mail\Exception as MailException;
+use Magento\Framework\Exception\MailException;
 
 /**
  * Subscriber model
diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json
index 53c62793ddf40a1c9e4bf44cd7337543382fcfba..460524e9b3689cdb22c9d4215a5d2826b13de4e2 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.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-email": "0.42.0-beta11",
-        "magento/module-cron": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-require-js": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-email": "0.74.0-beta2",
+        "magento/module-cron": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-require-js": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json
index a0a478d5a64a0dcd7eaf19ac75ebd453fa518abe..11f6f88c5c9a6d2cacb80f4308e13a8fabb4007c 100644
--- a/app/code/Magento/OfflinePayments/composer.json
+++ b/app/code/Magento/OfflinePayments/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json
index 4ee66ff206e4409ba571eb0acb02c1ec6da28caf..53659003e0037b744fb74c281efde0dcb4d3e8da 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-sales-rule": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-sales-rule": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php b/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
index 79592a636e61cbe6484222ea8a2c5c93c0547d8f..21bcec6253bf058de334d01ec83d0d4b3f667bfc 100644
--- a/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
@@ -6,7 +6,7 @@
 namespace Magento\PageCache\Test\Unit\Block;
 
 /**
- * covers \Magento\PageCache\Block\Javascript
+ * @covers \Magento\PageCache\Block\Javascript
  */
 class JavascriptTest extends \PHPUnit_Framework_TestCase
 {
@@ -80,7 +80,7 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\PageCache\Block\Javascript::getScriptOptions
+     * @covers \Magento\PageCache\Block\Javascript::getScriptOptions
      * @param bool $isSecure
      * @param string $url
      * @param string $expectedResult
diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json
index b0cd589086158448b674bb60c2e7ecae4ed14959..bf42a2eeb57e54ed7caabde4b982abcfbf91fc2b 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/PageCache/etc/varnish3.vcl b/app/code/Magento/PageCache/etc/varnish3.vcl
index 7fa9a30ec9ac5acdce849c445abfd8efa8cf496f..0b6651fbc0cd4d66748e7d68b683dc823ff574d2 100644
--- a/app/code/Magento/PageCache/etc/varnish3.vcl
+++ b/app/code/Magento/PageCache/etc/varnish3.vcl
@@ -54,7 +54,7 @@ sub vcl_recv {
     std.collect(req.http.Cookie);
 
     # static files are always cacheable. remove SSL flag and cookie
-    if (req.url ~ "^/(pub/)?(media|static)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico|woff|svg)$") {
+    if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
         unset req.http.Https;
         unset req.http.Cookie;
     }
@@ -96,7 +96,7 @@ sub vcl_fetch {
     # images, css and js are cacheable by default so we have to remove cookie also
     if (beresp.ttl > 0s && (req.request == "GET" || req.request == "HEAD")) {
         unset beresp.http.set-cookie;
-        if (req.url !~ "\.(css|js|jpg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff)(\?|$)") {
+            if (req.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
             set beresp.http.Pragma = "no-cache";
             set beresp.http.Expires = "-1";
             set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
diff --git a/app/code/Magento/PageCache/etc/varnish4.vcl b/app/code/Magento/PageCache/etc/varnish4.vcl
index 5936fcd69255d03dbc70e6e34bf60282bda2dca5..0f3dddb893d95d123a74ef618183ddb6c9e8bbe0 100644
--- a/app/code/Magento/PageCache/etc/varnish4.vcl
+++ b/app/code/Magento/PageCache/etc/varnish4.vcl
@@ -47,7 +47,7 @@ sub vcl_recv {
     std.collect(req.http.Cookie);
 
     # static files are always cacheable. remove SSL flag and cookie
-    if (req.url ~ "^/(pub/)?(media|static)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico|woff|svg)$") {
+        if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
         unset req.http.Https;
         unset req.http.Cookie;
     }
@@ -90,7 +90,7 @@ sub vcl_backend_response {
     # images, css and js are cacheable by default so we have to remove cookie also
     if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
         unset beresp.http.set-cookie;
-        if (bereq.url !~ "\.(css|js|jpg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff)(\?|$)") {
+        if (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
             set beresp.http.Pragma = "no-cache";
             set beresp.http.Expires = "-1";
             set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
diff --git a/app/code/Magento/Payment/Block/Info/Cc.php b/app/code/Magento/Payment/Block/Info/Cc.php
index bd92161c86834c161277851a5895e8d86d9152a1..afc1d2ebd298a15703e5efa8460eafca07125194 100644
--- a/app/code/Magento/Payment/Block/Info/Cc.php
+++ b/app/code/Magento/Payment/Block/Info/Cc.php
@@ -78,7 +78,7 @@ class Cc extends \Magento\Payment\Block\Info
     public function getCcExpDate()
     {
         $date = new \DateTime('now', new \DateTimeZone($this->_localeDate->getConfigTimezone()));
-        $date->setDate($this->getInfo()->getCcExpYear(), $this->getInfo()->getCcExpMonth(), $date->format('d'));
+        $date->setDate($this->getInfo()->getCcExpYear(), $this->getInfo()->getCcExpMonth() + 1, 0);
         return $date;
     }
 
diff --git a/app/code/Magento/Payment/Exception.php b/app/code/Magento/Payment/Exception.php
deleted file mode 100644
index 5ca752b37e3e71e220d7e8eb5db3c940b50ccf25..0000000000000000000000000000000000000000
--- a/app/code/Magento/Payment/Exception.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Payment;
-
-/**
- * Payment exception
- *
- * @author      Magento Core Team <core@magentocommerce.com>
- */
-class Exception extends \Exception
-{
-    /**
-     * @var int|null
-     */
-    protected $_code = null;
-
-    /**
-     * @param string|null $message
-     * @param int $code
-     */
-    public function __construct($message = null, $code = 0)
-    {
-        $this->_code = $code;
-        parent::__construct($message, 0);
-    }
-
-    /**
-     * @return int|null
-     */
-    public function getFields()
-    {
-        return $this->_code;
-    }
-}
diff --git a/app/code/Magento/Payment/Test/Unit/Block/Form/ContainerTest.php b/app/code/Magento/Payment/Test/Unit/Block/Form/ContainerTest.php
index ce67d6803293f393199db3f93fe9a11e08b745be..cb7b3bb788c8e810856545c62220680abf7b16ab 100644
--- a/app/code/Magento/Payment/Test/Unit/Block/Form/ContainerTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Block/Form/ContainerTest.php
@@ -12,7 +12,7 @@ namespace Magento\Payment\Test\Unit\Block\Form;
 class ContainerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Payment\Block\Form\Container::getChildBlock
+     * @covers \Magento\Payment\Block\Form\Container::getChildBlock
      */
     public function testSetMethodFormTemplate()
     {
diff --git a/app/code/Magento/Payment/Test/Unit/Block/Info/CcTest.php b/app/code/Magento/Payment/Test/Unit/Block/Info/CcTest.php
index 98760f01eacc72e2c5536061b47d90dc130638dc..72deb26aefc070d473031645749bf9e49249fb77 100644
--- a/app/code/Magento/Payment/Test/Unit/Block/Info/CcTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Block/Info/CcTest.php
@@ -132,14 +132,18 @@ class CcTest extends \PHPUnit_Framework_TestCase
     public function testGetCcExpDate($ccExpMonth, $ccExpYear)
     {
         $paymentInfo = $this->getMock('Magento\Payment\Model\Info', ['getCcExpMonth', 'getCcExpYear'], [], '', false);
-        $paymentInfo->expects($this->any())
+        $paymentInfo
+            ->expects($this->any())
             ->method('getCcExpMonth')
             ->will($this->returnValue($ccExpMonth));
-        $paymentInfo->expects($this->any())
-            ->method('getCcExpYear')->will($this->returnValue($ccExpYear));
+        $paymentInfo
+            ->expects($this->any())
+            ->method('getCcExpYear')
+            ->will($this->returnValue($ccExpYear));
         $this->model->setData('info', $paymentInfo);
 
-        $this->localeDate->expects($this->exactly(2))
+        $this->localeDate
+            ->expects($this->exactly(2))
             ->method('getConfigTimezone')
             ->willReturn('America/Los_Angeles');
 
@@ -153,7 +157,7 @@ class CcTest extends \PHPUnit_Framework_TestCase
     public function getCcExpDateDataProvider()
     {
         return [
-            [2, 2015],
+            [3, 2015],
             [12, 2011],
             [01, 2036]
         ];
diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json
index 70a4a9d5af4b13076668fe3c222c99ae589850cd..e01a5f8c9d78683adacbc9ed92cec5d014258aea 100644
--- a/app/code/Magento/Payment/composer.json
+++ b/app/code/Magento/Payment/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-centinel": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-centinel": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
index 48a8c0a91dbf4a4af37cb8d5f3586969e0782aa4..f2db06784d9fae66316ec9ca74e3619286202f03 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
@@ -19,7 +19,7 @@
 <?php foreach ($_specificInfo as $_label => $_value):?>
     <tr>
         <th><?php echo $block->escapeHtml($_label)?>:</th>
-        <td><?php echo nl2br(implode($block->getValueAsArray($_value, true), "\n"))?></td>
+        <td><?php echo nl2br(implode("\n", $block->getValueAsArray($_value, true)))?></td>
     </tr>
 <?php endforeach; ?>
 </table>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml
index 89d131de11cf184b4bde0e52d914791872e289db..db51c499e2835fde214a1b75db2fbda6f9219104 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml
@@ -16,8 +16,8 @@
 
 <?php if ($_specificInfo = $block->getSpecificInformation()):?>
 <?php foreach ($_specificInfo as $_label => $_value):?>
-<?php echo $_label ?>: <?php echo implode($block->getValueAsArray($_value), ' ')?>{{pdf_row_separator}}
+<?php echo $_label ?>: <?php echo implode(' ', $block->getValueAsArray($_value))?>{{pdf_row_separator}}
 <?php endforeach; ?>
 <?php endif;?>
 
-<?php echo implode($block->getChildPdfAsArray(), '{{pdf_row_separator}}') ?>
+<?php echo implode('{{pdf_row_separator}}', $block->getChildPdfAsArray()) ?>
diff --git a/app/code/Magento/Payment/view/frontend/templates/info/default.phtml b/app/code/Magento/Payment/view/frontend/templates/info/default.phtml
index cbd9eb6f607536e895b08c75ffc7a31e6773d0f5..ae2a9e0b712d7e1354961986d9bfa76efcb870e7 100644
--- a/app/code/Magento/Payment/view/frontend/templates/info/default.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/info/default.phtml
@@ -21,7 +21,7 @@
             <?php foreach ($_specificInfo as $_label => $_value):?>
                 <tr>
                     <th scope="row"><?php echo $block->escapeHtml($_label)?></th>
-                    <td><?php echo nl2br(implode($block->getValueAsArray($_value, true), "\n"))?></td>
+                    <td><?php echo nl2br(implode("\n", $block->getValueAsArray($_value, true)))?></td>
                 </tr>
             <?php endforeach; ?>
         </table>
diff --git a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
index 4df282618ee70c2364878e41cb36df1a3ccee2e6..604de5e71376620067f3473d6ee110bdcb376e8d 100644
--- a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
+++ b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
@@ -85,7 +85,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Persistent\Model\Session::removePersistentCookie
+     * @covers \Magento\Persistent\Model\Session::removePersistentCookie
      */
     public function testAfterDeleteCommit()
     {
diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json
index b09e1e6d7eec9a649f3e9e4f1a69bc5d773dd4ab..9c8da77db34ae907db6b54c55a6854a0639f87c0 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.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-cron": "0.42.0-beta11",
-        "magento/module-page-cache": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-cron": "0.74.0-beta2",
+        "magento/module-page-cache": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php b/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php
index aacabec010c730287e8263e2cc45ab7cfc7ad840..e2b9bf759f64bb701f704d10cc1a9d4557cc73cb 100644
--- a/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php
+++ b/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php
@@ -9,21 +9,29 @@ namespace Magento\ProductAlert\Controller\Unsubscribe;
 class PriceAll extends \Magento\ProductAlert\Controller\Unsubscribe
 {
     /**
-     * @return void
+     * @return \Magento\Framework\Controller\Result\Redirect
      */
     public function execute()
     {
-        try {
-            $this->_objectManager->create(
-                'Magento\ProductAlert\Model\Price'
-            )->deleteCustomer(
-                $this->_customerSession->getCustomerId(),
-                $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getWebsiteId()
-            );
-            $this->messageManager->addSuccess(__('You will no longer receive price alerts for this product.'));
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Unable to update the alert subscription.'));
-        }
-        $this->_redirect('customer/account/');
+        $this->_objectManager->create(
+            'Magento\ProductAlert\Model\Price'
+        )->deleteCustomer(
+            $this->_customerSession->getCustomerId(),
+            $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getWebsiteId()
+        );
+        $this->messageManager->addSuccess(__('You will no longer receive price alerts for this product.'));
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('customer/account/');
     }
 }
diff --git a/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php b/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php
index 3d9b989cdbb8c9b388469ab83629cac2b7b378c0..c8dec914e9540d5d8c21c7ad4b613807be8c7cca 100644
--- a/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php
+++ b/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php
@@ -9,21 +9,29 @@ namespace Magento\ProductAlert\Controller\Unsubscribe;
 class StockAll extends \Magento\ProductAlert\Controller\Unsubscribe
 {
     /**
-     * @return void
+     * @return \Magento\Framework\Controller\Result\Redirect
      */
     public function execute()
     {
-        try {
-            $this->_objectManager->create(
-                'Magento\ProductAlert\Model\Stock'
-            )->deleteCustomer(
-                $this->_customerSession->getCustomerId(),
-                $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getWebsiteId()
-            );
-            $this->messageManager->addSuccess(__('You will no longer receive stock alerts.'));
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Unable to update the alert subscription.'));
-        }
-        $this->_redirect('customer/account/');
+        $this->_objectManager->create(
+            'Magento\ProductAlert\Model\Stock'
+        )->deleteCustomer(
+            $this->_customerSession->getCustomerId(),
+            $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getWebsiteId()
+        );
+        $this->messageManager->addSuccess(__('You will no longer receive stock alerts.'));
+
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('customer/account/');
     }
 }
diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json
index 1e456b79f57b23b5b2356e8fc24ac8b82dd0a03f..26d2e7aec1ff07e2db2d5a71c5a1b72472c9eec0 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Quote/Model/Quote.php b/app/code/Magento/Quote/Model/Quote.php
index ef130e2e6597203b74b35e6066678fedc712ac20..5daefcfe5f7f6ea293cd8d5c55445002d6c063f7 100644
--- a/app/code/Magento/Quote/Model/Quote.php
+++ b/app/code/Magento/Quote/Model/Quote.php
@@ -1538,8 +1538,8 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
         /**
          * Error message
          */
-        if (is_string($cartCandidates)) {
-            return $cartCandidates;
+        if (is_string($cartCandidates) || $cartCandidates instanceof \Magento\Framework\Phrase) {
+            return strval($cartCandidates);
         }
 
         /**
@@ -2042,9 +2042,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
             return $this;
         }
 
-        if (is_string($message)) {
-            $message = $this->messageFactory->create(\Magento\Framework\Message\MessageInterface::TYPE_ERROR, $message);
-        }
+        $message = $this->messageFactory->create(\Magento\Framework\Message\MessageInterface::TYPE_ERROR, $message);
 
         $messages[$index] = $message;
         $this->setData('messages', $messages);
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RelatedProductsTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RelatedProductsTest.php
index ac849a7e96c254a0bdb185daa03dd77535bd3bbb..94fa209c4f9f51da64e03acccc5b87027a46b998 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RelatedProductsTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/Item/RelatedProductsTest.php
@@ -28,7 +28,7 @@ class RelatedProductsTest extends \PHPUnit_Framework_TestCase
      * @param int|bool $productId
      * @param array $expectedResult
      *
-     * covers \Magento\Quote\Model\Quote\Item\RelatedProducts::getRelatedProductIds
+     * @covers \Magento\Quote\Model\Quote\Item\RelatedProducts::getRelatedProductIds
      * @dataProvider getRelatedProductIdsDataProvider
      */
     public function testGetRelatedProductIds($optionValue, $productId, $expectedResult)
@@ -75,7 +75,7 @@ class RelatedProductsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Quote\Model\Quote\Item\RelatedProducts::getRelatedProductIds
+     * @covers \Magento\Quote\Model\Quote\Item\RelatedProducts::getRelatedProductIds
      */
     public function testGetRelatedProductIdsNoOptions()
     {
diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json
index 9bc1150e18b91d45761812d46b1cee3690428a46..ae730104a913cb91e40c2fe35a4b6f0267d33c96 100644
--- a/app/code/Magento/Quote/composer.json
+++ b/app/code/Magento/Quote/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-catalog-rule": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-authorization": "0.42.0-beta11",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-catalog-rule": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-authorization": "0.74.0-beta2",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php b/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
index ebb83d33ff59e4793fe68abc806ad30e7fd9a8e3..7c18123b5fa881d59ad91ce148ca94d2ed168e22 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
@@ -147,7 +147,6 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             [
                 'name' => 'from',
                 'date_format' => $dateFormat,
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'label' => __('From'),
                 'title' => __('From'),
                 'required' => true
@@ -160,7 +159,6 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             [
                 'name' => 'to',
                 'date_format' => $dateFormat,
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'label' => __('To'),
                 'title' => __('To'),
                 'required' => true
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics.php
index f0c6995732236110745edbb92a1bde4efcf7d50e..7de4649499c06a557f497abe7974e127353de17d 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics.php
@@ -35,26 +35,18 @@ class Statistics extends \Magento\Backend\App\Action
      */
     protected $reportTypes;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param [] $reportTypes
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         array $reportTypes
     ) {
         $this->_dateFilter = $dateFilter;
         $this->reportTypes = $reportTypes;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Reports/Exception.php b/app/code/Magento/Reports/Exception.php
deleted file mode 100644
index 17966d0a21e7ebbaa5e7e1429b0ff5f4334194ec..0000000000000000000000000000000000000000
--- a/app/code/Magento/Reports/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Reports;
-
-class Exception extends \Zend_Exception
-{
-}
diff --git a/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php b/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
index 98537419a90f346fdf884520c90e00ace48ed54c..8e11e8f401f4f4860c1f0c67394e4a387e439128 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
+++ b/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
@@ -425,7 +425,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
                 $tr = $transitions[$i];
                 try {
                     $this->timezoneValidator->validate($tr['ts'], $to);
-                } catch (\Magento\Framework\Stdlib\DateTime\Timezone\ValidationException $e) {
+                } catch (\Magento\Framework\Exception\ValidatorException $e) {
                     continue;
                 }
 
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php b/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
index 8fc58020e580eacefbfcb05b0338d2bf916b0e2e..a6585041528a549b1d69b10135614c1270f44937 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
@@ -66,7 +66,7 @@ class LogTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Reports\Model\Plugin\Log::afterClean
+     * @covers \Magento\Reports\Model\Plugin\Log::afterClean
      */
     public function testAfterClean()
     {
diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json
index 1292a424044d2e91517b7831717a5675abac4228..3723ef185420c053d25c340c108fe4be6f96a52f 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-log": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/module-review": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-downloadable": "0.42.0-beta11",
-        "magento/module-sales-rule": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-log": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/module-review": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-downloadable": "0.74.0-beta2",
+        "magento/module-sales-rule": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Reports/view/adminhtml/templates/grid.phtml b/app/code/Magento/Reports/view/adminhtml/templates/grid.phtml
index c4f544199ee5961e7af2feb2faf1847ef6fb4220..8d8ee2a1a08b6f6b982ee807ee03af4ac45714de 100644
--- a/app/code/Magento/Reports/view/adminhtml/templates/grid.phtml
+++ b/app/code/Magento/Reports/view/adminhtml/templates/grid.phtml
@@ -69,7 +69,6 @@ require([
 
     $("#<?php echo $block->getSuffixId('period_date_range') ?>").dateRange({
         dateFormat:"<?php echo $block->getDateFormat() ?>",
-        buttonImage:"<?php echo $block->getViewFileUrl('images/grid-cal.png') ?>",
         buttonText:"<?php echo __('Select Date') ?>",
         from:{
             id:"<?php echo $block->getSuffixId('period_date_from')?>"
diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json
index 59c62378ebb104a16e2aa878a789eb4de35fbeba..ea1e62c2a69b85d7204632e26c74ff33b8b6734e 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.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
index 0edc1cc9c4c266620cacebf793b3763382cfdd9e..90818ea3d9d8c78d36c53869bfcc44ca2a681c5a 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
@@ -14,22 +14,24 @@ class Delete extends \Magento\Review\Controller\Adminhtml\Product
     public function execute()
     {
         $reviewId = $this->getRequest()->getParam('id', false);
-        try {
-            $this->_reviewFactory->create()->setId($reviewId)->aggregate()->delete();
+        $this->_reviewFactory->create()->setId($reviewId)->aggregate()->delete();
 
-            $this->messageManager->addSuccess(__('The review has been deleted.'));
-            if ($this->getRequest()->getParam('ret') == 'pending') {
-                $this->getResponse()->setRedirect($this->getUrl('review/*/pending'));
-            } else {
-                $this->getResponse()->setRedirect($this->getUrl('review/*/'));
-            }
-            return;
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Something went wrong  deleting this review.'));
+        $this->messageManager->addSuccess(__('The review has been deleted.'));
+        if ($this->getRequest()->getParam('ret') == 'pending') {
+            $this->getResponse()->setRedirect($this->getUrl('review/*/pending'));
+        } else {
+            $this->getResponse()->setRedirect($this->getUrl('review/*/'));
         }
+    }
 
-        $this->_redirect('review/*/edit/', ['id' => $reviewId]);
+    /**
+     * {@inheritdoc}
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('review/*/edit/', ['id' => $this->getRequest()->getParam('id', false)]);
     }
 }
diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json
index 3ac2d8c5deab3948d3df18d6cea4946bdac565c4..b8ed58f3b392fc59bea283d23fdf2b890862ef96 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-newsletter": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-newsletter": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.42.0-beta11"
+        "magento/module-cookie": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Review/view/adminhtml/templates/rating/form.phtml b/app/code/Magento/Review/view/adminhtml/templates/rating/form.phtml
index 0fbed76b6a38335059ecea71b5b475044a95be20..23c88259d8c259d9cc0290f609a7938f2217aeac 100644
--- a/app/code/Magento/Review/view/adminhtml/templates/rating/form.phtml
+++ b/app/code/Magento/Review/view/adminhtml/templates/rating/form.phtml
@@ -7,11 +7,9 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="admin__scope">
-    <div class="messages">
-        <div class="message message-notice message-in-rating-edit">
-            <div><?php echo __('Please specify a rating title for a store, or we\'ll just use the default value.'); ?></div>
-        </div>
+<div class="messages">
+    <div class="message message-notice message-in-rating-edit">
+        <div><?php echo __('Please specify a rating title for a store, or we\'ll just use the default value.'); ?></div>
     </div>
 </div>
 
diff --git a/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php b/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php
index ee2379d4e143c63e6af028c9eb1ba2a5ee50db36..61da0e27c2e12c99f5db440b287521c670b59fd1 100644
--- a/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php
+++ b/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Rss\Controller\Adminhtml\Feed;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 
 /**
  * Class Index
@@ -23,18 +23,18 @@ class Index extends \Magento\Rss\Controller\Adminhtml\Feed
     public function execute()
     {
         if (!$this->scopeConfig->getValue('rss/config/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         $type = $this->getRequest()->getParam('type');
         try {
             $provider = $this->rssManager->getProvider($type);
         } catch (\InvalidArgumentException $e) {
-            throw new NotFoundException($e->getMessage());
+            throw new NotFoundException(__($e->getMessage()));
         }
 
         if (!$provider->isAllowed()) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         /** @var $rss \Magento\Rss\Model\Rss */
diff --git a/app/code/Magento/Rss/Controller/Feed/Index.php b/app/code/Magento/Rss/Controller/Feed/Index.php
index e6bba8d7424c4047ed7e2c9ac5da8d01f1f9566f..e3679a100212d62f1fc86674ee13e9e4c7851881 100644
--- a/app/code/Magento/Rss/Controller/Feed/Index.php
+++ b/app/code/Magento/Rss/Controller/Feed/Index.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Rss\Controller\Feed;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 
 /**
  * Class Index
@@ -23,14 +23,14 @@ class Index extends \Magento\Rss\Controller\Feed
     public function execute()
     {
         if (!$this->scopeConfig->getValue('rss/config/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         $type = $this->getRequest()->getParam('type');
         try {
             $provider = $this->rssManager->getProvider($type);
         } catch (\InvalidArgumentException $e) {
-            throw new NotFoundException($e->getMessage());
+            throw new NotFoundException(__($e->getMessage()));
         }
 
         if ($provider->isAuthRequired() && !$this->auth()) {
@@ -38,7 +38,7 @@ class Index extends \Magento\Rss\Controller\Feed
         }
 
         if (!$provider->isAllowed()) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         /** @var $rss \Magento\Rss\Model\Rss */
diff --git a/app/code/Magento/Rss/Controller/Index/Index.php b/app/code/Magento/Rss/Controller/Index/Index.php
index 4df5440a1700ae0753abe724763d0637d62041c8..63575ad8e44ec3864d50c97ace7421dd2d984754 100644
--- a/app/code/Magento/Rss/Controller/Index/Index.php
+++ b/app/code/Magento/Rss/Controller/Index/Index.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Rss\Controller\Index;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 
 class Index extends \Magento\Rss\Controller\Index
 {
@@ -22,7 +22,7 @@ class Index extends \Magento\Rss\Controller\Index
             $this->_view->loadLayout();
             $this->_view->renderLayout();
         } else {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
     }
 }
diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json
index d69a3857b7bdba6599ee06ec74351de028f6b779..8ffd701cc3c4258b28e307ddeab9d71c3575e5c7 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
index 6384f3ad9aada395dd5f3bb3b7605eaf56e68add..79c0ebe18c8af49cb581e0a354194430cf65d83d 100644
--- a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
+++ b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
@@ -415,27 +415,6 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
         }
     }
 
-    /**
-     * Retrieve value element
-     *
-     * @return \Magento\Framework\Data\Form\Element\AbstractElement
-     */
-    public function getValueElement()
-    {
-        $element = parent::getValueElement();
-        if (is_object($this->getAttributeObject())) {
-            switch ($this->getAttributeObject()->getFrontendInput()) {
-                case 'date':
-                    $element->setImage($this->_assetRepo->getUrl('images/grid-cal.png'));
-                    break;
-                default:
-                    break;
-            }
-        }
-
-        return $element;
-    }
-
     /**
      * Retrieve value element chooser URL
      *
diff --git a/app/code/Magento/Rule/Model/Condition/Sql/Builder.php b/app/code/Magento/Rule/Model/Condition/Sql/Builder.php
index 43e1ab5177159766d4d0bdf1e48ada4134dd3540..f093608f46f42568df97fb759da3a087e5e0dd30 100644
--- a/app/code/Magento/Rule/Model/Condition/Sql/Builder.php
+++ b/app/code/Magento/Rule/Model/Condition/Sql/Builder.php
@@ -112,7 +112,7 @@ class Builder
      * @param AbstractCondition $condition
      * @param string $value
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getMappedSqlCondition(AbstractCondition $condition, $value = '')
     {
@@ -121,7 +121,7 @@ class Builder
             $conditionOperator = $condition->getOperatorForValidate();
 
             if (!isset($this->_conditionOperatorMap[$conditionOperator])) {
-                throw new \Magento\Framework\Exception('Unknown condition operator');
+                throw new \Magento\Framework\Exception\LocalizedException(__('Unknown condition operator'));
             }
 
             $sql = str_replace(
diff --git a/app/code/Magento/Rule/Test/Unit/Model/Condition/CombineTest.php b/app/code/Magento/Rule/Test/Unit/Model/Condition/CombineTest.php
index ced46fa076b2e173a598db062802887ef7b91ec9..35fd9439db6f61269bf8c82bf77e8e13c8d333c2 100644
--- a/app/code/Magento/Rule/Test/Unit/Model/Condition/CombineTest.php
+++ b/app/code/Magento/Rule/Test/Unit/Model/Condition/CombineTest.php
@@ -62,7 +62,7 @@ class CombineTest extends \PHPUnit_Framework_TestCase
 
     /**
      *
-     * covers \Magento\Rule\Model\Condition\AbstractCondition::getValueName
+     * @covers \Magento\Rule\Model\Condition\AbstractCondition::getValueName
      *
      * @dataProvider optionValuesData
      *
diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json
index 4f9861088d42dec7d27ebaed53058b9948c2c4f5..a6519c1785c7d7a6cf0337f11c27611e6dd88dea 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.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/AbstractForm.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/AbstractForm.php
index 03a8a5c98552da01db2f727e1a0a5925b36140c6..89b8068e9c59bc585b79c43de644343e7babbb5b 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/AbstractForm.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/AbstractForm.php
@@ -204,7 +204,6 @@ abstract class AbstractForm extends \Magento\Sales\Block\Adminhtml\Order\Create\
                     $format = $this->_localeDate->getDateFormat(
                         \IntlDateFormatter::SHORT
                     );
-                    $element->setImage($this->getViewFileUrl('images/grid-cal.png'));
                     $element->setDateFormat($format);
                 }
             }
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Giftmessage.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Giftmessage.php
index f5f53b3f736c8c754b79c56ac89a81ce005010bf..52cc36384d6367e90a2ffb300629f43b8fd993ca 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Giftmessage.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Giftmessage.php
@@ -84,7 +84,7 @@ class Giftmessage extends \Magento\Sales\Block\Adminhtml\Order\Create\AbstractCr
         foreach ($allItems as $item) {
             if ($this->_getGiftmessageSaveModel()->getIsAllowedQuoteItem(
                 $item
-            ) && $this->_messageHelper->getIsMessagesAvailable(
+            ) && $this->_messageHelper->isMessagesAllowed(
                 'item',
                 $item,
                 $this->getStore()
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php
index 86fcf0a4ee35338465e2da808978bb9d46128852..fe33696ba778625a5c27be6b4bf8b43f7fcfd75e 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php
@@ -232,9 +232,9 @@ class Grid extends \Magento\Sales\Block\Adminhtml\Order\Create\AbstractCreate
     public function isGiftMessagesAvailable($item = null)
     {
         if ($item === null) {
-            return $this->_messageHelper->getIsMessagesAvailable('items', $this->getQuote(), $this->getStore());
+            return $this->_messageHelper->isMessagesAllowed('items', $this->getQuote(), $this->getStore());
         }
-        return $this->_messageHelper->getIsMessagesAvailable('item', $item, $this->getStore());
+        return $this->_messageHelper->isMessagesAllowed('item', $item, $this->getStore());
     }
 
     /**
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/View/Giftmessage.php b/app/code/Magento/Sales/Block/Adminhtml/Order/View/Giftmessage.php
index 546a3e5682549e3431f7b0dbcac1df1631c32990..2f70036c540aa9eb25c9cabe74b542e91451aa81 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/View/Giftmessage.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/View/Giftmessage.php
@@ -290,7 +290,7 @@ class Giftmessage extends \Magento\Backend\Block\Widget
      */
     public function canDisplayGiftmessage()
     {
-        return $this->_messageHelper->getIsMessagesAvailable(
+        return $this->_messageHelper->isMessagesAllowed(
             'order',
             $this->getEntity(),
             $this->getEntity()->getStoreId()
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items/Renderer/DefaultRenderer.php b/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items/Renderer/DefaultRenderer.php
index 22ca91855bedc6b0d921ffb9afd26464a2ab990d..92cc81fa6f2a8c54deebcec06b1190d71a205308 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items/Renderer/DefaultRenderer.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items/Renderer/DefaultRenderer.php
@@ -220,7 +220,7 @@ class DefaultRenderer extends \Magento\Sales\Block\Adminhtml\Items\Renderer\Defa
      */
     public function canDisplayGiftmessage()
     {
-        return $this->_messageHelper->getIsMessagesAvailable(
+        return $this->_messageHelper->isMessagesAllowed(
             'order_item',
             $this->getItem(),
             $this->getItem()->getOrder()->getStoreId()
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Reorder/Renderer/Action.php b/app/code/Magento/Sales/Block/Adminhtml/Reorder/Renderer/Action.php
index 2690ecac41192aaf8c3e9e7b5c218458cf22d5e2..0e664f928847f931615f4b0361d97755c77878c1 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Reorder/Renderer/Action.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Reorder/Renderer/Action.php
@@ -93,7 +93,7 @@ class Action extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Abstract
             $attributesObject->setData($action['@']);
             $html[] = '<a ' . $attributesObject->serialize() . '>' . $action['#'] . '</a>';
         }
-        return implode($html, '');
+        return implode('', $html);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Controller/AbstractController/OrderLoader.php b/app/code/Magento/Sales/Controller/AbstractController/OrderLoader.php
index 0fe2f97dcd9b256613b5b16237c5af3df7f3ef82..567433355f3ed1a97c2959c2b2c5088e285a6e33 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/OrderLoader.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/OrderLoader.php
@@ -9,7 +9,6 @@ namespace Magento\Sales\Controller\AbstractController;
 use Magento\Framework\App\RequestInterface;
 use Magento\Framework\Registry;
 use Magento\Framework\Controller\Result\ForwardFactory;
-use Magento\Framework\Controller\Result\RedirectFactory;
 
 class OrderLoader implements OrderLoaderInterface
 {
@@ -38,33 +37,25 @@ class OrderLoader implements OrderLoaderInterface
      */
     protected $resultForwardFactory;
 
-    /**
-     * @var Redirect
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param OrderViewAuthorizationInterface $orderAuthorization
      * @param Registry $registry
      * @param \Magento\Framework\UrlInterface $url
      * @param ForwardFactory $resultForwardFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Sales\Model\OrderFactory $orderFactory,
         OrderViewAuthorizationInterface $orderAuthorization,
         Registry $registry,
         \Magento\Framework\UrlInterface $url,
-        ForwardFactory $resultForwardFactory,
-        RedirectFactory $resultRedirectFactory
+        ForwardFactory $resultForwardFactory
     ) {
         $this->orderFactory = $orderFactory;
         $this->orderAuthorization = $orderAuthorization;
         $this->registry = $registry;
         $this->url = $url;
         $this->resultForwardFactory = $resultForwardFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php b/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php
index c2ac3856a201e7c0ba89219e999f965b883872fb..4c97760450e22605a59f5879772712385211fee6 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php
@@ -8,7 +8,6 @@ namespace Magento\Sales\Controller\AbstractController;
 
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
-use Magento\Framework\Controller\Result\RedirectFactory;
 
 abstract class PrintCreditmemo extends \Magento\Framework\App\Action\Action
 {
@@ -27,29 +26,21 @@ abstract class PrintCreditmemo extends \Magento\Framework\App\Action\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Context $context
      * @param OrderViewAuthorizationInterface $orderAuthorization
      * @param \Magento\Framework\Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Context $context,
         OrderViewAuthorizationInterface $orderAuthorization,
         \Magento\Framework\Registry $registry,
-        PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory
+        PageFactory $resultPageFactory
     ) {
         $this->orderAuthorization = $orderAuthorization;
         $this->_coreRegistry = $registry;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php b/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php
index 6757cdde059b195a97224dc6fc0a96f1df85c5e7..15cc2a5c2c48e5b9ce0f926e4f7f8668adf91947 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php
@@ -8,7 +8,6 @@ namespace Magento\Sales\Controller\AbstractController;
 
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
-use Magento\Framework\Controller\Result\RedirectFactory;
 
 abstract class PrintInvoice extends \Magento\Framework\App\Action\Action
 {
@@ -27,29 +26,21 @@ abstract class PrintInvoice extends \Magento\Framework\App\Action\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Context $context
      * @param OrderViewAuthorizationInterface $orderAuthorization
      * @param \Magento\Framework\Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Context $context,
         OrderViewAuthorizationInterface $orderAuthorization,
         \Magento\Framework\Registry $registry,
-        PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory
+        PageFactory $resultPageFactory
     ) {
         $this->orderAuthorization = $orderAuthorization;
         $this->_coreRegistry = $registry;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php b/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php
index c912a736bf9fc571b16ee530c659a1ba7f556351..74fbb3439445d4185be0be3ec4aadb63757197cc 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php
@@ -8,7 +8,6 @@ namespace Magento\Sales\Controller\AbstractController;
 
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
-use Magento\Framework\Controller\Result\RedirectFactory;
 
 abstract class PrintShipment extends \Magento\Framework\App\Action\Action
 {
@@ -27,29 +26,21 @@ abstract class PrintShipment extends \Magento\Framework\App\Action\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Context $context
      * @param OrderViewAuthorizationInterface $orderAuthorization
      * @param \Magento\Framework\Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Context $context,
         OrderViewAuthorizationInterface $orderAuthorization,
         \Magento\Framework\Registry $registry,
-        PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory
+        PageFactory $resultPageFactory
     ) {
         $this->orderAuthorization = $orderAuthorization;
         $this->_coreRegistry = $registry;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/AbstractController/Reorder.php b/app/code/Magento/Sales/Controller/AbstractController/Reorder.php
index 096e26f65c839c0b1dbe4f064bbd2d12df77ab24..7010d3bd5c04140599a3bce2c7ac35322c2d66c8 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/Reorder.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/Reorder.php
@@ -7,7 +7,6 @@
 namespace Magento\Sales\Controller\AbstractController;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\Registry;
 
 abstract class Reorder extends Action\Action
@@ -22,26 +21,18 @@ abstract class Reorder extends Action\Action
      */
     protected $_coreRegistry;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param OrderLoaderInterface $orderLoader
      * @param Registry $registry
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Action\Context $context,
         OrderLoaderInterface $orderLoader,
-        Registry $registry,
-        RedirectFactory $resultRedirectFactory
+        Registry $registry
     ) {
         $this->orderLoader = $orderLoader;
         $this->_coreRegistry = $registry;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/AbstractController/View.php b/app/code/Magento/Sales/Controller/AbstractController/View.php
index ebc5d087cdd833344c01d3b8a1e508835bf518b3..cd851bc94b9d9001a01552dfc047fa1d09453a9f 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/View.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/View.php
@@ -52,6 +52,7 @@ abstract class View extends Action\Action
         $resultPage = $this->resultPageFactory->create();
         $resultPage->getLayout()->initMessages();
 
+        /** @var \Magento\Framework\View\Element\Html\Links $navigationBlock */
         $navigationBlock = $resultPage->getLayout()->getBlock('customer_account_navigation');
         if ($navigationBlock) {
             $navigationBlock->setActive('sales/order/history');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php
index b1ef2eacce2f8ef835bedbe68f3dd2b2418018a0..34dc5bbb8af0e9882bf3cc447954b74272739f91 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php
@@ -12,23 +12,6 @@ namespace Magento\Sales\Controller\Adminhtml\Creditmemo\AbstractCreditmemo;
  */
 class Email extends \Magento\Backend\App\Action
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context);
-    }
-
     /**
      * @return bool
      */
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
index 685b3042c42c0a4ea791dabacbcce9e7f78a88b4..8304f41f1d06c78d51e73af3028b7337aa365814 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
@@ -10,11 +10,6 @@ use Magento\Framework\App\Filesystem\DirectoryList;
 
 class Pdfcreditmemos extends \Magento\Backend\App\Action
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\App\Response\Http\FileFactory
      */
@@ -23,15 +18,12 @@ class Pdfcreditmemos extends \Magento\Backend\App\Action
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\App\Response\Http\FileFactory $fileFactory
     ) {
         $this->_fileFactory = $fileFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php
index fa94f814062c093d048d0bc4da5b74c0a5cf438c..99e666227efba778c92577ae1523591edd420b5e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php
@@ -18,24 +18,16 @@ abstract class Email extends \Magento\Backend\App\Action
      */
     protected $resultForwardFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
     ) {
         parent::__construct($context);
         $this->resultForwardFactory = $resultForwardFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
index 1f8389a86a55c909ddbbc1575f140e07dd0356dc..fae61c7df106bf14ed025c871d446c6d60b52245 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
@@ -16,24 +16,16 @@ abstract class Pdfinvoices extends \Magento\Backend\App\Action
      */
     protected $_fileFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\App\Response\Http\FileFactory $fileFactory
     ) {
         $this->_fileFactory = $fileFactory;
         parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order.php b/app/code/Magento/Sales/Controller/Adminhtml/Order.php
index ee6934955fc08c5d7431b1a8f04ded1208ff0f30..4685341ddef97abe8fb366fb3eaa6c50dd351d30 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order.php
@@ -44,11 +44,6 @@ class Order extends \Magento\Backend\App\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Framework\Controller\Result\JsonFactory
      */
@@ -70,7 +65,6 @@ class Order extends \Magento\Backend\App\Action
      * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
      * @param \Magento\Framework\Translate\InlineInterface $translateInline
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
@@ -81,7 +75,6 @@ class Order extends \Magento\Backend\App\Action
         \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
         \Magento\Framework\Translate\InlineInterface $translateInline,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
         \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
@@ -90,7 +83,6 @@ class Order extends \Magento\Backend\App\Action
         $this->_fileFactory = $fileFactory;
         $this->_translateInline = $translateInline;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultJsonFactory = $resultJsonFactory;
         $this->resultLayoutFactory = $resultLayoutFactory;
         $this->resultRawFactory = $resultRawFactory;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php
index 0e56021124b3e5f7e69d05f733bac0b188d08ce5..42515bde1f868f30212138b87d483a1d5c7ec695 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php
@@ -21,7 +21,6 @@ class CommentsHistory extends \Magento\Sales\Controller\Adminhtml\Order
      * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
      * @param \Magento\Framework\Translate\InlineInterface $translateInline
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
      * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
@@ -35,7 +34,6 @@ class CommentsHistory extends \Magento\Sales\Controller\Adminhtml\Order
         \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
         \Magento\Framework\Translate\InlineInterface $translateInline,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
         \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
@@ -48,7 +46,6 @@ class CommentsHistory extends \Magento\Sales\Controller\Adminhtml\Order
             $fileFactory,
             $translateInline,
             $resultPageFactory,
-            $resultRedirectFactory,
             $resultJsonFactory,
             $resultLayoutFactory,
             $resultRawFactory
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php
index 3e067f1e396adc67109be4fde46d313acaa8dd00..54fcd049b388a6f9085c2cacfc537fafce6c74dd 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php
@@ -7,7 +7,6 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Backend\App\Action;
 use Magento\Framework\View\Result\PageFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 use Magento\Backend\Model\View\Result\ForwardFactory;
 
 /**
@@ -28,11 +27,6 @@ class Create extends \Magento\Backend\App\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -43,7 +37,6 @@ class Create extends \Magento\Backend\App\Action
      * @param \Magento\Catalog\Helper\Product $productHelper
      * @param \Magento\Framework\Escaper $escaper
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      * @param ForwardFactory $resultForwardFactory
      */
     public function __construct(
@@ -51,14 +44,12 @@ class Create extends \Magento\Backend\App\Action
         \Magento\Catalog\Helper\Product $productHelper,
         \Magento\Framework\Escaper $escaper,
         PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory,
         ForwardFactory $resultForwardFactory
     ) {
         parent::__construct($context);
         $productHelper->setSkipSaleableCheck(true);
         $this->escaper = $escaper;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
     }
 
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php
index 56ecebf6e898ab4683df5cccc18810e2b7b19a61..ba4b0e833e2893fafea898a6392b7c0c2c3eff45 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php
@@ -7,7 +7,6 @@ namespace Magento\Sales\Controller\Adminhtml\Order\Create;
 
 use Magento\Backend\App\Action;
 use Magento\Backend\Model\View\Result\ForwardFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\Controller\Result\RawFactory;
 
@@ -23,7 +22,6 @@ class LoadBlock extends \Magento\Sales\Controller\Adminhtml\Order\Create
      * @param \Magento\Catalog\Helper\Product $productHelper
      * @param \Magento\Framework\Escaper $escaper
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      * @param ForwardFactory $resultForwardFactory
      * @param RawFactory $resultRawFactory
      */
@@ -32,7 +30,6 @@ class LoadBlock extends \Magento\Sales\Controller\Adminhtml\Order\Create
         \Magento\Catalog\Helper\Product $productHelper,
         \Magento\Framework\Escaper $escaper,
         PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory,
         ForwardFactory $resultForwardFactory,
         RawFactory $resultRawFactory
     ) {
@@ -42,7 +39,6 @@ class LoadBlock extends \Magento\Sales\Controller\Adminhtml\Order\Create
             $productHelper,
             $escaper,
             $resultPageFactory,
-            $resultRedirectFactory,
             $resultForwardFactory
         );
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php
index e06ee1a7c43c795cb4a6752b9b97cb92a1abdefa..a3546de1fa6a7f37cd8e53e223f2a7963460c365 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php
@@ -7,7 +7,6 @@ namespace Magento\Sales\Controller\Adminhtml\Order\Create;
 
 use Magento\Backend\App\Action;
 use Magento\Backend\Model\View\Result\ForwardFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\Controller\Result\RawFactory;
 
@@ -23,7 +22,6 @@ class ShowUpdateResult extends \Magento\Sales\Controller\Adminhtml\Order\Create
      * @param \Magento\Catalog\Helper\Product $productHelper
      * @param \Magento\Framework\Escaper $escaper
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      * @param ForwardFactory $resultForwardFactory
      * @param RawFactory $resultRawFactory
      */
@@ -32,7 +30,6 @@ class ShowUpdateResult extends \Magento\Sales\Controller\Adminhtml\Order\Create
         \Magento\Catalog\Helper\Product $productHelper,
         \Magento\Framework\Escaper $escaper,
         PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory,
         ForwardFactory $resultForwardFactory,
         RawFactory $resultRawFactory
     ) {
@@ -42,7 +39,6 @@ class ShowUpdateResult extends \Magento\Sales\Controller\Adminhtml\Order\Create
             $productHelper,
             $escaper,
             $resultPageFactory,
-            $resultRedirectFactory,
             $resultForwardFactory
         );
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php
index a880a57bf0086f4b8f0da58acdce26b230dc960a..10714ace6578994dfc9d13361c7c641b3b9ca5a8 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php
@@ -14,11 +14,6 @@ class Cancel extends \Magento\Backend\App\Action
      */
     protected $creditmemoLoader;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -27,17 +22,14 @@ class Cancel extends \Magento\Backend\App\Action
     /**
      * @param Action\Context $context
      * @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      */
     public function __construct(
         Action\Context $context,
         \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
     ) {
         $this->creditmemoLoader = $creditmemoLoader;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         parent::__construct($context);
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php
index ced8a580b0c6ad0c69e49dc374b978c1de4510d2..6ba3acd497b1f06992c9b871cc1cc63f2a1da6de 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php
@@ -21,11 +21,6 @@ class Save extends \Magento\Backend\App\Action
      */
     protected $creditmemoSender;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -35,19 +30,16 @@ class Save extends \Magento\Backend\App\Action
      * @param Action\Context $context
      * @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
      * @param CreditmemoSender $creditmemoSender
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      */
     public function __construct(
         Action\Context $context,
         \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
         CreditmemoSender $creditmemoSender,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
     ) {
         $this->creditmemoLoader = $creditmemoLoader;
         $this->creditmemoSender = $creditmemoSender;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         parent::__construct($context);
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php
index 83876b4e643c84b47cd08faea1abe979703f50f5..4305bef4930e7e12b6a5f06e4a0b73a3b9948b32 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php
@@ -7,23 +7,6 @@ namespace Magento\Sales\Controller\Adminhtml\Order\Creditmemo;
 
 class Start extends \Magento\Backend\App\Action
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context);
-    }
-
     /**
      * @return bool
      */
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php
index d6c103b9bd56a6746db57e4e15c33511062ebf58..23bd5f1ccdb82d889f8e800a620f91a43318300d 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php
@@ -14,11 +14,6 @@ class Void extends \Magento\Backend\App\Action
      */
     protected $creditmemoLoader;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -27,17 +22,14 @@ class Void extends \Magento\Backend\App\Action
     /**
      * @param Action\Context $context
      * @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      */
     public function __construct(
         Action\Context $context,
         \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
     ) {
         $this->creditmemoLoader = $creditmemoLoader;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         parent::__construct($context);
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php
index e8e15e6635671157b44dba07dd13fc20ae0d7c98..a717843c7e99c930a1de1fe22b8400128e5af439 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php
@@ -6,34 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Invoice;
 
-use Magento\Framework\Exception\LocalizedException;
-use Magento\Backend\App\Action;
-use Magento\Backend\App\Action\Context;
-use Magento\Framework\Registry;
-
 class Cancel extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\View
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $registry
-     * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $registry,
-        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $registry, $resultForwardFactory);
-    }
-
     /**
      * Cancel invoice action
      *
@@ -58,7 +32,7 @@ class Cancel extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice
                 $invoice->getOrder()
             )->save();
             $this->messageManager->addSuccess(__('You canceled the invoice.'));
-        } catch (LocalizedException $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->messageManager->addError($e->getMessage());
         } catch (\Exception $e) {
             $this->messageManager->addError(__('Invoice canceling error'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php
index cd3ffd55ff77d8c66c618b3fe33647a81ad571d8..20ff3bfeaa9ab6b2a845bdcc13a2a4d244d734f8 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php
@@ -6,35 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Invoice;
 
-use Magento\Framework\Exception\LocalizedException;
-use Magento\Backend\App\Action;
-use Magento\Backend\App\Action\Context;
-use Magento\Framework\Registry;
-
 class Capture extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\View
 {
-
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $registry
-     * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $registry,
-        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $registry, $resultForwardFactory);
-    }
-
     /**
      * Capture invoice action
      *
@@ -60,7 +33,7 @@ class Capture extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoic
                 $invoice->getOrder()
             )->save();
             $this->messageManager->addSuccess(__('The invoice has been captured.'));
-        } catch (LocalizedException $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->messageManager->addError($e->getMessage());
         } catch (\Exception $e) {
             $this->messageManager->addError(__('Invoice capturing error'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php
index 4b8c4751951aa96fab9f4db7aab48b865b8e1439..f7db6d19da3c1cea5dc45817cf69a1972eac2bd6 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php
@@ -9,7 +9,6 @@ namespace Magento\Sales\Controller\Adminhtml\Order\Invoice;
 use Magento\Backend\App\Action;
 use Magento\Framework\Registry;
 use Magento\Framework\View\Result\PageFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 
 class NewAction extends \Magento\Backend\App\Action
 {
@@ -23,26 +22,18 @@ class NewAction extends \Magento\Backend\App\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Action\Context $context,
         Registry $registry,
-        PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory
+        PageFactory $resultPageFactory
     ) {
         $this->registry = $registry;
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
@@ -83,11 +74,13 @@ class NewAction extends \Magento\Backend\App\Action
             /** @var \Magento\Sales\Model\Order $order */
             $order = $this->_objectManager->create('Magento\Sales\Model\Order')->load($orderId);
             if (!$order->getId()) {
-                throw new \Magento\Framework\Exception(__('The order no longer exists.'));
+                throw new \Magento\Framework\Exception\LocalizedException(__('The order no longer exists.'));
             }
 
             if (!$order->canInvoice()) {
-                throw new \Magento\Framework\Exception(__('The order does not allow an invoice to be created.'));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('The order does not allow an invoice to be created.')
+                );
             }
 
             /** @var \Magento\Sales\Model\Order\Invoice $invoice */
@@ -95,7 +88,9 @@ class NewAction extends \Magento\Backend\App\Action
                 ->prepareInvoice($invoiceItems);
 
             if (!$invoice->getTotalQty()) {
-                throw new \Magento\Framework\Exception(__('Cannot create an invoice without products.'));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Cannot create an invoice without products.')
+                );
             }
             $this->registry->register('current_invoice', $invoice);
 
@@ -110,7 +105,7 @@ class NewAction extends \Magento\Backend\App\Action
             $resultPage->getConfig()->getTitle()->prepend(__('Invoices'));
             $resultPage->getConfig()->getTitle()->prepend(__('New Invoice'));
             return $resultPage;
-        } catch (\Magento\Framework\Exception $exception) {
+        } catch (\Magento\Framework\Exception\LocalizedException $exception) {
             $this->messageManager->addError($exception->getMessage());
             return $this->_redirectToOrder($orderId);
         } catch (\Exception $exception) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
index 946d159b06c7b60b25c235e19ceb2343933f56b8..1fffaf8a03ee16324a611fdf6f1b9f862c1367af 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
@@ -12,7 +12,6 @@ use Magento\Framework\Registry;
 use Magento\Sales\Model\Order\Email\Sender\InvoiceCommentSender;
 use Magento\Sales\Model\Order\Email\Sender\ShipmentSender;
 use Magento\Sales\Model\Order\Invoice;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -34,29 +33,21 @@ class Save extends \Magento\Backend\App\Action
      */
     protected $registry;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Action\Context $context
      * @param Registry $registry
      * @param InvoiceCommentSender $invoiceCommentSender
      * @param ShipmentSender $shipmentSender
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Action\Context $context,
         Registry $registry,
         InvoiceCommentSender $invoiceCommentSender,
-        ShipmentSender $shipmentSender,
-        RedirectFactory $resultRedirectFactory
+        ShipmentSender $shipmentSender
     ) {
         $this->registry = $registry;
         $this->invoiceCommentSender = $invoiceCommentSender;
         $this->shipmentSender = $shipmentSender;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
@@ -129,11 +120,13 @@ class Save extends \Magento\Backend\App\Action
             /** @var \Magento\Sales\Model\Order $order */
             $order = $this->_objectManager->create('Magento\Sales\Model\Order')->load($orderId);
             if (!$order->getId()) {
-                throw new \Magento\Framework\Exception(__('The order no longer exists.'));
+                throw new \Magento\Framework\Exception\LocalizedException(__('The order no longer exists.'));
             }
 
             if (!$order->canInvoice()) {
-                throw new \Magento\Framework\Exception(__('The order does not allow an invoice to be created.'));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('The order does not allow an invoice to be created.')
+                );
             }
 
             /** @var \Magento\Sales\Model\Order\Invoice $invoice */
@@ -145,7 +138,9 @@ class Save extends \Magento\Backend\App\Action
             }
 
             if (!$invoice->getTotalQty()) {
-                throw new \Magento\Framework\Exception(__('Cannot create an invoice without products.'));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Cannot create an invoice without products.')
+                );
             }
             $this->registry->register('current_invoice', $invoice);
             if (!empty($data['capture_case'])) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php
index de0b55ad653d2fb3e107d11f37964f64b32be7c2..8db329dad0876ee1cb73483dcd62ba8131b0c5bc 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php
@@ -6,34 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Invoice;
 
-use Magento\Backend\Model\View\Result\RedirectFactory;
-use Magento\Backend\App\Action\Context;
-use Magento\Framework\Registry;
-
 class Start extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\View
 {
-
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $registry
-     * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
-     * @param RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $registry,
-        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
-        RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $registry, $resultForwardFactory);
-    }
-
     /**
      * Start create invoice action
      *
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php
index a2c5ba9685349a2608e8084b9f4e43d1df1b710e..38d563101cb4f39051ddca879370da9b8e9fe45b 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php
@@ -67,11 +67,13 @@ class UpdateQty extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvo
             /** @var \Magento\Sales\Model\Order $order */
             $order = $this->_objectManager->create('Magento\Sales\Model\Order')->load($orderId);
             if (!$order->getId()) {
-                throw new \Magento\Framework\Exception(__('The order no longer exists.'));
+                throw new \Magento\Framework\Exception\LocalizedException(__('The order no longer exists.'));
             }
 
             if (!$order->canInvoice()) {
-                throw new \Magento\Framework\Exception(__('The order does not allow an invoice to be created.'));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('The order does not allow an invoice to be created.')
+                );
             }
 
             /** @var \Magento\Sales\Model\Order\Invoice $invoice */
@@ -79,7 +81,9 @@ class UpdateQty extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvo
                 ->prepareInvoice($invoiceItems);
 
             if (!$invoice->getTotalQty()) {
-                throw new \Magento\Framework\Exception(__('Cannot create an invoice without products.'));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Cannot create an invoice without products.')
+                );
             }
             $this->registry->register('current_invoice', $invoice);
             // Save invoice comment text in current invoice object in order to display it in corresponding view
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php
index 1c58ed16eca5673aba74a907938f5de2f668f51a..9f346af8a27c0bd9db73dc31f1573333bfc74303 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php
@@ -6,33 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Invoice;
 
-use Magento\Framework\Exception\LocalizedException;
-use Magento\Backend\App\Action\Context;
-use Magento\Framework\Registry;
-
 class Void extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\View
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $registry
-     * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $registry,
-        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        $this->resultRedirectFactory = $resultRedirectFactory;
-        parent::__construct($context, $registry, $resultForwardFactory);
-    }
-
     /**
      * Void invoice action
      *
@@ -57,7 +32,7 @@ class Void extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\V
                 $invoice->getOrder()
             )->save();
             $this->messageManager->addSuccess(__('The invoice has been voided.'));
-        } catch (LocalizedException $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->messageManager->addError($e->getMessage());
         } catch (\Exception $e) {
             $this->messageManager->addError(__('Invoice voiding error'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php
index 0d0992344c9dd53648aaeab17039ab2bd966168f..43cc5fd46cde3c18591b704602143a9c55cf167a 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php
@@ -6,31 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Status;
 
-use Magento\Framework\Registry;
-use Magento\Backend\App\Action\Context;
-use Magento\Backend\Model\View\Result\RedirectFactory;
-
 class AssignPost extends \Magento\Sales\Controller\Adminhtml\Order\Status
 {
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $coreRegistry
-     * @param RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $coreRegistry,
-        RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $coreRegistry);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Save status assignment to state
      *
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php
index aa3f04ef236bee578c564f8f293c23a8564686a6..26ee0651e3657e65ba93868d13c2ae8e5751793c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php
@@ -9,7 +9,6 @@ namespace Magento\Sales\Controller\Adminhtml\Order\Status;
 use Magento\Framework\Registry;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 
 class Edit extends \Magento\Sales\Controller\Adminhtml\Order\Status
 {
@@ -18,26 +17,18 @@ class Edit extends \Magento\Sales\Controller\Adminhtml\Order\Status
      */
     protected $resultPageFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Context $context
      * @param Registry $coreRegistry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         Context $context,
         Registry $coreRegistry,
-        PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory
+        PageFactory $resultPageFactory
     ) {
         parent::__construct($context, $coreRegistry);
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php
index 67ee80fa876a6a53a9886c11e814e529ae867527..65535942a16d6e35ff98957769fc6361589e4169 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php
@@ -6,31 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Status;
 
-use Magento\Framework\Registry;
-use Magento\Backend\App\Action\Context;
-use Magento\Backend\Model\View\Result\RedirectFactory;
-
 class Save extends \Magento\Sales\Controller\Adminhtml\Order\Status
 {
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $coreRegistry
-     * @param RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $coreRegistry,
-        RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $coreRegistry);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Save status form processing
      *
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php
index 12b08328450a61c0272140e57a9edcf48e1527af..6debca9cf31421407735213157c0d72761719f5e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php
@@ -6,31 +6,8 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order\Status;
 
-use Magento\Framework\Registry;
-use Magento\Backend\App\Action\Context;
-use Magento\Backend\Model\View\Result\RedirectFactory;
-
 class Unassign extends \Magento\Sales\Controller\Adminhtml\Order\Status
 {
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param Context $context
-     * @param Registry $coreRegistry
-     * @param RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        Context $context,
-        Registry $coreRegistry,
-        RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $coreRegistry);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
index c4535d45719a950d2fd546c49317b5e7dd959bde..2242f7a6360b94bf22af7faba152f06e86f7d941 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
@@ -22,10 +22,6 @@ class View extends \Magento\Sales\Controller\Adminhtml\Order
             try {
                 $resultPage = $this->_initAction();
                 $resultPage->getConfig()->getTitle()->prepend(__('Orders'));
-            } catch (\Magento\Framework\App\Action\Exception $e) {
-                $this->messageManager->addError($e->getMessage());
-                $resultRedirect->setPath('sales/order/index');
-                return $resultRedirect;
             } catch (\Exception $e) {
                 $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
                 $this->messageManager->addError(__('Exception occurred during order load'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
index 4378121ad0aa2dfca58f2726a6a92612b5c39739..07a5b3d42dafb8e6ebdf89be3bed73bda4c2bd20 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
@@ -10,7 +10,6 @@ use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\App\Response\Http\FileFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 
 abstract class Pdfshipments extends \Magento\Backend\App\Action
 {
@@ -19,23 +18,13 @@ abstract class Pdfshipments extends \Magento\Backend\App\Action
      */
     protected $_fileFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param Context $context
      * @param FileFactory $fileFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
-    public function __construct(
-        Context $context,
-        FileFactory $fileFactory,
-        RedirectFactory $resultRedirectFactory
-    ) {
+    public function __construct(Context $context, FileFactory $fileFactory)
+    {
         $this->_fileFactory = $fileFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php
index 9c4d5ea2768771788c98a7ae20733186b6f85dcc..49b910be6a862ff0379be9adf7b365ba3babd40f 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php
@@ -9,7 +9,6 @@ use Magento\Backend\App\Action;
 use Magento\Framework\Registry;
 use Magento\Framework\View\Result\PageFactory;
 use Magento\Framework\View\Result\LayoutFactory;
-use Magento\Backend\Model\View\Result\RedirectFactory;
 
 /**
  * Adminhtml sales transactions controller
@@ -35,29 +34,21 @@ class Transactions extends \Magento\Backend\App\Action
      */
     protected $resultLayoutFactory;
 
-    /**
-     * @var RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param Registry $coreRegistry
      * @param PageFactory $resultPageFactory
      * @param LayoutFactory $resultLayoutFactory
-     * @param RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         Registry $coreRegistry,
         PageFactory $resultPageFactory,
-        LayoutFactory $resultLayoutFactory,
-        RedirectFactory $resultRedirectFactory
+        LayoutFactory $resultLayoutFactory
     ) {
         $this->_coreRegistry = $coreRegistry;
         $this->resultPageFactory = $resultPageFactory;
         $this->resultLayoutFactory = $resultLayoutFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
         parent::__construct($context);
     }
 
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
old mode 100644
new mode 100755
index 1efcab46f5fb7fb3bd2654485ebd7045b3573d9a..946b8e36fd6c44e23650b17a0f9a2f857f2c4078
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
@@ -7,14 +7,13 @@
 namespace Magento\Sales\Controller\Adminhtml\Transactions;
 
 use Magento\Backend\App\Action;
-use Magento\Backend\Model\View\Result\Redirect;
 
 class Fetch extends \Magento\Sales\Controller\Adminhtml\Transactions
 {
     /**
      * Fetch transaction details action
      *
-     * @return Redirect
+     * @return \Magento\Backend\Model\View\Result\Redirect
      */
     public function execute()
     {
@@ -24,16 +23,18 @@ class Fetch extends \Magento\Sales\Controller\Adminhtml\Transactions
         if (!$txn) {
             return $resultRedirect->setPath('sales/*/');
         }
-        try {
-            $txn->getOrderPaymentObject()->setOrder($txn->getOrder())->importTransactionInfo($txn);
-            $txn->save();
-            $this->messageManager->addSuccess(__('The transaction details have been updated.'));
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('We can\'t update the transaction details.'));
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
-        }
+        $txn->getOrderPaymentObject()->setOrder($txn->getOrder())->importTransactionInfo($txn);
+        $txn->save();
+        $this->messageManager->addSuccess(__('The transaction details have been updated.'));
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('sales/transactions/view', ['_current' => true]);
     }
 }
diff --git a/app/code/Magento/Sales/Controller/Guest/Form.php b/app/code/Magento/Sales/Controller/Guest/Form.php
index e2f90c18f31e77b5f82ccf839cac3c32177992a1..c9f87d44e7995fabf5078c1b200b2effcea693c1 100644
--- a/app/code/Magento/Sales/Controller/Guest/Form.php
+++ b/app/code/Magento/Sales/Controller/Guest/Form.php
@@ -13,24 +13,16 @@ class Form extends \Magento\Framework\App\Action\Action
      */
     protected $resultPageFactory;
 
-    /**
-     * @var \Magento\Framework\Controller\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @param \Magento\Framework\App\Action\Context $context
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      */
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
     ) {
         parent::__construct($context);
         $this->resultPageFactory = $resultPageFactory;
-        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintAction.php b/app/code/Magento/Sales/Controller/Guest/PrintAction.php
index cf94ab2f5ffb91a0ec7572169e4125440513e185..7bd563475048da88eda89e2873af3f5471e5ed98 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintAction.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintAction.php
@@ -6,6 +6,21 @@
  */
 namespace Magento\Sales\Controller\Guest;
 
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\View\Result\PageFactory;
+
 class PrintAction extends \Magento\Sales\Controller\AbstractController\PrintAction
 {
+    /**
+     * @param Context $context
+     * @param OrderLoader $orderLoader
+     * @param PageFactory $resultPageFactory
+     */
+    public function __construct(
+        Context $context,
+        \Magento\Sales\Controller\Guest\OrderLoader $orderLoader,
+        PageFactory $resultPageFactory
+    ) {
+        parent::__construct($context, $orderLoader, $resultPageFactory);
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php b/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php
index 5283ea8858e0d096ad6c7324c9d8c10a64f2d578..82a1a215399d68b364b4e85ee0da513c847f2505 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php
@@ -6,7 +6,6 @@
  */
 namespace Magento\Sales\Controller\Guest;
 
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
 
@@ -22,7 +21,6 @@ class PrintCreditmemo extends \Magento\Sales\Controller\AbstractController\Print
      * @param OrderViewAuthorization $orderAuthorization
      * @param \Magento\Framework\Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      * @param OrderLoader $orderLoader
      */
     public function __construct(
@@ -30,7 +28,6 @@ class PrintCreditmemo extends \Magento\Sales\Controller\AbstractController\Print
         OrderViewAuthorization $orderAuthorization,
         \Magento\Framework\Registry $registry,
         PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory,
         OrderLoader $orderLoader
     ) {
         $this->orderLoader = $orderLoader;
@@ -38,8 +35,7 @@ class PrintCreditmemo extends \Magento\Sales\Controller\AbstractController\Print
             $context,
             $orderAuthorization,
             $registry,
-            $resultPageFactory,
-            $resultRedirectFactory
+            $resultPageFactory
         );
     }
 
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php b/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php
index 3999a1bf078bb23793c000f774cc9a00adeb56e0..27796157f51c3a2a1495e88017b706a37adff81e 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php
@@ -6,7 +6,6 @@
  */
 namespace Magento\Sales\Controller\Guest;
 
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
 
@@ -22,7 +21,6 @@ class PrintInvoice extends \Magento\Sales\Controller\AbstractController\PrintInv
      * @param OrderViewAuthorization $orderAuthorization
      * @param \Magento\Framework\Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      * @param OrderLoader $orderLoader
      */
     public function __construct(
@@ -30,7 +28,6 @@ class PrintInvoice extends \Magento\Sales\Controller\AbstractController\PrintInv
         OrderViewAuthorization $orderAuthorization,
         \Magento\Framework\Registry $registry,
         PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory,
         OrderLoader $orderLoader
     ) {
         $this->orderLoader = $orderLoader;
@@ -38,8 +35,7 @@ class PrintInvoice extends \Magento\Sales\Controller\AbstractController\PrintInv
             $context,
             $orderAuthorization,
             $registry,
-            $resultPageFactory,
-            $resultRedirectFactory
+            $resultPageFactory
         );
     }
 
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintShipment.php b/app/code/Magento/Sales/Controller/Guest/PrintShipment.php
index e3ae69ef3d99297faa98966dcdd5efb34599ad18..8dcbfe4ef735cb9d330de055feece6b5e9fe0fcb 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintShipment.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintShipment.php
@@ -6,7 +6,6 @@
  */
 namespace Magento\Sales\Controller\Guest;
 
-use Magento\Framework\Controller\Result\RedirectFactory;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\View\Result\PageFactory;
 
@@ -22,7 +21,6 @@ class PrintShipment extends \Magento\Sales\Controller\AbstractController\PrintSh
      * @param OrderViewAuthorization $orderAuthorization
      * @param \Magento\Framework\Registry $registry
      * @param PageFactory $resultPageFactory
-     * @param RedirectFactory $resultRedirectFactory
      * @param OrderLoader $orderLoader
      */
     public function __construct(
@@ -30,7 +28,6 @@ class PrintShipment extends \Magento\Sales\Controller\AbstractController\PrintSh
         OrderViewAuthorization $orderAuthorization,
         \Magento\Framework\Registry $registry,
         PageFactory $resultPageFactory,
-        RedirectFactory $resultRedirectFactory,
         OrderLoader $orderLoader
     ) {
         $this->orderLoader = $orderLoader;
@@ -38,8 +35,7 @@ class PrintShipment extends \Magento\Sales\Controller\AbstractController\PrintSh
             $context,
             $orderAuthorization,
             $registry,
-            $resultPageFactory,
-            $resultRedirectFactory
+            $resultPageFactory
         );
     }
 
diff --git a/app/code/Magento/Sales/Controller/Guest/Reorder.php b/app/code/Magento/Sales/Controller/Guest/Reorder.php
index 745351dc652b4c3799139ab6f00819d01736bfd3..4739751df7ff5156f8e7bb75e8283408bc7214f9 100644
--- a/app/code/Magento/Sales/Controller/Guest/Reorder.php
+++ b/app/code/Magento/Sales/Controller/Guest/Reorder.php
@@ -8,4 +8,5 @@ namespace Magento\Sales\Controller\Guest;
 
 class Reorder extends \Magento\Sales\Controller\AbstractController\Reorder
 {
+
 }
diff --git a/app/code/Magento/Sales/Exception.php b/app/code/Magento/Sales/Exception.php
deleted file mode 100644
index 8c69378b3ac6d5828bc58d7ff5df35b113d1fb5d..0000000000000000000000000000000000000000
--- a/app/code/Magento/Sales/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Sales;
-
-class Exception extends \Zend_Exception
-{
-}
diff --git a/app/code/Magento/Sales/Model/AbstractNotifier.php b/app/code/Magento/Sales/Model/AbstractNotifier.php
index 7f0ad6c14e5ed0df0ec8070e8d4c2619fd864aaa..12a910b1c1644e44928695ee76614621105e41ff 100644
--- a/app/code/Magento/Sales/Model/AbstractNotifier.php
+++ b/app/code/Magento/Sales/Model/AbstractNotifier.php
@@ -7,7 +7,6 @@
 namespace Magento\Sales\Model;
 
 use Psr\Log\LoggerInterface as Logger;
-use Magento\Framework\Mail\Exception;
 use Magento\Sales\Model\Order\Email\Sender;
 use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
 
@@ -52,7 +51,7 @@ abstract class AbstractNotifier extends \Magento\Framework\Model\AbstractModel
      *
      * @param AbstractModel $model
      * @return bool
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      */
     public function notify(\Magento\Sales\Model\AbstractModel $model)
     {
@@ -67,7 +66,7 @@ abstract class AbstractNotifier extends \Magento\Framework\Model\AbstractModel
                 $historyItem->setIsCustomerNotified(1);
                 $historyItem->save();
             }
-        } catch (Exception $e) {
+        } catch (\Magento\Framework\Exception\MailException $e) {
             $this->logger->critical($e);
             return false;
         }
diff --git a/app/code/Magento/Sales/Model/AdminOrder/EmailSender.php b/app/code/Magento/Sales/Model/AdminOrder/EmailSender.php
index eed89a8a8548e8f717b7a5a633a77b17a0caca44..27e957ea5579bccb1e2b1aa3176e3a10ccca2e4d 100644
--- a/app/code/Magento/Sales/Model/AdminOrder/EmailSender.php
+++ b/app/code/Magento/Sales/Model/AdminOrder/EmailSender.php
@@ -53,7 +53,7 @@ class EmailSender
     {
         try {
             $this->orderSender->send($order);
-        } catch (\Magento\Framework\Mail\Exception $exception) {
+        } catch (\Magento\Framework\Exception\MailException $exception) {
             $this->logger->critical($exception);
             $this->messageManager->addWarning(
                 __('You did not email your customer. Please check your email settings.')
diff --git a/app/code/Magento/Sales/Model/Config/Backend/Grid/AsyncIndexing.php b/app/code/Magento/Sales/Model/Config/Backend/Grid/AsyncIndexing.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7eb6d8457f8188701f00cc5f9a717c3352fea15
--- /dev/null
+++ b/app/code/Magento/Sales/Model/Config/Backend/Grid/AsyncIndexing.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Model\Config\Backend\Grid;
+
+/**
+ * Backend model for global configuration value
+ * 'dev/grid/async_indexing'.
+ */
+class AsyncIndexing extends \Magento\Framework\App\Config\Value
+{
+    /**
+     * Dispatches corresponding event after saving of configuration
+     * value if it was changed.
+     *
+     * Dispatches next events:
+     *
+     * - config_data_dev_grid_async_indexing_enabled
+     * - config_data_dev_grid_async_indexing_disabled
+     *
+     * @return $this
+     */
+    public function afterSave()
+    {
+        if ($this->isValueChanged()) {
+            $state = $this->getValue() ? 'enabled' : 'disabled';
+
+            $this->_eventManager->dispatch(
+                $this->_eventPrefix . '_dev_grid_async_indexing_' . $state,
+                $this->_getEventData()
+            );
+        }
+
+        return $this;
+    }
+}
diff --git a/app/code/Magento/Sales/Model/Observer/IndexGrid.php b/app/code/Magento/Sales/Model/Observer/IndexGrid.php
new file mode 100644
index 0000000000000000000000000000000000000000..fdf54b0f8f48a0aeafe7a4b3ecf172be97b04996
--- /dev/null
+++ b/app/code/Magento/Sales/Model/Observer/IndexGrid.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Model\Observer;
+
+/**
+ * Sales entity grids indexing observer.
+ *
+ * Performs handling of events and cron jobs related to indexing
+ * of Order, Invoice, Shipment and Creditmemo grids.
+ */
+class IndexGrid
+{
+    /**
+     * Entity grid model.
+     *
+     * @var \Magento\Sales\Model\Resource\GridInterface
+     */
+    protected $entityGrid;
+
+    /**
+     * Global configuration storage.
+     *
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface
+     */
+    protected $globalConfig;
+
+    /**
+     * @param \Magento\Sales\Model\Resource\GridInterface $entityGrid
+     * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
+     */
+    public function __construct(
+        \Magento\Sales\Model\Resource\GridInterface $entityGrid,
+        \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
+    ) {
+        $this->entityGrid = $entityGrid;
+        $this->globalConfig = $globalConfig;
+    }
+
+    /**
+     * Handles synchronous insertion of the new entity into
+     * corresponding grid on certain events.
+     *
+     * Used in the next events:
+     *
+     *  - sales_order_save_after
+     *  - sales_order_invoice_save_after
+     *  - sales_order_shipment_save_after
+     *  - sales_order_creditmemo_save_after
+     *
+     * Works only if asynchronous grid indexing is disabled
+     * in global settings.
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     */
+    public function syncInsert(\Magento\Framework\Event\Observer $observer)
+    {
+        if (!$this->globalConfig->getValue('dev/grid/async_indexing')) {
+            $this->entityGrid->refresh($observer->getDataObject()->getId());
+        }
+    }
+
+    /**
+     * Handles synchronous removing of the entity from
+     * corresponding grid on certain events.
+     *
+     * Used in the next events:
+     *
+     *  - sales_order_delete_after
+     *  - sales_order_invoice_delete_after
+     *  - sales_order_shipment_delete_after
+     *  - sales_order_creditmemo_delete_after
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     */
+    public function syncRemove(\Magento\Framework\Event\Observer $observer)
+    {
+        $this->entityGrid->purge($observer->getDataObject()->getId());
+    }
+
+    /**
+     * Handles asynchronous insertion of the new entity into
+     * corresponding grid during cron job.
+     *
+     * Also method is used in the next events:
+     *
+     * - config_data_dev_grid_async_indexing_disabled
+     *
+     * Works only if asynchronous grid indexing is enabled
+     * in global settings.
+     *
+     * @return void
+     */
+    public function asyncInsert()
+    {
+        if ($this->globalConfig->getValue('dev/grid/async_indexing')) {
+            $this->entityGrid->refreshBySchedule();
+        }
+    }
+}
diff --git a/app/code/Magento/Sales/Model/Resource/AbstractGrid.php b/app/code/Magento/Sales/Model/Resource/AbstractGrid.php
index ec8941c2ba11f91649a8abc9d9a6d243da9f552f..862b5079bad3c3a0db285fb9a7588c8493597d12 100644
--- a/app/code/Magento/Sales/Model/Resource/AbstractGrid.php
+++ b/app/code/Magento/Sales/Model/Resource/AbstractGrid.php
@@ -71,4 +71,24 @@ abstract class AbstractGrid extends AbstractDb implements GridInterface
             [($field ?: 'entity_id') . ' = ?' => $value]
         );
     }
+
+    /**
+     * Returns update time of the last row in the grid.
+     *
+     * If there are no rows in the grid, default value will be returned.
+     *
+     * @param string $default
+     * @return string
+     */
+    protected function getLastUpdatedAtValue($default = '0000-00-00 00:00:00')
+    {
+        $select = $this->getConnection()->select()
+            ->from($this->getTable($this->gridTableName), ['updated_at'])
+            ->order('updated_at DESC')
+            ->limit(1);
+
+        $row = $this->getConnection()->fetchRow($select);
+
+        return isset($row['updated_at']) ? $row['updated_at'] : $default;
+    }
 }
diff --git a/app/code/Magento/Sales/Model/Resource/Entity.php b/app/code/Magento/Sales/Model/Resource/Entity.php
index ada1a586187ca71f5705579f6395d6048ac4a762..9c1f3f65522ad540885b495a9f130661d12181ee 100644
--- a/app/code/Magento/Sales/Model/Resource/Entity.php
+++ b/app/code/Magento/Sales/Model/Resource/Entity.php
@@ -50,28 +50,20 @@ abstract class Entity extends AbstractDb
      */
     protected $salesIncrement;
 
-    /**
-     * @var \Magento\Sales\Model\Resource\GridInterface
-     */
-    protected $gridAggregator;
-
     /**
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param Attribute $attribute
      * @param \Magento\Sales\Model\Increment $salesIncrement
      * @param string|null $resourcePrefix
-     * @param GridInterface|null $gridAggregator
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         \Magento\Sales\Model\Resource\Attribute $attribute,
         \Magento\Sales\Model\Increment $salesIncrement,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->attribute = $attribute;
         $this->salesIncrement = $salesIncrement;
-        $this->gridAggregator = $gridAggregator;
         parent::__construct($context, $resourcePrefix);
     }
 
@@ -89,6 +81,24 @@ abstract class Entity extends AbstractDb
         return $this;
     }
 
+    /**
+     * Prepares data for saving and removes update time (if exists).
+     * This prevents saving same update time on each entity update.
+     *
+     * @param \Magento\Framework\Model\AbstractModel $object
+     * @return array
+     */
+    protected function _prepareDataForSave(\Magento\Framework\Model\AbstractModel $object)
+    {
+        $data = parent::_prepareDataForTable($object, $this->getMainTable());
+
+        if (isset($data['updated_at'])) {
+            unset($data['updated_at']);
+        }
+
+        return $data;
+    }
+
     /**
      * Perform actions before object save
      *
@@ -127,10 +137,6 @@ abstract class Entity extends AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
-        if ($this->gridAggregator) {
-            $this->gridAggregator->refresh($object->getId());
-        }
-
         $adapter = $this->_getReadAdapter();
         $columns = $adapter->describeTable($this->getMainTable());
 
@@ -158,9 +164,6 @@ abstract class Entity extends AbstractDb
      */
     protected function _afterDelete(\Magento\Framework\Model\AbstractModel $object)
     {
-        if ($this->gridAggregator) {
-            $this->gridAggregator->purge($object->getId());
-        }
         parent::_afterDelete($object);
         return $this;
     }
diff --git a/app/code/Magento/Sales/Model/Resource/GridInterface.php b/app/code/Magento/Sales/Model/Resource/GridInterface.php
index b257a569cf0b5a5370e8d7683dfbfe22ee6ad175..138d7726f41a42313a40b40d8f78d64b25099fb4 100644
--- a/app/code/Magento/Sales/Model/Resource/GridInterface.php
+++ b/app/code/Magento/Sales/Model/Resource/GridInterface.php
@@ -12,12 +12,25 @@ namespace Magento\Sales\Model\Resource;
 interface GridInterface
 {
     /**
+     * Adds new rows to the grid.
+     *
+     * Only rows that correspond to $value and $field parameters should be added.
+     *
      * @param int|string $value
      * @param null|string $field
      * @return \Zend_Db_Statement_Interface
      */
     public function refresh($value, $field = null);
 
+    /**
+     * Adds new rows to the grid.
+     *
+     * Only rows created/updated since the last method call should be added.
+     *
+     * @return \Zend_Db_Statement_Interface
+     */
+    public function refreshBySchedule();
+
     /**
      * @param int|string $value
      * @param null|string $field
diff --git a/app/code/Magento/Sales/Model/Resource/Order.php b/app/code/Magento/Sales/Model/Resource/Order.php
index f25e34923c21c51bc297793e8133fbcc42925a1a..5a2cd7fedbdb9ba58feb7a9d830015b8e0182077 100644
--- a/app/code/Magento/Sales/Model/Resource/Order.php
+++ b/app/code/Magento/Sales/Model/Resource/Order.php
@@ -9,7 +9,6 @@ use Magento\Framework\App\Resource as AppResource;
 use Magento\Framework\Math\Random;
 use Magento\Sales\Model\Increment as SalesIncrement;
 use Magento\Sales\Model\Resource\Entity as SalesResource;
-use Magento\Sales\Model\Resource\Order\Grid as OrderGrid;
 use Magento\Sales\Model\Resource\Order\Handler\Address as AddressHandler;
 use Magento\Sales\Model\Resource\Order\Handler\State as StateHandler;
 use Magento\Sales\Model\Spi\OrderResourceInterface;
@@ -61,7 +60,6 @@ class Order extends SalesResource implements OrderResourceInterface
      * @param SalesIncrement $salesIncrement
      * @param AddressHandler $addressHandler
      * @param StateHandler $stateHandler
-     * @param OrderGrid $gridAggregator
      * @param string|null $resourcePrefix
      */
     public function __construct(
@@ -70,12 +68,11 @@ class Order extends SalesResource implements OrderResourceInterface
         SalesIncrement $salesIncrement,
         AddressHandler $addressHandler,
         StateHandler $stateHandler,
-        OrderGrid $gridAggregator,
         $resourcePrefix = null
     ) {
         $this->stateHandler = $stateHandler;
         $this->addressHandler = $addressHandler;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
@@ -199,6 +196,7 @@ class Order extends SalesResource implements OrderResourceInterface
             $relatedObject->save();
             $relatedObject->setOrder($object);
         }
+
         return parent::_afterSave($object);
     }
 }
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Address.php b/app/code/Magento/Sales/Model/Resource/Order/Address.php
index 0ae0007afce4c6df73de79ae9dfb3a79fd7bee57..bacacbbcd01e37894b0cbbe547f002d8db5d4545 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Address.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Address.php
@@ -37,7 +37,6 @@ class Address extends SalesResource implements OrderAddressResourceInterface
      * @param \Magento\Sales\Model\Order\Address\Validator $validator
      * @param \Magento\Sales\Model\Resource\GridPool $gridPool
      * @param string|null $resourcePrefix
-     * @param \Magento\Sales\Model\Resource\GridInterface $gridAggregator
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
@@ -45,12 +44,11 @@ class Address extends SalesResource implements OrderAddressResourceInterface
         \Magento\Sales\Model\Increment $salesIncrement,
         \Magento\Sales\Model\Order\Address\Validator $validator,
         \Magento\Sales\Model\Resource\GridPool $gridPool,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->_validator = $validator;
         $this->gridPool = $gridPool;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php
index 11123a7771cc03258f42cfb5318f72e6b08b0722..5f2797d8efcef0b57860d26d44f81219d405a679 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php
@@ -9,7 +9,6 @@ use Magento\Framework\App\Resource as AppResource;
 use Magento\Sales\Model\Increment as SalesIncrement;
 use Magento\Sales\Model\Resource\Attribute;
 use Magento\Sales\Model\Resource\Entity as SalesResource;
-use Magento\Sales\Model\Resource\Order\Creditmemo\Grid as CreditmemoGrid;
 use Magento\Sales\Model\Spi\CreditmemoResourceInterface;
 
 /**
@@ -42,17 +41,15 @@ class Creditmemo extends SalesResource implements CreditmemoResourceInterface
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param Attribute $attribute
      * @param SalesIncrement $salesIncrement
-     * @param CreditmemoGrid $gridAggregator
      * @param string|null $resourcePrefix
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         Attribute $attribute,
         SalesIncrement $salesIncrement,
-        CreditmemoGrid $gridAggregator,
         $resourcePrefix = null
     ) {
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
@@ -93,6 +90,7 @@ class Creditmemo extends SalesResource implements CreditmemoResourceInterface
                 $comment->save();
             }
         }
+
         return parent::_afterSave($object);
     }
 }
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php
index 4bd2bc8463cfeec1d5a6d18b75f2196f71ae6e31..dce44c4bb8673690183a8013b40a0b19405d1549 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php
@@ -35,18 +35,16 @@ class Comment extends Entity implements CreditmemoCommentResourceInterface
      * @param \Magento\Sales\Model\Increment $salesIncrement
      * @param \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator
      * @param string|null $resourcePrefix
-     * @param \Magento\Sales\Model\Resource\GridInterface $gridAggregator
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         \Magento\Sales\Model\Resource\Attribute $attribute,
         \Magento\Sales\Model\Increment $salesIncrement,
         \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->validator = $validator;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid.php b/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid.php
index 512b2b6879ee9d26ef74b873b8d1ee3d5a0cc438..7d769253351d876da7f1ccba803da175bb195a10 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid.php
@@ -24,7 +24,10 @@ class Grid extends AbstractGrid
     protected $creditmemoTableName = 'sales_creditmemo';
 
     /**
-     * Refresh grid row
+     * Adds new order creditmemos to the grid.
+     *
+     * Only order creditmemos that correspond to $value and $field
+     * parameters will be added.
      *
      * @param int|string $value
      * @param null|string $field
@@ -34,6 +37,31 @@ class Grid extends AbstractGrid
     {
         $select = $this->getGridOriginSelect()
             ->where(($field ?: 'sfc.entity_id') . ' = ?', $value);
+
+        return $this->getConnection()->query(
+            $this->getConnection()
+                ->insertFromSelect(
+                    $select,
+                    $this->getTable($this->gridTableName),
+                    [],
+                    AdapterInterface::INSERT_ON_DUPLICATE
+                )
+        );
+    }
+
+    /**
+     * Adds new order creditmemos to the grid.
+     *
+     * Only order creditmemos created/updated since the last method call
+     * will be added.
+     *
+     * @return \Zend_Db_Statement_Interface
+     */
+    public function refreshBySchedule()
+    {
+        $select = $this->getGridOriginSelect()
+            ->where('sfc.updated_at >= ?', $this->getLastUpdatedAtValue());
+
         return $this->getConnection()->query(
             $this->getConnection()
                 ->insertFromSelect(
@@ -81,6 +109,7 @@ class Grid extends AbstractGrid
                     'increment_id' => 'sfc.increment_id',
                     'order_increment_id' => 'sfo.increment_id',
                     'created_at' => 'sfc.created_at',
+                    'updated_at' => 'sfc.updated_at',
                     'order_created_at' => 'sfo.created_at',
                     'billing_name' => "trim(concat(ifnull(sba.firstname, ''), ' ', ifnull(sba.lastname, '')))",
                 ]
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Grid.php b/app/code/Magento/Sales/Model/Resource/Order/Grid.php
index 4dbd369c9989f512275335bc848e69628bf8b25c..92bccf926f30a0f069e4def9af00929ab7282975 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Grid.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Grid.php
@@ -19,7 +19,9 @@ class Grid extends AbstractGrid
     protected $gridTableName = 'sales_order_grid';
 
     /**
-     * Refresh grid row
+     * Adds new orders to the grid.
+     *
+     * Only orders that correspond to $value and $field parameters will be added.
      *
      * @param int|string $value
      * @param null|string $field
@@ -29,6 +31,30 @@ class Grid extends AbstractGrid
     {
         $select = $this->getGridOriginSelect()
             ->where(($field ?: 'sfo.entity_id') . ' = ?', $value);
+
+        return $this->getConnection()->query(
+            $this->getConnection()
+                ->insertFromSelect(
+                    $select,
+                    $this->getTable($this->gridTableName),
+                    [],
+                    AdapterInterface::INSERT_ON_DUPLICATE
+                )
+        );
+    }
+
+    /**
+     * Adds new orders to the grid.
+     *
+     * Only orders created/updated since the last method call will be added.
+     *
+     * @return \Zend_Db_Statement_Interface
+     */
+    public function refreshBySchedule()
+    {
+        $select = $this->getGridOriginSelect()
+            ->where('sfo.updated_at >= ?', $this->getLastUpdatedAtValue());
+
         return $this->getConnection()->query(
             $this->getConnection()
                 ->insertFromSelect(
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice.php b/app/code/Magento/Sales/Model/Resource/Order/Invoice.php
index 79317bda2843a1869942360867eb84c9fd28ad70..406589dafd152ccf2f0f602f01fe74bf38188955 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Invoice.php
@@ -9,7 +9,6 @@ use Magento\Framework\App\Resource;
 use Magento\Sales\Model\Increment as SalesIncrement;
 use Magento\Sales\Model\Resource\Attribute;
 use Magento\Sales\Model\Resource\Entity as SalesResource;
-use Magento\Sales\Model\Resource\Order\Invoice\Grid as InvoiceGrid;
 use Magento\Sales\Model\Spi\InvoiceResourceInterface;
 
 /**
@@ -38,17 +37,15 @@ class Invoice extends SalesResource implements InvoiceResourceInterface
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param Attribute $attribute
      * @param SalesIncrement $salesIncrement
-     * @param InvoiceGrid $gridAggregator
      * @param string|null $resourcePrefix
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         Attribute $attribute,
         SalesIncrement $salesIncrement,
-        InvoiceGrid $gridAggregator,
         $resourcePrefix = null
     ) {
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
@@ -93,6 +90,7 @@ class Invoice extends SalesResource implements InvoiceResourceInterface
                 $comment->save();
             }
         }
+
         return parent::_afterSave($object);
     }
 }
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php
index 32d95112c41bf7215db251323aa6d313f596b9d1..5d44bd40bd5c0d50c8632f7647c16a089e026a0e 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php
@@ -34,7 +34,6 @@ class Comment extends Entity implements InvoiceCommentResourceInterface
      * @param \Magento\Sales\Model\Resource\Attribute $attribute
      * @param \Magento\Sales\Model\Increment $salesIncrement
      * @param \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator
-     * @param \Magento\Sales\Model\Resource\GridInterface $gridAggregator
      * @param string|null $resourcePrefix
      */
     public function __construct(
@@ -42,11 +41,10 @@ class Comment extends Entity implements InvoiceCommentResourceInterface
         \Magento\Sales\Model\Resource\Attribute $attribute,
         \Magento\Sales\Model\Increment $salesIncrement,
         \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->validator = $validator;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid.php b/app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid.php
index 35bb45b0e153c03c5751ffe91746a91db9c455b0..e203becb74c7e47a3302e6c77bd2900840fb5029 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid.php
@@ -24,7 +24,10 @@ class Grid extends AbstractGrid
     protected $invoiceTableName = 'sales_invoice';
 
     /**
-     * Refresh grid row
+     * Adds new order invoices to the grid.
+     *
+     * Only order invoices that correspond to $value and $field
+     * parameters will be added.
      *
      * @param int|string $value
      * @param null|string $field
@@ -34,6 +37,31 @@ class Grid extends AbstractGrid
     {
         $select = $this->getGridOriginSelect()
             ->where(($field ?: 'sfi.entity_id') . ' = ?', $value);
+
+        return $this->getConnection()->query(
+            $this->getConnection()
+                ->insertFromSelect(
+                    $select,
+                    $this->getTable($this->gridTableName),
+                    [],
+                    AdapterInterface::INSERT_ON_DUPLICATE
+                )
+        );
+    }
+
+    /**
+     * Adds new order invoices to the grid.
+     *
+     * Only order invoices created/updated since the last method call
+     * will be added.
+     *
+     * @return \Zend_Db_Statement_Interface
+     */
+    public function refreshBySchedule()
+    {
+        $select = $this->getGridOriginSelect()
+            ->where('sfi.updated_at >= ?', $this->getLastUpdatedAtValue());
+
         return $this->getConnection()->query(
             $this->getConnection()
                 ->insertFromSelect(
@@ -75,6 +103,7 @@ class Grid extends AbstractGrid
                     'increment_id' => 'sfi.increment_id',
                     'order_increment_id' => 'sfo.increment_id',
                     'created_at' => 'sfi.created_at',
+                    'updated_at' => 'sfi.updated_at',
                     'order_created_at' => 'sfo.created_at',
                     'billing_name' => "trim(concat(ifnull(sba.firstname, ''), ' ', ifnull(sba.lastname, '')))",
                 ]
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment.php b/app/code/Magento/Sales/Model/Resource/Order/Shipment.php
index 0d2ecdf5bfceddee81573e84392543634769ba1b..1d11adfed6748e73b3d0a02cb6faeedc23beaf47 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Shipment.php
@@ -9,7 +9,6 @@ use Magento\Framework\App\Resource as AppResource;
 use Magento\Sales\Model\Increment as SalesIncrement;
 use Magento\Sales\Model\Resource\Attribute;
 use Magento\Sales\Model\Resource\Entity as SalesResource;
-use Magento\Sales\Model\Resource\Order\Shipment\Grid as ShipmentGrid;
 use Magento\Sales\Model\Spi\ShipmentResourceInterface;
 
 /**
@@ -47,17 +46,15 @@ class Shipment extends SalesResource implements ShipmentResourceInterface
      * @param \Magento\Framework\Model\Resource\Db\Context $context
      * @param Attribute $attribute
      * @param SalesIncrement $salesIncrement
-     * @param ShipmentGrid $gridAggregator
      * @param string|null $resourcePrefix
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         Attribute $attribute,
         SalesIncrement $salesIncrement,
-        ShipmentGrid $gridAggregator,
         $resourcePrefix = null
     ) {
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php
index e18d89970fb50860305407633261e6e2f5d29479..ab50e07d1afa570c0bada035ae60344a5b9fbbf3 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php
@@ -35,18 +35,16 @@ class Comment extends Entity implements ShipmentCommentResourceInterface
      * @param \Magento\Sales\Model\Increment $salesIncrement
      * @param \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator
      * @param string|null $resourcePrefix
-     * @param \Magento\Sales\Model\Resource\GridInterface $gridAggregator
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         \Magento\Sales\Model\Resource\Attribute $attribute,
         \Magento\Sales\Model\Increment $salesIncrement,
         \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->validator = $validator;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Grid.php b/app/code/Magento/Sales/Model/Resource/Order/Shipment/Grid.php
index 9dd1c697d4a780cfb53901a0f57b79db0f181e7d..c8c84e615498d0621dcf68acc9fe1d08393e7da7 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Grid.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Shipment/Grid.php
@@ -24,7 +24,10 @@ class Grid extends AbstractGrid
     protected $shipmentTableName = 'sales_shipment';
 
     /**
-     * Refresh grid row
+     * Adds new order shipments to the grid.
+     *
+     * Only order shipments that correspond to $value and $field
+     * parameters will be added.
      *
      * @param int|string $value
      * @param null|string $field
@@ -34,6 +37,31 @@ class Grid extends AbstractGrid
     {
         $select = $this->getGridOriginSelect()
             ->where(($field ?: 'sfs.entity_id') . ' = ?', $value);
+
+        return $this->getConnection()->query(
+            $this->getConnection()
+                ->insertFromSelect(
+                    $select,
+                    $this->getTable($this->gridTableName),
+                    [],
+                    AdapterInterface::INSERT_ON_DUPLICATE
+                )
+        );
+    }
+
+    /**
+     * Adds new order shipments to the grid.
+     *
+     * Only order shipments created/updated since the last method call
+     * will be added.
+     *
+     * @return \Zend_Db_Statement_Interface
+     */
+    public function refreshBySchedule()
+    {
+        $select = $this->getGridOriginSelect()
+            ->where('sfs.updated_at >= ?', $this->getLastUpdatedAtValue());
+
         return $this->getConnection()->query(
             $this->getConnection()
                 ->insertFromSelect(
@@ -70,6 +98,7 @@ class Grid extends AbstractGrid
                     'increment_id' => 'sfs.increment_id',
                     'order_increment_id' => 'sfo.increment_id',
                     'created_at' => 'sfs.created_at',
+                    'updated_at' => 'sfs.updated_at',
                     'order_created_at' => 'sfo.created_at',
                     'shipping_name' => "trim(concat(ifnull(ssa.firstname, ''), ' ' ,ifnull(ssa.lastname, '')))",
                 ]
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php
index 9ff1715b0dc714a8ce93d562ec99f770312541f3..86b27bc301c0e4084b8bcd9f718f4756f2f9b411 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php
@@ -35,18 +35,16 @@ class Track extends SalesResource implements ShipmentTrackResourceInterface
      * @param \Magento\Sales\Model\Increment $salesIncrement
      * @param \Magento\Sales\Model\Order\Shipment\Track\Validator $validator
      * @param string|null $resourcePrefix
-     * @param \Magento\Sales\Model\Resource\GridInterface $gridAggregator
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         \Magento\Sales\Model\Resource\Attribute $attribute,
         \Magento\Sales\Model\Increment $salesIncrement,
         \Magento\Sales\Model\Order\Shipment\Track\Validator $validator,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->validator = $validator;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Status/History.php b/app/code/Magento/Sales/Model/Resource/Order/Status/History.php
index ff92ebe32c2ebc63be6afd3d3cbeba8b8a7dba14..bf50f4b6b004e7f2beb4c2eaeb1838408ea5c343 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Status/History.php
+++ b/app/code/Magento/Sales/Model/Resource/Order/Status/History.php
@@ -27,18 +27,16 @@ class History extends Entity implements OrderStatusHistoryResourceInterface
      * @param \Magento\Sales\Model\Increment $salesIncrement
      * @param Validator $validator
      * @param string|null $resourcePrefix
-     * @param \Magento\Sales\Model\Resource\GridInterface $gridAggregator
      */
     public function __construct(
         \Magento\Framework\Model\Resource\Db\Context $context,
         \Magento\Sales\Model\Resource\Attribute $attribute,
         \Magento\Sales\Model\Increment $salesIncrement,
         Validator $validator,
-        $resourcePrefix = null,
-        \Magento\Sales\Model\Resource\GridInterface $gridAggregator = null
+        $resourcePrefix = null
     ) {
         $this->validator = $validator;
-        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix, $gridAggregator);
+        parent::__construct($context, $attribute, $salesIncrement, $resourcePrefix);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Setup/UpgradeSchema.php b/app/code/Magento/Sales/Setup/UpgradeSchema.php
index 19c29e24be8cf388eb9dc3669afe5590e6cc87bf..6f3f45fa05e18b0595892a8f0c9201a711388652 100644
--- a/app/code/Magento/Sales/Setup/UpgradeSchema.php
+++ b/app/code/Magento/Sales/Setup/UpgradeSchema.php
@@ -60,5 +60,52 @@ class UpgradeSchema implements UpgradeSchemaInterface
                 }
             }
         }
+
+        if (version_compare($context->getVersion(), '2.0.2') < 0) {
+
+            /**
+             * Adding 'updated_at' columns.
+             */
+
+            $tables = ['sales_shipment_grid', 'sales_invoice_grid', 'sales_creditmemo_grid'];
+
+            foreach ($tables as $table) {
+                $table = $setup->getTable($table);
+
+                $setup->getConnection()
+                    ->addColumn(
+                        $table,
+                        'updated_at',
+                        [
+                            'type' => Table::TYPE_TIMESTAMP,
+                            'after' => 'created_at',
+                            'comment' => 'Updated At'
+                        ]
+                    );
+
+                $setup->getConnection()
+                    ->addIndex($table, $setup->getIdxName($table, ['updated_at']), 'updated_at');
+            }
+
+            /**
+             * Modifying default value of 'updated_at' columns.
+             */
+
+            $tables = ['sales_order', 'sales_shipment', 'sales_invoice', 'sales_creditmemo'];
+
+            foreach ($tables as $table) {
+                $table = $setup->getTable($table);
+
+                $setup->getConnection()
+                    ->modifyColumn(
+                        $table,
+                        'updated_at',
+                        [
+                            'type' => Table::TYPE_TIMESTAMP,
+                            'default' => Table::TIMESTAMP_INIT_UPDATE
+                        ]
+                    );
+            }
+        }
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/Items/GridTest.php b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/Items/GridTest.php
index 0c948763c81bafcea06f1b8e2acd9679aa6f05e5..702ff9abb36b9d40025f4c14d64b57921841cfee 100644
--- a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/Items/GridTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/Items/GridTest.php
@@ -219,7 +219,7 @@ class GridTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Sales\Block\Adminhtml\Order\Create\Items\Grid::getItems
+     * @covers \Magento\Sales\Block\Adminhtml\Order\Create\Items\Grid::getItems
      */
     public function testGetItems()
     {
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php
index 5de7ddeb02231a5261d8201ac1f06738997ea436..bd9b80e880eb13d134d4d1ec7922aa1315a2e3ba 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php
@@ -86,7 +86,8 @@ class EmailTest extends \PHPUnit_Framework_TestCase
                 'getObjectManager',
                 'getSession',
                 'getActionFlag',
-                'getHelper'
+                'getHelper',
+                'getResultRedirectFactory'
             ],
             [],
             '',
@@ -120,34 +121,22 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $this->resultRedirectMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->once())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->once())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())->method('getSession')->willReturn($this->session);
+        $this->context->expects($this->once())->method('getActionFlag')->willReturn($this->actionFlag);
+        $this->context->expects($this->once())->method('getHelper')->willReturn($this->helper);
         $this->context->expects($this->once())
-            ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManager));
-        $this->context->expects($this->once())
-            ->method('getRequest')
-            ->will($this->returnValue($this->request));
-        $this->context->expects($this->once())
-            ->method('getResponse')
-            ->will($this->returnValue($this->response));
-        $this->context->expects($this->once())
-            ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManager));
-        $this->context->expects($this->once())
-            ->method('getSession')
-            ->will($this->returnValue($this->session));
-        $this->context->expects($this->once())
-            ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlag));
-        $this->context->expects($this->once())
-            ->method('getHelper')
-            ->will($this->returnValue($this->helper));
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
         $this->creditmemoEmail = $objectManagerHelper->getObject(
             'Magento\Sales\Controller\Adminhtml\Creditmemo\AbstractCreditmemo\Email',
             [
                 'context' => $this->context,
                 'request' => $this->request,
                 'response' => $this->response,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock
             ]
         );
     }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php
index 73d8438c5fa5f393934f8da431225302083f9016..8493e58d858c62477f45677564d12397a25d2bf6 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php
@@ -95,6 +95,14 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $this->session = $this->getMock('Magento\Backend\Model\Session', ['setIsUrlNotice'], [], '', false);
         $this->actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', [], [], '', false);
         $this->helper = $this->getMock('\Magento\Backend\Helper\Data', [], [], '', false);
+        $this->resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
         $this->context->expects($this->once())
             ->method('getMessageManager')
             ->willReturn($this->messageManager);
@@ -116,14 +124,9 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $this->context->expects($this->once())
             ->method('getHelper')
             ->willReturn($this->helper);
-
-        $this->resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->resultRedirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
+        $this->context->expects($this->once())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactory);
 
         $this->resultForward = $this->getMockBuilder('Magento\Backend\Model\View\Result\Forward')
             ->disableOriginalConstructor()
@@ -137,7 +140,6 @@ class EmailTest extends \PHPUnit_Framework_TestCase
             'Magento\Sales\Controller\Adminhtml\Order\Invoice\Email',
             [
                 'context' => $this->context,
-                'resultRedirectFactory' => $this->resultRedirectFactory,
                 'resultForwardFactory' => $this->resultForwardFactory,
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php
index bc849016a87c4412fd84dcc98f57a1cd7fca1185..5029fdac67c3d169b79dba22b2f3fe5412885a3c 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php
@@ -113,6 +113,23 @@ class CancelTest extends \PHPUnit_Framework_TestCase
         $this->helperMock = $this->getMockBuilder('Magento\Backend\Helper\Data')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->loaderMock = $this->getMockBuilder('Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->resultRedirectMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultForwardMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Forward')
+            ->disableOriginalConstructor()
+            ->getMock();
         $this->contextMock = $this->getMockBuilder('Magento\Backend\App\Action\Context')
             ->disableOriginalConstructor()
             ->getMock();
@@ -124,42 +141,28 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->contextMock->expects($this->any())
             ->method('getSession')
-            ->will($this->returnValue($this->sessionMock));
+            ->willReturn($this->sessionMock);
         $this->contextMock->expects($this->any())
             ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlagMock));
+            ->willReturn($this->actionFlagMock);
         $this->contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $this->contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $this->contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $this->contextMock->expects($this->any())
             ->method('getTitle')
-            ->will($this->returnValue($titleMock));
+            ->willReturn($titleMock);
         $this->contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
-        $this->loaderMock = $this->getMockBuilder('Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-        $this->resultRedirectMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->resultForwardMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Forward')
-            ->disableOriginalConstructor()
-            ->getMock();
+            ->willReturn($this->messageManagerMock);
+        $this->contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->controller = $objectManager->getObject(
@@ -167,7 +170,6 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             [
                 'context' => $this->contextMock,
                 'creditmemoLoader' => $this->loaderMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultForwardFactory' => $this->resultForwardFactoryMock
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php
index 4d2620fdacfce2a1b820e7466fb3a725bc43858d..f834d01d208d5b7cfd885a92298e10018537d7aa 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php
@@ -126,6 +126,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             'session' => $this->_sessionMock,
             'objectManager' => $this->_objectManager,
             'messageManager' => $this->_messageManager,
+            'resultRedirectFactory' => $this->resultRedirectFactoryMock
         ];
 
         $context = $helper->getObject('Magento\Backend\App\Action\Context', $arguments);
@@ -138,7 +139,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             [
                 'context' => $context,
                 'creditmemoLoader' => $this->memoLoaderMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock
             ]
         );
     }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php
index fe28217d346f7f1872c40c83709182509da12e5d..6d2d02861be077932095d947a73f411ecf65d4c7 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php
@@ -148,28 +148,31 @@ class VoidTest extends \PHPUnit_Framework_TestCase
 
         $this->contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $this->contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $this->contextMock->expects($this->any())
             ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlagMock));
+            ->willReturn($this->actionFlagMock);
         $this->contextMock->expects($this->any())
             ->method('getHelper')
-            ->will($this->returnValue($this->helperMock));
+            ->willReturn($this->helperMock);
         $this->contextMock->expects($this->any())
             ->method('getSession')
-            ->will($this->returnValue($this->sessionMock));
+            ->willReturn($this->sessionMock);
         $this->contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $this->contextMock->expects($this->any())
             ->method('getTitle')
-            ->will($this->returnValue($titleMock));
+            ->willReturn($titleMock);
         $this->contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
+        $this->contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->controller = $objectManager->getObject(
@@ -177,7 +180,6 @@ class VoidTest extends \PHPUnit_Framework_TestCase
             [
                 'context' => $this->contextMock,
                 'creditmemoLoader' => $this->loaderMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultForwardFactory' => $this->resultForwardFactoryMock
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php
index f8c328439d46c3f1f3ae95b3b4cae95ca99f72b0..6eedbf0af863639720e53d698b16284a99e319fd 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php
@@ -81,7 +81,8 @@ class EmailTest extends \PHPUnit_Framework_TestCase
                 'getObjectManager',
                 'getSession',
                 'getActionFlag',
-                'getHelper'
+                'getHelper',
+                'getResultRedirectFactory'
             ],
             [],
             '',
@@ -120,35 +121,22 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $this->session = $this->getMock('Magento\Backend\Model\Session', ['setIsUrlNotice'], [], '', false);
         $this->actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', ['get', 'set'], [], '', false);
         $this->helper = $this->getMock('\Magento\Backend\Helper\Data', ['getUrl'], [], '', false);
-        $this->context->expects($this->once())
-            ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManager));
-        $this->context->expects($this->once())
-            ->method('getRequest')
-            ->will($this->returnValue($this->request));
-        $this->context->expects($this->once())
-            ->method('getResponse')
-            ->will($this->returnValue($this->response));
-        $this->context->expects($this->once())
-            ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManager));
-        $this->context->expects($this->once())
-            ->method('getSession')
-            ->will($this->returnValue($this->session));
-        $this->context->expects($this->once())
-            ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlag));
-        $this->context->expects($this->once())
-            ->method('getHelper')
-            ->will($this->returnValue($this->helper));
         $this->resultRedirect = $this->getMock('Magento\Backend\Model\View\Result\Redirect', [], [], '', false);
         $resultRedirectFactory->expects($this->any())->method('create')->willReturn($this->resultRedirect);
 
+        $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->once())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->once())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())->method('getSession')->willReturn($this->session);
+        $this->context->expects($this->once())->method('getActionFlag')->willReturn($this->actionFlag);
+        $this->context->expects($this->once())->method('getHelper')->willReturn($this->helper);
+        $this->context->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
+
         $this->orderEmail = $objectManagerHelper->getObject(
             'Magento\Sales\Controller\Adminhtml\Order\Email',
             [
                 'context' => $this->context,
-                'resultRedirectFactory' => $resultRedirectFactory,
                 'request' => $this->request,
                 'response' => $this->response
             ]
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php
index 3575638720b4aebf55f90d9f00ff0f30a716bd5d..682550783e2619c0d449511f8d0132da0c7b2bd3 100755
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php
@@ -102,47 +102,49 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMock();
 
+        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
         $contextMock = $this->getMockBuilder('Magento\Backend\App\Action\Context')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
         $contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
         $contextMock->expects($this->any())
             ->method('getSession')
-            ->will($this->returnValue($this->sessionMock));
+            ->willReturn($this->sessionMock);
         $contextMock->expects($this->any())
             ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlagMock));
+            ->willReturn($this->actionFlagMock);
         $contextMock->expects($this->any())
             ->method('getHelper')
-            ->will($this->returnValue($this->helperMock));
-
-        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-
-        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
+            ->willReturn($this->helperMock);
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $this->controller = $objectManager->getObject(
             'Magento\Sales\Controller\Adminhtml\Order\Invoice\Cancel',
             [
                 'context' => $contextMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultForwardFactory' => $this->resultForwardFactoryMock
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php
index 0e57e1af6c5198a9b4d45cdd921afa10b7b9745e..3c067f3f8603e01121813a572eb86ef6e93346cd 100755
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php
@@ -102,47 +102,49 @@ class CaptureTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMock();
 
+        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
         $contextMock = $this->getMockBuilder('Magento\Backend\App\Action\Context')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
         $contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
         $contextMock->expects($this->any())
             ->method('getSession')
-            ->will($this->returnValue($this->sessionMock));
+            ->willReturn($this->sessionMock);
         $contextMock->expects($this->any())
             ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlagMock));
+            ->willReturn($this->actionFlagMock);
         $contextMock->expects($this->any())
             ->method('getHelper')
-            ->will($this->returnValue($this->helperMock));
-
-        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-
-        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
+            ->willReturn($this->helperMock);
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $this->controller = $objectManager->getObject(
             'Magento\Sales\Controller\Adminhtml\Order\Invoice\Capture',
             [
                 'context' => $contextMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultForwardFactory' => $this->resultForwardFactoryMock
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php
index c28b721ed21b34f2e123231da3de13e31218c807..5e60a34a3554103f0350c995c7742ea6c7a55b9e 100755
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php
@@ -134,6 +134,15 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
         $this->pageTitleMock = $this->getMockBuilder('Magento\Framework\View\Page\Title')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->resultPageFactoryMock = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
 
         $contextMock = $this->getMockBuilder('Magento\Backend\App\Action\Context')
             ->disableOriginalConstructor()
@@ -141,34 +150,38 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $contextMock->expects($this->any())
             ->method('getTitle')
-            ->will($this->returnValue($titleMock));
+            ->willReturn($titleMock);
         $contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $contextMock->expects($this->any())
             ->method('getView')
-            ->will($this->returnValue($this->viewMock));
+            ->willReturn($this->viewMock);
         $contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $contextMock->expects($this->any())
             ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlagMock));
+            ->willReturn($this->actionFlagMock);
         $contextMock->expects($this->any())
             ->method('getHelper')
-            ->will($this->returnValue($this->helperMock));
+            ->willReturn($this->helperMock);
         $contextMock->expects($this->any())
             ->method('getSession')
-            ->will($this->returnValue($this->sessionMock));
+            ->willReturn($this->sessionMock);
         $contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
+
         $this->viewMock->expects($this->any())
             ->method('getPage')
             ->willReturn($this->resultPageMock);
@@ -179,21 +192,10 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
             ->method('getTitle')
             ->willReturn($this->pageTitleMock);
 
-        $this->resultPageFactoryMock = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-
-        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-
         $this->controller = $objectManager->getObject(
             'Magento\Sales\Controller\Adminhtml\Order\Invoice\NewAction',
             [
                 'context' => $contextMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultPageFactory' => $this->resultPageFactoryMock
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php
index 1c5cf1cefa0223c32ab910f86143b27b7be09ff9..90b9a5abf31f39fa9357b2e3323e7cfd1c7b0501 100755
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php
@@ -264,7 +264,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
      */
     public function testExecuteModelException()
     {
-        $message = 'Cannot update item quantity.';
+        $message = 'The order no longer exists.';
         $response = ['error' => true, 'message' => $message];
 
         $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
@@ -307,7 +307,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
      */
     public function testExecuteException()
     {
-        $message = 'Cannot update item quantity.';
+        $message = 'The order no longer exists.';
         $response = ['error' => true, 'message' => $message];
 
         $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php
index 21d1f3f644b4a43d25118b3db9ae0d2799726461..4f9b93ea6e279a165cd20d0786f7b8e954a8c6c0 100755
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php
@@ -112,50 +112,52 @@ class VoidTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMock();
 
+        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
         $contextMock = $this->getMockBuilder('Magento\Backend\App\Action\Context')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
         $contextMock->expects($this->any())
             ->method('getRequest')
-            ->will($this->returnValue($this->requestMock));
+            ->willReturn($this->requestMock);
         $contextMock->expects($this->any())
             ->method('getResponse')
-            ->will($this->returnValue($this->responseMock));
+            ->willReturn($this->responseMock);
         $contextMock->expects($this->any())
             ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManagerMock));
+            ->willReturn($this->objectManagerMock);
         $contextMock->expects($this->any())
             ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManagerMock));
+            ->willReturn($this->messageManagerMock);
         $contextMock->expects($this->any())
             ->method('getTitle')
-            ->will($this->returnValue($this->titleMock));
+            ->willReturn($this->titleMock);
         $contextMock->expects($this->any())
             ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlagMock));
+            ->willReturn($this->actionFlagMock);
         $contextMock->expects($this->any())
             ->method('getSession')
-            ->will($this->returnValue($this->sessionMock));
+            ->willReturn($this->sessionMock);
         $contextMock->expects($this->any())
             ->method('getHelper')
-            ->will($this->returnValue($this->helperMock));
-
-        $this->resultRedirectFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
-
-        $this->resultForwardFactoryMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\ForwardFactory')
-            ->disableOriginalConstructor()
-            ->setMethods(['create'])
-            ->getMock();
+            ->willReturn($this->helperMock);
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactoryMock);
 
         $this->controller = $objectManager->getObject(
             'Magento\Sales\Controller\Adminhtml\Order\Invoice\Void',
             [
                 'context' => $contextMock,
-                'resultRedirectFactory' => $this->resultRedirectFactoryMock,
                 'resultForwardFactory' => $this->resultForwardFactoryMock
             ]
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php
index eadbaa5250cdd5e2776afe733f398a2d40c2af2b..b10539c45a0dbd285ef84ac9bc2f64c346037f71 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php
@@ -133,7 +133,8 @@ class ViewTest extends \PHPUnit_Framework_TestCase
                 'request' => $this->requestMock,
                 'objectManager' => $this->objectManagerMock,
                 'actionFlag' => $this->actionFlagMock,
-                'messageManager' => $this->messageManagerMock
+                'messageManager' => $this->messageManagerMock,
+                'resultRedirectFactory' => $this->resultRedirectFactoryMock
             ]
         );
         $this->viewAction = $objectManager->getObject(
@@ -198,33 +199,6 @@ class ViewTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    /**
-     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
-     */
-    public function testExecuteException()
-    {
-        $id = 111;
-        $message = 'epic fail';
-        $exception = new \Magento\Framework\App\Action\Exception($message);
-        $this->initOrder();
-        $this->initOrderSuccess($id);
-        $this->prepareRedirect();
-
-        $this->resultPageFactoryMock->expects($this->once())
-            ->method('create')
-            ->willThrowException($exception);
-        $this->messageManagerMock->expects($this->once())
-            ->method('addError')
-            ->with($message)
-            ->willReturnSelf();
-        $this->setPath('sales/order/index');
-
-        $this->assertInstanceOf(
-            'Magento\Backend\Model\View\Result\Redirect',
-            $this->viewAction->execute()
-        );
-    }
-
     /**
      * @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
      */
diff --git a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/EmailSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/EmailSenderTest.php
index 6910282d040a994ae752456f70296d1bfd912f74..356317fa00d3815339a388bdfeff8c681d517170 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/EmailSenderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/EmailSenderTest.php
@@ -79,7 +79,7 @@ class EmailSenderTest extends \PHPUnit_Framework_TestCase
     {
         $this->orderSenderMock->expects($this->once())
             ->method('send')
-            ->will($this->throwException(new \Magento\Framework\Mail\Exception('test message')));
+            ->willThrowException(new \Magento\Framework\Exception\MailException(__('test message')));
         $this->messageManagerMock->expects($this->once())
             ->method('addWarning');
         $this->loggerMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Config/Backend/Grid/AsyncIndexingTest.php b/app/code/Magento/Sales/Test/Unit/Model/Config/Backend/Grid/AsyncIndexingTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..972cfae38e2ae4273235a2c7a7d1ac260b4f45a3
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Model/Config/Backend/Grid/AsyncIndexingTest.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Test\Unit\Model\Config\Backend\Grid;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+/**
+ * Unit test of backend model for global configuration value
+ * 'dev/grid/async_indexing'.
+ */
+class AsyncIndexingTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Model\Config\Backend\Grid\AsyncIndexing
+     */
+    protected $object;
+
+    /**
+     * @var \Magento\Framework\App\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $config;
+
+    /**
+     * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Framework\Event\Manager\Proxy|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $eventManager;
+
+    protected function setUp()
+    {
+        $objectManager = new ObjectManager($this);
+
+        $this->config = $this->getMock('Magento\Framework\App\Config', [], [], '', false);
+
+        $this->eventManager = $this->getMock('Magento\Framework\Event\Manager\Proxy', [], [], '', false);
+
+        $this->context = $this->getMock('Magento\Framework\Model\Context', ['getEventDispatcher'], [], '', false);
+        $this->context->expects($this->any())->method('getEventDispatcher')->willReturn($this->eventManager);
+
+        $this->object = $objectManager->getObject(
+            '\Magento\Sales\Model\Config\Backend\Grid\AsyncIndexing',
+            [
+                'config' => $this->config,
+                'context' => $this->context
+            ]
+        );
+    }
+
+    /**
+     * @param int $value
+     * @param int $oldValue
+     * @param string $eventName
+     * @dataProvider testAfterSaveDataProvider
+     * @return void
+     */
+    public function testAfterSave($value, $oldValue, $eventName)
+    {
+        $path = 'dev/grid/async_indexing';
+        $scope = \Magento\Framework\App\ScopeInterface::SCOPE_DEFAULT;
+
+        $this->object->setData(['value' => $value, 'path' => $path, 'scope' => $scope]);
+
+        $this->config->expects($this->once())->method('getValue')->with($path, $scope)->willReturn($oldValue);
+
+        if ($value == $oldValue) {
+            $this->eventManager->expects($this->never())->method('dispatch');
+        } else {
+            $this->eventManager->expects($this->once())->method('dispatch')->with($eventName);
+        }
+
+        $this->object->afterSave();
+    }
+
+    /**
+     * @return array
+     */
+    public function testAfterSaveDataProvider()
+    {
+        return [
+            [0, 0, null],
+            [1, 1, null],
+            [0, 1, 'config_data_dev_grid_async_indexing_disabled'],
+            [1, 0, 'config_data_dev_grid_async_indexing_enabled']
+        ];
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php
index 41f77cdf509d1c6360df90b33a43b30c840a0e46..ebffcd4ad781c98b65311e346245278eb1afe5eb 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Test\Unit\Model\Order;
 
 use \Magento\Sales\Model\Order\CreditmemoNotifier;
 
-use Magento\Framework\Mail\Exception;
+use Magento\Framework\Exception\MailException;
 use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
 
 /**
@@ -130,7 +130,7 @@ class CreditmemoNotifierTest extends \PHPUnit_Framework_TestCase
      */
     public function testNotifyException()
     {
-        $exception = new Exception('Email has not been sent');
+        $exception = new MailException(__('Email has not been sent'));
         $this->creditmemoSenderMock->expects($this->once())
             ->method('send')
             ->with($this->equalTo($this->creditmemo))
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php
index 1920800487b6a39ce628d20e54784b4f94acc088..214eb992d17233be956b12e9401ef544e2711c6a 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Test\Unit\Model\Order;
 
 use \Magento\Sales\Model\Order\InvoiceNotifier;
 
-use Magento\Framework\Mail\Exception;
+use Magento\Framework\Exception\MailException;
 use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
 
 /**
@@ -130,7 +130,7 @@ class InvoiceNotifierTest extends \PHPUnit_Framework_TestCase
      */
     public function testNotifyException()
     {
-        $exception = new Exception('Email has not been sent');
+        $exception = new MailException(__('Email has not been sent'));
         $this->invoiceSenderMock->expects($this->once())
             ->method('send')
             ->with($this->equalTo($this->invoice))
diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php
index 907a4ee588ba0b483f2848bb937bda0f66adb713..53cd9bf2d2e15c08b8a65caf29b5bc3fe9a9469a 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Test\Unit\Model;
 
 use \Magento\Sales\Model\OrderNotifier;
 
-use Magento\Framework\Mail\Exception;
+use Magento\Framework\Exception\MailException;
 use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
 
 /**
@@ -130,7 +130,7 @@ class OrderNotifierTest extends \PHPUnit_Framework_TestCase
      */
     public function testNotifyException()
     {
-        $exception = new Exception('Email has not been sent');
+        $exception = new MailException(__('Email has not been sent'));
         $this->orderSenderMock->expects($this->once())
             ->method('send')
             ->with($this->equalTo($this->order))
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php
index 58b073f18f682315c63f326e7e8b467a6bcb5b8b..6819c63725246e283b3ed876a3695d00384e45d2 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php
@@ -39,10 +39,6 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      * @var \Magento\Sales\Model\Increment|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $salesIncrementMock;
-    /**
-     * @var \Magento\Sales\Model\Resource\Order\Grid|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $gridAggregatorMock;
     /**
      * @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -96,7 +92,6 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         );
         $this->stateHandlerMock = $this->getMock('Magento\Sales\Model\Resource\Order\Handler\State', [], [], '', false);
         $this->salesIncrementMock = $this->getMock('Magento\Sales\Model\Increment', [], [], '', false);
-        $this->gridAggregatorMock = $this->getMock('Magento\Sales\Model\Resource\Order\Grid', [], [], '', false);
         $this->orderMock = $this->getMock(
             'Magento\Sales\Model\Order',
             [],
@@ -154,8 +149,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
             $this->attributeMock,
             $this->salesIncrementMock,
             $this->addressHandlerMock,
-            $this->stateHandlerMock,
-            $this->gridAggregatorMock
+            $this->stateHandlerMock
         );
     }
 
diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json
index 465eb57a56a4b961e16b9fdd415b4b6365bf7339..31b8dbf81c00ce7e59155bcdfb5e8a1bf8edef0e 100644
--- a/app/code/Magento/Sales/composer.json
+++ b/app/code/Magento/Sales/composer.json
@@ -3,34 +3,34 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-authorization": "0.42.0-beta11",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-sales-rule": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-gift-message": "0.42.0-beta11",
-        "magento/module-reports": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-wishlist": "0.42.0-beta11",
-        "magento/module-email": "0.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-authorization": "0.74.0-beta2",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-sales-rule": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-gift-message": "0.74.0-beta2",
+        "magento/module-reports": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-wishlist": "0.74.0-beta2",
+        "magento/module-email": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sales/etc/adminhtml/system.xml b/app/code/Magento/Sales/etc/adminhtml/system.xml
index d15118237917ade6b7c382a043f2f9941bb02af3..e7482704e39adc243e781283034f20f391152eb0 100644
--- a/app/code/Magento/Sales/etc/adminhtml/system.xml
+++ b/app/code/Magento/Sales/etc/adminhtml/system.xml
@@ -371,5 +371,15 @@
                 </field>
             </group>
         </section>
+        <section id="dev">
+            <group id="grid" type="text" sortOrder="131" showInDefault="1" showInWebsite="0" showInStore="0">
+                <label>Grid Settings</label>
+                <field id="async_indexing" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
+                    <label>Asynchronous indexing</label>
+                    <source_model>Magento\Config\Model\Config\Source\Enabledisable</source_model>
+                    <backend_model>Magento\Sales\Model\Config\Backend\Grid\AsyncIndexing</backend_model>
+                </field>
+            </group>
+        </section>
     </system>
 </config>
diff --git a/app/code/Magento/Sales/etc/config.xml b/app/code/Magento/Sales/etc/config.xml
index 2d42f963e6965decc5159ed82becc3fec22d25d2..f88cf2955f60ed8f3db411ad7f4f49b37b87dc51 100644
--- a/app/code/Magento/Sales/etc/config.xml
+++ b/app/code/Magento/Sales/etc/config.xml
@@ -94,5 +94,10 @@
         <dashboard>
             <use_aggregated_data>0</use_aggregated_data>
         </dashboard>
+        <dev>
+            <grid>
+                <async_indexing>0</async_indexing>
+            </grid>
+        </dev>
     </default>
 </config>
diff --git a/app/code/Magento/Sales/etc/crontab.xml b/app/code/Magento/Sales/etc/crontab.xml
index 10e96dec3ab06c5877e9f44c14ed63ee0f17c9ca..1bd5b3e3e2478754784856b302a17ec3c2162470 100644
--- a/app/code/Magento/Sales/etc/crontab.xml
+++ b/app/code/Magento/Sales/etc/crontab.xml
@@ -25,5 +25,17 @@
         <job name="aggregate_sales_report_bestsellers_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData" method="execute">
             <schedule>0 0 * * *</schedule>
         </job>
+        <job name="sales_grid_order_async_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="asyncInsert">
+            <schedule>*/1 * * * *</schedule>
+        </job>
+        <job name="sales_grid_order_invoice_async_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="asyncInsert">
+            <schedule>*/1 * * * *</schedule>
+        </job>
+        <job name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert">
+            <schedule>*/1 * * * *</schedule>
+        </job>
+        <job name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert">
+            <schedule>*/1 * * * *</schedule>
+        </job>
     </group>
 </config>
diff --git a/app/code/Magento/Sales/etc/di.xml b/app/code/Magento/Sales/etc/di.xml
index ce41a5bd24663c3567f11a32c61f29db2425bfd9..b30edfeb3afc1280ce7cc77f844c982b51110c10 100644
--- a/app/code/Magento/Sales/etc/di.xml
+++ b/app/code/Magento/Sales/etc/di.xml
@@ -137,4 +137,24 @@
             </argument>
         </arguments>
     </type>
+    <virtualType name="Magento\Sales\Model\Observer\Order\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\Resource\Order\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\Resource\Order\Invoice\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\Resource\Order\Shipment\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\Resource\Order\Creditmemo\Grid</argument>
+        </arguments>
+    </virtualType>
 </config>
diff --git a/app/code/Magento/Sales/etc/events.xml b/app/code/Magento/Sales/etc/events.xml
index a4105518a48dedf01bcee2e42ee0be3d54dc7e49..7829d98ef926c6c14de526616d7ca5213d61827a 100644
--- a/app/code/Magento/Sales/etc/events.xml
+++ b/app/code/Magento/Sales/etc/events.xml
@@ -9,4 +9,34 @@
     <event name="sales_order_place_after">
         <observer name="sales_vat_request_params_order_comment" instance="Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment" method="execute" />
     </event>
+    <event name="sales_order_save_after">
+        <observer name="sales_grid_order_sync_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="syncInsert" />
+    </event>
+    <event name="sales_order_invoice_save_after">
+        <observer name="sales_grid_order_invoice_sync_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="syncInsert" />
+    </event>
+    <event name="sales_order_shipment_save_after">
+        <observer name="sales_grid_order_shipment_sync_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="syncInsert" />
+    </event>
+    <event name="sales_order_creditmemo_save_after">
+        <observer name="sales_grid_order_creditmemo_sync_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="syncInsert" />
+    </event>
+    <event name="sales_order_delete_after">
+        <observer name="sales_grid_order_sync_remove" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="syncRemove" />
+    </event>
+    <event name="sales_order_invoice_delete_after">
+        <observer name="sales_grid_order_invoice_sync_remove" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="syncRemove" />
+    </event>
+    <event name="sales_order_shipment_delete_after">
+        <observer name="sales_grid_order_shipment_sync_remove" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="syncRemove" />
+    </event>
+    <event name="sales_order_creditmemo_delete_after">
+        <observer name="sales_grid_order_creditmemo_sync_remove" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="syncRemove" />
+    </event>
+    <event name="config_data_dev_grid_async_indexing_disabled">
+        <observer name="sales_grid_order_async_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="asyncInsert" />
+        <observer name="sales_grid_order_invoice_async_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="asyncInsert" />
+        <observer name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert" />
+        <observer name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert" />
+    </event>
 </config>
diff --git a/app/code/Magento/Sales/etc/module.xml b/app/code/Magento/Sales/etc/module.xml
index 54f554e7e038cdd9b8d28c791b8273376e1bbf48..90aa0777f18f1719f61c05970857a20669d7163b 100644
--- a/app/code/Magento/Sales/etc/module.xml
+++ b/app/code/Magento/Sales/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
-    <module name="Magento_Sales" setup_version="2.0.1">
+    <module name="Magento_Sales" setup_version="2.0.2">
         <sequence>
             <module name="Magento_Rule"/>
             <module name="Magento_Catalog"/>
diff --git a/app/code/Magento/Sales/view/adminhtml/templates/order/address/form.phtml b/app/code/Magento/Sales/view/adminhtml/templates/order/address/form.phtml
index 1a4008b367a0a185a321a2366c30aa9f079cc787..4c678d854c911d0768b9d7930e65d741cdfe7771 100644
--- a/app/code/Magento/Sales/view/adminhtml/templates/order/address/form.phtml
+++ b/app/code/Magento/Sales/view/adminhtml/templates/order/address/form.phtml
@@ -7,11 +7,9 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="admin__scope">
-    <div class="message message-notice">
-        <div class="message-inner">
-            <div class="message-content"><?php echo __('Changing address information will not recalculate shipping, tax or other order amount.') ?></div>
-        </div>
+<div class="message message-notice">
+    <div class="message-inner">
+        <div class="message-content"><?php echo __('Changing address information will not recalculate shipping, tax or other order amount.') ?></div>
     </div>
 </div>
 
diff --git a/app/code/Magento/Sales/view/adminhtml/templates/order/create/giftmessage.phtml b/app/code/Magento/Sales/view/adminhtml/templates/order/create/giftmessage.phtml
index 44b97e5d55ea6a7ffcd17a97a5e25ffd05cfc083..846caa0fd3951dd5d83be7d148a8ca942d1fd3ae 100644
--- a/app/code/Magento/Sales/view/adminhtml/templates/order/create/giftmessage.phtml
+++ b/app/code/Magento/Sales/view/adminhtml/templates/order/create/giftmessage.phtml
@@ -7,13 +7,13 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('main', $block->getQuote(), $block->getStoreId())): ?>
+<?php if ($this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('main', $block->getQuote(), $block->getStoreId())): ?>
 <?php $_items = $block->getItems(); ?>
 <div id="order-giftmessage" class="giftmessage-order-create box-left">
     <fieldset>
         <legend><?php echo __('Gift Message for the Entire Order') ?></legend>
         <br />
-        <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('main', $block->getQuote(), $block->getStoreId())): ?>
+        <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('main', $block->getQuote(), $block->getStoreId())): ?>
             <div class="giftmessage-entire-order">
                 <p><?php echo __('If you don\'t want to leave a gift message for the entire order, leave this box blank.') ?></p>
                 <?php echo $block->getFormHtml($block->getQuote(), 'main') ?>
diff --git a/app/code/Magento/Sales/view/adminhtml/templates/order/create/shipping/method/form.phtml b/app/code/Magento/Sales/view/adminhtml/templates/order/create/shipping/method/form.phtml
index 4b552dfa576a3575f71e04c75f4c8afc195548bb..5265ef94e56b2fec5ab4b2d83d38b525b99aa650 100644
--- a/app/code/Magento/Sales/view/adminhtml/templates/order/create/shipping/method/form.phtml
+++ b/app/code/Magento/Sales/view/adminhtml/templates/order/create/shipping/method/form.phtml
@@ -21,11 +21,9 @@
                 <?php $_code = $_rate->getCode() ?>
                 <li>
                    <?php if ($_rate->getErrorMessage()): ?>
-                       <div class="admin__scope">
-                           <div class="messages">
-                               <div class="message message-error error">
-                                   <div><?php echo $block->escapeHtml($_rate->getErrorMessage()) ?></div>
-                               </div>
+                       <div class="messages">
+                           <div class="message message-error error">
+                               <div><?php echo $block->escapeHtml($_rate->getErrorMessage()) ?></div>
                            </div>
                        </div>
                    <?php else: ?>
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index 1e53404f422e4a17de5bf3a45e9cb484379f83bb..2ba401a017ebe574235f18ac4f8f45adef712d1d 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -668,6 +668,7 @@ AdminOrder.prototype = {
         if (confirm(confirmMessage)) {
             this.collectElementsValue = false;
             order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
+            this.collectElementsValue = true;
         }
     },
 
diff --git a/app/code/Magento/Sales/view/frontend/templates/email/items.phtml b/app/code/Magento/Sales/view/frontend/templates/email/items.phtml
index 2f57c23485c3d0ab4b97dd809315683c921f51cb..b8a15bcbb3707819001b5ab6016a5ba635b3dbe7 100644
--- a/app/code/Magento/Sales/view/frontend/templates/email/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/email/items.phtml
@@ -34,7 +34,7 @@
         <?php echo $block->getChildHtml('order_totals') ?>
     </tbody>
 </table>
-<?php if ($this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAvailable('order', $_order, $_order->getStore()) && $_order->getGiftMessageId()): ?>
+<?php if ($this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order', $_order, $_order->getStore()) && $_order->getGiftMessageId()): ?>
     <?php $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessage($_order->getGiftMessageId()); ?>
     <?php if ($_giftMessage): ?>
 <br />
diff --git a/app/code/Magento/Sales/view/frontend/templates/order/items.phtml b/app/code/Magento/Sales/view/frontend/templates/order/items.phtml
index 166366a05d870573701a66f9951aa656bc4c4a8e..f5c27e01af6f791aa3c0cfb267142cc1441a8776 100644
--- a/app/code/Magento/Sales/view/frontend/templates/order/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/order/items.phtml
@@ -31,7 +31,7 @@
 } ?>
             <tbody>
                 <?php echo $block->getItemHtml($_item) ?>
-                <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?>
+                <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $_item) && $_item->getGiftMessageId()): ?>
                     <?php $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessageForEntity($_item); ?>
                     <tr>
                         <td class="col options" colspan="5">
diff --git a/app/code/Magento/Sales/view/frontend/templates/order/view.phtml b/app/code/Magento/Sales/view/frontend/templates/order/view.phtml
index 1106464712cfa2fbe9c9baf2cd684411c4682e76..64b84dacb490f9d1206af264e370052d3241c2c2 100644
--- a/app/code/Magento/Sales/view/frontend/templates/order/view.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/order/view.phtml
@@ -20,7 +20,7 @@
 
     <?php echo $block->getChildHtml('order_items') ?>
 
-    <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order', $_order) && $_order->getGiftMessageId()): ?>
+    <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order', $_order) && $_order->getGiftMessageId()): ?>
     <div class="block block-order-details-gift-message">
         <div class="block-title"><strong><?php echo __('Gift Message for This Order') ?></strong></div>
         <?php $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessageForEntity($_order); ?>
diff --git a/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php b/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php
index c0e0d6e522797fce7146788f4c2055a407554ba8..911086d9db032ca919b855b8d12fd1fa361c4bf1 100644
--- a/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php
+++ b/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php
@@ -265,7 +265,6 @@ class Main extends Generic implements TabInterface
                 'name' => 'from_date',
                 'label' => __('From Date'),
                 'title' => __('From Date'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'input_format' => \Magento\Framework\Stdlib\DateTime::DATE_INTERNAL_FORMAT,
                 'date_format' => $dateFormat
             ]
@@ -277,7 +276,6 @@ class Main extends Generic implements TabInterface
                 'name' => 'to_date',
                 'label' => __('To Date'),
                 'title' => __('To Date'),
-                'image' => $this->getViewFileUrl('images/grid-cal.png'),
                 'input_format' => \Magento\Framework\Stdlib\DateTime::DATE_INTERNAL_FORMAT,
                 'date_format' => $dateFormat
             ]
diff --git a/app/code/Magento/SalesRule/Exception.php b/app/code/Magento/SalesRule/Exception.php
deleted file mode 100644
index 1332875e9513a508beeea56de0154aad2a6b8047..0000000000000000000000000000000000000000
--- a/app/code/Magento/SalesRule/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\SalesRule;
-
-class Exception extends \Zend_Exception
-{
-}
diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php b/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php
index 96883618eeabdb6c71da9d0d444aff5d6d15f029..8fa981c6bee286253548a3dc7e55f75c74d0a8ba 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php
+++ b/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php
@@ -170,7 +170,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
         }
 
         if (!empty($rulesFilterSqlParts)) {
-            $this->getSelect()->where(implode($rulesFilterSqlParts, ' OR '));
+            $this->getSelect()->where(implode(' OR ', $rulesFilterSqlParts));
         }
         return $this;
     }
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/CartFixedTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/CartFixedTest.php
index 2d91015cfcdb62848486ff502ae6c6771286a091..d01b7c2cdcea0cc05721cc401512f290719caa2b 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/CartFixedTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/Discount/CartFixedTest.php
@@ -74,11 +74,15 @@ class CartFixedTest extends \PHPUnit_Framework_TestCase
         );
         $dataFactory->expects($this->any())->method('create')->will($this->returnValue($this->data));
         $this->priceCurrency = $this->getMockBuilder('Magento\Framework\Pricing\PriceCurrencyInterface')->getMock();
-        $this->model = new \Magento\SalesRule\Model\Rule\Action\Discount\CartFixed($this->validator, $dataFactory, $this->priceCurrency);
+        $this->model = new \Magento\SalesRule\Model\Rule\Action\Discount\CartFixed(
+            $this->validator,
+            $dataFactory,
+            $this->priceCurrency
+        );
     }
 
     /**
-     * covers \Magento\SalesRule\Model\Rule\Action\Discount\CartFixed::calculate
+     * @covers \Magento\SalesRule\Model\Rule\Action\Discount\CartFixed::calculate
      */
     public function testCalculate()
     {
diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json
index 0ffa29cf56722aab51fffb2e2809d2e8af908eb2..e51f138d4a36c70bcfdda1c4bc5f7575a53c9bfb 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-rule": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/module-reports": "0.42.0-beta11",
-        "magento/module-catalog-rule": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-rule": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/module-reports": "0.74.0-beta2",
+        "magento/module-catalog-rule": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php
index 264a6381e153388529635211b411a2aad3131101..0649b87dc8cfe37e91be354a9d1ea7a72e1fc87b 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php
@@ -8,25 +8,6 @@ namespace Magento\Search\Controller\Adminhtml\Term;
 
 class Delete extends \Magento\Search\Controller\Adminhtml\Term
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $resultPageFactory);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php b/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php
index 6d473c2261d4e8c3b06db543c25e1ad94c8adb2a..535c0322f57a862fe1a6aa99003a6542ca58e41f 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php
@@ -8,25 +8,6 @@ namespace Magento\Search\Controller\Adminhtml\Term;
 
 class MassDelete extends \Magento\Search\Controller\Adminhtml\Term
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $resultPageFactory);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php
index a44592a5711831629febcedc5ad8fe8112cfdddf..cf503b4e612550124503e8cebd21fd52071b746c 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php
@@ -8,25 +8,6 @@ namespace Magento\Search\Controller\Adminhtml\Term;
 
 class Save extends \Magento\Search\Controller\Adminhtml\Term
 {
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
-    /**
-     * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-     */
-    public function __construct(
-        \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
-    ) {
-        parent::__construct($context, $resultPageFactory);
-        $this->resultRedirectFactory = $resultRedirectFactory;
-    }
-
     /**
      * Save search query
      *
diff --git a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php
index d72c283669650fcb643ea5d3bfa3e1695cfb118a..27fea3b5cd06d3ca4789d5b2334023337c39ba63 100644
--- a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php
+++ b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php
@@ -57,22 +57,6 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['addSuccess', 'addError'])
             ->getMockForAbstractClass();
-        $this->context = $this->getMockBuilder('Magento\Backend\App\Action\Context')
-            ->setMethods(['getRequest', 'getResponse', 'getObjectManager', 'getMessageManager'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->context->expects($this->atLeastOnce())
-            ->method('getRequest')
-            ->will($this->returnValue($this->request));
-        $this->context->expects($this->atLeastOnce())
-            ->method('getResponse')
-            ->will($this->returnValue($this->response));
-        $this->context->expects($this->any())
-            ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManager));
-        $this->context->expects($this->any())
-            ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManager));
         $this->pageFactory = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory')
             ->setMethods([])
             ->disableOriginalConstructor()
@@ -88,13 +72,31 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
         $this->redirectFactory->expects($this->any())
             ->method('create')
             ->will($this->returnValue($this->redirect));
+        $this->context = $this->getMockBuilder('Magento\Backend\App\Action\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->atLeastOnce())
+            ->method('getRequest')
+            ->willReturn($this->request);
+        $this->context->expects($this->atLeastOnce())
+            ->method('getResponse')
+            ->willReturn($this->response);
+        $this->context->expects($this->any())
+            ->method('getObjectManager')
+            ->willReturn($this->objectManager);
+        $this->context->expects($this->any())
+            ->method('getMessageManager')
+            ->willReturn($this->messageManager);
+        $this->context->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->redirectFactory);
+
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->controller = $this->objectManagerHelper->getObject(
             'Magento\Search\Controller\Adminhtml\Term\MassDelete',
             [
                 'context' => $this->context,
                 'resultPageFactory' => $this->pageFactory,
-                'resultRedirectFactory' => $this->redirectFactory
             ]
         );
     }
diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json
index 86fa6587ca018261a4b044ace8c47f182d7b1cd8..04db045d1fd36024eacc4f9f8d3abc4cfc815682 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog-search": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-reports": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog-search": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-reports": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sendfriend/Controller/Product.php b/app/code/Magento/Sendfriend/Controller/Product.php
index 1bb9f0ca10658763be7b0beae625ece1f59a25e8..9a9677d2e54c34b0345e1dd7a92108dbe92f68e5 100644
--- a/app/code/Magento/Sendfriend/Controller/Product.php
+++ b/app/code/Magento/Sendfriend/Controller/Product.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sendfriend\Controller;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\RequestInterface;
 use Magento\Framework\Exception\NoSuchEntityException;
 
@@ -63,7 +63,7 @@ class Product extends \Magento\Framework\App\Action\Action
      *
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
-     * @throws \Magento\Framework\App\Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
      */
     public function dispatch(RequestInterface $request)
     {
@@ -73,7 +73,7 @@ class Product extends \Magento\Framework\App\Action\Action
         $session = $this->_objectManager->get('Magento\Customer\Model\Session');
 
         if (!$helper->isEnabled()) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         if (!$helper->isAllowForGuest() && !$session->authenticate($this)) {
diff --git a/app/code/Magento/Sendfriend/composer.json b/app/code/Magento/Sendfriend/composer.json
index d21e58d9379cc82c66c8aedf50fe91b493192c65..17f3ff0c27f3cdb4208d4fc6bcfe9e97b57a2a68 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php
index 8e8662624c7776b8c7878fd32779b9f25880efd2..70310d404c6fa4273b42a117d9d705fd0fd2d9e2 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php
@@ -8,6 +8,7 @@ namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment;
 
 use Magento\Sales\Model\Order\Email\Sender\ShipmentSender;
 use Magento\Backend\App\Action;
+use Magento\Framework\View\Result\LayoutFactory;
 
 class AddComment extends \Magento\Backend\App\Action
 {
@@ -21,18 +22,26 @@ class AddComment extends \Magento\Backend\App\Action
      */
     protected $shipmentSender;
 
+    /**
+     * @var LayoutFactory
+     */
+    protected $resultLayoutFactory;
+
     /**
      * @param Action\Context $context
      * @param \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader
      * @param ShipmentSender $shipmentSender
+     * @param LayoutFactory $resultLayoutFactory
      */
     public function __construct(
         Action\Context $context,
         \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader,
-        ShipmentSender $shipmentSender
+        ShipmentSender $shipmentSender,
+        LayoutFactory $resultLayoutFactory
     ) {
         $this->shipmentLoader = $shipmentLoader;
         $this->shipmentSender = $shipmentSender;
+        $this->resultLayoutFactory = $resultLayoutFactory;
         parent::__construct($context);
     }
 
@@ -72,10 +81,9 @@ class AddComment extends \Magento\Backend\App\Action
 
             $this->shipmentSender->send($shipment, !empty($data['is_customer_notified']), $data['comment']);
             $shipment->save();
-
-            $this->_view->loadLayout(false);
-            $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Shipments'));
-            $response = $this->_view->getLayout()->getBlock('shipment_comments')->toHtml();
+            $resultLayout = $this->resultLayoutFactory->create();
+            $resultLayout->addDefaultHandle();
+            $response = $resultLayout->getLayout()->getBlock('shipment_comments')->toHtml();
         } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $response = ['error' => true, 'message' => $e->getMessage()];
         } catch (\Exception $e) {
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php
old mode 100644
new mode 100755
index 850a8ac25c7e28ab7add7f41524cc692fc69386d..5f30722a08c906e5761723a95f286f3cd77d99ea
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php
@@ -45,27 +45,32 @@ class Email extends \Magento\Backend\App\Action
     /**
      * Send email with shipment data to customer
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
      */
     public function execute()
     {
-        try {
-            $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
-            $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
-            $this->shipmentLoader->setShipment($this->getRequest()->getParam('shipment'));
-            $this->shipmentLoader->setTracking($this->getRequest()->getParam('tracking'));
-            $shipment = $this->shipmentLoader->load();
-            if ($shipment) {
-                $this->_objectManager->create('Magento\Shipping\Model\ShipmentNotifier')
-                    ->notify($shipment);
-                $shipment->save();
-                $this->messageManager->addSuccess(__('You sent the shipment.'));
-            }
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('Cannot send shipment information.'));
+        $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
+        $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
+        $this->shipmentLoader->setShipment($this->getRequest()->getParam('shipment'));
+        $this->shipmentLoader->setTracking($this->getRequest()->getParam('tracking'));
+        $shipment = $this->shipmentLoader->load();
+        if ($shipment) {
+            $this->_objectManager->create('Magento\Shipping\Model\ShipmentNotifier')
+                ->notify($shipment);
+            $shipment->save();
+            $this->messageManager->addSuccess(__('You sent the shipment.'));
         }
-        $this->_redirect('*/*/view', ['shipment_id' => $this->getRequest()->getParam('shipment_id')]);
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('*/*/view', ['shipment_id' => $this->getRequest()->getParam('shipment_id')]);
     }
 }
diff --git a/app/code/Magento/Shipping/Controller/Tracking/Popup.php b/app/code/Magento/Shipping/Controller/Tracking/Popup.php
index d9ecbcd583b3e2a452fc306e3af9e673c580f5a5..9ae7590bdb44429914809f6cb387274b3ae22a18 100644
--- a/app/code/Magento/Shipping/Controller/Tracking/Popup.php
+++ b/app/code/Magento/Shipping/Controller/Tracking/Popup.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Shipping\Controller\Tracking;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 
 class Popup extends \Magento\Framework\App\Action\Action
 {
@@ -57,7 +57,7 @@ class Popup extends \Magento\Framework\App\Action\Action
         $shippingInfoModel = $this->_shippingInfoFactory->create()->loadByHash($this->getRequest()->getParam('hash'));
         $this->_coreRegistry->register('current_shipping_info', $shippingInfoModel);
         if (count($shippingInfoModel->getTrackingInfo()) == 0) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         $this->_view->loadLayout();
         $this->_view->getPage()->getConfig()->getTitle()->set(__('Tracking Information'));
diff --git a/app/code/Magento/Shipping/Exception.php b/app/code/Magento/Shipping/Exception.php
old mode 100644
new mode 100755
index 12fef333cd12a8898e5b0ab904a15374af1b62b3..b140b961cf6d2bdf50fbc78e600517b55b8d3211
--- a/app/code/Magento/Shipping/Exception.php
+++ b/app/code/Magento/Shipping/Exception.php
@@ -5,6 +5,6 @@
  */
 namespace Magento\Shipping;
 
-class Exception extends \Zend_Exception
+class Exception extends \Magento\Framework\Exception\LocalizedException
 {
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php
index 80749ec0001723fc287a435a806f6988324e331b..4bc12ca36516585e31b7e146693ef2641dcbe5b7 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php
@@ -30,21 +30,11 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $responseMock;
 
-    /**
-     * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $titleMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resultPageMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $pageConfigMock;
-
     /**
      * @var \Magento\Sales\Model\Order\Shipment|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -55,6 +45,11 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $viewInterfaceMock;
 
+    /**
+     * @var \Magento\Framework\View\Result\LayoutFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultLayoutFactoryMock;
+
     /**
      * @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -95,9 +90,9 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->titleMock = $this->getMock(
-            'Magento\Framework\View\Page\Title',
-            ['prepend', '__wakeup'],
+        $this->resultLayoutFactoryMock = $this->getMock(
+            'Magento\Framework\View\Result\LayoutFactory',
+            ['create'],
             [],
             '',
             false
@@ -106,9 +101,6 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $this->resultPageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->pageConfigMock = $this->getMockBuilder('Magento\Framework\View\Page\Config')
-            ->disableOriginalConstructor()
-            ->getMock();
 
         $this->shipmentMock = $this->getMock(
             'Magento\Sales\Model\Order\Shipment',
@@ -136,15 +128,9 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $this->viewInterfaceMock->expects($this->any())->method('getPage')->will(
             $this->returnValue($this->resultPageMock)
         );
-        $this->resultPageMock->expects($this->any())->method('getConfig')->will(
-            $this->returnValue($this->pageConfigMock)
-        );
-
-        $this->pageConfigMock->expects($this->any())->method('getTitle')->will($this->returnValue($this->titleMock));
 
         $contextMock->expects($this->any())->method('getRequest')->will($this->returnValue($this->requestMock));
         $contextMock->expects($this->any())->method('getResponse')->will($this->returnValue($this->responseMock));
-        $contextMock->expects($this->any())->method('getTitle')->will($this->returnValue($this->titleMock));
         $contextMock->expects($this->any())->method('getView')->will($this->returnValue($this->viewInterfaceMock));
         $contextMock->expects($this->any())
             ->method('getObjectManager')
@@ -153,7 +139,8 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $this->controller = new \Magento\Shipping\Controller\Adminhtml\Order\Shipment\AddComment(
             $contextMock,
             $this->shipmentLoaderMock,
-            $this->shipmentSenderMock
+            $this->shipmentSenderMock,
+            $this->resultLayoutFactoryMock
         );
     }
 
@@ -189,15 +176,19 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $shipment = [];
         $tracking = [];
 
-        $layoutMock = $this->getMock('Magento\Framework\View\Layout', ['getBlock'], [], '', false);
-        $blockMock = $this->getMock('Magento\Shipping\Block\Adminhtml\View\Comments', ['toHtml'], [], '', false);
+        $resultLayoutMock = $this->getMock(
+            'Magento\Framework\View\Result\Layout',
+            ['getBlock', 'getDefaultLayoutHandle', 'addDefaultHandle', 'getLayout'],
+            [],
+            '',
+            false
+        );
 
         $this->requestMock->expects($this->once())->method('setParam')->with('shipment_id', $shipmentId);
         $this->requestMock->expects($this->once())
             ->method('getPost')
             ->with('comment')
             ->will($this->returnValue($data));
-        $this->titleMock->expects($this->once())->method('prepend');
         $this->requestMock->expects($this->any())
             ->method('getParam')
             ->will(
@@ -221,10 +212,15 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $this->shipmentMock->expects($this->once())->method('addComment');
         $this->shipmentSenderMock->expects($this->once())->method('send');
         $this->shipmentMock->expects($this->once())->method('save');
-        $this->viewInterfaceMock->expects($this->once())->method('loadLayout')->with(false);
-        $this->viewInterfaceMock->expects($this->once())->method('getLayout')->will($this->returnValue($layoutMock));
-        $layoutMock->expects($this->once())->method('getBlock')->will($this->returnValue($blockMock));
-        $blockMock->expects($this->once())->method('toHtml')->will($this->returnValue($result));
+        $layoutMock = $this->getMock('Magento\Framework\View\Layout', ['getBlock'], [], '', false);
+        $blockMock = $this->getMock('Magento\Shipping\Block\Adminhtml\View\Comments', ['toHtml'], [], '', false);
+        $blockMock->expects($this->once())->method('toHtml')->willReturn($result);
+        $layoutMock->expects($this->once())->method('getBlock')
+            ->with('shipment_comments')->willReturn($blockMock);
+        $resultLayoutMock->expects($this->once())->method('getLayout')->willReturn($layoutMock);
+        $resultLayoutMock->expects($this->once())->method('addDefaultHandle');
+        $this->resultLayoutFactoryMock->expects($this->once())->method('create')
+            ->will($this->returnValue($resultLayoutMock));
         $this->responseMock->expects($this->once())->method('setBody')->with($result);
 
         $this->assertNull($this->controller->execute());
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php
old mode 100644
new mode 100755
index 9f73339f8cdab8a679f52768a9d98f61043288ac..48ff3dd325790a61fe18e16f11a0cd23e3deaa63
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php
@@ -15,6 +15,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHe
  * Class EmailTest
  *
  * @package Magento\Shipping\Controller\Adminhtml\Order\Shipment
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class EmailTest extends \PHPUnit_Framework_TestCase
 {
@@ -63,6 +64,16 @@ class EmailTest extends \PHPUnit_Framework_TestCase
      */
     protected $helper;
 
+    /**
+     * @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirectFactory;
+
+    /**
+     * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirect;
+
     /**
      * @var \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -88,7 +99,8 @@ class EmailTest extends \PHPUnit_Framework_TestCase
                 'getObjectManager',
                 'getSession',
                 'getActionFlag',
-                'getHelper'
+                'getHelper',
+                'getResultRedirectFactory'
             ],
             [],
             '',
@@ -129,27 +141,27 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $this->session = $this->getMock('Magento\Backend\Model\Session', ['setIsUrlNotice'], [], '', false);
         $this->actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', ['get'], [], '', false);
         $this->helper = $this->getMock('\Magento\Backend\Helper\Data', ['getUrl'], [], '', false);
+        $this->resultRedirect = $this->getMock('Magento\Backend\Model\View\Result\Redirect', [], [], '', false);
+        $this->resultRedirectFactory = $this->getMock(
+            'Magento\Backend\Model\View\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $this->resultRedirectFactory->expects($this->once())->method('create')->willReturn($this->resultRedirect);
+
+        $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->once())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->once())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())->method('getSession')->willReturn($this->session);
+        $this->context->expects($this->once())->method('getActionFlag')->willReturn($this->actionFlag);
+        $this->context->expects($this->once())->method('getHelper')->willReturn($this->helper);
         $this->context->expects($this->once())
-            ->method('getMessageManager')
-            ->will($this->returnValue($this->messageManager));
-        $this->context->expects($this->once())
-            ->method('getRequest')
-            ->will($this->returnValue($this->request));
-        $this->context->expects($this->once())
-            ->method('getResponse')
-            ->will($this->returnValue($this->response));
-        $this->context->expects($this->once())
-            ->method('getObjectManager')
-            ->will($this->returnValue($this->objectManager));
-        $this->context->expects($this->once())
-            ->method('getSession')
-            ->will($this->returnValue($this->session));
-        $this->context->expects($this->once())
-            ->method('getActionFlag')
-            ->will($this->returnValue($this->actionFlag));
-        $this->context->expects($this->once())
-            ->method('getHelper')
-            ->will($this->returnValue($this->helper));
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->resultRedirectFactory);
+
         $this->shipmentEmail = $objectManagerHelper->getObject(
             'Magento\Shipping\Controller\Adminhtml\Order\Shipment\Email',
             [
@@ -240,14 +252,8 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $this->session->expects($this->any())
             ->method('setIsUrlNotice')
             ->with(true);
-
-        $url = $path . '/' . (!empty($arguments) ? $arguments['shipment_id'] : '');
-        $this->helper->expects($this->at($index))
-            ->method('getUrl')
-            ->with($path, $arguments)
-            ->will($this->returnValue($url));
-        $this->response->expects($this->at($index))
-            ->method('setRedirect')
-            ->with($url);
+        $this->resultRedirect->expects($this->at($index))
+            ->method('setPath')
+            ->with($path, ['shipment_id' => $arguments['shipment_id']]);
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php b/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php
index 8d23a6c29774b45d53ba792783b38c893b49bfb2..d6f5bd813bcb526b736e417ee8ebd6d71cc528d2 100644
--- a/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php
@@ -61,7 +61,7 @@ class AbstractCarrierOnlineTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Shipping\Model\Shipping::composePackagesForCarrier
+     * @covers \Magento\Shipping\Model\Shipping::composePackagesForCarrier
      */
     public function testComposePackages()
     {
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php b/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php
index 5d886942df8b32de00af60158359196093b5ad3a..254b84c536927339625d3eac444bc7ebaca8844a 100644
--- a/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php
@@ -8,7 +8,7 @@ namespace Magento\Shipping\Test\Unit\Model;
 
 use \Magento\Shipping\Model\ShipmentNotifier;
 
-use Magento\Framework\Mail\Exception;
+use Magento\Framework\Exception\MailException;
 use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
 
 /**
@@ -130,7 +130,7 @@ class ShipmentNotifierTest extends \PHPUnit_Framework_TestCase
      */
     public function testNotifyException()
     {
-        $exception = new Exception('Email has not been sent');
+        $exception = new MailException(__('Email has not been sent'));
         $this->shipmentSenderMock->expects($this->once())
             ->method('send')
             ->with($this->equalTo($this->shipment))
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/ShippingTest.php b/app/code/Magento/Shipping/Test/Unit/Model/ShippingTest.php
index 4fc368be080007d10b1288242efef8e16b485dc2..8c788228fbb5362c507a5ef72dcd2a728cbddf5c 100644
--- a/app/code/Magento/Shipping/Test/Unit/Model/ShippingTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Model/ShippingTest.php
@@ -64,7 +64,7 @@ class ShippingTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Shipping\Model\Shipping::composePackagesForCarrier
+     * @covers \Magento\Shipping\Model\Shipping::composePackagesForCarrier
      */
     public function testComposePackages()
     {
diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json
index 66635a57e11490fdb313c17fdb36376181e5787f..a20dd8cc86d23868eb2561b8d12302570fe0f54b 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-contact": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-payment": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-contact": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-payment": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "ext-gd": "*",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-fedex": "0.42.0-beta11",
-        "magento/module-ups": "0.42.0-beta11"
+        "magento/module-fedex": "0.74.0-beta2",
+        "magento/module-ups": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json
index fbbf4562d2ee614b21f2746865145e0133155cdf..8d0878ec176cf9f2e1430698ee9787e85d7c1b09 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.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog-url-rewrite": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php b/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php
index 048f66b3a145133ccfba8169ba58c5fd259df35a..6467df3faf3914e93988aed1c18c2e782e9e50d4 100644
--- a/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php
+++ b/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php
@@ -29,7 +29,7 @@ class StoreCheck
      *
      * @return \Magento\Framework\App\ResponseInterface
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     public function aroundDispatch(
         \Magento\Framework\App\Action\Action $subject,
@@ -37,8 +37,8 @@ class StoreCheck
         \Magento\Framework\App\RequestInterface $request
     ) {
         if (!$this->_storeManager->getStore()->getIsActive()) {
-            throw new \Magento\Framework\App\InitException(
-                'Current store is not active.'
+            throw new \Magento\Framework\Exception\State\InitException(
+                __('Current store is not active.')
             );
         }
         return $proceed($request);
diff --git a/app/code/Magento/Store/Model/Resolver/Store.php b/app/code/Magento/Store/Model/Resolver/Store.php
index 2acf0aedb21cbdc2dae145f6c9d9e1cd77a33322..6e9131fef50f093a6212da5b1faeb63c4cafc3ce 100644
--- a/app/code/Magento/Store/Model/Resolver/Store.php
+++ b/app/code/Magento/Store/Model/Resolver/Store.php
@@ -22,13 +22,13 @@ class Store implements \Magento\Framework\App\ScopeResolverInterface
 
     /**
      * {@inheritdoc}
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     public function getScope($scopeId = null)
     {
         $scope = $this->_storeManager->getStore($scopeId);
         if (!$scope instanceof \Magento\Framework\App\ScopeInterface) {
-            throw new \Magento\Framework\App\InitException('Invalid scope object');
+            throw new \Magento\Framework\Exception\State\InitException(__('Invalid scope object'));
         }
 
         return $scope;
diff --git a/app/code/Magento/Store/Model/Resolver/Website.php b/app/code/Magento/Store/Model/Resolver/Website.php
index cdfb825fc025c4609d8e7e668025ac6360438386..ef3c2eba7bef537293d6d5c9a3a0d69cd1aa2aa4 100644
--- a/app/code/Magento/Store/Model/Resolver/Website.php
+++ b/app/code/Magento/Store/Model/Resolver/Website.php
@@ -23,13 +23,13 @@ class Website implements \Magento\Framework\App\ScopeResolverInterface
 
     /**
      * {@inheritdoc}
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     public function getScope($scopeId = null)
     {
         $scope = $this->_storeManager->getWebsite($scopeId);
         if (!($scope instanceof \Magento\Framework\App\ScopeInterface)) {
-            throw new \Magento\Framework\App\InitException('Invalid scope object');
+            throw new \Magento\Framework\Exception\State\InitException(__('Invalid scope object'));
         }
 
         return $scope;
diff --git a/app/code/Magento/Store/Model/Storage/Db.php b/app/code/Magento/Store/Model/Storage/Db.php
index 77a22f6ca86b671c6c47523fd550251f5cb72f06..a6dd46ba85905edffcd373fe73d26e52c70f18cf 100644
--- a/app/code/Magento/Store/Model/Storage/Db.php
+++ b/app/code/Magento/Store/Model/Storage/Db.php
@@ -288,7 +288,7 @@ class Db implements \Magento\Store\Model\StoreManagerInterface
      *
      * @param null|string|bool|int|Store $storeId
      * @return Store
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
@@ -318,8 +318,8 @@ class Db implements \Magento\Store\Model\StoreManagerInterface
             }
 
             if (!$store->getCode()) {
-                throw new \Magento\Framework\App\InitException(
-                    'Store Manager has been initialized not properly'
+                throw new \Magento\Framework\Exception\State\InitException(
+                    __('Store Manager has been initialized not properly')
                 );
             }
             $this->_stores[$store->getStoreId()] = $store;
@@ -357,7 +357,7 @@ class Db implements \Magento\Store\Model\StoreManagerInterface
      *
      * @param null|bool|int|string|Website $websiteId
      * @return Website
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     public function getWebsite($websiteId = null)
     {
@@ -374,7 +374,7 @@ class Db implements \Magento\Store\Model\StoreManagerInterface
             // load method will load website by code if given ID is not a numeric value
             $website->load($websiteId);
             if (!$website->hasWebsiteId()) {
-                throw new \Magento\Framework\App\InitException('Invalid website id/code requested.');
+                throw new \Magento\Framework\Exception\State\InitException(__('Invalid website id/code requested.'));
             }
             $this->_websites[$website->getWebsiteId()] = $website;
             $this->_websites[$website->getCode()] = $website;
@@ -412,7 +412,7 @@ class Db implements \Magento\Store\Model\StoreManagerInterface
      *
      * @param null|Group|string $groupId
      * @return Group
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     public function getGroup($groupId = null)
     {
@@ -426,7 +426,7 @@ class Db implements \Magento\Store\Model\StoreManagerInterface
             if (is_numeric($groupId)) {
                 $group->load($groupId);
                 if (!$group->hasGroupId()) {
-                    throw new \Magento\Framework\App\InitException('Invalid store group id requested.');
+                    throw new \Magento\Framework\Exception\State\InitException(__('Invalid store group id requested.'));
                 }
             }
             $this->_groups[$group->getGroupId()] = $group;
diff --git a/app/code/Magento/Store/Model/StorageFactory.php b/app/code/Magento/Store/Model/StorageFactory.php
index 764ddc2584e20ff71fb4bdc3d44ef2ea0f3f7672..bce9da866b684a8ed5da1191c6187ccd339e4836 100644
--- a/app/code/Magento/Store/Model/StorageFactory.php
+++ b/app/code/Magento/Store/Model/StorageFactory.php
@@ -134,7 +134,7 @@ class StorageFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storage
      * @param array $arguments
      * @return void
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     protected function _reinitStores(\Magento\Store\Model\StoreManagerInterface $storage, $arguments)
     {
@@ -159,8 +159,8 @@ class StorageFactory
                 $storage->setCurrentStore($this->_getStoreByWebsite($storage, $scopeCode));
                 break;
             default:
-                throw new \Magento\Framework\App\InitException(
-                    'Store Manager has not been initialized properly'
+                throw new \Magento\Framework\Exception\State\InitException(
+                    __('Store Manager has not been initialized properly')
                 );
         }
 
diff --git a/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php b/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php
index 00782573b1ff07f25e0789f3ba595674205b23a7..61e6ebb28258f5c64dd90e72cf7ee75c5715707c 100644
--- a/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php
+++ b/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php
@@ -61,7 +61,7 @@ class StoreCheckTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\InitException
+     * @expectedException \Magento\Framework\Exception\State\InitException
      * @expectedExceptionMessage Current store is not active.
      */
     public function testAroundDispatchWhenStoreNotActive()
diff --git a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/ReaderPoolTest.php b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/ReaderPoolTest.php
index 3e118eff97ef41692ca7e7a857c0619e409f7bdd..6beb4daceb0ab7971c75e43a38e38935bd00600f 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/ReaderPoolTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/ReaderPoolTest.php
@@ -50,7 +50,7 @@ class ReaderPoolTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Store\Model\Config\Reader\ReaderPool::getReader
+     * @covers \Magento\Store\Model\Config\Reader\ReaderPool::getReader
      * @dataProvider getReaderDataProvider
      * @param string $scope
      * @param string $instanceType
diff --git a/app/code/Magento/Store/Test/Unit/Model/Resolver/StoreTest.php b/app/code/Magento/Store/Test/Unit/Model/Resolver/StoreTest.php
index c36b779f014873fd4056f9106dd6732ef87d2b33..6513f7cf34f3756a20c118141be000f9abbd85e7 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Resolver/StoreTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Resolver/StoreTest.php
@@ -55,7 +55,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\InitException
+     * @expectedException \Magento\Framework\Exception\State\InitException
      */
     public function testGetScopeWithInvalidScope()
     {
diff --git a/app/code/Magento/Store/Test/Unit/Model/Resolver/WebsiteTest.php b/app/code/Magento/Store/Test/Unit/Model/Resolver/WebsiteTest.php
index 8156dceae727327228d7746cd494c33f413a1ee7..51edf26170480ca5da26e1d16a1d2a7b84e4c106 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Resolver/WebsiteTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Resolver/WebsiteTest.php
@@ -55,7 +55,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\InitException
+     * @expectedException \Magento\Framework\Exception\State\InitException
      */
     public function testGetScopeWithInvalidScope()
     {
diff --git a/app/code/Magento/Store/Test/Unit/Model/Storage/DbTest.php b/app/code/Magento/Store/Test/Unit/Model/Storage/DbTest.php
index 8161bfad4663a4251549bf1b8a2eca152a4c415e..675b7520f374a42d10a0ab4e859976866ede3f49 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Storage/DbTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Storage/DbTest.php
@@ -130,7 +130,7 @@ class DbTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\InitException
+     * @expectedException \Magento\Framework\Exception\State\InitException
      */
     public function testGetWebsiteInvalidId()
     {
@@ -176,7 +176,7 @@ class DbTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\InitException
+     * @expectedException \Magento\Framework\Exception\State\InitException
      */
     public function testGetGroupInvalidId()
     {
diff --git a/app/code/Magento/Store/Test/Unit/Model/StorageFactoryTest.php b/app/code/Magento/Store/Test/Unit/Model/StorageFactoryTest.php
index 19b199bc54746bce23294bc885f1b2a2bc752cc8..7b22f6d43b1ac3f522de375bad726d6a1063841d 100644
--- a/app/code/Magento/Store/Test/Unit/Model/StorageFactoryTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/StorageFactoryTest.php
@@ -251,11 +251,11 @@ class StorageFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Store\Model\StorageFactory::_reinitStores
-     * covers \Magento\Store\Model\StorageFactory::_getStoreByGroup
-     * covers \Magento\Store\Model\StorageFactory::_getStoreByWebsite
-     * covers \Magento\Store\Model\StorageFactory::_checkCookieStore
-     * covers \Magento\Store\Model\StorageFactory::_checkRequestStore
+     * @covers \Magento\Store\Model\StorageFactory::_reinitStores
+     * @covers \Magento\Store\Model\StorageFactory::_getStoreByGroup
+     * @covers \Magento\Store\Model\StorageFactory::_getStoreByWebsite
+     * @covers \Magento\Store\Model\StorageFactory::_checkCookieStore
+     * @covers \Magento\Store\Model\StorageFactory::_checkRequestStore
      *
      * @dataProvider getWithStoresReinitDataProvider
      *
@@ -300,7 +300,7 @@ class StorageFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\App\InitException
+     * @expectedException \Magento\Framework\Exception\State\InitException
      */
     public function testGetWithStoresReinitUnknownScopeType()
     {
@@ -313,9 +313,9 @@ class StorageFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Store\Model\StorageFactory::_checkCookieStore
-     * covers \Magento\Store\Model\StorageFactory::getActiveStoreByCode
-     * covers \Magento\Store\Model\StorageFactory::setCurrentStore
+     * @covers \Magento\Store\Model\StorageFactory::_checkCookieStore
+     * @covers \Magento\Store\Model\StorageFactory::getActiveStoreByCode
+     * @covers \Magento\Store\Model\StorageFactory::setCurrentStore
      *
      * @dataProvider getFromCookieDataProvider
      */
@@ -352,9 +352,9 @@ class StorageFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Store\Model\StorageFactory::_checkRequestStore
-     * covers \Magento\Store\Model\StorageFactory::getActiveStoreByCode
-     * covers \Magento\Store\Model\StorageFactory::setCurrentStore
+     * @covers \Magento\Store\Model\StorageFactory::_checkRequestStore
+     * @covers \Magento\Store\Model\StorageFactory::getActiveStoreByCode
+     * @covers \Magento\Store\Model\StorageFactory::setCurrentStore
      *
      * @dataProvider getFromRequestDataProvider
      *
diff --git a/app/code/Magento/Store/Test/Unit/Model/StoreTest.php b/app/code/Magento/Store/Test/Unit/Model/StoreTest.php
index 91ec0f1d8c1c2d6eb49ca5cc962308734660ad64..c43af1f004dfe6972d9521e3d49bd6474fb99a4b 100644
--- a/app/code/Magento/Store/Test/Unit/Model/StoreTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/StoreTest.php
@@ -185,10 +185,10 @@ class StoreTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider getBaseUrlDataProvider
      *
-     * covers \Magento\Store\Model\Store::getBaseUrl
-     * covers \Magento\Store\Model\Store::getCode
-     * covers \Magento\Store\Model\Store::_updatePathUseRewrites
-     * covers \Magento\Store\Model\Store::_getConfig
+     * @covers \Magento\Store\Model\Store::getBaseUrl
+     * @covers \Magento\Store\Model\Store::getCode
+     * @covers \Magento\Store\Model\Store::_updatePathUseRewrites
+     * @covers \Magento\Store\Model\Store::_getConfig
      *
      * @param string $type
      * @param boolean $secure
@@ -600,7 +600,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Store\Model\Store::getBaseMediaDir
+     * @covers \Magento\Store\Model\Store::getBaseMediaDir
      */
     public function testGetBaseMediaDir()
     {
@@ -613,7 +613,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Store\Model\Store::getBaseStaticDir
+     * @covers \Magento\Store\Model\Store::getBaseStaticDir
      */
     public function testGetBaseStaticDir()
     {
diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json
index c991778c00e9d67dbc1dd0ae36810f0a49009e7a..c8c35d4401a6e1b73cfc9803080327c9d510aad9 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.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Tax/Block/Adminhtml/Rate/Form.php b/app/code/Magento/Tax/Block/Adminhtml/Rate/Form.php
index 7886702d51034b7e92ca5dbee59f4484ceed7bdc..08a7803aa85474510a9135d22b7819dd4122c03c 100644
--- a/app/code/Magento/Tax/Block/Adminhtml/Rate/Form.php
+++ b/app/code/Magento/Tax/Block/Adminhtml/Rate/Form.php
@@ -166,7 +166,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
         }
 
         $legend = $this->getShowLegend() ? __('Tax Rate Information') : '';
-        $fieldset = $form->addFieldset('base_fieldset', ['legend' => $legend]);
+        $fieldset = $form->addFieldset('base_fieldset', ['legend' => $legend, 'class' => 'form-inline']);
 
         if (isset($formData['tax_calculation_rate_id']) && $formData['tax_calculation_rate_id'] > 0) {
             $fieldset->addField(
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php
old mode 100644
new mode 100755
index 7adb8bd4c18acb50668e0b0ebf19a1e5bfd95260..bcf14907b4eff3410da0d7a637f2fb7554a00f57
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Tax\Controller\Adminhtml\Rate
     /**
      * Delete Rate and Data
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect|void
      */
     public function execute()
     {
@@ -29,17 +29,25 @@ class Delete extends \Magento\Tax\Controller\Adminhtml\Rate
                     __('Something went wrong deleting this rate because of an incorrect rate ID.')
                 );
                 $this->getResponse()->setRedirect($this->getUrl('tax/*/'));
-            } catch (\Magento\Framework\Exception\LocalizedException $e) {
-                $this->messageManager->addError($e->getMessage());
-            } catch (\Exception $e) {
-                $this->messageManager->addError(__('Something went wrong deleting this rate.'));
+                return;
             }
+            return $this->getDefaultResult();
+        }
+    }
 
-            if ($referer = $this->getRequest()->getServer('HTTP_REFERER')) {
-                $this->getResponse()->setRedirect($referer);
-            } else {
-                $this->getResponse()->setRedirect($this->getUrl("*/*/"));
-            }
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        if ($this->getRequest()->getServer('HTTP_REFERER')) {
+            $resultRedirect->setRefererUrl();
+        } else {
+            $resultRedirect->setUrl($this->getUrl("*/*/"));
         }
+        return $resultRedirect;
     }
 }
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php
old mode 100644
new mode 100755
index 2e79ae0fb0da19e84cb852ed3080a24f5900dcba..4fff21c62f6352e4c1c4ac14b9504864755317bf
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php
@@ -6,11 +6,10 @@
  */
 namespace Magento\Tax\Controller\Adminhtml\Rule;
 
-
 class Delete extends \Magento\Tax\Controller\Adminhtml\Rule
 {
     /**
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect|void
      */
     public function execute()
     {
@@ -24,12 +23,18 @@ class Delete extends \Magento\Tax\Controller\Adminhtml\Rule
             $this->messageManager->addError(__('This rule no longer exists.'));
             $this->_redirect('tax/*/');
             return;
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('Something went wrong deleting this tax rule.'));
         }
+        return $this->getDefaultResult();
+    }
 
-        $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl($this->getUrl('*')));
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setUrl($this->_redirect->getRedirectUrl($this->getUrl('*')));
     }
 }
diff --git a/app/code/Magento/Tax/Setup/InstallData.php b/app/code/Magento/Tax/Setup/InstallData.php
index 03931a63e3b850c4bb7710fb428b8fb5283099ba..4e99ca1631f824f1d0306cec9c0ae200d95fc894 100644
--- a/app/code/Magento/Tax/Setup/InstallData.php
+++ b/app/code/Magento/Tax/Setup/InstallData.php
@@ -69,7 +69,7 @@ class InstallData implements InstallDataInterface
                 'visible_in_advanced_search' => true,
                 'used_in_product_listing' => true,
                 'unique' => false,
-                'apply_to' => implode($taxSetup->getTaxableItems(), ',')
+                'apply_to' => implode(',', $taxSetup->getTaxableItems())
             ]
         );
 
diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json
index 941aaa559321007cdeb08ced1ca2ad7854b5c10b..b5795c8cf572ce6e042b9c5303de88a3b3688edb 100644
--- a/app/code/Magento/Tax/composer.json
+++ b/app/code/Magento/Tax/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-reports": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-reports": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
index 04c2c6ebcc303436117a56781757b4dab3185c43..e1941d06d1d4973744aa9e6cc415e282cc799780 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
@@ -194,6 +194,8 @@ require([
 
                     var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
                     $(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');
diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json
index 73cee1c7822a2a2a9bb68c783313e0436eec3188..8aedb28da45de8215cddff61e630a3e0be1d7224 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Theme/Block/Html/Topmenu.php b/app/code/Magento/Theme/Block/Html/Topmenu.php
index 5bd175abffc813c4117778c4420df3d3a509c452..177418d892ed452d2864c4327e4a837a62ba7b07 100644
--- a/app/code/Magento/Theme/Block/Html/Topmenu.php
+++ b/app/code/Magento/Theme/Block/Html/Topmenu.php
@@ -7,6 +7,9 @@ namespace Magento\Theme\Block\Html;
 
 use Magento\Framework\View\Block\IdentityInterface;
 use Magento\Framework\View\Element\Template;
+use Magento\Framework\Data\TreeFactory;
+use Magento\Framework\Data\Tree\Node;
+use Magento\Framework\Data\Tree\NodeFactory;
 
 /**
  * Html page top menu block
@@ -28,13 +31,32 @@ class Topmenu extends Template implements IdentityInterface
     protected $_menu;
 
     /**
-     * Init top menu tree structure
+     * Core registry
      *
-     * @return void
+     * @var Registry
      */
-    public function _construct()
-    {
-        $this->_menu = new \Magento\Framework\Data\Tree\Node([], 'root', new \Magento\Framework\Data\Tree());
+    protected $registry;
+
+    /**
+     * @param Template\Context $context
+     * @param NodeFactory $nodeFactory
+     * @param TreeFactory $treeFactory
+     * @param array $data
+     */
+    public function __construct(
+        Template\Context $context,
+        NodeFactory $nodeFactory,
+        TreeFactory $treeFactory,
+        array $data = []
+    ) {
+        parent::__construct($context, $data);
+        $this->_menu = $nodeFactory->create(
+            [
+                'data' => [],
+                'idField' => 'root',
+                'tree' => $treeFactory->create()
+            ]
+        );
     }
 
     /**
@@ -272,6 +294,8 @@ class Topmenu extends Template implements IdentityInterface
 
         if ($item->getIsActive()) {
             $classes[] = 'active';
+        } elseif ($item->getHasActive()) {
+            $classes[] = 'has-active';
         }
 
         if ($item->getIsLast()) {
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php
old mode 100644
new mode 100755
index 3d21b9ccc06c6c6de5f508ba410be61453a22882..320e6c6b30cd46dfa56ad5cb7128f8146eba6f06
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php
@@ -11,36 +11,42 @@ class Delete extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
     /**
      * Delete action
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
      */
     public function execute()
     {
-        $redirectBack = (bool)$this->getRequest()->getParam('back', false);
         $themeId = $this->getRequest()->getParam('id');
-        try {
-            if ($themeId) {
-                /** @var $theme \Magento\Framework\View\Design\ThemeInterface */
-                $theme = $this->_objectManager->create('Magento\Framework\View\Design\ThemeInterface')->load($themeId);
-                if (!$theme->getId()) {
-                    throw new \InvalidArgumentException(sprintf('We cannot find a theme with id "%1".', $themeId));
-                }
-                if (!$theme->isVirtual()) {
-                    throw new \InvalidArgumentException(
-                        sprintf('Only virtual theme is possible to delete and theme "%s" isn\'t virtual', $themeId)
-                    );
-                }
-                $theme->delete();
-                $this->messageManager->addSuccess(__('You deleted the theme.'));
+        if ($themeId) {
+            /** @var $theme \Magento\Framework\View\Design\ThemeInterface */
+            $theme = $this->_objectManager->create('Magento\Framework\View\Design\ThemeInterface')->load($themeId);
+            if (!$theme->getId()) {
+                throw new \InvalidArgumentException(sprintf('We cannot find a theme with id "%1".', $themeId));
             }
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('We cannot delete the theme.'));
-            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
+            if (!$theme->isVirtual()) {
+                throw new \InvalidArgumentException(
+                    sprintf('Only virtual theme is possible to delete and theme "%s" isn\'t virtual', $themeId)
+                );
+            }
+            $theme->delete();
+            $this->messageManager->addSuccess(__('You deleted the theme.'));
         }
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
         /**
          * @todo Temporary solution. Theme module should not know about the existence of editor module.
          */
-        $redirectBack ? $this->_redirect('adminhtml/system_design_editor/index/') : $this->_redirect('adminhtml/*/');
+        $path = (bool)$this->getRequest()->getParam('back', false)
+            ? 'adminhtml/system_design_editor/index/'
+            : 'adminhtml/*/';
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath($path);
     }
 }
diff --git a/app/code/Magento/Theme/Helper/Storage.php b/app/code/Magento/Theme/Helper/Storage.php
index 7bc986ee5262b2c778cc96f9a91aa75399e3983f..e7cc74971716375988b6e74895cafdf7c7a255bd 100644
--- a/app/code/Magento/Theme/Helper/Storage.php
+++ b/app/code/Magento/Theme/Helper/Storage.php
@@ -179,7 +179,7 @@ class Storage extends \Magento\Framework\App\Helper\AbstractHelper
      * Get storage type
      *
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getStorageType()
     {
@@ -189,7 +189,7 @@ class Storage extends \Magento\Framework\App\Helper\AbstractHelper
         ];
         $type = (string)$this->_getRequest()->getParam(self::PARAM_CONTENT_TYPE);
         if (!in_array($type, $allowedTypes)) {
-            throw new \Magento\Framework\Exception('Invalid type');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Invalid type'));
         }
         return $type;
     }
@@ -282,7 +282,7 @@ class Storage extends \Magento\Framework\App\Helper\AbstractHelper
      * Get allowed extensions by type
      *
      * @return string[]
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getAllowedExtensionsByType()
     {
@@ -294,7 +294,7 @@ class Storage extends \Magento\Framework\App\Helper\AbstractHelper
                 $extensions = ['jpg', 'jpeg', 'gif', 'png', 'xbm', 'wbmp'];
                 break;
             default:
-                throw new \Magento\Framework\Exception('Invalid type');
+                throw new \Magento\Framework\Exception\LocalizedException(__('Invalid type'));
         }
         return $extensions;
     }
@@ -303,7 +303,7 @@ class Storage extends \Magento\Framework\App\Helper\AbstractHelper
      * Get storage type name for display.
      *
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getStorageTypeName()
     {
@@ -315,7 +315,7 @@ class Storage extends \Magento\Framework\App\Helper\AbstractHelper
                 $name = self::IMAGES;
                 break;
             default:
-                throw new \Magento\Framework\Exception('Invalid type');
+                throw new \Magento\Framework\Exception\LocalizedException(__('Invalid type'));
         }
 
         return $name;
diff --git a/app/code/Magento/Theme/Model/Theme/Collection.php b/app/code/Magento/Theme/Model/Theme/Collection.php
index 0418a9172a7dbd241d63f2fc5e9c14c719831ed1..2b04f02a1ec18a44d68e39ac099541731c07ef66 100644
--- a/app/code/Magento/Theme/Model/Theme/Collection.php
+++ b/app/code/Magento/Theme/Model/Theme/Collection.php
@@ -94,13 +94,15 @@ class Collection extends \Magento\Framework\Data\Collection implements ListInter
     /**
      * Return target dir for themes with theme configuration file
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return array|string
      */
     public function getTargetPatterns()
     {
         if (empty($this->_targetDirs)) {
-            throw new \Magento\Framework\Exception('Please specify at least one target pattern to theme config file.');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Please specify at least one target pattern to theme config file.')
+            );
         }
         return $this->_targetDirs;
     }
diff --git a/app/code/Magento/Theme/Model/Theme/File.php b/app/code/Magento/Theme/Model/Theme/File.php
index 0f6d4a0dfbb4f9e2f57cf04ee29142a191db6855..0ad82f4a51c2d6f84b5ffe7f8fb24271f36c2e91 100644
--- a/app/code/Magento/Theme/Model/Theme/File.php
+++ b/app/code/Magento/Theme/Model/Theme/File.php
@@ -122,13 +122,13 @@ class File extends AbstractModel implements FileInterface
     /**
      * {@inheritdoc}
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getTheme()
     {
         $theme = $this->_themeFactory->create($this->getData('theme_id'));
         if (!$theme) {
-            throw new \Magento\Framework\Exception('Theme id should be set');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Theme id should be set'));
         }
         return $theme;
     }
diff --git a/app/code/Magento/Theme/Model/Wysiwyg/Storage.php b/app/code/Magento/Theme/Model/Wysiwyg/Storage.php
index d77a56dc136a8ef708fa08d14df860109c5c3631..5eea783ab9a7d995e8e1d1402eec58f5ff84412a 100644
--- a/app/code/Magento/Theme/Model/Wysiwyg/Storage.php
+++ b/app/code/Magento/Theme/Model/Wysiwyg/Storage.php
@@ -159,7 +159,7 @@ class Storage
             $image->keepAspectRatio(true);
             $image->resize(self::THUMBNAIL_WIDTH, self::THUMBNAIL_HEIGHT);
             $image->save($this->mediaWriteDirectory->getAbsolutePath($thumbnailPath));
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
             return false;
         }
diff --git a/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php b/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab2afb8ef4ea906040c419e4e04522f28013c09d
--- /dev/null
+++ b/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Theme\Test\Unit\Block\Html;
+
+use Magento\Theme\Block\Html\Topmenu;
+use Magento\Framework\Registry;
+use Magento\Framework\View\Element\Template\Context;
+use Magento\Framework\Data\TreeFactory;
+use Magento\Framework\Data\Tree\NodeFactory;
+
+class TopmenuTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $registry;
+
+    /**
+     * @var Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    /**
+     * @var NodeFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $nodeFactory;
+
+    /**
+     * @var TreeFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $treeFactory;
+
+    /**
+     * @var \Magento\Catalog\Model\Category|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $category;
+
+    // @codingStandardsIgnoreStart
+
+    /** @var string  */
+    protected $htmlWithoutCategory = <<<HTML
+<li  class="level0 nav-1 first"><a href="http://magento2/category-0.html" ><span></span></a></li><li  class="level0 nav-2"><a href="http://magento2/category-1.html" ><span></span></a></li><li  class="level0 nav-3"><a href="http://magento2/category-2.html" ><span></span></a></li><li  class="level0 nav-4"><a href="http://magento2/category-3.html" ><span></span></a></li><li  class="level0 nav-5"><a href="http://magento2/category-4.html" ><span></span></a></li><li  class="level0 nav-6"><a href="http://magento2/category-5.html" ><span></span></a></li><li  class="level0 nav-7"><a href="http://magento2/category-6.html" ><span></span></a></li><li  class="level0 nav-8"><a href="http://magento2/category-7.html" ><span></span></a></li><li  class="level0 nav-9"><a href="http://magento2/category-8.html" ><span></span></a></li><li  class="level0 nav-10 last"><a href="http://magento2/category-9.html" ><span></span></a></li>
+HTML;
+
+    /** @var string  */
+    protected $htmlWithCategory = <<<HTML
+<li  class="level0 nav-1 first active"><a href="http://magento2/category-0.html" ><span></span></a></li><li  class="level0 nav-2"><a href="http://magento2/category-1.html" ><span></span></a></li><li  class="level0 nav-3"><a href="http://magento2/category-2.html" ><span></span></a></li><li  class="level0 nav-4"><a href="http://magento2/category-3.html" ><span></span></a></li><li  class="level0 nav-5"><a href="http://magento2/category-4.html" ><span></span></a></li><li  class="level0 nav-6"><a href="http://magento2/category-5.html" ><span></span></a></li><li  class="level0 nav-7"><a href="http://magento2/category-6.html" ><span></span></a></li><li  class="level0 nav-8"><a href="http://magento2/category-7.html" ><span></span></a></li><li  class="level0 nav-9"><a href="http://magento2/category-8.html" ><span></span></a></li><li  class="level0 nav-10 last"><a href="http://magento2/category-9.html" ><span></span></a></li>
+HTML;
+
+    // @codingStandardsIgnoreEnd
+
+    public function setUp()
+    {
+        $isCurrentItem = $this->getName() == 'testGetHtmlWithSelectedCategory' ? true : false;
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->context = $objectManager->getObject('Magento\Framework\View\Element\Template\Context');
+
+        $this->nodeFactory = $this->getMock('Magento\Framework\Data\Tree\NodeFactory', [], [], '', false);
+        $this->treeFactory = $this->getMock('Magento\Framework\Data\TreeFactory', [], [], '', false);
+
+        $tree = $this->getMock('Magento\Framework\Data\Tree', [], [], '', false);
+
+        $container = $this->getMock('Magento\Catalog\Model\Resource\Category\Tree', [], [], '', false);
+
+        $children = $this->getMock(
+            'Magento\Framework\Data\Tree\Node\Collection',
+            ['count'],
+            ['container' => $container]
+        );
+
+        for ($i = 0; $i < 10; $i++) {
+            $id = "category-node-$i";
+            $categoryNode = $this->getMock('Magento\Framework\Data\Tree\Node', ['getId', 'hasChildren'], [], '', false);
+            $categoryNode
+                ->expects($this->once())
+                ->method('getId')
+                ->willReturn($id);
+            $categoryNode
+                ->expects($this->atLeastOnce())
+                ->method('hasChildren')
+                ->willReturn(false);
+            $categoryNode->setData(
+                [
+                    'name' => "Category $i",
+                    'id' => $id,
+                    'url' => "http://magento2/category-$i.html",
+                    'is_active' => $i == 0 ? $isCurrentItem : false,
+                    'is_current_item' => $i == 0 ? $isCurrentItem : false,
+
+                ]
+            );
+            $children->add($categoryNode);
+        }
+
+        $children
+            ->expects($this->once())
+            ->method('count')
+            ->willReturn(10);
+
+        $node = $this->getMock('Magento\Framework\Data\Tree\Node', ['getChildren'], [], '', false);
+        $node
+            ->expects($this->once())
+            ->method('getChildren')
+            ->willReturn($children);
+        $node
+            ->expects($this->any())
+            ->method('__call')
+            ->with('getLevel', [])
+            ->willReturn(null);
+
+        $this->nodeFactory
+            ->expects($this->once())
+            ->method('create')
+            ->willReturn($node);
+
+        $this->treeFactory
+            ->expects($this->once())
+            ->method('create')
+            ->willReturn($tree);
+    }
+
+    protected function getTopmenu()
+    {
+        return new Topmenu($this->context, $this->nodeFactory, $this->treeFactory);
+    }
+
+    public function testGetHtmlWithoutSelectedCategory()
+    {
+        $this->assertEquals($this->htmlWithoutCategory, $this->getTopmenu()->getHtml());
+    }
+
+    public function testGetHtmlWithSelectedCategory()
+    {
+        $this->assertEquals($this->htmlWithCategory, $this->getTopmenu()->getHtml());
+    }
+}
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php b/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php
index e03b5190560c14ceaf76348595a978d09b92890d..9b84e52a91233cb09ce5ddf639f015fce02310e0 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php
@@ -66,8 +66,8 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Theme\Model\Config\Customization::getAssignedThemeCustomizations
-     * covers \Magento\Theme\Model\Config\Customization::hasThemeAssigned
+     * @covers \Magento\Theme\Model\Config\Customization::getAssignedThemeCustomizations
+     * @covers \Magento\Theme\Model\Config\Customization::hasThemeAssigned
      */
     public function testGetAssignedThemeCustomizations()
     {
@@ -90,7 +90,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Theme\Model\Config\Customization::getUnassignedThemeCustomizations
+     * @covers \Magento\Theme\Model\Config\Customization::getUnassignedThemeCustomizations
      */
     public function testGetUnassignedThemeCustomizations()
     {
@@ -112,7 +112,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Theme\Model\Config\Customization::getStoresByThemes
+     * @covers \Magento\Theme\Model\Config\Customization::getStoresByThemes
      */
     public function testGetStoresByThemes()
     {
@@ -129,7 +129,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Theme\Model\Config\Customization::isThemeAssignedToStore
+     * @covers \Magento\Theme\Model\Config\Customization::isThemeAssignedToStore
      */
     public function testIsThemeAssignedToDefaultStore()
     {
@@ -151,7 +151,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Theme\Model\Config\Customization::isThemeAssignedToStore
+     * @covers \Magento\Theme\Model\Config\Customization::isThemeAssignedToStore
      */
     public function testIsThemeAssignedToConcreteStore()
     {
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/ValidationTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/ValidationTest.php
index 2f45ad6f18488aaeea9c22eec09370d3e6590209..5912fe622bb6e84606dbe36cfe0451c9e708e0e2 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/ValidationTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/ValidationTest.php
@@ -16,7 +16,7 @@ class ValidationTest extends \PHPUnit_Framework_TestCase
      * @param bool $result
      * @param array $messages
      *
-     * covers \Magento\Framework\View\Design\Theme\Validator::validate
+     * @covers \Magento\Framework\View\Design\Theme\Validator::validate
      * @dataProvider dataProviderValidate
      */
     public function testValidate(array $data, $result, array $messages)
diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json
index 55d1d0974c5e76385343b32781bfc3a5bf2e2784..b26672d7ac1b1a7cd5b2d0705ba0a8e11b05962f 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.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-widget": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/module-media-storage": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-require-js": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-widget": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/module-media-storage": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-require-js": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-translation": "0.42.0-beta11"
+        "magento/module-translation": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Theme/view/adminhtml/page_layout/admin-1column.xml b/app/code/Magento/Theme/view/adminhtml/page_layout/admin-1column.xml
index 4965ab5e9c4a86209e1bf58ecaac70e219d12362..1fdae13532630769495ed32f529263aa6d756273 100644
--- a/app/code/Magento/Theme/view/adminhtml/page_layout/admin-1column.xml
+++ b/app/code/Magento/Theme/view/adminhtml/page_layout/admin-1column.xml
@@ -26,23 +26,21 @@
 
                 <container name="page.content" as="page_content" htmlTag="main" htmlId="anchor-content" htmlClass="page-content">
                     <container name="main.top" as="main-top" label="main-top"/>
-                    <container name="page.main.actions.wrapper" htmlTag="div" htmlClass="admin__scope">
-                        <container name="page.main.actions" as="page_main_actions" htmlTag="div" htmlClass="page-main-actions"/>
+                    <container name="page.main.actions" as="page_main_actions" htmlTag="div" htmlClass="page-main-actions"/>
+                    <container name="messages.wrapper" as="messages.wrapper" htmlTag="div" htmlId="messages">
+                        <container name="page.messages" as="page.messages"/>
                     </container>
-                    <container name="message-wrapper.scope" htmlTag="div" htmlClass="admin__scope">
-                        <container name="messages.wrapper" as="messages.wrapper" htmlTag="div" htmlId="messages">
-                            <container name="page.messages" as="page.messages"/>
+                    <container name="page.main.container" as="page_main_container" htmlId="page:main-container" htmlTag="div" htmlClass="page-columns">
+                        <container name="admin.scope.col.wrap" as="admin-scope-col-wrap" htmlTag="div" htmlClass="admin__scope-old"> <!-- ToDo UI: remove this wrapper remove with old styles removal -->
+                            <container name="main.col" as="main-col" htmlId="container" htmlTag="div" htmlClass="main-col">
+                                <container name="content" as="content"/>
+                            </container>
                         </container>
                     </container>
-                    <container name="page.main.container" as="page_main_container" htmlId="page:main-container" htmlTag="div" htmlClass="col-1-layout">
-                       <container name="content" as="content"/>
-                    </container>
                 </container>
                 <container name="js" as="js" label="JavaScript"/>
-                <container name="page.footer.wrapper" after="page.content" as="page_footer_wrapper" htmlTag="div" htmlClass="admin__scope">
-                    <container htmlTag="footer" htmlClass="page-footer">
-                        <container name="footer" htmlTag="div" htmlClass="page-footer-content row" />
-                    </container>
+                <container htmlTag="footer" htmlClass="page-footer">
+                    <container name="footer" htmlTag="div" htmlClass="page-footer-content row" />
                 </container>
             </container>
             <container name="before.body.end" as="before_body_end" label="Before Body End" after="-"/>
diff --git a/app/code/Magento/Theme/view/adminhtml/page_layout/admin-2columns-left.xml b/app/code/Magento/Theme/view/adminhtml/page_layout/admin-2columns-left.xml
index 4bab4ab9904421b43f9e62910f03fe781f2000ad..4b53f1edb618ba458e2e3d920d8608b4ed90f041 100644
--- a/app/code/Magento/Theme/view/adminhtml/page_layout/admin-2columns-left.xml
+++ b/app/code/Magento/Theme/view/adminhtml/page_layout/admin-2columns-left.xml
@@ -26,17 +26,15 @@
 
                 <container name="page.content" as="page_content" htmlTag="main" htmlId="anchor-content" htmlClass="page-content">
                     <container name="main.top" as="main-top" label="main-top"/>
-                    <container name="page.main.actions.wrapper" htmlTag="div" htmlClass="admin__scope">
-                        <container name="page.main.actions" as="page_main_actions" htmlTag="div" htmlClass="page-main-actions"/>
+                    <container name="page.main.actions" as="page_main_actions" htmlTag="div" htmlClass="page-main-actions"/>
+                    <container name="messages.wrapper" as="messages.wrapper" htmlTag="div" htmlId="messages">
+                        <container name="page.messages" as="page.messages"/>
                     </container>
-                    <container name="message-wrapper.scope" htmlTag="div" htmlClass="admin__scope">
-                        <container name="messages.wrapper" as="messages.wrapper" htmlTag="div" htmlId="messages">
-                            <container name="page.messages" as="page.messages"/>
-                        </container>
-                    </container>
-                    <container name="page.main.container" as="page_main_container" htmlId="page:main-container" htmlTag="div" htmlClass="col-2-left-layout">
+                    <container name="page.main.container" as="page_main_container" htmlId="page:main-container" htmlTag="div" htmlClass="page-columns">
                         <container name="main.col" as="main-col" htmlId="container" htmlTag="div" htmlClass="main-col">
-                            <container name="content" as="content"/>
+                            <container name="admin.scope.col.wrap" as="admin-scope-col-wrap" htmlTag="div" htmlClass="admin__scope-old"> <!-- ToDo UI: remove this wrapper remove with old styles removal -->
+                                <container name="content" as="content"/>
+                            </container>
                         </container>
                         <container name="side.col" as="side-col" after="main.col" htmlId="page:left" htmlTag="div" htmlClass="side-col">
                             <container name="left" as="left"/>
@@ -44,10 +42,8 @@
                     </container>
                 </container>
                 <container name="js" as="js" label="JavaScript"/>
-                <container name="page.footer.wrapper" after="page.content" as="page_footer_wrapper" htmlTag="div" htmlClass="admin__scope">
-                    <container htmlTag="footer" htmlClass="page-footer">
-                        <container name="footer" htmlTag="div" htmlClass="page-footer-content row" />
-                    </container>
+                <container htmlTag="footer" htmlClass="page-footer">
+                    <container name="footer" htmlTag="div" htmlClass="page-footer-content row" />
                 </container>
             </container>
             <container name="before.body.end" as="before_body_end" label="Before Body End" after="-"/>
diff --git a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml
index 4fb03ca950dfe0e6625befecc38d9b1787554809..8a276e8af760b75be215d9917f873202975ede46 100644
--- a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml
+++ b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml
@@ -40,7 +40,8 @@ require([
             showAnim: "",
             changeMonth: true,
             changeYear: true,
-            buttonImageOnly: true,
+            buttonImageOnly: null,
+            buttonImage: null,
             showButtonPanel: true,
             showWeek: true,
             timeFormat: '',
diff --git a/app/code/Magento/Translation/Model/Js/DataProvider.php b/app/code/Magento/Translation/Model/Js/DataProvider.php
index a9a83fcf8d6b35d942c43313f9d6204f2c087577..d3f7d156ca83110fe0cb5e60e7face4ef6f053fa 100644
--- a/app/code/Magento/Translation/Model/Js/DataProvider.php
+++ b/app/code/Magento/Translation/Model/Js/DataProvider.php
@@ -65,7 +65,7 @@ class DataProvider implements DataProviderInterface
      * @param string $themePath
      * @return string[]
      * @throws \Exception
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getData($themePath)
     {
diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json
index 8aa8d22d709a163f64f191c0a0f3a6e0fcc80938..70864da21f8b8c6a8e5a41858cada3c080ebd112 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.42.0-beta11",
-        "magento/module-developer": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-developer": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Translation/view/adminhtml/templates/translate_inline.phtml b/app/code/Magento/Translation/view/adminhtml/templates/translate_inline.phtml
index 328a33e5c3f5e2bb13ab9dbec46944250c6485bd..cda8dd45d92fb7da55e4b57309e6f33ab3ef34b7 100644
--- a/app/code/Magento/Translation/view/adminhtml/templates/translate_inline.phtml
+++ b/app/code/Magento/Translation/view/adminhtml/templates/translate_inline.phtml
@@ -9,7 +9,6 @@
 ?>
 
 <link rel="stylesheet" type="text/css" href="<?php echo $block->getViewFileUrl('prototype/windows/themes/default.css') ?>"/>
-<link rel="stylesheet" type="text/css" href="<?php echo $block->getViewFileUrl('Magento_Theme::prototype/magento.css') ?>"/>
 <link rel="stylesheet" type="text/css" href="<?php echo $block->getViewFileUrl('mage/translate-inline.css') ?>"/>
 
 <script id="translate-inline-icon" type="text/x-magento-template">
@@ -18,7 +17,8 @@
 <script id="translate-form-template" type="text/x-magento-template">
     <form id="<%- data.id %>">
         <% _.each(data.items, function(item, i) { %>
-            <div class="magento_table_container"><table cellspacing="0">
+            <div class="magento_table_container">
+                <table cellspacing="0" class="table">
                     <% _.each(item, function(value, index) { %>
                         <tr>
                             <th class="label" style="text-transform: capitalize;"><%- index %>:</th>
diff --git a/app/code/Magento/Translation/view/frontend/templates/translate_inline.phtml b/app/code/Magento/Translation/view/frontend/templates/translate_inline.phtml
index d1c3ce3fc0795cc4bfb9dc89099c70b305f36fc4..19ab66540171a2e5620697eadabca782f49062aa 100644
--- a/app/code/Magento/Translation/view/frontend/templates/translate_inline.phtml
+++ b/app/code/Magento/Translation/view/frontend/templates/translate_inline.phtml
@@ -19,7 +19,7 @@
     <form id="<%- data.id %>">
         <% _.each(data.items, function(item, i) { %>
             <div class="magento_table_container">
-                <table cellspacing="0">
+                <table cellspacing="0" class="table">
                     <% _.each(item, function(value, index) { %>
                         <tr>
                             <th class="label" style="text-transform: capitalize;"><%- index %>:</th>
diff --git a/app/code/Magento/Ui/Component/FilterPool.php b/app/code/Magento/Ui/Component/FilterPool.php
index 6c399f1860cf51a769a8662595ad31a62452e191..fae9e248d58ab64d3efd2c5355a4dd4b6517524d 100644
--- a/app/code/Magento/Ui/Component/FilterPool.php
+++ b/app/code/Magento/Ui/Component/FilterPool.php
@@ -144,7 +144,7 @@ class FilterPool extends AbstractView
             }
             $condition = $this->filterPoolProvider->getFilter($metaData[$field]['filter_type'])->getCondition($value);
             if ($condition !== null) {
-                $collection->addFilter($field, $field, $condition);
+                $collection->addFieldToFilter($field, $condition);
             }
         }
     }
diff --git a/app/code/Magento/Ui/Component/Listing.php b/app/code/Magento/Ui/Component/Listing.php
index 1cfbaa1acd6f32b74a42ed67eff1b24472b41e80..6d8437a886c5e531522c59fe1fae4e13f7461ab3 100644
--- a/app/code/Magento/Ui/Component/Listing.php
+++ b/app/code/Magento/Ui/Component/Listing.php
@@ -188,7 +188,7 @@ class Listing extends AbstractView
     public function getCollectionItems()
     {
         $items = [];
-        $collection = $this->getDataCollection()->getResultCollection();
+        $collection = $this->getDataCollection();
         foreach ($collection->getItems() as $item) {
             $actualFields = [];
             $itemsData = $this->getDataFromDataProvider($item->getData());
@@ -230,8 +230,8 @@ class Listing extends AbstractView
         );
         $this->renderContext->getStorage()->addGlobalData('dump', ['extenders' => []]);
 
-        $collection = $this->getDataCollection()->getResultCollection();
-        $totalCount = $collection->getTotalCount();
+        $collection = $this->getDataCollection();
+        $totalCount = $collection->count();
         $this->renderContext->getStorage()->addDataSource(
             $this->getName(),
             [
diff --git a/app/code/Magento/Ui/Component/Paging.php b/app/code/Magento/Ui/Component/Paging.php
index 9a8f0a5ddd9b4eaedf2f144b484298eed0d0e301..7c504b74ac8303fff539ffe9671af8a9c68039e7 100644
--- a/app/code/Magento/Ui/Component/Paging.php
+++ b/app/code/Magento/Ui/Component/Paging.php
@@ -37,7 +37,10 @@ class Paging extends AbstractView
         $offset = $this->renderContext->getRequestParam('page', $defaultPage);
         $defaultLimit = $this->config->getData('pageSize');
         $size = $this->renderContext->getRequestParam('limit', $defaultLimit);
-        $this->renderContext->getStorage()->getDataCollection($this->getParentName())->setLimit($offset, $size);
+        $this->renderContext->getStorage()
+            ->getDataCollection($this->getParentName())
+            ->setPageSize($size)
+            ->setCurPage($offset);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
index 68af1081739d613c26815a54088cc6e55a6ed431..e8cd28a27665a09b164e93c2f76c58e72ffd1ed7 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
@@ -153,7 +153,7 @@ class PagingTest extends \PHPUnit_Framework_TestCase
             false,
             true,
             true,
-            ['setLimit']
+            ['setPageSize', 'setCurPage']
         );
 
         $this->renderContextMock->expects($this->any())->method('getStorage')->willReturn($storageMock);
@@ -173,8 +173,12 @@ class PagingTest extends \PHPUnit_Framework_TestCase
             );
 
         $dataCollectionMock->expects($this->any())
-            ->method('setLimit')
-            ->with($paramsPage, $paramsSize)
+            ->method('setPageSize')
+            ->with($paramsSize)
+            ->willReturnSelf();
+        $dataCollectionMock->expects($this->any())
+            ->method('setCurPage')
+            ->with($paramsPage)
             ->willReturnSelf();
 
         $this->assertNull($this->view->prepare());
diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json
index 303f152dda5dd73a90eb7292cfb11315ea3af158..f87854f14f8ce4ad5f97595870996f5e3ae8105f 100644
--- a/app/code/Magento/Ui/composer.json
+++ b/app/code/Magento/Ui/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Ui/view/base/templates/form/default.phtml b/app/code/Magento/Ui/view/base/templates/form/default.phtml
index f9510c9f9b387857e88dd65c3c4186dacd3bed0c..7c51b5cb65711b8067c4abc21e1ee53d6f738754 100644
--- a/app/code/Magento/Ui/view/base/templates/form/default.phtml
+++ b/app/code/Magento/Ui/view/base/templates/form/default.phtml
@@ -15,13 +15,11 @@ $formConfig = $block->getRenderContext()->getConfigBuilder()->toJsonNew($block->
         }
     }
 </script>
-<div class="admin__scope">
 <div data-role="spinner" data-component="<?php echo $block->getDataScope(); ?>.areas" class="grid-loading-mask">
     <div class="spinner">
         <span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span>
     </div>
 </div>
-</div>
 <div data-bind="scope: '<?php echo $block->getDataScope(); ?>.areas'">
     <!-- ko template: getTemplate() --><!-- /ko -->
 </div>
diff --git a/app/code/Magento/Ui/view/base/templates/layout/tabs/nav/default.phtml b/app/code/Magento/Ui/view/base/templates/layout/tabs/nav/default.phtml
index db67e197b9d390fcfde700069d2b232a8e71dcb4..46f9c9a8f0ec5672b8b8bed3a9b48fefa7d58bf6 100644
--- a/app/code/Magento/Ui/view/base/templates/layout/tabs/nav/default.phtml
+++ b/app/code/Magento/Ui/view/base/templates/layout/tabs/nav/default.phtml
@@ -7,13 +7,11 @@
  * @var \Magento\Ui\Component\Layout\Tabs\Nav $block
  */
 ?>
-<div class="admin__scope">
 <div data-role="spinner" data-component="<?php echo $block->getDataScope(); ?>.sections" class="grid-loading-mask">
     <div class="spinner">
         <span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span>
     </div>
 </div>
-</div>
 <div data-bind="scope: '<?php echo $block->getDataScope(); ?>.sections' " class="ui-tabs">
     <!-- ko template: getTemplate() --><!-- /ko -->
 </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/content/content.html b/app/code/Magento/Ui/view/base/web/templates/content/content.html
index cc9ae96bf6d379a2b741b72cf57ba9efa7016624..c3d84628b7721cfd63b07a65ab4e66e623b122c9 100644
--- a/app/code/Magento/Ui/view/base/web/templates/content/content.html
+++ b/app/code/Magento/Ui/view/base/web/templates/content/content.html
@@ -4,12 +4,10 @@
  * See COPYING.txt for license details.
  */
 -->
-<div data-bind="html: content"></div>
+<div data-bind="html: content, attr: {class: element.cssclass ? element.cssclass : 'admin__scope-old'}"></div>
 
 <!--ko if: showSpinner -->
-<div class="admin__scope">
 <div data-role="spinner" class="grid-loading-mask" data-bind="visible: loading">
     <div class="spinner"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div>
 </div>
-</div>
 <!-- /ko -->
diff --git a/app/code/Magento/Ui/view/base/web/templates/fieldset/fieldset.html b/app/code/Magento/Ui/view/base/web/templates/fieldset/fieldset.html
index 97407fc8c8641a6bcdd3e3d9718ac977549afb4d..7a5dc7460dc556de2f622e73d39f25f079d80126 100644
--- a/app/code/Magento/Ui/view/base/web/templates/fieldset/fieldset.html
+++ b/app/code/Magento/Ui/view/base/web/templates/fieldset/fieldset.html
@@ -5,7 +5,6 @@
  */
 -->
 <!-- ko if: elems -->
-<div class="admin__scope">
 <div class="admin__fieldset-wrapper" data-bind="css: {'collapsable-wrapper': collapsible, 'opened': opened}">
     <div class="admin__fieldset-wrapper-title" tabindex="3" data-bind="click: onClick, keyboard: { 13: toggle }">
         <strong class="title">
@@ -20,5 +19,4 @@
         </fieldset>
     </div>
 </div>
-</div>
 <!-- /ko -->
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/tab.html b/app/code/Magento/Ui/view/base/web/templates/tab.html
index f194f87400ea02f3a4c3086955196276533193c3..d2ff2cd5e890392506e6bae7d6455af70a97965c 100644
--- a/app/code/Magento/Ui/view/base/web/templates/tab.html
+++ b/app/code/Magento/Ui/view/base/web/templates/tab.html
@@ -4,17 +4,33 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="admin__scope">
-<div class="admin__section-nav">
-    <div class="admin__section-nav-title" data-bind="css: { '_collapsible': collapsible, '_opened': opened() && collapsible }, click: toggle, click: onClick, keyboard: { 13: onClick }">
+<div class="admin__page-nav">
+    <div class="admin__page-nav-title" data-bind="css: { '_collapsible': collapsible, '_opened': opened() && collapsible }, click: toggle, click: onClick, keyboard: { 13: onClick }">
         <strong tabindex="1" data-bind="text: label, keyboard: { 13: toggle }"></strong>
     </div>
-    <ul class="admin__section-nav-items items" data-bind="visible: opened">
+    <ul class="admin__page-nav-items items" data-bind="visible: opened">
         <!-- ko foreach: elems -->
-            <li class="admin__section-nav-item" tabindex="2" data-bind="css: { '_active': active, '_loading': loading }, click: activate, keyboard: { 13: activate }">
-                <a class="admin__section-nav-link" href="#" data-bind="text: label, css: { '_changed': changed }, attr: { id: 'tab_' + index }"></a>
+            <li class="admin__page-nav-item" tabindex="2" data-bind="css: { '_active': active, '_loading': loading }, click: activate, keyboard: { 13: activate }">
+                <a class="admin__page-nav-link" href="#" data-bind="css: { '_changed': changed }, attr: { id: 'tab_' + index }">
+                    <span data-bind="text: label"></span>
+
+                    <span class="admin__page-nav-item-messages">
+                       <span class="admin__page-nav-item-message _changed">
+                           <span class="admin__page-nav-item-message-icon"></span>
+                           <span class="admin__page-nav-item-message-tooltip">
+                               Changes have been made to this section that have not been saved.
+                           </span>
+                       </span>
+                        <span class="admin__page-nav-item-message-loader">
+                           <span class="spinner">
+                               <span></span><span></span><span></span><span></span>
+                               <span></span><span></span><span></span><span></span>
+                           </span>
+                       </span>
+                    </span>
+
+                </a>
             </li>
         <!-- /ko -->
     </ul>
-</div>
 </div>
\ No newline at end of file
diff --git a/app/code/Magento/Ups/Test/Unit/Model/CarrierTest.php b/app/code/Magento/Ups/Test/Unit/Model/CarrierTest.php
index 9f3b8e9f1524124fec08c973395b447fe9b165cd..fa3a5f0d45f7afcceae08acd4b6119ed720f11e3 100644
--- a/app/code/Magento/Ups/Test/Unit/Model/CarrierTest.php
+++ b/app/code/Magento/Ups/Test/Unit/Model/CarrierTest.php
@@ -43,7 +43,7 @@ class CarrierTest extends \PHPUnit_Framework_TestCase
      * @param int $freeShippingSubtotal
      * @param int $requestSubtotal
      * @param int $expectedPrice
-     * covers Magento\Shipping\Model\Carrier\AbstractCarrierOnline::getMethodPrice
+     * @covers \Magento\Shipping\Model\Carrier\AbstractCarrierOnline::getMethodPrice
      */
     public function testGetMethodPrice(
         $cost,
diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json
index 1e20507397b78fe31ab080f62960d85d064aa0b3..20f97b0f584c966aa380087464568b83b37d4634 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.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/UrlRewrite/Block/Catalog/Edit/Form.php b/app/code/Magento/UrlRewrite/Block/Catalog/Edit/Form.php
index 75787c73f571d751fd65b04accb79dbdd52154d8..72896f855e57bc407fe0da9461110c61fb8aaba3 100644
--- a/app/code/Magento/UrlRewrite/Block/Catalog/Edit/Form.php
+++ b/app/code/Magento/UrlRewrite/Block/Catalog/Edit/Form.php
@@ -165,7 +165,7 @@ class Form extends \Magento\UrlRewrite\Block\Edit\Form
      * Get catalog entity associated stores
      *
      * @return array
-     * @throws \Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getEntityStores()
     {
@@ -183,7 +183,7 @@ class Form extends \Magento\UrlRewrite\Block\Edit\Form
                 $entityStores = array_intersect($entityStores, $categoryStores);
             }
             if (!$entityStores) {
-                throw new \Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException(
+                throw new \Magento\Framework\Exception\LocalizedException(
                     __(
                         'We can\'t set up a URL rewrite because the product you chose is not associated with a website.'
                     )
@@ -196,7 +196,7 @@ class Form extends \Magento\UrlRewrite\Block\Edit\Form
                 'We can\'t set up a URL rewrite because the category you chose is not associated with a website.'
             );
             if (!$entityStores) {
-                throw new \Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException($message);
+                throw new \Magento\Framework\Exception\LocalizedException($message);
             }
             $this->_requireStoresFilter = true;
         }
diff --git a/app/code/Magento/UrlRewrite/Block/Cms/Page/Edit/Form.php b/app/code/Magento/UrlRewrite/Block/Cms/Page/Edit/Form.php
index 865e5ccac116789c1741a474daaa9ab896bca005..e3e28f33127c8cfe490a42e01c0069cde42b2e3c 100644
--- a/app/code/Magento/UrlRewrite/Block/Cms/Page/Edit/Form.php
+++ b/app/code/Magento/UrlRewrite/Block/Cms/Page/Edit/Form.php
@@ -99,7 +99,7 @@ class Form extends \Magento\UrlRewrite\Block\Edit\Form
      * Get catalog entity associated stores
      *
      * @return array
-     * @throws \Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getEntityStores()
     {
@@ -112,7 +112,7 @@ class Form extends \Magento\UrlRewrite\Block\Edit\Form
             $this->_requireStoresFilter = !in_array(0, $entityStores);
 
             if (!$entityStores) {
-                throw new \Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException(
+                throw new \Magento\Framework\Exception\LocalizedException(
                     __('Chosen cms page does not associated with any website.')
                 );
             }
diff --git a/app/code/Magento/UrlRewrite/Block/Edit/Form.php b/app/code/Magento/UrlRewrite/Block/Edit/Form.php
index 447c2f12c49b86c088866ac0b0036ef0c7e819a9..b4155ad94ae8d4a089554241c04f21ee05f50a5f 100644
--- a/app/code/Magento/UrlRewrite/Block/Edit/Form.php
+++ b/app/code/Magento/UrlRewrite/Block/Edit/Form.php
@@ -247,7 +247,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             );
             try {
                 $stores = $this->_getStoresListRestrictedByEntityStores($this->_getEntityStores());
-            } catch (\Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException $e) {
+            } catch (\Magento\Framework\Exception\LocalizedException $e) {
                 $stores = [];
                 $storeElement->setAfterElementHtml($e->getMessage());
             }
diff --git a/app/code/Magento/UrlRewrite/Model/EntityNotAssociatedWithWebsiteException.php b/app/code/Magento/UrlRewrite/Model/EntityNotAssociatedWithWebsiteException.php
deleted file mode 100644
index f43f2cb29498a035927e5e29e4736b05e01afb76..0000000000000000000000000000000000000000
--- a/app/code/Magento/UrlRewrite/Model/EntityNotAssociatedWithWebsiteException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\UrlRewrite\Model;
-
-class EntityNotAssociatedWithWebsiteException extends \Exception
-{
-}
diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php
index 4664dd4b7e721371c05b41952df26f45865bcc75..7e8c9bb28bfd46f8d09786460af5346ad8d23952 100644
--- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php
+++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php
@@ -81,8 +81,10 @@ abstract class AbstractStorage implements StorageInterface
 
         try {
             $this->doReplace($urls);
-        } catch (DuplicateEntryException $e) {
-            throw new DuplicateEntryException(__('URL key for specified store already exists.'));
+        } catch (\Magento\Framework\Exception\AlreadyExistsException $e) {
+            throw new \Magento\Framework\Exception\AlreadyExistsException(
+                __('URL key for specified store already exists.')
+            );
         }
     }
 
@@ -91,7 +93,7 @@ abstract class AbstractStorage implements StorageInterface
      *
      * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls
      * @return int
-     * @throws DuplicateEntryException
+     * @throws \Magento\Framework\Exception\AlreadyExistsException
      */
     abstract protected function doReplace($urls);
 
diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
index 519ac3fc6cfc0696c59f3f6288d4bad20ace3f8f..06c0643c6f7bf5736e1cd5eca2872d2aa53915c1 100644
--- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
+++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
@@ -102,7 +102,7 @@ class DbStorage extends AbstractStorage
      *
      * @param array $data
      * @return void
-     * @throws DuplicateEntryException
+     * @throws \Magento\Framework\Exception\AlreadyExistsException
      * @throws \Exception
      */
     protected function insertMultiple($data)
@@ -113,7 +113,9 @@ class DbStorage extends AbstractStorage
             if ($e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY
                 && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage())
             ) {
-                throw new DuplicateEntryException();
+                throw new \Magento\Framework\Exception\AlreadyExistsException(
+                    __('URL key for specified store already exists.')
+                );
             }
             throw $e;
         }
diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DuplicateEntryException.php b/app/code/Magento/UrlRewrite/Model/Storage/DuplicateEntryException.php
deleted file mode 100644
index afb45715f54bd7f3b81611c874462ce7bed7303b..0000000000000000000000000000000000000000
--- a/app/code/Magento/UrlRewrite/Model/Storage/DuplicateEntryException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\UrlRewrite\Model\Storage;
-
-class DuplicateEntryException extends \RuntimeException
-{
-}
diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php
index 1ff45cec5dc60fff10f0b0044817bb8cf4503b68..014c20e854a3caf652c6a64f87446a70f9d55181 100644
--- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php
+++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php
@@ -15,7 +15,7 @@ interface UrlPersistInterface
      *
      * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls
      * @return void
-     * @throws \Magento\UrlRewrite\Model\Storage\DuplicateEntryException
+     * @throws \Magento\Framework\Exception\AlreadyExistsException
      */
     public function replace(array $urls);
 
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php
index 56c97858d72ffe81a311b5a354bf6815fe7aeca1..70d57d2c4498da3efafd388801c6889c83506863 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php
@@ -94,7 +94,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
      * @param bool $withAdmin
      * @param array $condition
      * @dataProvider dataProviderForTestAddStoreIfStoreIsArray
-     * covers \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
+     * @covers \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
      */
     public function testAddStoreFilterIfStoreIsArray($storeId, $withAdmin, $condition)
     {
@@ -121,7 +121,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
      * @param bool $withAdmin
      * @param array $condition
      * @dataProvider dataProviderForTestAddStoreFilterIfStoreIsInt
-     * covers \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
+     * @covers \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
      */
     public function testAddStoreFilterIfStoreIsInt($storeId, $withAdmin, $condition)
     {
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/AbstractStorageTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/AbstractStorageTest.php
index cf4623f3ac12ba59c82f1216da4f5ae33323eaf4..1216e2ab09c6965b0219ecc09aef49d5d6120145 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/AbstractStorageTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/AbstractStorageTest.php
@@ -5,8 +5,6 @@
  */
 namespace Magento\UrlRewrite\Test\Unit\Model\Storage;
 
-use Magento\UrlRewrite\Model\Storage\DuplicateEntryException;
-
 class AbstractStorageTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -117,7 +115,7 @@ class AbstractStorageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \RuntimeException
+     * @expectedException \Magento\Framework\Exception\AlreadyExistsException
      * @expectedExceptionMessage URL key for specified store already exists.
      */
     public function testReplaceIfThrewDuplicateEntryExceptionWithCustomMessage()
@@ -125,7 +123,9 @@ class AbstractStorageTest extends \PHPUnit_Framework_TestCase
         $this->storage
             ->expects($this->once())
             ->method('doReplace')
-            ->will($this->throwException(new DuplicateEntryException('Custom storage message')));
+            ->will($this->throwException(
+                new \Magento\Framework\Exception\AlreadyExistsException(__('Custom storage message'))
+            ));
 
         $this->storage->replace([['UrlRewrite1']]);
     }
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php
index 8931b9531802b40a45302d8990e9ea38ae796e46..3be83d41040fac86f15bea417894fb3ea2561345 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php
@@ -244,7 +244,7 @@ class DbStorageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\UrlRewrite\Model\Storage\DuplicateEntryException
+     * @expectedException \Magento\Framework\Exception\AlreadyExistsException
      */
     public function testReplaceIfThrewDuplicateEntryException()
     {
diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json
index d19f73d7c5f28a6076bbed9b094aa0bbc790fe7d..5c1a1dd683191df1966b8a4097a6916f7e8bfe50 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.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog-url-rewrite": "0.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-cms-url-rewrite": "0.42.0-beta11",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-cms-url-rewrite": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php
old mode 100644
new mode 100755
index ab43536becc1d390e22b6cbf74fcd103d991a701..d9e5da50fc3faa0f5335c4d504e76480a54a9df6
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php
@@ -11,7 +11,7 @@ class Delete extends \Magento\User\Controller\Adminhtml\User\Role
     /**
      * Remove role action
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect|void
      */
     public function execute()
     {
@@ -25,13 +25,19 @@ class Delete extends \Magento\User\Controller\Adminhtml\User\Role
             return;
         }
 
-        try {
-            $this->_initRole()->delete();
-            $this->messageManager->addSuccess(__('You deleted the role.'));
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('An error occurred while deleting this role.'));
-        }
+        $this->_initRole()->delete();
+        $this->messageManager->addSuccess(__('You deleted the role.'));
+        return $this->getDefaultResult();
+    }
 
-        $this->_redirect("*/*/");
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath("*/*/");
     }
 }
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php
old mode 100644
new mode 100755
index dc382c00a17e0df41a3dbc46db36d618b3d6aca4..e5400e79a692ce75c2e69432ed41fabfb38f558f
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php
@@ -52,7 +52,7 @@ class SaveRole extends \Magento\User\Controller\Adminhtml\User\Role
     /**
      * Role form submit action to save or create new role
      *
-     * @return void
+     * @return \Magento\Backend\Model\View\Result\Redirect
      */
     public function execute()
     {
@@ -74,39 +74,41 @@ class SaveRole extends \Magento\User\Controller\Adminhtml\User\Role
         $role = $this->_initRole('role_id');
         if (!$role->getId() && $rid) {
             $this->messageManager->addError(__('This role no longer exists.'));
-            $this->_redirect('adminhtml/*/');
-            return;
+            return $this->getDefaultResult();
         }
 
-        try {
-            $roleName = $this->_filterManager->removeTags($this->getRequest()->getParam('rolename', false));
-
-            $role->setName($roleName)
-                ->setPid($this->getRequest()->getParam('parent_id', false))
-                ->setRoleType(RoleGroup::ROLE_TYPE)
-                ->setUserType(UserContextInterface::USER_TYPE_ADMIN);
-            $this->_eventManager->dispatch(
-                'admin_permissions_role_prepare_save',
-                ['object' => $role, 'request' => $this->getRequest()]
-            );
-            $role->save();
+        $roleName = $this->_filterManager->removeTags($this->getRequest()->getParam('rolename', false));
+        $role->setName($roleName)
+            ->setPid($this->getRequest()->getParam('parent_id', false))
+            ->setRoleType(RoleGroup::ROLE_TYPE)
+            ->setUserType(UserContextInterface::USER_TYPE_ADMIN);
+        $this->_eventManager->dispatch(
+            'admin_permissions_role_prepare_save',
+            ['object' => $role, 'request' => $this->getRequest()]
+        );
+        $role->save();
 
-            $this->_rulesFactory->create()->setRoleId($role->getId())->setResources($resource)->saveRel();
+        $this->_rulesFactory->create()->setRoleId($role->getId())->setResources($resource)->saveRel();
 
-            foreach ($oldRoleUsers as $oUid) {
-                $this->_deleteUserFromRole($oUid, $role->getId());
-            }
+        foreach ($oldRoleUsers as $oUid) {
+            $this->_deleteUserFromRole($oUid, $role->getId());
+        }
 
-            foreach ($roleUsers as $nRuid) {
-                $this->_addUserToRole($nRuid, $role->getId());
-            }
-            $this->messageManager->addSuccess(__('You saved the role.'));
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addError(__('An error occurred while saving this role.'));
+        foreach ($roleUsers as $nRuid) {
+            $this->_addUserToRole($nRuid, $role->getId());
         }
-        $this->_redirect('adminhtml/*/');
-        return;
+        $this->messageManager->addSuccess(__('You saved the role.'));
+        return $this->getDefaultResult();
+    }
+
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Backend\Model\View\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('adminhtml/*/');
     }
 }
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Save.php b/app/code/Magento/User/Controller/Adminhtml/User/Save.php
index 204b188822dbf8935ba57ccdacd7d8438deaf8be..45a960f72e2d48d3accf7931163c206768cd4723 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Save.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Save.php
@@ -83,7 +83,7 @@ class Save extends \Magento\User\Controller\Adminhtml\User
     {
         $this->_getSession()->setUserData($data);
         $arguments = $model->getId() ? ['user_id' => $model->getId()] : [];
-        $arguments = array_merge($arguments, ['_current' => true]);
+        $arguments = array_merge($arguments, ['_current' => true, 'active_tab' => '']);
         $this->_redirect('adminhtml/*/edit', $arguments);
     }
 }
diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json
index b8b8c082c03e2b723ec7e1b596ec2606cacdad6c..b594a2acc6525460f0961f3fad8ccf1c2c77f3c0 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.42.0-beta11",
-        "magento/module-authorization": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-integration": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-authorization": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-integration": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Usps/Test/Unit/Helper/DataTest.php b/app/code/Magento/Usps/Test/Unit/Helper/DataTest.php
index 46f0740b94c84207a735c5ec17afc6217a791190..dec567c7c188affd3aa2d75c1b4ebf0335bb99dd 100644
--- a/app/code/Magento/Usps/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Usps/Test/Unit/Helper/DataTest.php
@@ -23,7 +23,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Usps\Helper\Data::displayGirthValue
+     * @covers \Magento\Usps\Helper\Data::displayGirthValue
      * @dataProvider shippingMethodDataProvider
      */
     public function testDisplayGirthValue($shippingMethod)
@@ -32,7 +32,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Usps\Helper\Data::displayGirthValue
+     * @covers \Magento\Usps\Helper\Data::displayGirthValue
      */
     public function testDisplayGirthValueFalse()
     {
diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json
index 41c06f2dbd0461bc65cb25993b566acbf0530d30..b98f0b6f9aff08165c319b08eea7597015ebb077 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.42.0-beta11",
-        "magento/module-shipping": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/module-config": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-shipping": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/module-config": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable.php
index 594ebf3aa0c37468e8304f461da415eb992169e6..918e6094d9b7e087b2e11f4f1d810cdce14936bd 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable.php
@@ -21,11 +21,6 @@ class Variable extends Action
      */
     protected $_coreRegistry;
 
-    /**
-     * @var \Magento\Backend\Model\View\Result\RedirectFactory
-     */
-    protected $resultRedirectFactory;
-
     /**
      * @var \Magento\Backend\Model\View\Result\ForwardFactory
      */
@@ -49,7 +44,6 @@ class Variable extends Action
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
      * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
      * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
@@ -58,7 +52,6 @@ class Variable extends Action
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Registry $coreRegistry,
-        \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
         \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
         \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
@@ -66,7 +59,6 @@ class Variable extends Action
     ) {
         $this->_coreRegistry = $coreRegistry;
         parent::__construct($context);
-        $this->resultRedirectFactory = $resultRedirectFactory;
         $this->resultForwardFactory = $resultForwardFactory;
         $this->resultJsonFactory = $resultJsonFactory;
         $this->resultPageFactory = $resultPageFactory;
diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json
index c848657430cf42d75dafbb323b7f74f08014e694..3ebd1161f56fe1553a95f86d78d95f41cb53a1bb 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.42.0-beta11",
-        "magento/module-email": "0.42.0-beta11",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-email": "0.74.0-beta2",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Version/composer.json b/app/code/Magento/Version/composer.json
index 54446a457a44db3bc812496b1de1885e3bb3fc63..790873f60c90f7a4ccdeb117ff9215e79d0c6b8a 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.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Webapi/Model/Soap/Fault.php b/app/code/Magento/Webapi/Model/Soap/Fault.php
index c48d6fb55bc1e7f8c82d3301094865bfeae89a2a..c6cf9637602e9a0168de9f13af05fd9306d0bc13 100644
--- a/app/code/Magento/Webapi/Model/Soap/Fault.php
+++ b/app/code/Magento/Webapi/Model/Soap/Fault.php
@@ -9,7 +9,7 @@ namespace Magento\Webapi\Model\Soap;
 
 use Magento\Framework\App\State;
 
-class Fault extends \RuntimeException
+class Fault
 {
     const FAULT_REASON_INTERNAL = 'Internal Error.';
 
@@ -90,24 +90,35 @@ class Fault extends \RuntimeException
      */
     protected $appState;
 
+    /**
+     * @var null|string
+     */
+    protected $stackTrace;
+
+    /**
+     * @var string
+     */
+    protected $message;
+
     /**
      * @param \Magento\Framework\App\RequestInterface $request
      * @param Server $soapServer
-     * @param \Magento\Framework\Webapi\Exception $previousException
+     * @param \Magento\Framework\Webapi\Exception $exception
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param State $appState
      */
     public function __construct(
         \Magento\Framework\App\RequestInterface $request,
         Server $soapServer,
-        \Magento\Framework\Webapi\Exception $previousException,
+        \Magento\Framework\Webapi\Exception $exception,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         State $appState
     ) {
-        parent::__construct($previousException->getMessage(), $previousException->getCode(), $previousException);
-        $this->_soapCode = $previousException->getOriginator();
-        $this->_parameters = $previousException->getDetails();
-        $this->_wrappedErrors = $previousException->getErrors();
+        $this->_soapCode = $exception->getOriginator();
+        $this->_parameters = $exception->getDetails();
+        $this->_wrappedErrors = $exception->getErrors();
+        $this->stackTrace = $exception->getStackTrace() ?: $exception->getTraceAsString();
+        $this->message = $exception->getMessage();
         $this->_request = $request;
         $this->_soapServer = $soapServer;
         $this->_localeResolver = $localeResolver;
@@ -122,10 +133,7 @@ class Fault extends \RuntimeException
     public function toXml()
     {
         if ($this->appState->getMode() == State::MODE_DEVELOPER) {
-            $traceDetail = $this->getPrevious()->getStackTrace()
-                ? $this->getPrevious()->getStackTrace()
-                : $this->getTraceAsString();
-            $this->addDetails([self::NODE_DETAIL_TRACE => "<![CDATA[{$traceDetail}]]>"]);
+            $this->addDetails([self::NODE_DETAIL_TRACE => "<![CDATA[{$this->stackTrace}]]>"]);
         }
         if ($this->getParameters()) {
             $this->addDetails([self::NODE_DETAIL_PARAMETERS => $this->getParameters()]);
@@ -199,6 +207,14 @@ class Fault extends \RuntimeException
         return \Locale::getPrimaryLanguage($this->_localeResolver->getLocale());
     }
 
+    /**
+     * @return string
+     */
+    public function getMessage()
+    {
+        return $this->message;
+    }
+
     /**
      * Generate SOAP fault message in XML format.
      *
diff --git a/app/code/Magento/Webapi/Model/Soap/Server.php b/app/code/Magento/Webapi/Model/Soap/Server.php
index 02370c9fc4f75302e884621d067eb3a5588cc7a0..9e9ee5f9a8db29924b980958f11ef62d9aa4cf7a 100644
--- a/app/code/Magento/Webapi/Model/Soap/Server.php
+++ b/app/code/Magento/Webapi/Model/Soap/Server.php
@@ -86,7 +86,7 @@ class Server
     ) {
         if (!extension_loaded('soap')) {
             throw new \Magento\Framework\Webapi\Exception(
-                'SOAP extension is not loaded.',
+                __('SOAP extension is not loaded.'),
                 0,
                 \Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR
             );
diff --git a/app/code/Magento/Webapi/Test/Unit/Controller/SoapTest.php b/app/code/Magento/Webapi/Test/Unit/Controller/SoapTest.php
index fa71cf08332d5ed0f9f5a1111c1cc5d60ccdd6d7..b1feef3a5282113e8da229caa0cb138b71004dce 100644
--- a/app/code/Magento/Webapi/Test/Unit/Controller/SoapTest.php
+++ b/app/code/Magento/Webapi/Test/Unit/Controller/SoapTest.php
@@ -135,7 +135,7 @@ class SoapTest extends \PHPUnit_Framework_TestCase
     public function testDispatchWithException()
     {
         $exceptionMessage = 'some error message';
-        $exception = new \Magento\Framework\Webapi\Exception($exceptionMessage);
+        $exception = new \Magento\Framework\Webapi\Exception(__($exceptionMessage));
         $this->_soapServerMock->expects($this->any())->method('handle')->will($this->throwException($exception));
         $this->_errorProcessorMock->expects(
             $this->any()
diff --git a/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php b/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php
index 7c0ed509e321d1c348ff54ff7dcda1229b9f675f..ed5d4075fb694d0e5ea85fc9ca4c06264bb5a822 100644
--- a/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php
+++ b/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php
@@ -17,7 +17,7 @@ class ExceptionTest extends \PHPUnit_Framework_TestCase
         $code = 1111;
         $details = ['key1' => 'value1', 'key2' => 'value2'];
         $apiException = new \Magento\Framework\Webapi\Exception(
-            'Message',
+            __('Message'),
             $code,
             \Magento\Framework\Webapi\Exception::HTTP_UNAUTHORIZED,
             $details
@@ -46,13 +46,13 @@ class ExceptionTest extends \PHPUnit_Framework_TestCase
         $this->setExpectedException('InvalidArgumentException', "The specified HTTP code \"{$httpCode}\" is invalid.");
         /** Create \Magento\Framework\Webapi\Exception object with invalid code. */
         /** Valid codes range is from 400 to 599. */
-        new \Magento\Framework\Webapi\Exception('Message', 0, $httpCode);
+        new \Magento\Framework\Webapi\Exception(__('Message'), 0, $httpCode);
     }
 
     public function testGetOriginatorSender()
     {
         $apiException = new \Magento\Framework\Webapi\Exception(
-            'Message',
+            __('Message'),
             0,
             \Magento\Framework\Webapi\Exception::HTTP_UNAUTHORIZED
         );
@@ -67,7 +67,7 @@ class ExceptionTest extends \PHPUnit_Framework_TestCase
     public function testGetOriginatorReceiver()
     {
         $apiException = new \Magento\Framework\Webapi\Exception(
-            'Message',
+            __('Message'),
             0,
             \Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR
         );
diff --git a/app/code/Magento/Webapi/Test/Unit/Model/Soap/FaultTest.php b/app/code/Magento/Webapi/Test/Unit/Model/Soap/FaultTest.php
index fa0c51de71a8019044be6578cd7bab7158450e75..e0ea010724d62b7a97af4d9639e83f27dcacf2cb 100644
--- a/app/code/Magento/Webapi/Test/Unit/Model/Soap/FaultTest.php
+++ b/app/code/Magento/Webapi/Test/Unit/Model/Soap/FaultTest.php
@@ -41,7 +41,7 @@ class FaultTest extends \PHPUnit_Framework_TestCase
         $details = ['param1' => 'value1', 'param2' => 2];
         $code = 111;
         $webapiException = new \Magento\Framework\Webapi\Exception(
-            $message,
+            __($message),
             $code,
             \Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR,
             $details
@@ -211,7 +211,7 @@ XML;
         $details = ['param1' => 'value1', 'param2' => 2];
         $code = 111;
         $webapiException = new \Magento\Framework\Webapi\Exception(
-            $message,
+            __($message),
             $code,
             \Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR,
             $details
diff --git a/app/code/Magento/Webapi/Test/Unit/Model/Soap/Wsdl/GeneratorTest.php b/app/code/Magento/Webapi/Test/Unit/Model/Soap/Wsdl/GeneratorTest.php
index 2cf3ea04adba8613149537bf8dc9225c880032af..1d85bb91709df7d9fc1d839a80d164ef1186df05 100644
--- a/app/code/Magento/Webapi/Test/Unit/Model/Soap/Wsdl/GeneratorTest.php
+++ b/app/code/Magento/Webapi/Test/Unit/Model/Soap/Wsdl/GeneratorTest.php
@@ -204,13 +204,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
             ]
         )->getMock();
 
-        $wsdlGeneratorMock->expects(
-            $this->once()
-        )->method(
-            '_collectCallInfo'
-        )->will(
-            $this->throwException(new \Magento\Framework\Webapi\Exception($exceptionMsg))
-        );
+        $wsdlGeneratorMock->expects($this->once())
+            ->method('_collectCallInfo')
+            ->willThrowException(new \Magento\Framework\Webapi\Exception(__($exceptionMsg)));
 
         $this->assertEquals($genWSDL, $wsdlGeneratorMock->generate($requestedService, 'http://magento.host'));
     }
diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json
index 17d31417ad16d2641472039e26e30ee44d650469..737fbb38189e971ee9bc6d29040a741b1ad88c5e 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.42.0-beta11",
-        "magento/module-authorization": "0.42.0-beta11",
-        "magento/module-integration": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-authorization": "0.74.0-beta2",
+        "magento/module-integration": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-user": "0.42.0-beta11"
+        "magento/module-user": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Weee/Helper/Data.php b/app/code/Magento/Weee/Helper/Data.php
index 85a6fa8e2776a21a2675bb6f3503bd4f6d1b36ca..306e860b7fb556d40dafdfff8178d70898f5e8e6 100644
--- a/app/code/Magento/Weee/Helper/Data.php
+++ b/app/code/Magento/Weee/Helper/Data.php
@@ -400,12 +400,12 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      *
      * @param \Magento\Framework\Object[] $attributes Result from getProductWeeeAttributes()
      * @return float
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getAmountInclTaxes($attributes)
     {
         if (!is_array($attributes)) {
-            throw new \Magento\Framework\Exception('$attributes must be an array');
+            throw new \Magento\Framework\Exception\LocalizedException(__('$attributes must be an array'));
         }
 
         $amount = 0;
diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json
index b68a250e2dc813a378e0c4f395ddaf8c3fc8f9af..25eedfda977a62a7110e0aa1a7193878f846bf34 100644
--- a/app/code/Magento/Weee/composer.json
+++ b/app/code/Magento/Weee/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-tax": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-directory": "0.42.0-beta11",
-        "magento/module-eav": "0.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-quote": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-tax": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-directory": "0.74.0-beta2",
+        "magento/module-eav": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-quote": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php b/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php
index 5dff2e4e507c158af16aa2b4eaab358bca4ddc78..7f9758212a5172c1d62acec7ea756f138b2750d9 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php
@@ -77,7 +77,7 @@ class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\Abs
     }
 
     /**
-     * covers \Magento\Widget\Model\Resource\Layout\Link\Collection::_joinWithUpdate
+     * @covers \Magento\Widget\Model\Resource\Layout\Link\Collection::_joinWithUpdate
      */
     public function testJoinWithUpdate()
     {
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php b/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php
index ad8ce91ec6df3fc2a59226308e518e1e005e9805..44d72494a04be86fcfe79536ab9d6a893a9f0e05 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php
@@ -49,7 +49,7 @@ class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\Abs
     }
 
     /**
-     * covers \Magento\Widget\Model\Resource\Layout\Update\Collection::_joinWithLink
+     * @covers \Magento\Widget\Model\Resource\Layout\Update\Collection::_joinWithLink
      */
     public function testJoinWithLink()
     {
diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json
index e2d2a842edd068dd2c92f4e42bfe93e8c691523c..a1981449435f5125c48e5251ee76eeb14b77ac42 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.42.0-beta11",
-        "magento/module-cms": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-variable": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-cms": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-variable": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Wishlist/Controller/Index/Add.php b/app/code/Magento/Wishlist/Controller/Index/Add.php
old mode 100644
new mode 100755
index d957719932a2bdac2c787d9f46b72e0a7b66bb72..5adebd054bbefa21b0b84c0147be8988fd6a0ad9
--- a/app/code/Magento/Wishlist/Controller/Index/Add.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Add.php
@@ -8,7 +8,7 @@ namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Catalog\Api\ProductRepositoryInterface;
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Wishlist\Controller\IndexInterface;
 
@@ -60,7 +60,7 @@ class Add extends Action\Action implements IndexInterface
     {
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         $session = $this->_customerSession;
diff --git a/app/code/Magento/Wishlist/Controller/Index/Configure.php b/app/code/Magento/Wishlist/Controller/Index/Configure.php
index 61d685b771278add911bb996572a18151d6c82be..8172c895ed70e361cdeff01b31484bd69917a396 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Configure.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Configure.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Wishlist\Controller\IndexInterface;
 
 class Configure extends Action\Action implements IndexInterface
@@ -65,7 +65,7 @@ class Configure extends Action\Action implements IndexInterface
             }
             $wishlist = $this->wishlistProvider->getWishlist($item->getWishlistId());
             if (!$wishlist) {
-                throw new NotFoundException();
+                throw new NotFoundException(__('Page not found.'));
             }
 
             $this->_coreRegistry->register('wishlist_item', $item);
diff --git a/app/code/Magento/Wishlist/Controller/Index/Fromcart.php b/app/code/Magento/Wishlist/Controller/Index/Fromcart.php
old mode 100644
new mode 100755
index 2bf785573e273813fe50c286b3b40f69cada4ab8..085cf426a0a37cacae5decf0bfa6e020e229b6fb
--- a/app/code/Magento/Wishlist/Controller/Index/Fromcart.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Fromcart.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Wishlist\Controller\IndexInterface;
 
 class Fromcart extends Action\Action implements IndexInterface
@@ -32,53 +32,57 @@ class Fromcart extends Action\Action implements IndexInterface
     /**
      * Add cart item to wishlist and remove from cart
      *
-     * @return \Magento\Framework\App\Response\Http
+     * @return \Magento\Framework\Controller\Result\Redirect
      * @throws NotFoundException
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      */
     public function execute()
     {
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         $itemId = (int)$this->getRequest()->getParam('item');
 
         /* @var \Magento\Checkout\Model\Cart $cart */
         $cart = $this->_objectManager->get('Magento\Checkout\Model\Cart');
-        $session = $this->_objectManager->get('Magento\Checkout\Model\Session');
+        $this->_objectManager->get('Magento\Checkout\Model\Session');
 
-        try {
-            $item = $cart->getQuote()->getItemById($itemId);
-            if (!$item) {
-                throw new \Magento\Framework\Exception\LocalizedException(
-                    __('The requested cart item doesn\'t exist.')
-                );
-            }
+        $item = $cart->getQuote()->getItemById($itemId);
+        if (!$item) {
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('The requested cart item doesn\'t exist.')
+            );
+        }
 
-            $productId = $item->getProductId();
-            $buyRequest = $item->getBuyRequest();
+        $productId = $item->getProductId();
+        $buyRequest = $item->getBuyRequest();
 
-            $wishlist->addNewItem($productId, $buyRequest);
+        $wishlist->addNewItem($productId, $buyRequest);
 
-            $productIds[] = $productId;
-            $cart->getQuote()->removeItem($itemId);
-            $cart->save();
-            $this->_objectManager->get('Magento\Wishlist\Helper\Data')->calculate();
-            $productName = $this->_objectManager->get('Magento\Framework\Escaper')
-                ->escapeHtml($item->getProduct()->getName());
-            $wishlistName = $this->_objectManager->get('Magento\Framework\Escaper')
-                ->escapeHtml($wishlist->getName());
-            $this->messageManager->addSuccess(__("%1 has been moved to wish list %2", $productName, $wishlistName));
-            $wishlist->save();
-        } catch (\Magento\Framework\Exception\LocalizedException $e) {
-            $this->messageManager->addError($e->getMessage());
-        } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('We can\'t move the item to the wish list.'));
-        }
+        $productIds[] = $productId;
+        $cart->getQuote()->removeItem($itemId);
+        $cart->save();
+        $this->_objectManager->get('Magento\Wishlist\Helper\Data')->calculate();
+        $productName = $this->_objectManager->get('Magento\Framework\Escaper')
+            ->escapeHtml($item->getProduct()->getName());
+        $wishlistName = $this->_objectManager->get('Magento\Framework\Escaper')
+            ->escapeHtml($wishlist->getName());
+        $this->messageManager->addSuccess(__("%1 has been moved to wish list %2", $productName, $wishlistName));
+        $wishlist->save();
+
+        return $this->getDefaultResult();
+    }
 
-        return $this->getResponse()->setRedirect(
-            $this->_objectManager->get('Magento\Checkout\Helper\Cart')->getCartUrl()
-        );
+    /**
+     * @inheritdoc
+     *
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setUrl($this->_objectManager->get('Magento\Checkout\Helper\Cart')->getCartUrl());
     }
 }
diff --git a/app/code/Magento/Wishlist/Controller/Index/Index.php b/app/code/Magento/Wishlist/Controller/Index/Index.php
index 56f08a2e53190b4d28b46d11c9e23642c6b72ea5..9cb4bbe9fcdb089edab3d242f6a648b128c55890 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Index.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Index.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Wishlist\Controller\IndexInterface;
 
 class Index extends Action\Action implements IndexInterface
@@ -38,7 +38,7 @@ class Index extends Action\Action implements IndexInterface
     public function execute()
     {
         if (!$this->wishlistProvider->getWishlist()) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         $this->_view->loadLayout();
         $this->_view->getLayout()->initMessages();
diff --git a/app/code/Magento/Wishlist/Controller/Index/Plugin.php b/app/code/Magento/Wishlist/Controller/Index/Plugin.php
index 423d631f212d4c3b4cea88a187e04e5a7a9ed486..76c05b3d3e6892a997b04d06d8fcbff0eaa1e8a7 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Plugin.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Plugin.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Customer\Model\Session as CustomerSession;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\App\RequestInterface;
 use Magento\Framework\App\Response\RedirectInterface;
@@ -58,7 +58,7 @@ class Plugin
      * @param \Magento\Framework\App\ActionInterface $subject
      * @param RequestInterface $request
      * @return void
-     * @throws \Magento\Framework\App\Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
      */
     public function beforeDispatch(\Magento\Framework\App\ActionInterface $subject, RequestInterface $request)
     {
@@ -70,7 +70,7 @@ class Plugin
             $this->customerSession->setBeforeWishlistRequest($request->getParams());
         }
         if (!$this->config->isSetFlag('wishlist/general/active')) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
     }
 }
diff --git a/app/code/Magento/Wishlist/Controller/Index/Remove.php b/app/code/Magento/Wishlist/Controller/Index/Remove.php
index 0890e174dd1fc4db6987df35cd92f7867e5ee198..674d1118a614689e2c25958bb205c3eb5be668ae 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Remove.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Remove.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Wishlist\Controller\IndexInterface;
 
 class Remove extends Action\Action implements IndexInterface
@@ -40,11 +40,11 @@ class Remove extends Action\Action implements IndexInterface
         $id = (int)$this->getRequest()->getParam('item');
         $item = $this->_objectManager->create('Magento\Wishlist\Model\Item')->load($id);
         if (!$item->getId()) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         $wishlist = $this->wishlistProvider->getWishlist($item->getWishlistId());
         if (!$wishlist) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
         try {
             $item->delete();
diff --git a/app/code/Magento/Wishlist/Controller/Index/Send.php b/app/code/Magento/Wishlist/Controller/Index/Send.php
index c1ea762f0be24ed13665e2166e3f8772508c6770..6a54e1b7bf9f0ba2da61da6f0976f40f0ab81b9a 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Send.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Send.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Wishlist\Controller\IndexInterface;
 
@@ -98,7 +98,7 @@ class Send extends Action\Action implements IndexInterface
 
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         $sharingLimit = $this->_wishlistConfig->getSharingEmailLimit();
diff --git a/app/code/Magento/Wishlist/Controller/Index/Update.php b/app/code/Magento/Wishlist/Controller/Index/Update.php
index 8e372f3265fe2faadd6e5f1e483ad0cc54e17b77..731a80cd743570abb624ee89bee2fb5a2e5179eb 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Update.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Update.php
@@ -7,7 +7,7 @@
 namespace Magento\Wishlist\Controller\Index;
 
 use Magento\Framework\App\Action;
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Wishlist\Controller\IndexInterface;
 
@@ -61,7 +61,7 @@ class Update extends Action\Action implements IndexInterface
         }
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
-            throw new NotFoundException();
+            throw new NotFoundException(__('Page not found.'));
         }
 
         $post = $this->getRequest()->getPostValue();
diff --git a/app/code/Magento/Wishlist/Model/Item.php b/app/code/Magento/Wishlist/Model/Item.php
index 89c11e487da39cc28c8ea14e964237e4baa5203b..516690383362a739e1feb53af7a2fd13570e99e7 100644
--- a/app/code/Magento/Wishlist/Model/Item.php
+++ b/app/code/Magento/Wishlist/Model/Item.php
@@ -683,7 +683,7 @@ class Item extends AbstractModel implements ItemInterface
     }
 
     /**
-     *Remove option from item options
+     * Remove option from item options
      *
      * @param string $code
      * @return $this
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AddTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AddTest.php
old mode 100644
new mode 100755
index 6b6695e96fa80008a4b0010f77c751f0c8f88e3a..98fbbc933f8a1da2f837a85079624e6ce180a314
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AddTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AddTest.php
@@ -222,10 +222,11 @@ class AddTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @expectedException \Magento\Framework\Exception\NotFoundException
+     */
     public function testExecuteWithoutWishList()
     {
-        $this->setExpectedException('Magento\Framework\App\Action\NotFoundException');
-
         $this->wishlistProvider
             ->expects($this->once())
             ->method('getWishlist')
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php
index 7199faa0652cb2eb5d9af9f4f585d83bd47c1113..94888effcc121310c5f861654cf5638180e11860 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php
@@ -103,10 +103,11 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @expectedException \Magento\Framework\Exception\NotFoundException
+     */
     public function testExecuteWithoutWishlist()
     {
-        $this->setExpectedException('Magento\Framework\App\Action\NotFoundException');
-
         $this->wishlistProvider
             ->expects($this->once())
             ->method('getWishlist')
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php
index 7349d98623d3fde8d9406c2d625399c6fc131252..163cb1367e1c0d90069ab5a45d9240db5a2518de 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php
@@ -63,10 +63,11 @@ class PluginTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @expectedException \Magento\Framework\Exception\NotFoundException
+     */
     public function testBeforeDispatch()
     {
-        $this->setExpectedException('Magento\Framework\App\Action\NotFoundException');
-
         $actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', [], [], '', false);
         $indexController = $this->getMock('Magento\Wishlist\Controller\Index\Index', [], [], '', false);
 
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php
index 9dde615c6d4c0ac0162c82ede0214b4b772d988d..f2c2954f59d739e122c5e7b2b174136a1731cb9a 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php
@@ -133,10 +133,11 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @expectedException \Magento\Framework\Exception\NotFoundException
+     */
     public function testExecuteWithoutItem()
     {
-        $this->setExpectedException('Magento\Framework\App\Action\NotFoundException');
-
         $item = $this->getMock('Magento\Wishlist\Model\Item', [], [], '', false);
         $item
             ->expects($this->once())
@@ -163,10 +164,11 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
         $this->getController()->execute();
     }
 
+    /**
+     * @expectedException \Magento\Framework\Exception\NotFoundException
+     */
     public function testExecuteWithoutWishlist()
     {
-        $this->setExpectedException('Magento\Framework\App\Action\NotFoundException');
-
         $item = $this->getMock('Magento\Wishlist\Model\Item', [], [], '', false);
         $item
             ->expects($this->once())
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fbd2ce5f641ac78949c061f63885d182daaad5c9
--- /dev/null
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php
@@ -0,0 +1,163 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Wishlist\Test\Unit\Controller\Shared;
+
+class AllcartTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Wishlist\Controller\Shared\WishlistProvider|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $wishlistProvider;
+
+    /**
+     * @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    /**
+     * @var \Magento\Wishlist\Model\ItemCarrier|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $itemCarrier;
+
+    /**
+     * @var \Magento\Framework\App\Response\Http|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $response;
+
+    /**
+     * @var \Magento\Framework\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    protected function setUp()
+    {
+        $this->wishlistProvider = $this->getMock(
+            '\Magento\Wishlist\Controller\Shared\WishlistProvider',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->request = $this->getMock('Magento\Framework\App\Request\Http', [], [], '', false);
+        $this->itemCarrier = $this->getMock('Magento\Wishlist\Model\ItemCarrier', [], [], '', false);
+        $this->context = $this->getMock('Magento\Framework\App\Action\Context', [], [], '', false);
+        $this->response = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
+    }
+
+    protected function prepareContext()
+    {
+        $om = $this->getMock('Magento\Framework\App\ObjectManager', [], [], '', false);
+        $eventManager = $this->getMock('Magento\Framework\Event\Manager', null, [], '', false);
+        $url = $this->getMock('Magento\Framework\Url', [], [], '', false);
+        $actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', [], [], '', false);
+        $redirect = $this->getMock('\Magento\Store\App\Response\Redirect', [], [], '', false);
+        $view = $this->getMock('Magento\Framework\App\View', [], [], '', false);
+        $messageManager = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
+
+        $this->context
+            ->expects($this->any())
+            ->method('getObjectManager')
+            ->will($this->returnValue($om));
+        $this->context
+            ->expects($this->any())
+            ->method('getRequest')
+            ->will($this->returnValue($this->request));
+        $this->context
+            ->expects($this->any())
+            ->method('getResponse')
+            ->will($this->returnValue($this->response));
+        $this->context
+            ->expects($this->any())
+            ->method('getEventManager')
+            ->will($this->returnValue($eventManager));
+        $this->context
+            ->expects($this->any())
+            ->method('getUrl')
+            ->will($this->returnValue($url));
+        $this->context
+            ->expects($this->any())
+            ->method('getActionFlag')
+            ->will($this->returnValue($actionFlag));
+        $this->context
+            ->expects($this->any())
+            ->method('getRedirect')
+            ->will($this->returnValue($redirect));
+        $this->context
+            ->expects($this->any())
+            ->method('getView')
+            ->will($this->returnValue($view));
+        $this->context
+            ->expects($this->any())
+            ->method('getMessageManager')
+            ->will($this->returnValue($messageManager));
+    }
+
+    public function getController()
+    {
+        $this->prepareContext();
+        return new \Magento\Wishlist\Controller\Shared\Allcart(
+            $this->context,
+            $this->wishlistProvider,
+            $this->itemCarrier
+        );
+    }
+
+    public function testExecuteWithNoWishlist()
+    {
+        $this->wishlistProvider->expects($this->once())
+            ->method('getWishlist')
+            ->willReturn(false);
+
+        $this->request
+            ->expects($this->once())
+            ->method('initForward')
+            ->will($this->returnValue(true));
+        $this->request
+            ->expects($this->once())
+            ->method('setActionName')
+            ->with('noroute')
+            ->will($this->returnValue(true));
+        $this->request
+            ->expects($this->once())
+            ->method('setDispatched')
+            ->with(false)
+            ->will($this->returnValue(true));
+
+        $controller = $this->getController();
+        $controller->execute();
+    }
+
+    public function testExecuteWithWishlist()
+    {
+        $wishlist = $this->getMockBuilder('Magento\Wishlist\Model\Wishlist')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->wishlistProvider->expects($this->once())
+            ->method('getWishlist')
+            ->willReturn($wishlist);
+
+        $this->request
+            ->expects($this->once())
+            ->method('getParam')
+            ->with('qty')
+            ->will($this->returnValue(2));
+
+        $this->itemCarrier
+            ->expects($this->once())
+            ->method('moveAllToCart')
+            ->with($wishlist, 2)
+            ->will($this->returnValue('http://redirect-url.com'));
+
+        $this->response
+            ->expects($this->once())
+            ->method('setRedirect')
+            ->will($this->returnValue('http://redirect-url.com'));
+
+        $controller = $this->getController();
+        $controller->execute();
+    }
+}
diff --git a/app/code/Magento/Wishlist/Test/Unit/Helper/RssTest.php b/app/code/Magento/Wishlist/Test/Unit/Helper/RssTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a4959ba7e961db3e220fb274bc261f932a5de05
--- /dev/null
+++ b/app/code/Magento/Wishlist/Test/Unit/Helper/RssTest.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Wishlist\Test\Unit\Helper;
+
+class RssTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Wishlist\Helper\Rss
+     */
+    protected $model;
+
+    /**
+     * @var \Magento\Wishlist\Model\WishlistFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $wishlistFactoryMock;
+
+    /**
+     * @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestMock;
+
+    /**
+     * @var \Magento\Framework\Url\DecoderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $urlDecoderMock;
+
+    /**
+     * @var \Magento\Customer\Api\Data\CustomerInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $customerFactoryMock;
+
+    /**
+     * @var \Magento\Customer\Model\Session|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $customerSessionMock;
+
+    /**
+     * @var \Magento\Customer\Api\CustomerRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $customerRepositoryMock;
+
+    /**
+     * @var \Magento\Framework\Module\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManagerMock;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $scopeConfigMock;
+
+    public function setUp()
+    {
+        $this->wishlistFactoryMock = $this->getMockBuilder('Magento\Wishlist\Model\WishlistFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->getMock();
+
+        $this->urlDecoderMock = $this->getMockBuilder('Magento\Framework\Url\DecoderInterface')
+            ->getMock();
+
+        $this->customerFactoryMock = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterfaceFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->customerSessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->customerRepositoryMock = $this->getMockBuilder('Magento\Customer\Api\CustomerRepositoryInterface')
+            ->getMock();
+
+        $this->moduleManagerMock = $this->getMockBuilder('Magento\Framework\Module\Manager')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+            ->getMock();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->model = $objectManager->getObject(
+            'Magento\Wishlist\Helper\Rss',
+            [
+                'wishlistFactory' => $this->wishlistFactoryMock,
+                'httpRequest' => $this->requestMock,
+                'urlDecoder' => $this->urlDecoderMock,
+                'customerFactory' => $this->customerFactoryMock,
+                'customerSession' => $this->customerSessionMock,
+                'customerRepository' => $this->customerRepositoryMock,
+                'moduleManager' => $this->moduleManagerMock,
+                'scopeConfig' => $this->scopeConfigMock,
+            ]
+        );
+    }
+
+    public function testGetWishlistWithWishlistId()
+    {
+        $wishlistId = 1;
+
+        $wishlist = $this->getMockBuilder('Magento\Wishlist\Model\Wishlist')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->wishlistFactoryMock->expects($this->once())
+            ->method('create')
+            ->with([])
+            ->willReturn($wishlist);
+
+        $this->requestMock->expects($this->once())
+            ->method('getParam')
+            ->with('wishlist_id', null)
+            ->willReturn($wishlistId);
+
+        $wishlist->expects($this->once())
+            ->method('load')
+            ->with($wishlistId, null)
+            ->willReturnSelf();
+
+        $this->assertEquals($wishlist, $this->model->getWishlist());
+        // Check that wishlist is cached
+        $this->assertSame($wishlist, $this->model->getWishlist());
+    }
+
+    public function testGetWishlistWithCustomerId()
+    {
+        $customerId = 1;
+        $data = $customerId . ',2';
+
+        $wishlist = $this->getMockBuilder('Magento\Wishlist\Model\Wishlist')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->wishlistFactoryMock->expects($this->once())
+            ->method('create')
+            ->with([])
+            ->willReturn($wishlist);
+
+        $this->requestMock->expects($this->at(0))
+            ->method('getParam')
+            ->with('wishlist_id', null)
+            ->willReturn('');
+
+        $this->urlDecoderMock->expects($this->any())
+            ->method('decode')
+            ->willReturnArgument(0);
+
+        $this->requestMock->expects($this->at(1))
+            ->method('getParam')
+            ->with('data', null)
+            ->willReturn($data);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('getCustomerId')
+            ->willReturn(0);
+
+        $customer = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->customerFactoryMock->expects($this->once())
+            ->method('create')
+            ->with([])
+            ->willReturn($customer);
+
+        $this->customerRepositoryMock->expects($this->never())
+            ->method('getById');
+
+        $customer->expects($this->exactly(2))
+            ->method('getId')
+            ->willReturn($customerId);
+
+        $wishlist->expects($this->once())
+            ->method('loadByCustomerId')
+            ->with($customerId, false)
+            ->willReturnSelf();
+
+        $this->assertEquals($wishlist, $this->model->getWishlist());
+    }
+
+    public function testGetCustomerWithSession()
+    {
+        $customerId = 1;
+        $data = $customerId . ',2';
+
+        $this->urlDecoderMock->expects($this->any())
+            ->method('decode')
+            ->willReturnArgument(0);
+
+        $this->requestMock->expects($this->once())
+            ->method('getParam')
+            ->with('data', null)
+            ->willReturn($data);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('getCustomerId')
+            ->willReturn($customerId);
+
+        $customer = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->customerRepositoryMock->expects($this->once())
+            ->method('getById')
+            ->with($customerId)
+            ->willReturn($customer);
+
+        $this->customerFactoryMock->expects($this->never())
+            ->method('create');
+
+        $this->assertEquals($customer, $this->model->getCustomer());
+        // Check that customer is cached
+        $this->assertSame($customer, $this->model->getCustomer());
+    }
+
+    /**
+     * @param bool $isModuleEnabled
+     * @param bool $isWishlistActive
+     * @param bool $result
+     * @dataProvider dataProviderIsRssAllow
+     */
+    public function testIsRssAllow($isModuleEnabled, $isWishlistActive, $result)
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_Rss')
+            ->willReturn($isModuleEnabled);
+
+        $this->scopeConfigMock->expects($this->any())
+            ->method('isSetFlag')
+            ->with('rss/wishlist/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)
+            ->willReturn($isWishlistActive);
+
+        $this->assertEquals($result, $this->model->isRssAllow());
+    }
+
+    /**
+     * @return array
+     */
+    public function dataProviderIsRssAllow()
+    {
+        return [
+            [false, false, false],
+            [true, false, false],
+            [false, true, false],
+            [true, true, true],
+        ];
+    }
+}
diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json
index 2c765b3762ba323cef4aaaebb924fd2a43965287..567e48897c9d618d940785d8e587c734c49cdc44 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.42.0-beta11",
-        "magento/module-customer": "0.42.0-beta11",
-        "magento/module-catalog": "0.42.0-beta11",
-        "magento/module-checkout": "0.42.0-beta11",
-        "magento/module-theme": "0.42.0-beta11",
-        "magento/module-catalog-inventory": "0.42.0-beta11",
-        "magento/module-rss": "0.42.0-beta11",
-        "magento/module-backend": "0.42.0-beta11",
-        "magento/module-sales": "0.42.0-beta11",
-        "magento/module-grouped-product": "0.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
-        "magento/module-ui": "0.42.0-beta11",
+        "magento/module-store": "0.74.0-beta2",
+        "magento/module-customer": "0.74.0-beta2",
+        "magento/module-catalog": "0.74.0-beta2",
+        "magento/module-checkout": "0.74.0-beta2",
+        "magento/module-theme": "0.74.0-beta2",
+        "magento/module-catalog-inventory": "0.74.0-beta2",
+        "magento/module-rss": "0.74.0-beta2",
+        "magento/module-backend": "0.74.0-beta2",
+        "magento/module-sales": "0.74.0-beta2",
+        "magento/module-grouped-product": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
+        "magento/module-ui": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-configurable-product": "0.42.0-beta11",
-        "magento/module-downloadable": "0.42.0-beta11",
-        "magento/module-bundle": "0.42.0-beta11",
-        "magento/module-cookie": "0.42.0-beta11"
+        "magento/module-configurable-product": "0.74.0-beta2",
+        "magento/module-downloadable": "0.74.0-beta2",
+        "magento/module-bundle": "0.74.0-beta2",
+        "magento/module-cookie": "0.74.0-beta2"
     },
     "type": "magento2-module",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Wishlist/i18n/de_DE.csv b/app/code/Magento/Wishlist/i18n/de_DE.csv
index 364939cebbb084d7898b300060311b23bf45dab1..7d170fb8ee8f5702e701cfb9e889fbfdd62e6c8b 100644
--- a/app/code/Magento/Wishlist/i18n/de_DE.csv
+++ b/app/code/Magento/Wishlist/i18n/de_DE.csv
@@ -1,5 +1,5 @@
 Back,Zurück
-Product,Produkt
+Product Name,Produkt
 Quantity,Quantity
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,Nachricht
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description","Anwender Beschreibung"
+"User Description","Anwender Beschreibung"
 "Product Details and Comment","Produktangaben und Kommentare"
diff --git a/app/code/Magento/Wishlist/i18n/en_US.csv b/app/code/Magento/Wishlist/i18n/en_US.csv
index 125f7266ade2bd3d8df8223912d3dc8cd51e02c8..032419a9e0618024eb892ffb4f2478c25bcb0e12 100644
--- a/app/code/Magento/Wishlist/i18n/en_US.csv
+++ b/app/code/Magento/Wishlist/i18n/en_US.csv
@@ -1,5 +1,5 @@
 Back,Back
-Product,Product
+Product Name,Product Name
 Quantity,Quantity
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,Message
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description","User description"
+"User Description","User Description"
 "Product Details and Comment","Product Details and Comment"
diff --git a/app/code/Magento/Wishlist/i18n/es_ES.csv b/app/code/Magento/Wishlist/i18n/es_ES.csv
index cd8aab6a37915de181661717949dc201d3bf84fa..0c3d383c19eb5b00384fb9278a46f6c6a864dc28 100644
--- a/app/code/Magento/Wishlist/i18n/es_ES.csv
+++ b/app/code/Magento/Wishlist/i18n/es_ES.csv
@@ -1,5 +1,5 @@
 Back,Volver
-Product,Producto
+Product Name,Producto
 Quantity,Quantity
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,Mensaje
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description","Descripción del usuario"
+"User Description","Descripción del usuario"
 "Product Details and Comment","Detalles del producto y comentarios"
diff --git a/app/code/Magento/Wishlist/i18n/fr_FR.csv b/app/code/Magento/Wishlist/i18n/fr_FR.csv
index 512c6ad4ec38dca4642b48a2142c82c82f112175..393bd7ad11c2455ddb548f10a17cb532ea4c10d1 100644
--- a/app/code/Magento/Wishlist/i18n/fr_FR.csv
+++ b/app/code/Magento/Wishlist/i18n/fr_FR.csv
@@ -1,5 +1,5 @@
 Back,Retour
-Product,Produit
+Product Name,Produit
 Quantity,Quantity
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,Message
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description","Description utilisateur"
+"User Description","Description utilisateur"
 "Product Details and Comment","Détails et commentaires sur le produit"
diff --git a/app/code/Magento/Wishlist/i18n/nl_NL.csv b/app/code/Magento/Wishlist/i18n/nl_NL.csv
index 9a25398b7cdadff32bdf1964fd0730304487edc4..8742b17c50cbdcfb6999186862a5f55e8c634d66 100644
--- a/app/code/Magento/Wishlist/i18n/nl_NL.csv
+++ b/app/code/Magento/Wishlist/i18n/nl_NL.csv
@@ -1,5 +1,5 @@
 Back,Terug
-Product,Product
+Product Name,Product
 Quantity,Quantity
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,Boodschap
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description","Gebruikers beschrijving"
+"User Description","Gebruikers beschrijving"
 "Product Details and Comment","Product Details en het Commentaar"
diff --git a/app/code/Magento/Wishlist/i18n/pt_BR.csv b/app/code/Magento/Wishlist/i18n/pt_BR.csv
index 9e297438a2bcf5cd7e22a01ca82fd6f2e093fa91..21f4da865aca77be54eddc52c8e5761342522e44 100644
--- a/app/code/Magento/Wishlist/i18n/pt_BR.csv
+++ b/app/code/Magento/Wishlist/i18n/pt_BR.csv
@@ -1,5 +1,5 @@
 Back,Voltar
-Product,Produto
+Product Name,Produto
 Quantity,Quant.
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,Mensagem
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description","Descrição do usuário"
+"User Description","Descrição do usuário"
 "Product Details and Comment","Detalhes de produto e comentários"
diff --git a/app/code/Magento/Wishlist/i18n/zh_CN.csv b/app/code/Magento/Wishlist/i18n/zh_CN.csv
index 9c0338dae00531b3e39f990261d1e320b326d29b..5ad8d2e6066973040f76226ddae69ca8b2733964 100644
--- a/app/code/Magento/Wishlist/i18n/zh_CN.csv
+++ b/app/code/Magento/Wishlist/i18n/zh_CN.csv
@@ -1,5 +1,5 @@
 Back,返回
-Product,产品
+Product Name,产品
 Quantity,Quantity
 Configure,Configure
 "You added %1 to your shopping cart.","You added %1 to your shopping cart."
@@ -101,5 +101,5 @@ Message,信息
 "My Wish List Link","My Wish List Link"
 "Display Wish List Summary","Display Wish List Summary"
 "No Items Found","No Items Found"
-"User description",用户描述
+"User Description",用户描述
 "Product Details and Comment",产品详情与评论
diff --git a/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml b/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml
index 9f4c0cc8513679c3f977fd8e4f83f8249d08a2a4..599991c00bccd6551091ddd1aae37db7e45f2971 100644
--- a/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml
+++ b/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml
@@ -32,7 +32,7 @@
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\Column" as="product_name">
                     <arguments>
-                        <argument name="header" xsi:type="string" translate="true">Product</argument>
+                        <argument name="header" xsi:type="string" translate="true">Product Name</argument>
                         <argument name="id" xsi:type="string">product_name</argument>
                         <argument name="index" xsi:type="string">product_name</argument>
                         <argument name="filter" xsi:type="string">Magento\Wishlist\Block\Adminhtml\Widget\Grid\Column\Filter\Text</argument>
@@ -43,7 +43,7 @@
                 </block>
                 <block class="Magento\Backend\Block\Widget\Grid\Column" as="description">
                     <arguments>
-                        <argument name="header" xsi:type="string" translate="true">User description</argument>
+                        <argument name="header" xsi:type="string" translate="true">User Description</argument>
                         <argument name="index" xsi:type="string">description</argument>
                         <argument name="id" xsi:type="string">description</argument>
                         <argument name="renderer" xsi:type="string">Magento\Customer\Block\Adminhtml\Edit\Tab\Wishlist\Grid\Renderer\Description</argument>
diff --git a/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js b/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js
index 733448e77319ba27a2481791aac0217e6846456f..420388ee1b869e529fae674dc50789bb6780b477 100644
--- a/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js
+++ b/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js
@@ -39,14 +39,18 @@ define([
                 dataOrigin = $.extend({}, dataOrigin, self._getElementData(element, 1));
                 if ($(element).is(':checked') || $(element).find(':checked').length) {
                     dataToAdd = $.extend({}, dataToAdd, self._getElementData(element));
+                } else {
+                    dataToAdd = dataOrigin;
                 }
             });
             $('[data-action="add-to-wishlist"]').each(function(index, element) {
                 var params = $(element).data('post');
                 if (!params)
                     params = {};
+
                 self._removeExcessiveData(params, dataOrigin, dataToAdd);
                 params.data = $.extend({}, params.data, dataToAdd, {'qty': $(self.options.qtyInfo).val()});
+
                 $(element).data('post', params);
             });
             event.stopPropagation();
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml
index 2c46eb45d6bd66a1f9e695eea71ed635646f3454..254c75d0eb6808f9dc1610567450dddaae03013c 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml
@@ -9,16 +9,13 @@
     <head>
         <css src="mui/mui_legacy.css"/>
         <css src="css/styles-old.css"/>
-        <css src="css/styles-migration.css"/> <!-- New styles scope -->
+        <css src="css/styles.css"/>
     </head>
 
     <body>
 
         <referenceContainer name="page.wrapper">
-            <container name="header.wrapper.scope" before="-" htmlTag="div" htmlClass="admin__scope"/>
-            <container name="menu.wrapper.scope" before="-" htmlTag="div" htmlClass="admin__scope">
-                <container name="menu.wrapper" before="-" htmlTag="div" htmlClass="menu-wrapper"/>
-            </container>
+            <container name="menu.wrapper" before="-" htmlTag="div" htmlClass="menu-wrapper"/>
         </referenceContainer>
 
         <referenceContainer name="header" htmlClass="page-header row">
@@ -29,8 +26,6 @@
         <move element="page.menu" destination="menu.wrapper" />
         <move element="logo" before="-" destination="menu.wrapper" />
 
-        <move element="header" destination="header.wrapper.scope" />
-        <move element="notices.wrapper" before="header" destination="header.wrapper.scope" />
         <move element="page.title" before="-" destination="header.inner.left" />
         <move element="user" before="-" destination="header.inner.right" />
         <move element="notification.messages" after="user" destination="header.inner.right" />
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/styles.xml b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/styles.xml
index 4215232ebe558e505152f816e3d35c2730efd44e..c9656e9f2858bf7f5399defa0b2158f9c1a74a9d 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/styles.xml
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/styles.xml
@@ -9,10 +9,11 @@
     <head>
         <remove src="mui/mui_legacy.css"/>
         <remove src="css/styles-old.css"/>
-        <remove src="css/styles-migration.css"/>
         <remove src="jquery/farbtastic/css/farbtastic.css"/>
 
         <css src="css/styles.css"/>
     </head>
-    <body/>
+    <body>
+        <referenceContainer name="admin.scope.col.wrap" htmlClass="admin__old" /> <!-- ToDo UI: remove this wrapper with old styles removal. The class name "admin__old" is for tests only, we shouldn't use it in any way -->
+    </body>
 </page>
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/_module.less
index 9b14865f6d62768c588f62d85b2eca526dfa81f0..9f68cdefd0ce9754a52bb2f75cd5a4181c372605 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/_module.less
@@ -17,3 +17,4 @@
 //  _____________________________________________
 
 @import 'module/pages/_dashboard.less';
+@import 'module/pages/_login.less';
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module.less
index f44522671c3614ccba264599fe80ef790c41f147..e28aa1e58bfac4f25b7e5658384b79bd1eb2d221 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module.less
@@ -17,15 +17,6 @@
     background-color: #fff;
     border: 1px solid #ada89e;
     border-radius: 2px;
-    .search-global-field & {
-        position: static;
-        display: block;
-        vertical-align: baseline;
-        width: auto;
-        background-color: transparent;
-        border: none;
-        border-radius: 0;
-    }
     &:after {
         position: absolute;
         top: 3px;
@@ -41,9 +32,6 @@
         content: '\e01f'; // search icon
         font-size: 18px;
         color: #b2b2b2;
-        .search-global-field & {
-            display: none;
-        }
     }
     input[type="search"],
     input.search {
@@ -60,6 +48,19 @@
     }
 }
 
+.search-global-field .mage-suggest {
+    position: static;
+    display: block;
+    vertical-align: baseline;
+    width: auto;
+    background-color: transparent;
+    border: none;
+    border-radius: 0;
+    &:after {
+        display: none;
+    }
+}
+
 .mage-suggest-dropdown {
     position: absolute;
     left: 0;
@@ -92,6 +93,7 @@
         padding: 6px 12px 5px;
         text-decoration: none;
         color: #333;
+        height: inherit !important;
     }
     .jstree {
         li a:hover,
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_main.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_main.less
index ee8c79be62fb1eb614592bd4bb1892301e068b5b..ce8cabfbf381ecf61580c00ad505438dce8f9aa4 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_main.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_main.less
@@ -12,3 +12,4 @@
 //  ---------------------------------------------
 
 @import 'main/_actions-bar.less';
+@import 'main/_page-nav.less';
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_menu.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_menu.less
index 10dc09d4a73839bcc14dcbd8c9ea9638b6b309f2..c64513ee36887a1a8461b8f0aac898dbc643a79b 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_menu.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_menu.less
@@ -15,9 +15,9 @@
 
 @menu__background-color: @color-very-dark-grayish-orange;
 
-@menu-logo__margin-bottom: 2.2rem;
-@menu-logo__outer-size: @menu-logo__padding-vertical + @menu-logo-img__height + @menu-logo__margin-bottom;
-@menu-logo__padding-vertical: 1.2rem;
+@menu-logo__padding-bottom: 2.2rem;
+@menu-logo__outer-size: @menu-logo__padding-top + @menu-logo-img__height + @menu-logo__padding-bottom;
+@menu-logo__padding-top: 1.2rem;
 @menu-logo-img__height: 4.1rem;
 @menu-logo-img__width: 3.5rem;
 
@@ -68,12 +68,27 @@
     }
     .logo {
         display: block;
-        height: @menu-logo-img__height + @menu-logo__padding-vertical * 2;
-        margin-bottom: @menu-logo__margin-bottom - @menu-logo__padding-vertical;
-        padding: @menu-logo__padding-vertical 0;
+        height: @menu-logo-img__height + @menu-logo__padding-top + @menu-logo__padding-bottom;
+        padding: @menu-logo__padding-top 0 @menu-logo__padding-bottom;
         position: relative;
         text-align: center;
         z-index: @menu__z-index;
+        &:focus {
+            background-color: @menu-item__active__background-color;
+            box-shadow: none;
+            + .admin__menu {
+                .level-0 {
+                    &:first-child {
+                        > a {
+                            background-color: @menu__background-color;
+                            &:after {
+                                display: none;
+                            }
+                        }
+                    }
+                }
+            }
+        }
         &:hover {
             .logo-img {
                 -webkit-filter: brightness(1.1);
@@ -133,7 +148,6 @@
         }
         //  Hover & active state for menu level 0 item
         &._active,
-        &._hover,
         &:hover {
             > a {
                 background-color: @menu-item__active__background-color;
@@ -185,19 +199,13 @@
             transition: all .5s ease;
             visibility: hidden;
             z-index: @submenu__z-index;
-            &._show {
+        }
+        &._show  {
+            > .submenu {
                 left: 100%;
                 visibility: visible;
             }
         }
-        &._recent {
-            &._hover {
-                .submenu {
-                    left: 100%;
-                    visibility: visible;
-                }
-            }
-        }
     }
 
     .level-1 {
@@ -220,13 +228,13 @@
         }
         a {
             color: @submenu-link__color;
-            .keyfocus & {
+            ._keyfocus & {
                 text-decoration: none;
             }
             &:active,
             &:focus {
                 box-shadow: none;
-                .keyfocus & {
+                ._keyfocus & {
                     background-color: @submenu-link__focus__background-color;
                 }
             }
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_page-nav.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_page-nav.less
new file mode 100644
index 0000000000000000000000000000000000000000..f97ba9ca38830c770729daedf4b034a5e5dde311
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_page-nav.less
@@ -0,0 +1,310 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Variables
+//  _____________________________________________
+
+@admin__page-nav__background-color: @color-white-fog2;
+@admin__page-nav__border-color: @border__color;
+
+@admin__page-nav-title__color: @color-very-dark-gray-black;
+@admin__page-nav-title__border-color: @border__color;
+@admin__page-nav-title__collapsible__background-color: @page-wrapper__background-color;
+@admin__page-nav-title__collapsible__active__background-color: @color-white-fog2;
+@admin__page-nav-title__font-size: @font-size__base;
+
+@admin__page-nav-item__border-color: @border__color;
+@admin__page-nav-item__margin-vertical: 1.3rem;
+@admin__page-nav-item__margin-horizontal: .7rem;
+@admin__page-nav-item__active__color: @color-phoenix;
+@admin__page-nav-item__hover__background-color: darken(@admin__page-nav__background-color, 5%);
+
+@admin__page-nav-link__color: @color-very-dark-gray-black;
+@admin__page-nav-link__padding: 2rem 4rem 2rem 1rem;
+@admin__page-nav-link__hover__color: @color-very-dark-gray-black;
+@admin__page-nav-link__changed__color: @color-very-dark-gray;
+
+@admin__page-nav-icon-up__content: @icon-caret-up__content;
+@admin__page-nav-icon-down__content: @icon-caret-down__content;
+@admin__page-nav-icon-changed__content: @icon-edit__content;
+@admin__page-nav-icon-error__content: @icon-warning__content;
+@admin__page-nav-icon-error__color: @color-phoenix;
+
+@admin__page-nav-item-message-loader__font-size: 2rem;
+@admin__page-nav-tooltip__background: @admin__page-nav__background-color;
+@admin__page-nav-tooltip__box-shadow: 0 3px 9px 0 rgba(0, 0, 0, .3);
+@admin__page-nav-tooltip__z-index1: @field-tooltip__z-index;
+@admin__page-nav-tooltip__border-color: @color-gray75;
+
+@admin__page-nav-transition: border-color .1s ease-out, background-color .1s ease-out;
+
+//
+//  Page Nav (can be simple and collapsed)
+//  _____________________________________________
+
+.admin__page-nav {
+    background: @admin__page-nav__background-color;
+    border: 1px solid @admin__page-nav__border-color;
+
+    &._collapsed {
+        &:first-child {
+            border-bottom: none;
+        }
+        &._show {
+            border-bottom: 1px solid @admin__page-nav__border-color;
+            ._collapsible {
+                background: @admin__page-nav-title__collapsible__active__background-color;
+                &:after {
+                    content: @admin__page-nav-icon-up__content;
+                }
+                + .admin__page-nav-items {
+                    display: block;
+                }
+            }
+        }
+        &._hide {
+            .admin__page-nav-title-messages {
+                display: inline-block;
+                ._active {
+                    display: inline-block;
+                }
+            }
+        }
+    }
+
+    + ._collapsed {
+        border-bottom: none;
+        border-top: none;
+    }
+}
+
+.admin__page-nav-title {
+    border-bottom: 1px solid @admin__page-nav-title__border-color;
+    color: @admin__page-nav-title__color;
+    display: block;
+    font-size: @admin__page-nav-title__font-size;
+    line-height: @line-height__s;
+    margin: 0 0 -1px;
+    padding: 1.8rem 1.5rem;
+    position: relative;
+    text-transform: uppercase;
+
+    &._collapsible {
+        background: @admin__page-nav-title__collapsible__background-color;
+        cursor: pointer;
+        margin: 0;
+        padding-right: 3.5rem;
+        transition: @admin__page-nav-transition;
+
+        + .admin__page-nav-items {
+            display: none;
+            margin-top: -1px;
+        }
+
+        &:after {
+            &:extend(.abs-icon all);
+            content: @admin__page-nav-icon-down__content;
+            font-size: 1.3rem;
+            font-weight: @font-weight__bold;
+            position: absolute;
+            right: 1.8rem;
+            top: 2rem;
+        }
+
+        &:hover {
+            background: @admin__page-nav-title__collapsible__active__background-color;
+        }
+
+        &:last-child {
+            margin: 0 0 -1px;
+        }
+    }
+    strong {
+        font-weight: @font-weight__bold;
+    }
+    .admin__page-nav-title-messages {
+        display: none;
+    }
+}
+
+.admin__page-nav-items {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+.admin__page-nav-item {
+    border-left: 3px solid transparent;
+    margin-left: @admin__page-nav-item__margin-horizontal;
+    padding: 0;
+    position: relative;
+    transition: @admin__page-nav-transition;
+
+    &:hover {
+        border-color: @admin__page-nav-item__hover__background-color;
+        .admin__page-nav-link {
+            background: @admin__page-nav-item__hover__background-color;
+            color: @admin__page-nav-link__hover__color;
+            text-decoration: none;
+        }
+    }
+
+    &._active,
+    &.ui-state-active {
+        border-color: @admin__page-nav-item__active__color;
+        .admin__page-nav-link {
+            background: @admin__page-nav-title__collapsible__background-color;
+            border-color: @admin__page-nav-item__border-color;
+            border-right: 1px solid @admin__page-nav-title__collapsible__background-color;
+            color: @admin__page-nav-link__hover__color;
+            margin-right: -1px;
+        }
+    }
+
+    &._active,
+    &.ui-state-active {
+        .admin__page-nav-link {
+            font-weight: @font-weight__semibold;
+        }
+    }
+
+    &._loading,
+    &.ui-tabs-loading {
+        &:before {
+            display: none;
+        }
+        .admin__page-nav-item-message-loader {
+            display: inline-block;
+        }
+    }
+
+    &:last-child {
+        margin-bottom: @admin__page-nav-item__margin-vertical;
+    }
+}
+
+
+.admin__page-nav-link {
+    border: 1px solid transparent;
+    border-width: 1px 0;
+    color: @admin__page-nav-link__color;
+    display: block;
+    font-weight: @font-weight__heavier;
+    line-height: @line-height__s;
+    margin: 0 0 -1px;
+    padding: @admin__page-nav-link__padding;
+    transition: @admin__page-nav-transition;
+    word-break: break-all;
+
+    &._changed {
+        .admin__page-nav-item-message {
+            &._changed {
+                display: inline-block;
+            }
+        }
+    }
+
+    &._error {
+        .admin__page-nav-item-message {
+            &._error {
+                display: inline-block;
+            }
+        }
+    }
+}
+
+//  Messages in tooltip
+
+.admin__page-nav-item-messages {
+    display: inline-block;
+
+    .admin__page-nav-item-message {
+        position: relative;
+        &:hover {
+            z-index: @admin__page-nav-tooltip__z-index;
+            .admin__page-nav-item-message-tooltip {
+                display: block;
+            }
+        }
+
+        &._error,
+        &._changed {
+            display: none;
+            .admin__page-nav-item-message-icon {
+                &:extend(.abs-icon all);
+                display: inline-block;
+                font-size: @admin__page-nav-title__font-size;
+                padding-left: .8em;
+                vertical-align: top;
+                &:after {
+                    color: @admin__page-nav-link__changed__color;
+                    content: @admin__page-nav-icon-changed__content;
+                }
+            }
+        }
+
+        &._error {
+            .admin__page-nav-item-message-icon {
+                &:after {
+                    color: @admin__page-nav-icon-error__color;
+                    content: @admin__page-nav-icon-error__content;
+                }
+            }
+        }
+    }
+
+    .admin__page-nav-item-message-loader {
+        display: none;
+        margin-top: -(@admin__page-nav-item-message-loader__font-size/2);
+        position: absolute;
+        right: 0;
+        top: 50%;
+        .spinner {
+            font-size: @admin__page-nav-item-message-loader__font-size;
+            margin-right: 1.5rem;
+        }
+    }
+
+    .admin__page-nav-item-message-tooltip {
+        background: @admin__page-nav-tooltip__background;
+        border: 1px solid @admin__page-nav-tooltip__background;
+        border-radius: 1px;
+        bottom: 3.7rem;
+        box-shadow: @admin__page-nav-tooltip__box-shadow;
+        display: none;
+        font-weight: @font-weight__regular;
+        left: -1rem;
+        line-height: @line-height__base;
+        padding: 2rem;
+        position: absolute;
+        text-transform: none;
+        width: 27rem;
+        word-break: normal;
+        z-index: 2;
+        &:after,
+        &:before {
+            .arrow(
+            @_position: down,
+            @_size: 15px,
+            @_color: @admin__page-nav-tooltip__background
+            );
+            content: '';
+            display: block;
+            left: 2rem;
+            position: absolute;
+            top: 100%;
+            z-index: 3;
+        }
+        &:after {
+            border-top-color: @admin__page-nav-tooltip__background;
+            margin-top: -1px;
+            z-index: 4;
+        }
+        &:before {
+            border-top-color: @admin__page-nav-tooltip__border-color;
+        }
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_dashboard.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_dashboard.less
index 9c5d8803f41d21ce991120baaeac420f56e82e65..1d9ddf540b3b4a75e31ae5757aaf17f4ef2f1733 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_dashboard.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_dashboard.less
@@ -27,8 +27,10 @@
             padding-left: 0;
         }
     }
-    th {
-        border-top: 0;
+    &.table {
+        th {
+            border-top: 0;
+        }
     }
 
     //  Primary column
@@ -161,6 +163,7 @@
 .dashboard-store-stats {
     .ui-tabs {
         .extend__clearfix();
+        margin-bottom: 0;
         position: relative;
         &:before {
             .background-gradient(
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_login.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_login.less
similarity index 100%
rename from app/design/adminhtml/Magento/backend/web/css/source/_login.less
rename to app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_login.less
diff --git a/app/design/adminhtml/Magento/backend/Magento_Catalog/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_Catalog/web/css/source/module.less
index cf85292e70a27afb8095de3dc310438cbcca66b7..ed15eb1f6c5e0721244aec6a8837071fb4668a22 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Catalog/web/css/source/module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Catalog/web/css/source/module.less
@@ -3,8 +3,8 @@
 //  * See COPYING.txt for license details.
 //  */
 
-.catalog-category-edit {
-    .col-2-left-layout:before {
+.catalog-category-edit.page-layout-admin-2columns-left {
+    .page-columns:before {
         display: none;
     }
 }
diff --git a/app/design/adminhtml/Magento/backend/Magento_Downloadable/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_Downloadable/web/css/source/_module.less
new file mode 100644
index 0000000000000000000000000000000000000000..af531ff02ac2067b0fc1d51bab40c460070df5a3
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_Downloadable/web/css/source/_module.less
@@ -0,0 +1,81 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Variables
+//  _____________________________________________
+
+// @todo ui - rebuilt with common classes for table control and file upload ui component
+
+//
+//  File uploads dynamic control
+//  ---------------------------------------------
+
+.downloadable-form {
+    .col-price,
+    .col-limit,
+    .col-share,
+    .col-sort {
+        width: 1%;
+    }
+    .col-action {
+        width: 1px;
+    }
+    td {
+        &.col-limit {
+            white-space: nowrap;
+        }
+    }
+    .admin__control-table {
+        .admin__control-text {
+            margin-bottom: .5rem;
+            min-width: 6rem;
+        }
+    }
+    .files,
+    .files-wide {
+        .row {
+            margin: .7rem 0;
+            > .admin__control-text {
+                margin-top: .7rem;
+            }
+        }
+        .uploader {
+            margin: .5rem 0;
+        }
+        .fileinput-button {
+            color: @link__color;
+            cursor: pointer;
+            display: inline-block;
+            float: none;
+            margin: .5rem 0;
+            text-decoration: none;
+            &:hover {
+                color: @link__hover__color;
+                text-decoration: underline;
+            }
+        }
+
+    }
+    .action-remove {
+        .button-reset();
+        .icon-font(
+            @icon-delete__content,
+            @icons-admin__font-name,
+            @_icon-font-size: 1.8rem,
+            @_icon-font-line-height: 16px,
+            @_icon-font-text-hide: true,
+            @_icon-font-position: after,
+            @_icon-font-color: @color-brown-darkie
+        );
+        margin-top: .5rem;
+    }
+}
+
+@-moz-document url-prefix() { // Firefox fieldset overflow bug fix
+    .downloadable-form {
+        display: table-column;
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/module.less
index d2a26cd014cec8d9b769a75b92c4849b18d06eef..c987e84d5ba9b89d2715863d252f4d66d25d5192 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/module.less
@@ -3,8 +3,14 @@
 //  * See COPYING.txt for license details.
 //  */
 
-.action-add.mselect-button-add {
-    &:extend(button all);
+.block-footer .action-add {
+    &:extend(.admin__scope-old button all);
+}
+
+.mselect-items-wrapper {
+    button {
+        .button-reset();
+    }
 }
 
 .block.mselect-list {
diff --git a/app/design/adminhtml/Magento/backend/Magento_Theme/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_Theme/web/css/source/module.less
index cba7db484ffd93b0c197b7960b1773220277f79b..478bb5847fce9b57b73dc0b483e73dbfc2775158 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Theme/web/css/source/module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Theme/web/css/source/module.less
@@ -5,65 +5,6 @@
 
 // @group Header
 
-
-// Base
-
-html {
-    font-size: 62.5%;
-    -webkit-text-size-adjust: 100%;
-    -ms-text-size-adjust: 100%;
-    font-size-adjust: 100%;
-}
-
-body,
-html {
-    height: 100%;
-    min-height: 100%;
-}
-
-body {
-    color: @baseColor;
-    font-family: @baseFont;
-    line-height: @baseLineHeight;
-    font-weight: @baseFontWeight;
-    .font-size(@baseFontSize);
-    background: #f5f5f5;
-    .vendor-prefix-display(flex);
-    .vendor-prefix-flex-direction(column);
-    & > * {
-        .vendor-prefix-flex-grow(0);
-        .vendor-prefix-flex-shrink(0);
-        .vendor-prefix-flex-basis(auto);
-    }
-}
-
-.page-wrapper {
-    max-width: 100%;
-    min-width: @layout__min-width + 2 * @layout-indent__width;
-    margin-left: 8.8rem; // migration styles -> @menu__width
-    background-color: #fff;
-    box-sizing: border-box;
-}
-
-.page-actions {
-    &.fixed &-inner {
-        &:extend(._layout-width all);
-    }
-    &.fixed &-buttons {
-        padding-right: 15px;
-    }
-}
-
-.page-content {
-    &:extend(._layout-width all);
-    .clearer();
-    min-height: 20rem; // ToDo UI: delete if sticky footer
-}
-
-.page-wrapper > .page-content {
-    margin-bottom: 20px;
-}
-
 button {
     border-radius: 2px;
     .button();
@@ -72,46 +13,30 @@ button {
     }
 }
 
-//.actions-split {
-//    button {
-//        margin-left: 0 !important;
-//    }
-//    .dropdown-split(
-//        @_toggle-selector: ~".action-toggle",
-//        @_button-selector: ~".action-default",
-//        @_options-selector :  ~".dropdown-menu",
-//        @_dropdown-split-button-border-radius-fix: true,
-//        @_dropdown-split-list-min-width: 175px
-//    );
-//    vertical-align: middle;
-//    .action-toggle:after {
-//        height: 13px;
-//    }
-//}
+.main-col {
+    min-height: 20rem; // ToDo UI: delete if sticky footer
+}
 
 //
-// Icons
-//--------------------------------------
-.icon-error {
-  margin-left: 15px;
-  color: #c00815;
-  font-size: 11px;
-  &:before {
-    font-family: 'MUI-Icons';
-    content: "\e086";
-    font-size: 13px;
-    line-height: 13px;
-    overflow: hidden;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    display: inline-block;
-    vertical-align: middle;
-    text-align: center;
-    margin: -1px 5px 0 0;
-  }
-}
+//  Icons
+//  ---------------------------------------------
 
-.ui-widget-overlay {
-    position: fixed;
+.icon-error {
+    margin-left: 15px;
+    color: #c00815;
+    font-size: 11px;
+    &:before {
+        font-family: 'MUI-Icons';
+        content: "\e086";
+        font-size: 13px;
+        line-height: 13px;
+        overflow: hidden;
+        speak: none;
+        font-weight: normal;
+        -webkit-font-smoothing: antialiased;
+        display: inline-block;
+        vertical-align: middle;
+        text-align: center;
+        margin: -1px 5px 0 0;
+    }
 }
diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/_module.less
deleted file mode 100644
index f6845eec6ae5323b5dc80606388b378174f0c98f..0000000000000000000000000000000000000000
--- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/_module.less
+++ /dev/null
@@ -1,6 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-@import 'module/_tabnav.less';
diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module.less
index 4fc4e2ec83e728948cca5248970b8bb53453240d..6d1cdd4c54a3d3db423a4740e016c242f7fd7e84 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module.less
@@ -34,12 +34,6 @@
 }
 
 .customer-index-edit {
-    .page-wrapper {
-        background: #fff;
-    }
-    .col-2-left-layout {
-        background: #fff;
-    }
     .main-col {
         padding-left: 40px;
     }
@@ -118,10 +112,6 @@
                 color: #eb5202;
                 text-decoration: none;
             }
-            .ui-state-active & {
-                color: @admin__color4;
-                font-weight: 600;
-            }
             &.changed {
                 font-style: italic;
             }
@@ -129,6 +119,11 @@
     }
 }
 
+.ui-state-active .tab-nav-item-link {
+    color: @admin__color4;
+    font-weight: 600;
+}
+
 .listing-tiles {
   overflow: hidden;
   margin-top: -10px;
@@ -278,17 +273,6 @@
                 .visually-hidden();
             }
         }
-        .dropdown-menu {
-            > li {
-                padding: 4px 15px;
-                &:hover {
-                    background-color: #e8e8e8;
-                }
-                span {
-                    display: block;
-                }
-            }
-        }
     }
 
     .grid-actions {
@@ -584,15 +568,16 @@
 .field .control input[type='text'][disabled] ~ .addafter,
 .field .control select[disabled],
 .field .control select[disabled] ~ .addafter {
-    background-color: #f4f4f4;
-    border-color: #ddd;
-    box-shadow: none;
-    color: #999;
+    background-color: #e9e9e9;
+    border-color: #adadad;
+    color: #303030;
+    opacity: .5;
+    cursor: not-allowed;
 }
 
 .field .control input[type='text'][disabled] ~ .addafter strong,
 .field .control select[disabled] ~ .addafter strong {
-  background-color: #f4f4f4;
+    background-color: #e9e9e9;
 }
 
 .field-price.addon {
diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_tabnav.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_tabnav.less
deleted file mode 100644
index 955559d4172732306417cc5cb4514a979d90e794..0000000000000000000000000000000000000000
--- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_tabnav.less
+++ /dev/null
@@ -1,124 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//  Variables
-//  _____________________________________________
-
-@admin__section-nav-title__color: @color-very-dark-gray-black;
-@admin__section-nav-title__bg-color: @color-white-fog2;
-@admin__section-nav-title__border-color: @color-gray89;
-
-@admin__section-nav-item__border-color: @color-gray89;
-@admin__section-nav-item__active__color: @color-phoenix;
-
-@admin__section-nav-link__color: @color-very-dark-gray-black;
-@admin__section-nav-link__hover__color: @color-very-dark-gray-black;
-@admin__section-nav-link__changed__color: @color-phoenix;
-
-//
-//  Tab Left Navigation
-//  _____________________________________________
-
-.admin__section-nav {
-    padding-bottom: 1px + 50px;
-}
-.admin__section-nav-title {
-    padding: 0;
-    margin: 0 0 -1px;
-    color: @admin__section-nav-title__color;
-    display: block;
-    padding: 20px 13px;
-    background: @admin__section-nav-title__bg-color;
-    text-transform: uppercase;
-    border: 1px solid @admin__section-nav-title__border-color;
-    line-height: 1.2;
-    &._collapsible {
-        padding-right: 35px;
-        &:after {
-            content: '\e628';
-            font-family: @icons-admin__font-name;
-            -webkit-font-smoothing: antialiased;
-            font-weight: normal;
-            speak: none;
-            position: absolute;
-            right: 18px;
-            top: 22px;
-            font-size: 1.3rem;
-        }
-    }
-    strong {
-        font-weight: @font-weight__bold;
-    }
-}
-.admin__section-nav-items {
-    list-style-type: none;
-    padding: 0;
-    margin: 0;
-}
-.admin__section-nav-item {
-    padding: 0;
-    border-left: 3px solid transparent;
-    margin: 0 0 -1px;
-    &._active {
-        border-color: @admin__section-nav-item__active__color;
-        .admin__section-nav-link {
-            border-color: @admin__section-nav-item__border-color;
-            margin: 0;
-            &:hover {
-                text-decoration: none;
-            }
-        }
-    }
-    &._loading {
-        position: relative;
-        z-index: 1;
-        &:before {
-            content: "";
-            display: block;
-            position: absolute;
-            z-index: 2;
-            background: url('../images/loader-2.gif') no-repeat 50% 50%;
-            background-size: 120px;
-            width: 2rem;
-            height: 2rem;
-            top: 2.1rem;
-            right: .5rem;
-        }
-    }
-}
-.admin__section-nav-link {
-    border: 1px solid transparent;
-    border-width: 1px 0;
-    line-height: 1.2;
-    font-weight: @font-weight__heavier;
-    color: @admin__section-nav-link__color;
-    display: block;
-    padding: 20px 30px 20px 10px;
-    &:hover {
-        color: @admin__section-nav-link__hover__color;
-        text-decoration: underline;
-    }
-    &._changed {
-        position: relative;
-        z-index: 1;
-        &:before {
-            content: '\e623';
-            font-family: @icons-admin__font-name;
-            -webkit-font-smoothing: antialiased;
-            font-style: normal;
-            font-weight: normal;
-            speak: none;
-            position: absolute;
-            z-index: 2;
-            font-size: 17px;
-            color: @admin__section-nav-link__changed__color;
-            width: 20px;
-            height: 20px;
-            top: 15px;
-            right: 5px;
-        }
-    }
-}
diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json
index cf75e20e5ac18b425bf1d15c4d2d3a3e11ba10a6..df9acf8487c6a4c48f51fd7237f17998a2af64bf 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.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/adminhtml/Magento/backend/web/css/override.less b/app/design/adminhtml/Magento/backend/web/css/override.less
deleted file mode 100644
index 1b6b674ec910a5e84f7ef66f0e1b05e4fae9768b..0000000000000000000000000000000000000000
--- a/app/design/adminhtml/Magento/backend/web/css/override.less
+++ /dev/null
@@ -1,4869 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
-html {
-  font-family: sans-serif;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%;
-  font-size-adjust: 100%;
-}
-body {
-  margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-main,
-footer,
-header,
-main,
-nav,
-section,
-summary {
-  display: block;
-}
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  vertical-align: baseline;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-template {
-  display: none;
-}
-a {
-  background: transparent;
-}
-a:active,
-a:hover {
-  outline: 0;
-}
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-b,
-strong {
-  font-weight: bold;
-}
-dfn {
-  font-style: italic;
-}
-h1 {
-  font-size: 2em;
-  margin: .67em 0;
-}
-mark {
-  background: #ff0;
-  color: #000;
-}
-small {
-  font-size: 80%;
-}
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  border: 0;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-figure {
-  margin: 1em 40px;
-}
-hr {
-  box-sizing: content-box;
-  height: 0;
-}
-pre {
-  overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  font: inherit;
-  margin: 0;
-}
-button {
-  overflow: visible;
-}
-button,
-select {
-  text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-input {
-  line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-input[type="search"] {
-  box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: .35em .625em .75em;
-}
-legend {
-  border: 0;
-  padding: 0;
-}
-textarea {
-  overflow: auto;
-}
-optgroup {
-  font-weight: bold;
-}
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-td,
-th {
-  padding: 0;
-}
-html {
-  box-sizing: border-box;
-}
-* {
-  box-sizing: inherit;
-}
-*:before,
-*:after {
-  box-sizing: inherit;
-}
-*:focus {
-  box-shadow: none;
-  outline: 0;
-}
-.keyfocus *:focus,
-.keyfocus .admin__control-radio:focus + label,
-.keyfocus .admin__control-checkbox:focus + label {
-  box-shadow: 0 0 0 1px #008bdb;
-}
-img,
-video,
-embed,
-object {
-  max-width: 100%;
-}
-@font-face {
-  font-family: 'Open Sans';
-  src: url('../fonts/opensans/light/opensans-300.eot');
-  src: url('../fonts/opensans/light/opensans-300.eot?#iefix') format('embedded-opentype'), url('../fonts/opensans/light/opensans-300.woff2') format('woff2'), url('../fonts/opensans/light/opensans-300.woff') format('woff'), url('../fonts/opensans/light/opensans-300.ttf') format('truetype'), url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');
-  font-weight: 300;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'Open Sans';
-  src: url('../fonts/opensans/regular/opensans-400.eot');
-  src: url('../fonts/opensans/regular/opensans-400.eot?#iefix') format('embedded-opentype'), url('../fonts/opensans/regular/opensans-400.woff2') format('woff2'), url('../fonts/opensans/regular/opensans-400.woff') format('woff'), url('../fonts/opensans/regular/opensans-400.ttf') format('truetype'), url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');
-  font-weight: 400;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'Open Sans';
-  src: url('../fonts/opensans/semibold/opensans-600.eot');
-  src: url('../fonts/opensans/semibold/opensans-600.eot?#iefix') format('embedded-opentype'), url('../fonts/opensans/semibold/opensans-600.woff2') format('woff2'), url('../fonts/opensans/semibold/opensans-600.woff') format('woff'), url('../fonts/opensans/semibold/opensans-600.ttf') format('truetype'), url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');
-  font-weight: 600;
-  font-style: normal;
-}
-@font-face {
-  font-family: 'Open Sans';
-  src: url('../fonts/opensans/bold/opensans-700.eot');
-  src: url('../fonts/opensans/bold/opensans-700.eot?#iefix') format('embedded-opentype'), url('../fonts/opensans/bold/opensans-700.woff2') format('woff2'), url('../fonts/opensans/bold/opensans-700.woff') format('woff'), url('../fonts/opensans/bold/opensans-700.ttf') format('truetype'), url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');
-  font-weight: 700;
-  font-style: normal;
-}
-html,
-body {
-  height: 100%;
-}
-html {
-  font-size: 62.5%;
-}
-body {
-  font-size: 1.4rem;
-  color: #41362f;
-  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-weight: 400;
-  font-style: normal;
-  line-height: 1.4;
-}
-h1 {
-  margin: 0 0 2rem;
-  font-size: 2.8rem;
-  color: #41362f;
-  font-weight: 400;
-  line-height: 1.2;
-}
-h2,
-.admin__fieldset-wrapper-title strong {
-  margin: 0 0 2rem;
-  font-size: 2rem;
-  color: #41362f;
-  font-weight: 400;
-  line-height: 1.2;
-}
-h3 {
-  margin: 0 0 2rem;
-  font-size: 1.7rem;
-  color: #41362f;
-  font-weight: 600;
-  line-height: 1.2;
-}
-h4,
-h5,
-h6 {
-  font-weight: 600;
-  margin-top: 0;
-}
-p {
-  margin: 0 0 .5em;
-}
-a {
-  color: #007bdb;
-  text-decoration: none;
-}
-a:hover {
-  color: #007bdb;
-  text-decoration: underline;
-}
-@font-face {
-  font-family: 'Admin Icons';
-  src: url('../fonts/admin-icons/admin-icons.eot');
-  src: url('../fonts/admin-icons/admin-icons.eot?#iefix') format('embedded-opentype'), url('../fonts/admin-icons/admin-icons.woff2') format('woff2'), url('../fonts/admin-icons/admin-icons.woff') format('woff'), url('../fonts/admin-icons/admin-icons.ttf') format('truetype'), url('../fonts/admin-icons/admin-icons.svg#Admin Icons') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-ul,
-ol,
-dl {
-  margin-top: 0;
-  padding-left: 0;
-}
-nav ul,
-nav ol {
-  list-style: none none;
-  margin: 0;
-  padding: 0;
-}
-.admin__control-text,
-.admin__control-select,
-.admin__control-multiselect,
-.admin__control-file-label:before,
-.admin__control-textarea,
-.admin__control-addon [class*='admin__control-'] + [class*='admin__addon-']:before {
-  background-color: #ffffff;
-  border-radius: .1rem;
-  border: 1px solid #adadad;
-  color: #303030;
-  font-size: 1.4rem;
-  font-weight: 400;
-  height: 3.3rem;
-  max-width: 100%;
-  min-width: 10rem;
-  padding: 0 1rem;
-  transition: border-color 0.1s ease-in;
-}
-.admin__control-text:focus,
-.admin__control-select:focus,
-.admin__control-multiselect:focus,
-.admin__control-file:active + .admin__control-file-label:before,
-.admin__control-file:focus + .admin__control-file-label:before,
-.admin__control-textarea:focus,
-.admin__control-addon [class*='admin__control-']:focus + label:before {
-  border-color: #007bdb;
-  box-shadow: none;
-  outline: 0;
-}
-.admin__control-text[disabled],
-.admin__control-select[disabled],
-.admin__control-multiselect[disabled],
-.admin__control-file[disabled] + .admin__control-file-label:before,
-.admin__control-textarea[disabled],
-.admin__control-addon [class*='admin__control-'][disabled] + [class*='admin__addon-']:before {
-  background-color: #e9e9e9;
-  border-color: #adadad;
-  color: #303030;
-  opacity: .5;
-  cursor: not-allowed;
-}
-.address-item-edit-content .admin__field[class] > .admin__field-control,
-.page-layout-admin-login .admin__field[class] > .admin__field-control {
-  float: none;
-  clear: left;
-  text-align: left;
-  width: auto;
-}
-.address-item-edit-content .admin__field[class]:not(.admin__field-option) > .admin__field-label,
-.page-layout-admin-login .admin__field[class]:not(.admin__field-option) > .admin__field-label {
-  text-align: left;
-  width: auto;
-  display: block;
-  line-height: 1.4rem;
-  margin-bottom: 0.86rem;
-  margin-top: -0.14rem;
-}
-.address-item-edit-content .admin__field[class]:not(.admin__field-option) > .admin__field-label:before,
-.page-layout-admin-login .admin__field[class]:not(.admin__field-option) > .admin__field-label:before {
-  display: none;
-}
-.address-item-edit-content .admin__field[class]:not(.admin__field-option)._required > .admin__field-label span,
-.page-layout-admin-login .admin__field[class]:not(.admin__field-option)._required > .admin__field-label span {
-  padding-left: 1.5rem;
-}
-.address-item-edit-content .admin__field[class]:not(.admin__field-option)._required > .admin__field-label span:after,
-.page-layout-admin-login .admin__field[class]:not(.admin__field-option)._required > .admin__field-label span:after {
-  left: 0;
-  margin-left: 30px;
-  top: .2rem;
-}
-.admin__control-text {
-  line-height: 3.3rem;
-  width: 100%;
-}
-.admin__control-select {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ms-appearance: none;
-  appearance: none;
-  background-repeat: no-repeat;
-  background-image: url('../images/arrows-bg.svg'), linear-gradient(#e3e3e3, #e3e3e3), linear-gradient(#adadad, #adadad);
-  background-position: ~" calc(100% - 12px) -34px, 100%, calc(100% - 33px) 0";
-  background-size: auto, 3.3rem 100%, 1px 100%;
-  padding-right: 4.4rem;
-}
-.admin__control-select:focus {
-  background-image: url('../images/arrows-bg.svg'), linear-gradient(#e3e3e3, #e3e3e3), linear-gradient(#007bdb, #007bdb);
-  background-position: ~" calc(100% - 12px) 13px, 100%, calc(100% - 33px) 0";
-}
-.admin__control-select::-ms-expand {
-  display: none;
-}
-.ie9 .admin__control-select {
-  padding-right: 0;
-}
-option:empty {
-  display: none;
-}
-.admin__control-multiselect {
-  height: auto;
-  padding: .6rem 1rem;
-}
-.admin__control-file-wrapper {
-  display: inline-block;
-  padding: .5rem 1rem;
-  position: relative;
-  z-index: 1;
-}
-.admin__control-file-label:before {
-  content: '';
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-  z-index: 0;
-}
-.admin__control-file {
-  position: relative;
-  z-index: 1;
-  background: transparent;
-  border: 0;
-  width: auto;
-}
-.admin__control-textarea {
-  height: 8.48rem;
-  line-height: 1.18;
-  padding-top: .8rem;
-  width: 100%;
-}
-.admin__control-radio,
-.admin__control-checkbox {
-  margin: .3rem 0 0;
-  opacity: 0.01;
-  overflow: hidden;
-  position: absolute;
-  vertical-align: top;
-}
-.admin__control-radio + label,
-.admin__control-checkbox + label {
-  cursor: pointer;
-  display: inline-block;
-  padding-left: 26px;
-}
-.admin__control-radio + label:before,
-.admin__control-checkbox + label:before {
-  background: none;
-  border-radius: .2rem;
-  border: 1px solid #adadad;
-  color: transparent;
-  content: '\e62d';
-  float: left;
-  font: 0/14px 'Admin Icons';
-  height: 1.6rem;
-  margin: 1px 10px 0 -26px;
-  text-align: center;
-  transition: border-color 0.1s ease-in, color 0.1s ease-in, font-size 0.1s ease-in;
-  vertical-align: top;
-  width: 1.6rem;
-}
-.admin__control-radio:focus + label:before,
-.admin__control-checkbox:focus + label:before {
-  border-color: #007bdb;
-}
-.admin__control-radio[disabled] + label,
-.admin__control-checkbox[disabled] + label {
-  color: #303030;
-  opacity: .5;
-}
-.admin__control-radio[disabled] + label:before,
-.admin__control-checkbox[disabled] + label:before {
-  background-color: #e9e9e9;
-  border-color: #adadad;
-}
-.admin__control-radio + label:before {
-  border-radius: .8rem;
-  content: '\e637';
-}
-.admin__control-radio:checked + label:before {
-  color: #514943;
-  font-size: 1rem;
-}
-.admin__control-checkbox:checked + label:before {
-  color: #514943;
-  font-size: 1.1rem;
-}
-.admin__control-addon {
-  display: -webkit-inline-flex;
-  display: -ms-inline-flexbox;
-  -webkit-flex-direction: row;
-  -ms-flex-direction: row;
-  flex-direction: row;
-  display: inline-flex;
-  flex-flow: row nowrap;
-  position: relative;
-  width: 100%;
-  z-index: 1;
-}
-.admin__control-addon > [class*='admin__addon-'],
-.admin__control-addon > [class*='admin__control-'] {
-  -webkit-flex-basis: auto;
-  flex-basis: auto;
-  -webkit-flex-grow: 0;
-  flex-grow: 0;
-  -webkit-flex-shrink: 0;
-  flex-shrink: 0;
-  position: relative;
-  z-index: 1;
-}
-.admin__control-addon [class*='admin__control-'] {
-  appearence: none;
-  -webkit-flex-grow: 1;
-  flex-grow: 1;
-  box-shadow: none;
-  background-color: transparent;
-  border-color: transparent;
-  order: 1;
-  vertical-align: top;
-  width: auto;
-}
-.admin__control-addon [class*='admin__control-'] :focus {
-  box-shadow: 0;
-}
-.admin__control-addon [class*='admin__control-'] + [class*='admin__addon-'] {
-  padding-left: 1rem;
-  position: static !important;
-  z-index: 0;
-}
-.admin__control-addon [class*='admin__control-'] + [class*='admin__addon-'] > * {
-  position: relative;
-  vertical-align: top;
-  z-index: 2;
-}
-.admin__control-addon [class*='admin__control-'] + [class*='admin__addon-']:before {
-  bottom: 0;
-  box-sizing: border-box;
-  content: '';
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-  z-index: 0;
-}
-.admin__addon-suffix,
-.admin__addon-prefix {
-  border: 0;
-  box-sizing: border-box;
-  color: #858585;
-  display: inline-block;
-  font-size: 1.4rem;
-  font-weight: 400;
-  height: 3.3rem;
-  line-height: 3.3rem;
-  padding: 0;
-}
-.admin__addon-suffix {
-  order: 3;
-}
-.admin__addon-suffix:last-child {
-  padding-right: 1rem;
-}
-.admin__addon-prefix {
-  order: 0;
-}
-.ie9 .admin__control-addon:after {
-  clear: both;
-  content: '';
-  display: block;
-  height: 0;
-  overflow: hidden;
-}
-.ie9 .admin__addon {
-  min-width: auto;
-  overflow: hidden;
-  text-align: right;
-  white-space: nowrap;
-  width: auto;
-}
-.ie9 .admin__addon [class*='admin__control-'] {
-  display: inline;
-}
-.ie9 .admin__addon-prefix {
-  float: left;
-}
-.ie9 .admin__addon-suffix {
-  float: right;
-}
-.admin__fieldset {
-  border: 0;
-  margin: 0;
-  min-width: 0;
-  padding: 0;
-}
-.admin__fieldset > .admin__field {
-  border: 0;
-  margin: 0;
-  padding: 0;
-  margin-left: -30px;
-}
-.admin__fieldset > .admin__field > .admin__field-control {
-  width: ~" calc( (100%) * 0.4444444444444444 - 30px )";
-  float: left;
-  margin-left: 30px;
-}
-.admin__fieldset > .admin__field > .admin__field-label {
-  width: ~" calc( (100%) * 0.3333333333333333 - 30px )";
-  float: left;
-  margin-left: 30px;
-}
-.admin__field-label {
-  color: #303030;
-  margin: 0;
-  text-align: right;
-}
-.admin__field-label + br {
-  display: none;
-}
-[class]:not(.admin__field-option) > .admin__field-label {
-  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 1.4rem;
-  font-weight: 600;
-  line-height: 3.2rem;
-  padding: 0;
-  white-space: nowrap;
-}
-[class]:not(.admin__field-option) > .admin__field-label:before {
-  content: '.';
-  margin-left: -7px;
-  overflow: hidden;
-  visibility: hidden;
-  width: 0;
-}
-[class]:not(.admin__field-option) > .admin__field-label span {
-  display: inline-block;
-  line-height: 1.2;
-  vertical-align: middle;
-  white-space: normal;
-}
-._required > .admin__field-label span:after {
-  color: #eb5202;
-  content: '*';
-  display: inline-block;
-  font-size: 1.6rem;
-  font-weight: 500;
-  line-height: 1;
-  margin-left: 10px;
-  position: absolute;
-  top: 1.2rem;
-  z-index: 1;
-}
-._disabled > .admin__field-label {
-  color: #a79d95;
-}
-.admin__field {
-  margin-bottom: 0;
-}
-.admin__field + .admin__field {
-  margin-top: 1.5rem;
-}
-.admin__field:not(.admin__field-option) ~ .admin__field-option {
-  margin-top: .5rem;
-}
-.admin__field.admin__field-option ~ .admin__field-option {
-  margin-top: .9rem;
-}
-.admin__field ~ .admin__field-option:last-child {
-  margin-bottom: .8rem;
-}
-.admin__fieldset > .admin__field {
-  margin-bottom: 3rem;
-  position: relative;
-  z-index: 1;
-}
-.admin__fieldset > .admin__field:hover {
-  z-index: 2;
-}
-.admin__field[data-config-scope]:before {
-  color: #808080;
-  content: attr(data-config-scope);
-  display: inline-block;
-  position: absolute;
-  left: ~" calc( (100%) * 0.7777777777777778 - 30px )";
-  margin-left: 60px;
-  width: ~" calc( (100%) * 0.2222222222222222 - 30px )";
-}
-.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before {
-  content: '';
-}
-.admin__field._error .admin__field-control [class*='admin__addon-']:before,
-.admin__field._error .admin__field-control > [class*='admin__control-'] {
-  border-color: #e22626;
-}
-.admin__field-error,
-.admin__field-control label.mage-error {
-  background: #fffbbb;
-  border: 1px solid #ee7d7d;
-  box-sizing: border-box;
-  color: #555555;
-  display: block;
-  font-size: 1.2rem;
-  font-weight: 400;
-  line-height: 1.2;
-  margin: .2rem 0 0;
-  padding: .8rem 1rem .9rem;
-}
-.admin__field-note {
-  color: #303030;
-  font-size: 1.2rem;
-  margin: 10px 0 0;
-  padding: 0;
-}
-.admin__field-option {
-  padding-top: 8px;
-}
-.admin__field-option .admin__field-label {
-  text-align: left;
-}
-.admin__field-control > .admin__field-option:nth-child(1):nth-last-child(2),
-.admin__field-control > .admin__field-option:nth-child(2):nth-last-child(1) {
-  display: inline-block;
-}
-.admin__field-control > .admin__field-option:nth-child(1):nth-last-child(2) + .admin__field-option,
-.admin__field-control > .admin__field-option:nth-child(2):nth-last-child(1) + .admin__field-option {
-  display: inline-block;
-  margin-left: 41px;
-  margin-top: 0;
-}
-.admin__field-control > .admin__field-option:nth-child(1):nth-last-child(2) + .admin__field-option:before,
-.admin__field-control > .admin__field-option:nth-child(2):nth-last-child(1) + .admin__field-option:before {
-  background: #cacaca;
-  content: '';
-  display: inline-block;
-  height: 20px;
-  margin-left: -20px;
-  position: absolute;
-  width: 1px;
-}
-[class*='admin__control-grouped'] > .admin__field:first-child,
-.admin__control-fields > .admin__field:first-child {
-  position: static;
-}
-[class*='admin__control-grouped'] > .admin__field:first-child > .admin__field-label,
-.admin__control-fields > .admin__field:first-child > .admin__field-label {
-  width: ~" calc( (100%) * 0.3333333333333333 - 30px )";
-  float: left;
-  margin-left: 30px;
-  cursor: pointer;
-  left: 0;
-  opacity: 0;
-  position: absolute;
-  top: 0;
-}
-.admin__control-fields .admin__field-label ~ .admin__field-control {
-  width: 100%;
-}
-[class*='admin__control-grouped'] {
-  box-sizing: border-box;
-  display: table;
-  table-layout: fixed;
-  width: 100%;
-}
-[class*='admin__control-grouped'] > .admin__field {
-  display: table-cell;
-  vertical-align: top;
-  width: 50%;
-}
-[class*='admin__control-grouped'] > .admin__field > .admin__field-control {
-  float: none;
-  width: 100%;
-}
-[class*='admin__control-grouped'] > .admin__field:nth-child(n+2) {
-  padding-left: 20px;
-}
-[class*='admin__control-grouped'] > .admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.admin__field-tooltip {
-  display: inline-block;
-  margin-top: 5px;
-  overflow: visible;
-  vertical-align: top;
-  width: 0;
-}
-.admin__field-tooltip:hover {
-  position: relative;
-  z-index: 500;
-}
-.admin__field-option .admin__field-tooltip {
-  margin-top: 10px;
-}
-.admin__field-tooltip .admin__field-tooltip-action {
-  margin-left: 20px;
-  display: inline-block;
-  text-decoration: none;
-}
-.admin__field-tooltip .admin__field-tooltip-action:before {
-  font-family: 'Admin Icons';
-  content: '\e633';
-  font-size: 2.2rem;
-  line-height: 1;
-  color: #514943;
-  overflow: hidden;
-  speak: none;
-  font-weight: normal;
-  -webkit-font-smoothing: antialiased;
-  display: inline-block;
-  vertical-align: middle;
-  text-align: center;
-}
-.admin__field-tooltip .admin__control-text:focus + .admin__field-tooltip-content,
-.admin__field-tooltip:hover .admin__field-tooltip-content {
-  display: block;
-}
-.admin__field-tooltip .admin__field-tooltip-content {
-  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.3);
-  background: #fffbbb;
-  border-radius: 1px;
-  border: 1px solid #afadac;
-  bottom: 42px;
-  display: none;
-  padding: 15px 25px;
-  position: absolute;
-  right: -70px;
-  width: 320px;
-  z-index: 1;
-}
-.admin__field-tooltip .admin__field-tooltip-content:after,
-.admin__field-tooltip .admin__field-tooltip-content:before {
-  border: 16px solid transparent;
-  height: 0;
-  width: 0;
-  border-top-color: #afadac;
-  content: "";
-  display: block;
-  position: absolute;
-  right: 20px;
-  top: 100%;
-  z-index: 3;
-}
-.admin__field-tooltip .admin__field-tooltip-content:after {
-  border-top-color: #fffbbb;
-  margin-top: -1px;
-  z-index: 4;
-}
-.col-2-left-layout {
-  margin-left: -30px;
-  margin-top: 50px;
-  width: auto;
-}
-.col-2-left-layout .main-col {
-  width: ~" calc( (100%) * 0.75 - 30px )";
-  float: right;
-}
-.col-2-left-layout .side-col {
-  width: ~" calc( (100%) * 0.75 - 30px )";
-  float: left;
-  margin-left: 30px;
-}
-.admin__fieldset-wrapper-title {
-  margin-bottom: 30px;
-  padding: 14px 0 16px;
-}
-.address-item-edit-content {
-  padding: 15px 30px;
-}
-.address-list {
-  float: left;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-  width: 360px;
-}
-.address-list .address-list-item {
-  margin-bottom: 30px;
-}
-.address-list .action-delete {
-  background-image: none;
-  background: none;
-  border: 0;
-  margin: 0;
-  padding: 0;
-  -moz-box-sizing: content-box;
-  box-shadow: none;
-  text-shadow: none;
-  line-height: inherit;
-  font-weight: 400;
-  display: inline-block;
-  text-decoration: none;
-}
-.address-list .action-delete:focus,
-.address-list .action-delete:active {
-  background: none;
-  border: none;
-}
-.address-list .action-delete:hover {
-  background: none;
-  border: none;
-}
-.address-list .action-delete.disabled,
-.address-list .action-delete[disabled],
-fieldset[disabled] .address-list .action-delete {
-  cursor: not-allowed;
-  pointer-events: none;
-  opacity: 0.5;
-}
-.address-list .action-delete > span {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.address-list .action-delete:after {
-  font-family: 'Admin Icons';
-  content: '\e620';
-  font-size: 1.6rem;
-  line-height: 16px;
-  color: #41362f;
-  overflow: hidden;
-  speak: none;
-  font-weight: normal;
-  -webkit-font-smoothing: antialiased;
-  display: inline-block;
-  vertical-align: middle;
-  text-align: center;
-}
-.address-list .action-delete span {
-  max-height: 1px;
-  max-width: 1px;
-}
-.address-list .action-delete:hover {
-  position: relative;
-  z-index: 2;
-}
-.address-list .action-delete:hover:after {
-  color: #060504;
-}
-.address-list .action-delete:hover span {
-  background-color: #fcfcfc;
-  border: 1px solid #989287;
-  border-radius: .4rem;
-  bottom: 100%;
-  clip: auto;
-  font-size: 1.2rem;
-  height: auto;
-  left: auto;
-  margin: 0 auto .1rem;
-  padding: .5rem;
-  right: auto;
-  top: auto;
-  max-height: 50px;
-  max-width: 200px;
-  white-space: nowrap;
-  width: auto;
-  transition: all .01s linear .7s;
-}
-.address-item-edit {
-  margin-left: 359px;
-  max-width: 500px;
-}
-.address-item-edit .admin__legend {
-  display: none;
-}
-[class*='admin__control-'].mage-error ~ [class*='admin__addon-']:before,
-.admin__field-control > [class*='admin__control-'].mage-error {
-  border-color: #e22626;
-}
-.page-layout-admin-login .loading-mask {
-  background: rgba(255, 255, 255, 0.2);
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-  z-index: 1000;
-}
-.page-layout-admin-login .popup-loading {
-  height: 149px;
-  left: 50%;
-  margin-left: -109px;
-  margin-top: -74.5px;
-  position: absolute;
-  top: 50%;
-  overflow: hidden;
-  width: 218px;
-}
-.page-layout-admin-login .field-captcha {
-  padding-left: 30px;
-  vertical-align: middle;
-}
-.page-layout-admin-login .field-captcha .captcha-reload {
-  float: right;
-  vertical-align: middle;
-}
-.admin__action-dropdown {
-  background-color: transparent;
-  border: none;
-  border-radius: 0;
-  box-shadow: none;
-  margin: 0;
-  padding: 0;
-  padding-right: 3rem;
-  color: #41362f;
-}
-.admin__action-dropdown:hover {
-  background-color: transparent;
-  border: none;
-  box-shadow: none;
-}
-.admin__action-dropdown._active:after,
-.admin__action-dropdown.active:after {
-  transform: rotate(180deg);
-}
-.admin__action-dropdown:after {
-  border-color: #000000 transparent transparent transparent;
-  border-style: solid;
-  border-width: 0.5rem 0.4rem 0 0.4rem;
-  content: '';
-  height: 0;
-  margin-top: -0.2rem;
-  position: absolute;
-  right: 1.1rem;
-  top: 50%;
-  transition: all .2s linear;
-  width: 0;
-}
-._active .admin__action-dropdown:after,
-.active .admin__action-dropdown:after {
-  transform: rotate(180deg);
-}
-.admin__action-dropdown:hover:after {
-  border-color: #000000 transparent transparent transparent;
-}
-.actions-split {
-  position: relative;
-  z-index: 300;
-}
-.actions-split.active,
-.actions-split._active,
-.actions-split:hover {
-  box-shadow: 0 0 0 1px #007bdb;
-}
-.actions-split.active .action-toggle.action-primary,
-.actions-split._active .action-toggle.action-primary,
-.actions-split.active .action-toggle.primary,
-.actions-split._active .action-toggle.primary {
-  background-color: #ba4000;
-  border-color: #ba4000;
-}
-.actions-split.active .dropdown-menu,
-.actions-split._active .dropdown-menu {
-  opacity: 1;
-  visibility: visible;
-}
-.actions-split .action-toggle,
-.actions-split .action-default {
-  float: left;
-  margin: 0;
-}
-.actions-split .action-toggle.active,
-.actions-split .action-default.active,
-.actions-split .action-toggle._active,
-.actions-split .action-default._active,
-.actions-split .action-toggle:hover,
-.actions-split .action-default:hover {
-  box-shadow: none;
-}
-.actions-split .action-default {
-  margin-right: 4rem;
-  min-width: 9.3rem;
-}
-.actions-split .action-toggle {
-  padding-right: 4rem;
-  border-left-color: rgba(0, 0, 0, 0.2);
-  bottom: 0;
-  padding-left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-}
-.actions-split .action-toggle._active:after,
-.actions-split .action-toggle.active:after {
-  transform: rotate(180deg);
-}
-.actions-split .action-toggle:after {
-  border-color: #000000 transparent transparent transparent;
-  border-style: solid;
-  border-width: 0.9rem 0.6rem 0 0.6rem;
-  content: '';
-  height: 0;
-  margin-top: -0.3rem;
-  position: absolute;
-  right: 1.4rem;
-  top: 50%;
-  transition: all .2s linear;
-  width: 0;
-}
-._active .actions-split .action-toggle:after,
-.active .actions-split .action-toggle:after {
-  transform: rotate(180deg);
-}
-.actions-split .action-toggle:hover:after {
-  border-color: #000000 transparent transparent transparent;
-}
-.actions-split .action-toggle._active:after,
-.actions-split .action-toggle.active:after {
-  transform: none;
-}
-.actions-split .action-toggle.action-secondary:after,
-.actions-split .action-toggle.secondary:after,
-.actions-split .action-toggle.action-primary:after,
-.actions-split .action-toggle.primary:after {
-  border-color: #ffffff transparent transparent transparent;
-}
-.actions-split .action-toggle > span {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.actions-split .dropdown-menu {
-  background-color: #ffffff;
-  border: 1px solid #007bdb;
-  border-radius: 1px;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-  display: block;
-  left: 0;
-  list-style: none;
-  margin: 2px 0 0;
-  min-width: 0;
-  opacity: 0;
-  padding: 0;
-  position: absolute;
-  right: 0;
-  top: 100%;
-  transition: opacity 0.15s ease;
-  visibility: hidden;
-}
-.actions-split .dropdown-menu > li {
-  border: none;
-  padding: .6875em;
-}
-.actions-split .dropdown-menu > li:hover {
-  background-color: #e3e3e3;
-}
-.actions-split .dropdown-menu > li:active {
-  background-color: #cacaca;
-}
-.abs-action-reset,
-.admin__menu .submenu-close,
-.search-global-field._active .search-global-action,
-.notifications-close {
-  background-color: transparent;
-  border: none;
-  border-radius: 0;
-  box-shadow: none;
-  margin: 0;
-  padding: 0;
-}
-.abs-action-reset:hover,
-.admin__menu .submenu-close:hover,
-.search-global-field._active .search-global-action:hover,
-.notifications-close:hover {
-  background-color: transparent;
-  border: none;
-  box-shadow: none;
-}
-.abs-action-pattern,
-.abs-action-default,
-.abs-action-primary,
-.abs-action-secondary,
-.abs-action-tertiary,
-.abs-action-quaternary,
-.action-default,
-button,
-.action-primary,
-.action-secondary,
-.action-tertiary,
-.action-quaternary,
-button,
-button.primary,
-button.secondary,
-button.tertiary,
-.ui-dialog .action-close,
-.ui-dialog .ui-button,
-.ui-dialog .action-primary,
-.attribute-popup-actions .action-default.reset,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary,
-.page-actions > button,
-.page-actions .page-actions-buttons > button,
-.page-actions > button.action-primary,
-.page-actions .page-actions-buttons > button.action-primary,
-.page-actions > button.primary,
-.page-actions .page-actions-buttons > button.primary,
-.popup-window .magento_buttons .ok_button,
-.popup-window .magento_buttons .cancel_button,
-.fade .actions .primary,
-.fade .actions .cancel {
-  border: 1px solid;
-  border-radius: 0;
-  display: inline-block;
-  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  font-size: 1.4rem;
-  font-weight: 600;
-  padding: 0.5em 1em 0.57em;
-  text-align: center;
-  vertical-align: baseline;
-}
-.abs-action-pattern[disabled],
-.abs-action-pattern.disabled,
-.abs-action-default[disabled],
-.abs-action-default.disabled,
-.abs-action-primary[disabled],
-.abs-action-primary.disabled,
-.abs-action-secondary[disabled],
-.abs-action-secondary.disabled,
-.abs-action-tertiary[disabled],
-.abs-action-tertiary.disabled,
-.abs-action-quaternary[disabled],
-.abs-action-quaternary.disabled,
-.action-default[disabled],
-.action-default.disabled,
-button[disabled],
-button.disabled,
-.action-primary[disabled],
-.action-primary.disabled,
-.action-secondary[disabled],
-.action-secondary.disabled,
-.action-tertiary[disabled],
-.action-tertiary.disabled,
-.action-quaternary[disabled],
-.action-quaternary.disabled,
-button[disabled],
-button.disabled,
-button.primary[disabled],
-button.primary.disabled,
-button.secondary[disabled],
-button.secondary.disabled,
-button.tertiary[disabled],
-button.tertiary.disabled,
-.ui-dialog .action-close[disabled],
-.ui-dialog .action-close.disabled,
-.ui-dialog .ui-button[disabled],
-.ui-dialog .ui-button.disabled,
-.ui-dialog .action-primary[disabled],
-.ui-dialog .action-primary.disabled,
-.attribute-popup-actions .action-default.reset[disabled],
-.attribute-popup-actions .action-default.reset.disabled,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary[disabled],
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary.disabled,
-.page-actions > button[disabled],
-.page-actions > button.disabled,
-.page-actions .page-actions-buttons > button[disabled],
-.page-actions .page-actions-buttons > button.disabled,
-.page-actions > button.action-primary[disabled],
-.page-actions > button.action-primary.disabled,
-.page-actions .page-actions-buttons > button.action-primary[disabled],
-.page-actions .page-actions-buttons > button.action-primary.disabled,
-.page-actions > button.primary[disabled],
-.page-actions > button.primary.disabled,
-.page-actions .page-actions-buttons > button.primary[disabled],
-.page-actions .page-actions-buttons > button.primary.disabled,
-.popup-window .magento_buttons .ok_button[disabled],
-.popup-window .magento_buttons .ok_button.disabled,
-.popup-window .magento_buttons .cancel_button[disabled],
-.popup-window .magento_buttons .cancel_button.disabled,
-.fade .actions .primary[disabled],
-.fade .actions .primary.disabled,
-.fade .actions .cancel[disabled],
-.fade .actions .cancel.disabled {
-  cursor: default;
-  opacity: 0.7;
-  pointer-events: none;
-}
-.abs-action-l,
-.ui-dialog .ui-button,
-.ui-dialog .action-primary,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary,
-.page-layout-admin-login .action-primary,
-.page-actions button,
-.page-actions .page-actions-buttons > button,
-.page-actions > button.action-primary,
-.page-actions .page-actions-buttons > button.action-primary,
-.page-actions > button.primary,
-.page-actions .page-actions-buttons > button.primary,
-.popup-window .magento_buttons .ok_button,
-.fade .actions .primary {
-  font-size: 1.6rem;
-  letter-spacing: .025em;
-  padding-bottom: 0.6875em;
-  padding-top: 0.6875em;
-}
-.abs-action-default,
-button {
-  background: #e3e3e3;
-  border-color: #adadad;
-  color: #514943;
-}
-.abs-action-default:hover,
-button:hover {
-  background-color: #dbdbdb;
-  color: #514943;
-  text-decoration: none;
-}
-.abs-action-primary,
-button.primary,
-.page-actions > button.action-primary,
-.page-actions .page-actions-buttons > button.action-primary,
-.page-actions > button.primary,
-.page-actions .page-actions-buttons > button.primary {
-  background-color: #eb5202;
-  border-color: #eb5202;
-  color: #ffffff;
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25);
-}
-.abs-action-primary:hover,
-.abs-action-primary:active,
-button.primary:hover,
-button.primary:active,
-.page-actions > button.action-primary:hover,
-.page-actions > button.action-primary:active,
-.page-actions .page-actions-buttons > button.action-primary:hover,
-.page-actions .page-actions-buttons > button.action-primary:active,
-.page-actions > button.primary:hover,
-.page-actions > button.primary:active,
-.page-actions .page-actions-buttons > button.primary:hover,
-.page-actions .page-actions-buttons > button.primary:active {
-  background-color: #ba4000;
-  border-color: #b84002;
-  box-shadow: 0 0 0 1px #007bdb;
-  color: #ffffff;
-  text-decoration: none;
-}
-.abs-action-primary.disabled,
-.abs-action-primary[disabled],
-button.primary.disabled,
-button.primary[disabled],
-.page-actions > button.action-primary.disabled,
-.page-actions > button.action-primary[disabled],
-.page-actions .page-actions-buttons > button.action-primary.disabled,
-.page-actions .page-actions-buttons > button.action-primary[disabled],
-.page-actions > button.primary.disabled,
-.page-actions > button.primary[disabled],
-.page-actions .page-actions-buttons > button.primary.disabled,
-.page-actions .page-actions-buttons > button.primary[disabled] {
-  cursor: default;
-  opacity: 0.7;
-  pointer-events: none;
-}
-.abs-action-secondary,
-button.secondary,
-.ui-dialog .ui-button,
-.ui-dialog .action-primary,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary,
-.popup-window .magento_buttons .ok_button,
-.fade .actions .primary {
-  background-color: #514943;
-  border-color: #514943;
-  color: #ffffff;
-  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
-}
-.abs-action-secondary:hover,
-.abs-action-secondary:active,
-button.secondary:hover,
-button.secondary:active,
-.ui-dialog .ui-button:hover,
-.ui-dialog .ui-button:active,
-.ui-dialog .action-primary:hover,
-.ui-dialog .action-primary:active,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary:hover,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary:active,
-.popup-window .magento_buttons .ok_button:hover,
-.popup-window .magento_buttons .ok_button:active,
-.fade .actions .primary:hover,
-.fade .actions .primary:active {
-  background-color: #35302c;
-  box-shadow: 0 0 0 1px #007bdb;
-  color: #ffffff;
-  text-decoration: none;
-}
-.abs-action-secondary:active,
-button.secondary:active,
-.ui-dialog .ui-button:active,
-.ui-dialog .action-primary:active,
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary:active,
-.popup-window .magento_buttons .ok_button:active,
-.fade .actions .primary:active {
-  background-color: #35302c;
-}
-.abs-action-tertiary,
-button.tertiary,
-.ui-dialog .action-close,
-.attribute-popup-actions .action-default.reset,
-.popup-window .magento_buttons .cancel_button,
-.fade .actions .cancel {
-  background-color: transparent;
-  border-color: transparent;
-  text-shadow: none;
-  color: #007bdb;
-}
-.abs-action-tertiary:active,
-.abs-action-tertiary:hover,
-button.tertiary:active,
-button.tertiary:hover,
-.ui-dialog .action-close:active,
-.ui-dialog .action-close:hover,
-.attribute-popup-actions .action-default.reset:active,
-.attribute-popup-actions .action-default.reset:hover,
-.popup-window .magento_buttons .cancel_button:active,
-.popup-window .magento_buttons .cancel_button:hover,
-.fade .actions .cancel:active,
-.fade .actions .cancel:hover {
-  background-color: transparent;
-  border-color: transparent;
-  box-shadow: none;
-}
-.abs-action-tertiary:active,
-.abs-action-tertiary:hover,
-button.tertiary:active,
-button.tertiary:hover,
-.ui-dialog .action-close:active,
-.ui-dialog .action-close:hover,
-.attribute-popup-actions .action-default.reset:active,
-.attribute-popup-actions .action-default.reset:hover,
-.popup-window .magento_buttons .cancel_button:active,
-.popup-window .magento_buttons .cancel_button:hover,
-.fade .actions .cancel:active,
-.fade .actions .cancel:hover {
-  color: #007bdb;
-  text-decoration: underline;
-}
-.abs-action-quaternary,
-.page-actions > button,
-.page-actions .page-actions-buttons > button {
-  background-color: transparent;
-  border-color: transparent;
-  text-shadow: none;
-  color: #41362f;
-}
-.abs-action-quaternary:active,
-.abs-action-quaternary:hover,
-.page-actions > button:active,
-.page-actions > button:hover,
-.page-actions .page-actions-buttons > button:active,
-.page-actions .page-actions-buttons > button:hover {
-  background-color: transparent;
-  border-color: transparent;
-  box-shadow: none;
-}
-.abs-action-quaternary:active,
-.abs-action-quaternary:hover,
-.page-actions > button:active,
-.page-actions > button:hover,
-.page-actions .page-actions-buttons > button:active,
-.page-actions .page-actions-buttons > button:hover {
-  color: #231d1a;
-}
-.action-default,
-button {
-  background: #e3e3e3;
-  border-color: #adadad;
-  color: #514943;
-}
-.action-default:hover,
-button:hover {
-  background-color: #dbdbdb;
-  color: #514943;
-  text-decoration: none;
-}
-.action-primary {
-  background-color: #eb5202;
-  border-color: #eb5202;
-  color: #ffffff;
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25);
-}
-.action-primary:hover,
-.action-primary:active {
-  background-color: #ba4000;
-  border-color: #b84002;
-  box-shadow: 0 0 0 1px #007bdb;
-  color: #ffffff;
-  text-decoration: none;
-}
-.action-primary.disabled,
-.action-primary[disabled] {
-  cursor: default;
-  opacity: 0.7;
-  pointer-events: none;
-}
-.action-secondary {
-  background-color: #514943;
-  border-color: #514943;
-  color: #ffffff;
-  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
-}
-.action-secondary:hover,
-.action-secondary:active {
-  background-color: #35302c;
-  box-shadow: 0 0 0 1px #007bdb;
-  color: #ffffff;
-  text-decoration: none;
-}
-.action-secondary:active {
-  background-color: #35302c;
-}
-.action-tertiary,
-.action-quaternary {
-  background-color: transparent;
-  border-color: transparent;
-  text-shadow: none;
-}
-.action-tertiary:active,
-.action-quaternary:active,
-.action-tertiary:hover,
-.action-quaternary:hover {
-  background-color: transparent;
-  border-color: transparent;
-  box-shadow: none;
-}
-.action-tertiary {
-  color: #007bdb;
-}
-.action-tertiary:active,
-.action-tertiary:hover {
-  color: #007bdb;
-  text-decoration: underline;
-}
-.action-quaternary {
-  color: #41362f;
-}
-.action-quaternary:active,
-.action-quaternary:hover {
-  color: #231d1a;
-}
-table.table {
-  color: #303030;
-}
-table.table > caption {
-  margin-bottom: .5rem;
-}
-table.table tfoot {
-  background: #f8f8f8;
-}
-table.table tfoot th,
-table.table tfoot td {
-  text-align: left;
-}
-table.table th {
-  background: transparent;
-  border-bottom: 0.1rem solid #e3e3e3;
-  border-top: 0.1rem solid #e3e3e3;
-  font-weight: 700;
-  padding: 1rem 1.5rem;
-  text-align: left;
-}
-table.table td {
-  border-bottom: 0.1rem solid #e3e3e3;
-  padding: 1rem 1.5rem;
-  vertical-align: top;
-}
-table.table tbody td:first-child input[type='checkbox'] {
-  margin: 0;
-}
-table.table tbody tr:last-child td {
-  border-bottom-color: transparent;
-}
-.messages {
-  margin: 0 0 2rem;
-}
-.message {
-  background: #fffbbb;
-  border: none;
-  border-radius: 0;
-  color: #333333;
-  font-size: 1.4rem;
-  margin: 0 0 1px;
-  padding: 1.8rem 4rem 1.8rem 5.5rem;
-  position: relative;
-  text-shadow: none;
-}
-.message:before {
-  background: none;
-  border: 0;
-  color: #007bdb;
-  content: '\e61a';
-  font-family: 'Admin Icons';
-  font-size: 1.9rem;
-  font-style: normal;
-  font-weight: 400;
-  height: auto;
-  left: 1.9rem;
-  line-height: inherit;
-  margin-top: -1.3rem;
-  position: absolute;
-  speak: none;
-  text-shadow: none;
-  top: 50%;
-  width: auto;
-}
-.message-notice:before {
-  color: #007bdb;
-  content: '\e61a';
-}
-.message-warning:before {
-  color: #eb5202;
-  content: '\e623';
-}
-.message-error {
-  background: #ffcccc;
-}
-.message-error:before {
-  color: #e22626;
-  content: '\e632';
-  font-size: 1.5rem;
-  left: 2.2rem;
-  margin-top: -1rem;
-}
-.message-success:before {
-  color: #79a22e;
-  content: '\e62d';
-}
-.message-spinner:before {
-  display: none;
-}
-.message-spinner .spinner {
-  font-size: 2.5rem;
-  left: 1.5rem;
-  position: absolute;
-  top: 1.5rem;
-}
-.message-in-rating-edit {
-  margin-left: 1.8rem;
-  margin-right: 1.8rem;
-}
-.row {
-  margin-left: 0;
-  margin-right: 0;
-}
-.row:after {
-  content: "";
-  display: table;
-  clear: both;
-}
-.col-xs-1, .col-m-1, .col-l-1, .col-xl-1, .col-xs-2, .col-m-2, .col-l-2, .col-xl-2, .col-xs-3, .col-m-3, .col-l-3, .col-xl-3, .col-xs-4, .col-m-4, .col-l-4, .col-xl-4, .col-xs-5, .col-m-5, .col-l-5, .col-xl-5, .col-xs-6, .col-m-6, .col-l-6, .col-xl-6, .col-xs-7, .col-m-7, .col-l-7, .col-xl-7, .col-xs-8, .col-m-8, .col-l-8, .col-xl-8, .col-xs-9, .col-m-9, .col-l-9, .col-xl-9, .col-xs-10, .col-m-10, .col-l-10, .col-xl-10, .col-xs-11, .col-m-11, .col-l-11, .col-xl-11, .col-xs-12, .col-m-12, .col-l-12, .col-xl-12 {
-  position: relative;
-  min-height: 1px;
-  padding-left: 0;
-  padding-right: 0;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-  float: left;
-}
-.col-xs-12 {
-  width: 100%;
-}
-.col-xs-11 {
-  width: 91.66666667%;
-}
-.col-xs-10 {
-  width: 83.33333333%;
-}
-.col-xs-9 {
-  width: 75%;
-}
-.col-xs-8 {
-  width: 66.66666667%;
-}
-.col-xs-7 {
-  width: 58.33333333%;
-}
-.col-xs-6 {
-  width: 50%;
-}
-.col-xs-5 {
-  width: 41.66666667%;
-}
-.col-xs-4 {
-  width: 33.33333333%;
-}
-.col-xs-3 {
-  width: 25%;
-}
-.col-xs-2 {
-  width: 16.66666667%;
-}
-.col-xs-1 {
-  width: 8.33333333%;
-}
-.col-xs-pull-12 {
-  right: 100%;
-}
-.col-xs-pull-11 {
-  right: 91.66666667%;
-}
-.col-xs-pull-10 {
-  right: 83.33333333%;
-}
-.col-xs-pull-9 {
-  right: 75%;
-}
-.col-xs-pull-8 {
-  right: 66.66666667%;
-}
-.col-xs-pull-7 {
-  right: 58.33333333%;
-}
-.col-xs-pull-6 {
-  right: 50%;
-}
-.col-xs-pull-5 {
-  right: 41.66666667%;
-}
-.col-xs-pull-4 {
-  right: 33.33333333%;
-}
-.col-xs-pull-3 {
-  right: 25%;
-}
-.col-xs-pull-2 {
-  right: 16.66666667%;
-}
-.col-xs-pull-1 {
-  right: 8.33333333%;
-}
-.col-xs-pull-0 {
-  right: auto;
-}
-.col-xs-push-12 {
-  left: 100%;
-}
-.col-xs-push-11 {
-  left: 91.66666667%;
-}
-.col-xs-push-10 {
-  left: 83.33333333%;
-}
-.col-xs-push-9 {
-  left: 75%;
-}
-.col-xs-push-8 {
-  left: 66.66666667%;
-}
-.col-xs-push-7 {
-  left: 58.33333333%;
-}
-.col-xs-push-6 {
-  left: 50%;
-}
-.col-xs-push-5 {
-  left: 41.66666667%;
-}
-.col-xs-push-4 {
-  left: 33.33333333%;
-}
-.col-xs-push-3 {
-  left: 25%;
-}
-.col-xs-push-2 {
-  left: 16.66666667%;
-}
-.col-xs-push-1 {
-  left: 8.33333333%;
-}
-.col-xs-push-0 {
-  left: auto;
-}
-.col-xs-offset-12 {
-  margin-left: 100%;
-}
-.col-xs-offset-11 {
-  margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-  margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-  margin-left: 75%;
-}
-.col-xs-offset-8 {
-  margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-  margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-  margin-left: 50%;
-}
-.col-xs-offset-5 {
-  margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-  margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-  margin-left: 25%;
-}
-.col-xs-offset-2 {
-  margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-  margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-  margin-left: 0%;
-}
-.row-gutter {
-  margin-left: -1.5rem;
-  margin-right: -1.5rem;
-}
-.row-gutter .col-gutter {
-  padding-left: 1.5rem;
-  padding-right: 1.5rem;
-}
-.abs-icon,
-.admin__menu .level-0 > a:before,
-.admin__menu .submenu-close:before,
-.admin-user-account:before,
-.search-global-label:before,
-.notifications-action:before,
-.notifications-close:before,
-.copyright .link-copyright:before,
-.store-switcher .dropdown-menu .dropdown-toolbar a:before,
-.tooltip .help span:before,
-.tooltip .help a:before,
-.page-actions > button.back:before,
-.page-actions .page-actions-buttons > button.back:before,
-.page-actions > button.action-back:before,
-.page-actions .page-actions-buttons > button.action-back:before {
-  -webkit-font-smoothing: antialiased;
-  font-family: 'Admin Icons';
-  line-height: 1;
-  font-style: normal;
-  font-weight: normal;
-  speak: none;
-}
-.validation-symbol:after,
-table.table th.required:after {
-  content: '*';
-  color: #e22626;
-  font-weight: 400;
-  margin-left: 3px;
-}
-.abs-visually-hidden,
-.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option) > .admin__field-label,
-.dashboard-diagram-switcher .label {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.abs-clearfix:before,
-.abs-clearfix:after,
-.actions-split:before,
-.actions-split:after,
-.tabs-horiz:before,
-.tabs-horiz:after,
-.ui-dialog .ui-dialog-buttonset:before,
-.ui-dialog .ui-dialog-buttonset:after,
-.ui-dialog .main-col .insert-title-inner:before,
-.ui-dialog .main-col .insert-title-inner:after,
-.ui-dialog .magento_message .insert-title-inner:before,
-.ui-dialog .magento_message .insert-title-inner:after,
-.ui-dialog .main-col #contents-uploader:before,
-.ui-dialog .main-col #contents-uploader:after,
-.ui-dialog .magento_message #contents-uploader:before,
-.ui-dialog .magento_message #contents-uploader:after,
-.popup-window .magento_buttons:before,
-.popup-window .magento_buttons:after,
-.fade .popup-content:before,
-.fade .popup-content:after,
-.fade .actions:before,
-.fade .actions:after,
-.message-system-inner:before,
-.message-system-inner:after,
-.page-header-actions:before,
-.page-header-actions:after,
-.page-main-actions:before,
-.page-main-actions:after,
-.page-actions.fixed:before,
-.page-actions.fixed:after,
-.dashboard-totals-list:before,
-.dashboard-totals-list:after,
-.dashboard-store-stats .ui-tabs:before,
-.dashboard-store-stats .ui-tabs:after {
-  content: "";
-  display: table;
-}
-.abs-clearfix:after,
-.actions-split:after,
-.tabs-horiz:after,
-.ui-dialog .ui-dialog-buttonset:after,
-.ui-dialog .main-col .insert-title-inner:after,
-.ui-dialog .magento_message .insert-title-inner:after,
-.ui-dialog .main-col #contents-uploader:after,
-.ui-dialog .magento_message #contents-uploader:after,
-.popup-window .magento_buttons:after,
-.fade .popup-content:after,
-.fade .actions:after,
-.message-system-inner:after,
-.page-header-actions:after,
-.page-main-actions:after,
-.page-actions.fixed:after,
-.dashboard-totals-list:after,
-.dashboard-store-stats .ui-tabs:after {
-  clear: both;
-}
-.abs-clearer:after,
-.admin__fieldset > .admin__field:after,
-.col-2-left-layout:after {
-  content: "";
-  display: table;
-  clear: both;
-}
-.abs-list-reset-styles,
-.dashboard-totals-list {
-  margin: 0;
-  padding: 0;
-  list-style: none none;
-}
-.tabs-horiz {
-  margin: 0;
-  padding: 0;
-}
-.tabs-horiz .ui-state-default {
-  background: #e3e3e3;
-  border: 0.1rem solid #adadad;
-  float: left;
-  letter-spacing: .0183em;
-  list-style: none;
-  margin-right: .4rem;
-}
-.tabs-horiz .ui-state-hover {
-  background: #d6d6d6;
-}
-.tabs-horiz .ui-state-active {
-  background: #ffffff;
-  border-bottom: 0;
-  font-weight: 600;
-  letter-spacing: normal;
-  margin-bottom: -0.1rem;
-}
-.tabs-horiz .ui-state-active .ui-tabs-anchor {
-  border-bottom: 0.1rem solid #ffffff;
-  border-top: 0.4rem solid #eb5202;
-  padding-top: 1.1rem;
-}
-.tabs-horiz .ui-tabs-anchor {
-  color: #41362f;
-  display: block;
-  padding: 1.5rem 1.8rem 1.3rem;
-  text-decoration: none;
-}
-.ui-tabs-panel {
-  border-top: 0.1rem solid #adadad;
-  margin-top: -0.1rem;
-  padding: 2rem;
-}
-body {
-  background-color: #f5f5f5;
-}
-.page-wrapper {
-  background-color: #ffffff;
-  padding-left: 8.8rem;
-}
-.page-content {
-  padding-left: 3rem;
-  padding-right: 3rem;
-}
-.notices-wrapper {
-  margin: 0 3rem;
-}
-.notices-wrapper .messages {
-  margin-bottom: 0;
-}
-.admin__control-text.hasDatepicker {
-  width: 15rem;
-}
-.admin__control-text + .ui-datepicker-trigger {
-  background-image: none;
-  background: none;
-  border: 0;
-  margin: 0;
-  padding: 0;
-  -moz-box-sizing: content-box;
-  box-shadow: none;
-  text-shadow: none;
-  line-height: inherit;
-  font-weight: 400;
-  text-decoration: none;
-  height: 3.3rem;
-  overflow: hidden;
-  vertical-align: top;
-  margin-left: -4rem;
-  display: inline-block;
-}
-.admin__control-text + .ui-datepicker-trigger:focus,
-.admin__control-text + .ui-datepicker-trigger:active {
-  background: none;
-  border: none;
-}
-.admin__control-text + .ui-datepicker-trigger:hover {
-  background: none;
-  border: none;
-}
-.admin__control-text + .ui-datepicker-trigger.disabled,
-.admin__control-text + .ui-datepicker-trigger[disabled],
-fieldset[disabled] .admin__control-text + .ui-datepicker-trigger {
-  cursor: not-allowed;
-  pointer-events: none;
-  opacity: 0.5;
-}
-.admin__control-text + .ui-datepicker-trigger > span {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.admin__control-text + .ui-datepicker-trigger:after {
-  font-family: 'icons-blank-theme';
-  content: '\e612';
-  font-size: 3.8rem;
-  line-height: 33px;
-  color: #514943;
-  overflow: hidden;
-  speak: none;
-  font-weight: normal;
-  -webkit-font-smoothing: antialiased;
-  display: inline-block;
-  vertical-align: middle;
-  text-align: center;
-}
-.admin__control-text + .ui-datepicker-trigger img {
-  display: none;
-}
-.ui-datepicker {
-  box-sizing: border-box;
-  display: none;
-  padding: 23px 20px;
-  width: auto;
-  z-index: 999999 !important;
-}
-.ui-datepicker:before {
-  background: #ffffff;
-  border: 1px solid #007dbd;
-  bottom: 3px;
-  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.3);
-  content: '';
-  display: block;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 3px;
-  z-index: 0;
-}
-.ui-datepicker-header {
-  padding: 0 0 10px;
-  position: relative;
-  z-index: 1;
-}
-.ui-datepicker-prev,
-.ui-datepicker-next {
-  cursor: pointer;
-  position: absolute;
-  line-height: 3rem;
-  top: 0;
-}
-.ui-datepicker-prev span,
-.ui-datepicker-next span {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.ui-datepicker-prev:before,
-.ui-datepicker-next:before {
-  color: #514943;
-  font-size: 34px;
-  display: inline-block;
-}
-.ui-datepicker-prev {
-  left: 0;
-}
-.ui-datepicker-prev:before {
-  content: '\2039';
-}
-.ui-datepicker-next {
-  right: 0;
-}
-.ui-datepicker-next:before {
-  content: '\203A';
-}
-.ui-datepicker .ui-datepicker-title {
-  margin: 0 2.3em;
-  line-height: 1.8em;
-  text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
-  font-size: 1em;
-  margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month-year {
-  width: 100%;
-}
-.ui-datepicker table {
-  width: 100%;
-}
-.ui-datepicker table.ui-datepicker-calendar {
-  background: #FFFFFF;
-  border-collapse: collapse;
-  border: 0;
-  position: relative;
-  z-index: 1;
-}
-.ui-datepicker table.ui-datepicker-calendar thead {
-  background: transparent;
-}
-.ui-datepicker table.ui-datepicker-calendar tr {
-  background: transparent;
-}
-.ui-datepicker table.ui-datepicker-calendar tr th {
-  background: transparent;
-  border: 0;
-  padding: 0;
-}
-.ui-datepicker table.ui-datepicker-calendar tr th span {
-  font-weight: 700;
-  font-size: 12px;
-  line-height: 28px;
-}
-.ui-datepicker table.ui-datepicker-calendar tr td {
-  background: transparent;
-  border: 1px solid #adadad;
-  padding: 0;
-}
-.ui-datepicker table.ui-datepicker-calendar span,
-.ui-datepicker table.ui-datepicker-calendar a {
-  box-sizing: border-box;
-  color: #514943;
-  display: block;
-  font-size: 14px;
-  font-weight: 600;
-  line-height: 38px;
-  text-align: center;
-  text-decoration: none;
-  width: 38px;
-}
-.ui-datepicker table.ui-datepicker-calendar .ui-state-disabled span {
-  background: #f5f5f5;
-  color: #999999;
-}
-.ui-datepicker table.ui-datepicker-calendar .ui-state-active {
-  background: #514943;
-  color: #fff;
-}
-.ui-datepicker table.ui-datepicker-calendar .ui-datepicker-today a {
-  border: 3px solid #adadad;
-  line-height: 32px;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
-  overflow: hidden;
-  padding-top: 15px;
-  position: relative;
-  white-space: nowrap;
-  z-index: 1;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
-  background: #fff;
-  border-radius: 1px;
-  border: 1px solid #adadad;
-  box-sizing: border-box;
-  color: #008bdb;
-  float: left;
-  font-size: 14px;
-  line-height: 38px;
-  padding: 0;
-  text-align: center;
-  width: 49%;
-}
-.ui-datepicker .ui-datepicker-buttonpane .ui-datepicker-close {
-  float: right;
-}
-.ui-datepicker .ui-datepicker-title .ui-datepicker-month {
-  width: 47%;
-  margin-right: 6%;
-}
-.ui-datepicker .ui-datepicker-title .ui-datepicker-year {
-  width: 47%;
-}
-.ui-datepicker .ui-datepicker-calendar .ui-datepicker-week-col {
-  text-align: center;
-  border: #cfcfcf 1px solid;
-}
-.ui-timepicker-div .ui-widget-header {
-  margin-bottom: 8px;
-}
-.ui-timepicker-div dl {
-  text-align: left;
-}
-.ui-timepicker-div dl dd {
-  margin: 0 0 10px 65px;
-}
-.ui-timepicker-div td {
-  font-size: 90%;
-}
-.ui-tpicker-grid-label {
-  background: none;
-  border: none;
-  margin: 0;
-  padding: 0;
-}
-.ui-slider {
-  position: relative;
-  text-align: left;
-}
-.ui-slider-horizontal .ui-slider-handle {
-  margin-left: -5px;
-}
-.ui-slider .ui-slider-handle {
-  position: absolute;
-  z-index: 2;
-  cursor: default;
-}
-.ui-slider-horizontal {
-  height: 10px;
-  -webkit-border-radius: 10px;
-  border-radius: 10px;
-  border: none;
-  background: #adadad;
-}
-.ui-slider-handle {
-  height: 10px;
-  width: 10px;
-  -webkit-border-radius: 10px;
-  border-radius: 10px;
-  background: #514943;
-  display: block;
-  position: absolute;
-}
-.ui-timepicker-div {
-  padding: 10px 0 5px 0;
-}
-.ui-datepicker-rtl {
-  direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
-  right: 2px;
-  left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
-  left: 2px;
-  right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
-  right: 1px;
-  left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
-  left: 1px;
-  right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
-  clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
-  float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current {
-  float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group {
-  float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header {
-  border-right-width: 0;
-  border-left-width: 1px;
-}
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
-  border-right-width: 0;
-  border-left-width: 1px;
-}
-.ui-timepicker-div .ui-widget-header {
-  margin-bottom: 8px;
-}
-.ui-timepicker-div dl {
-  text-align: left;
-}
-.ui-timepicker-div dl dt {
-  height: 25px;
-  margin-bottom: -22px;
-}
-.ui-timepicker-div dl .ui_tpicker_time_label {
-  margin-bottom: -25px;
-}
-.ui-timepicker-div dl dd {
-  margin: 0 10px 10px 65px;
-}
-.ui-timepicker-div td {
-  font-size: 90%;
-}
-.ui-tpicker-grid-label {
-  background: none;
-  border: none;
-  margin: 0;
-  padding: 0;
-}
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-  position: absolute;
-  /*must have*/
-  z-index: -1;
-  /*must have*/
-  filter: mask();
-  /*must have*/
-  top: -4px;
-  /*must have*/
-  left: -4px;
-  /*must have*/
-  width: 200px;
-  /*must have*/
-  height: 200px;
-  /*must have*/
-}
-.ui-dialog {
-  background: #ffffff;
-  min-width: 40%;
-  opacity: 0;
-  transform: scale(0.7);
-  transition: all 0.3s;
-  visibility: hidden;
-  width: 75%;
-}
-.ui-dialog.ui-dialog-active {
-  transform: scale(1);
-  opacity: 1;
-  visibility: visible;
-}
-.ui-dialog.ui-draggable .ui-dialog-titlebar {
-  cursor: move;
-}
-.ui-dialog .ui-dialog-titlebar,
-.popup-window .magento_title,
-.fade .popup-title {
-  color: #333333;
-  font-size: 2.4rem;
-  line-height: 2.4rem;
-  padding: 3rem 6rem 3rem 3rem;
-}
-.ui-dialog .ui-dialog-titlebar-close,
-.popup-window .magento_close,
-.fade .popup .close {
-  cursor: pointer;
-  display: inline-block;
-  text-decoration: none;
-  position: absolute;
-  right: 3rem;
-  top: 2.7rem;
-}
-.ui-dialog .ui-dialog-titlebar-close:before,
-.popup-window .magento_close:before,
-.fade .popup .close:before {
-  font-family: 'Admin Icons';
-  content: '\e62f';
-  font-size: 2rem;
-  line-height: inherit;
-  color: #736963;
-  overflow: hidden;
-  speak: none;
-  font-weight: normal;
-  -webkit-font-smoothing: antialiased;
-  display: inline-block;
-  vertical-align: middle;
-  text-align: center;
-}
-.ui-dialog .ui-dialog-titlebar-close:hover:before,
-.popup-window .magento_close:hover:before,
-.fade .popup .close:hover:before {
-  color: #adadad;
-}
-.ui-dialog .ui-dialog-titlebar-close .ui-icon,
-.popup-window .magento_close .ui-icon,
-.fade .popup .close .ui-icon {
-  display: none;
-}
-.ui-dialog .ui-dialog-titlebar-close.ui-state-hover,
-.popup-window .magento_close.ui-state-hover,
-.fade .popup .close.ui-state-hover {
-  border: none;
-}
-.ui-dialog .ui-dialog-content {
-  overflow: auto;
-  padding: 0 3rem 3rem;
-}
-.ui-dialog .ui-dialog-content .fieldset {
-  padding-left: 0;
-  padding-right: 0;
-}
-.ui-dialog .ui-dialog-buttonpane {
-  padding: 0 3rem 3rem;
-}
-.ui-dialog .content + .ui-dialog-buttonset {
-  padding-top: 3rem;
-  text-align: right;
-}
-.ui-dialog .action-close,
-.popup-window .magento_buttons .cancel_button,
-.fade .actions .cancel {
-  font-size: 1.6rem;
-  margin: 0 0 0 3rem;
-  padding: 0.7em 0;
-}
-.ui-dialog .ui-button,
-.ui-dialog .action-primary,
-.popup-window .magento_buttons .ok_button,
-.fade .actions .primary {
-  float: right;
-  margin: 0 0 0 3rem;
-}
-.ui-dialog .fieldset:last-child {
-  padding-bottom: 0;
-}
-.ui-dialog .main-col,
-.ui-dialog .side-col {
-  float: left;
-  padding-bottom: 0;
-}
-.ui-dialog .main-col:after,
-.ui-dialog .side-col:after {
-  display: none;
-}
-.ui-dialog .main-col {
-  padding-right: 0;
-}
-.ui-dialog .grid,
-.ui-dialog .pager {
-  padding-bottom: 0;
-}
-.ui-dialog .grid-actions {
-  padding-top: 0;
-}
-.ui-dialog .ui-resizable {
-  position: relative;
-}
-.ui-dialog .ui-resizable-handle {
-  position: absolute;
-  font-size: 0.1px;
-  display: block;
-}
-.ui-dialog .ui-resizable-disabled .ui-resizable-handle,
-.ui-dialog .ui-resizable-autohide .ui-resizable-handle {
-  display: none;
-}
-.ui-dialog .ui-resizable-n {
-  cursor: n-resize;
-  height: 7px;
-  width: 100%;
-  top: -5px;
-  left: 0;
-}
-.ui-dialog .ui-resizable-s {
-  cursor: s-resize;
-  height: 7px;
-  width: 100%;
-  bottom: 0;
-  left: 0;
-}
-.ui-dialog .ui-resizable-e {
-  cursor: e-resize;
-  width: 7px;
-  right: 0;
-  top: 0;
-  height: 100%;
-}
-.ui-dialog .ui-resizable-w {
-  cursor: w-resize;
-  width: 7px;
-  left: -7px;
-  top: 0;
-  height: 100%;
-}
-.ui-dialog .ui-resizable-se {
-  cursor: se-resize;
-  width: 12px;
-  height: 12px;
-  right: 1px;
-  bottom: 1px;
-}
-.ui-dialog .ui-resizable-sw {
-  cursor: sw-resize;
-  width: 9px;
-  height: 9px;
-  left: -5px;
-  bottom: 0;
-}
-.ui-dialog .ui-resizable-nw {
-  cursor: nw-resize;
-  width: 9px;
-  height: 9px;
-  left: -5px;
-  top: -5px;
-}
-.ui-dialog .ui-resizable-ne {
-  cursor: ne-resize;
-  width: 9px;
-  height: 9px;
-  right: 0;
-  top: -5px;
-}
-.ui-dialog .main-col .insert-title-inner,
-.ui-dialog .magento_message .insert-title-inner {
-  border-bottom: 1px solid #adadad;
-  margin: 0 0 2rem;
-  padding-bottom: 0.5rem;
-}
-.ui-dialog .main-col .insert-actions,
-.ui-dialog .magento_message .insert-actions {
-  float: right;
-}
-.ui-dialog .main-col .title,
-.ui-dialog .magento_message .title {
-  font-size: 1.6rem;
-  padding-top: 0.5rem;
-}
-.ui-dialog .main-col .main-col-inner .uploader,
-.ui-dialog .magento_message .main-col-inner .uploader {
-  border: 1px solid #adadad;
-  margin: 0 0 1rem;
-  padding: 0.5rem;
-}
-.ui-dialog .main-col .breadcrumbs,
-.ui-dialog .magento_message .breadcrumbs {
-  padding-left: 0;
-}
-.ui-dialog .main-col .breadcrumbs li:after,
-.ui-dialog .magento_message .breadcrumbs li:after {
-  content: '';
-  margin: 0 0.5rem 0 0;
-}
-.ui-dialog .main-col #contents-uploader,
-.ui-dialog .magento_message #contents-uploader {
-  margin: 0 0 2rem;
-}
-.ui-dialog .main-col .fileinput-button,
-.ui-dialog .magento_message .fileinput-button {
-  cursor: pointer;
-  display: inline-block;
-  float: none;
-  vertical-align: middle;
-}
-.ui-dialog .main-col .fileinput-button span,
-.ui-dialog .magento_message .fileinput-button span {
-  display: none;
-}
-.ui-dialog .main-col .fileinput-button input,
-.ui-dialog .magento_message .fileinput-button input {
-  border: none;
-  -moz-transform: none;
-  opacity: 1;
-  position: static;
-}
-.ui-dialog .main-col .file-row,
-.ui-dialog .magento_message .file-row {
-  border: 1px solid #adadad;
-  margin: 0.5rem 0;
-  padding: 2px;
-}
-.ui-dialog .main-col .filecnt,
-.ui-dialog .magento_message .filecnt {
-  border: 1px solid #adadad;
-  display: inline-block;
-  margin: 0 0.5rem 15px 0;
-  padding: 3px;
-  width: 100px;
-  overflow: hidden;
-}
-.ui-dialog .main-col .filecnt.selected,
-.ui-dialog .magento_message .filecnt.selected {
-  border-color: #008bdb;
-}
-.ui-dialog .main-col .filecnt p,
-.ui-dialog .magento_message .filecnt p {
-  text-align: center;
-}
-.ui-dialog .main-col .x-tree,
-.ui-dialog .magento_message .x-tree {
-  margin-bottom: 2rem;
-}
-.ui-widget-overlay,
-.overlay_magento,
-.fade {
-  background: rgba(0, 0, 0, 0.35);
-  bottom: 0;
-  left: 0;
-  position: fixed;
-  right: 0;
-  top: 0;
-}
-.ui-popup-message .ui-dialog-titlebar {
-  background: #fffbbb;
-  font-size: 1.6rem;
-  font-weight: 700;
-  padding: 2rem 2rem 0;
-}
-.ui-popup-message .ui-dialog-titlebar-close {
-  right: 1.5rem;
-  top: 1rem;
-}
-.ui-popup-message .ui-dialog-titlebar-close:before {
-  font-size: 1.4rem;
-}
-.ui-popup-message .ui-dialog-content {
-  background: #fffbbb;
-  padding: 0 2rem 2rem;
-}
-.ui-popup-message .ui-dialog-content .message:last-child {
-  margin-bottom: 0;
-}
-.ui-popup-message .ui-dialog-buttonpane {
-  background: #fffbbb;
-  padding: 0 2rem 2rem;
-}
-.insert-variable {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-.insert-variable li {
-  margin-top: 0.5rem;
-  padding-left: 1rem;
-}
-.insert-variable li b {
-  margin-left: -1rem;
-  display: inline-block;
-}
-.attribute-popup-actions {
-  background: #ffffff;
-  border-top: 1px solid #adadad;
-  bottom: 0;
-  left: 0;
-  padding: 3rem;
-  position: fixed;
-  right: 0;
-  top: auto !important;
-}
-.attribute-popup-actions.fixed {
-  background: #ffffff !important;
-  border-bottom: 0 !important;
-  left: 0 !important;
-  padding: 3rem !important;
-}
-.attribute-popup-actions.fixed .page-actions-buttons {
-  padding-right: 0;
-}
-.attribute-popup-actions .action-default.reset {
-  font-size: 1.6rem;
-  padding: 0.7em 0;
-}
-.attribute-popup-actions .page-actions-buttons > button.action-default.primary {
-  float: right;
-}
-.attribute-popup-actions .page-actions-inner:before {
-  display: none;
-}
-.popup-window {
-  background: #ffffff;
-}
-.popup-window.dialog {
-  z-index: 900 !important;
-}
-.popup-window .table_window > tbody > tr > td {
-  background: #ffffff;
-  border: 0;
-  padding: 0;
-}
-.popup-window .magento_message {
-  padding: 0 3rem 3rem;
-  position: relative;
-}
-.popup-window .magento_content {
-  height: auto !important;
-}
-.popup-window .magento_buttons {
-  padding: 0 3rem 3rem;
-  text-align: right;
-}
-.popup-window .magento_buttons .ok_button {
-  float: right;
-  margin: 0 0 0 3rem;
-}
-.overlay_magento {
-  z-index: 800 !important;
-}
-.fade {
-  z-index: 1000;
-}
-.fade .popup {
-  background: #ffffff;
-  border: 0;
-  border-radius: 0;
-  display: inline-block;
-  left: 12.5%;
-  position: absolute;
-  top: 5rem;
-  text-align: left;
-  width: 75%;
-}
-.fade .popup-inner {
-  padding: 0;
-}
-.fade .popup-title {
-  background: #fffbbb;
-  font-size: 1.6rem;
-  font-weight: 700;
-  padding: 2rem 2rem 0;
-}
-.fade .popup-header .popup-title {
-  margin: 0;
-}
-.fade .popup-content {
-  background: #fffbbb;
-  padding: 0 2rem 2rem;
-}
-.fade .popup-content p {
-  margin-top: 0;
-}
-.fade .popup-content .messages:last-child {
-  margin-bottom: 0;
-}
-.fade .fieldset {
-  background: #fffbbb;
-  border: 0;
-  margin: 1.5rem 0 1.5rem 1.5rem;
-  padding: 0;
-}
-.fade .maintenance-checkbox-container {
-  padding-left: 20%;
-}
-.fade .messages {
-  margin: 0 !important;
-}
-.fade .actions {
-  margin: 0;
-  text-align: right;
-}
-.fade .actions .primary {
-  font-size: 1.4rem;
-  float: right;
-  margin: 0 0 0 3rem;
-}
-.fade .actions .primary:hover {
-  box-shadow: none;
-}
-.fade .actions .cancel {
-  font-size: 1.4rem;
-}
-.fade .actions .cancel:hover {
-  box-shadow: none;
-}
-.login-header {
-  margin: 0 0 3rem;
-}
-.page-layout-admin-login {
-  align-items: center;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  background-color: #373330;
-  padding: 2rem 0 20rem;
-}
-.page-layout-admin-login .page-wrapper {
-  -webkit-flex-shrink: 0;
-  flex-shrink: 0;
-  -webkit-flex-grow: 0;
-  flex-grow: 0;
-  background-color: #ffffff;
-  border: 1px solid #e3e3e3;
-  box-shadow: 0 5px 30px 0 #000000;
-  margin: auto;
-  max-width: 45rem;
-  min-height: 30rem;
-  padding: 40px 80px 50px;
-  position: relative;
-  width: 100%;
-  z-index: 1;
-}
-.ie9 .page-layout-admin-login .page-wrapper {
-  margin-top: 10%;
-}
-.page-layout-admin-login :-ms-input-placeholder {
-  color: transparent;
-}
-.page-layout-admin-login ::-webkit-input-placeholder {
-  color: transparent;
-}
-.page-layout-admin-login ::-moz-placeholder {
-  color: transparent;
-}
-.page-layout-admin-login .admin__legend {
-  color: #eb5202;
-  font-size: 2.6rem;
-  font-weight: 300;
-  line-height: 1.2;
-  margin: -1rem 0 0.5rem;
-}
-.page-layout-admin-login .admin__field-info {
-  margin-bottom: 3rem;
-}
-.page-layout-admin-login .messages {
-  margin-top: -1rem;
-}
-.page-layout-admin-login .messages + form .admin__legend {
-  display: none;
-}
-.page-layout-admin-login .actions {
-  padding: 0 0 3rem;
-}
-.admin__control-dummy {
-  display: none;
-}
-.login-footer {
-  left: 0;
-  position: absolute;
-  top: 100%;
-  width: 100%;
-}
-.login-footer .copyright {
-  color: #989287;
-  font-size: 1rem;
-  font-weight: 400;
-  margin: 5rem 0 2rem;
-  text-align: center;
-}
-.login-footer .copyright .link-copyright:before {
-  display: none;
-}
-.adminhtml-auth-login .form-actions {
-  display: table;
-  margin-top: -2rem;
-}
-.adminhtml-auth-login .form-actions .links {
-  display: table-header-group;
-}
-.adminhtml-auth-login .form-actions .actions {
-  padding: 3rem 0 0;
-}
-.spinner {
-  display: inline-block;
-  font-size: 4rem;
-  height: 1em;
-  margin-right: 1.5rem;
-  position: relative;
-  width: 1em;
-}
-.spinner > span:nth-child( 1) {
-  -webkit-animation-delay: 0.27s;
-  -moz-animation-delay: 0.27s;
-  -ms-animation-delay: 0.27s;
-  animation-delay: 0.27s;
-  -webkit-transform: rotate(-315deg);
-  -moz-transform: rotate(-315deg);
-  -ms-transform: rotate(-315deg);
-  transform: rotate(-315deg);
-}
-.spinner > span:nth-child( 2) {
-  -webkit-animation-delay: 0.36s;
-  -moz-animation-delay: 0.36s;
-  -ms-animation-delay: 0.36s;
-  animation-delay: 0.36s;
-  -webkit-transform: rotate(-270deg);
-  -moz-transform: rotate(-270deg);
-  -ms-transform: rotate(-270deg);
-  transform: rotate(-270deg);
-}
-.spinner > span:nth-child( 3) {
-  -webkit-animation-delay: 0.45s;
-  -moz-animation-delay: 0.45s;
-  -ms-animation-delay: 0.45s;
-  animation-delay: 0.45s;
-  -webkit-transform: rotate(-225deg);
-  -moz-transform: rotate(-225deg);
-  -ms-transform: rotate(-225deg);
-  transform: rotate(-225deg);
-}
-.spinner > span:nth-child( 4) {
-  -webkit-animation-delay: 0.54s;
-  -moz-animation-delay: 0.54s;
-  -ms-animation-delay: 0.54s;
-  animation-delay: 0.54s;
-  -webkit-transform: rotate(-180deg);
-  -moz-transform: rotate(-180deg);
-  -ms-transform: rotate(-180deg);
-  transform: rotate(-180deg);
-}
-.spinner > span:nth-child( 5) {
-  -webkit-animation-delay: 0.63s;
-  -moz-animation-delay: 0.63s;
-  -ms-animation-delay: 0.63s;
-  animation-delay: 0.63s;
-  -webkit-transform: rotate(-135deg);
-  -moz-transform: rotate(-135deg);
-  -ms-transform: rotate(-135deg);
-  transform: rotate(-135deg);
-}
-.spinner > span:nth-child( 6) {
-  -webkit-animation-delay: 0.72s;
-  -moz-animation-delay: 0.72s;
-  -ms-animation-delay: 0.72s;
-  animation-delay: 0.72s;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-}
-.spinner > span:nth-child( 7) {
-  -webkit-animation-delay: 0.81s;
-  -moz-animation-delay: 0.81s;
-  -ms-animation-delay: 0.81s;
-  animation-delay: 0.81s;
-  -webkit-transform: rotate(-45deg);
-  -moz-transform: rotate(-45deg);
-  -ms-transform: rotate(-45deg);
-  transform: rotate(-45deg);
-}
-.spinner > span:nth-child( 8) {
-  -webkit-animation-delay: 0.9;
-  -moz-animation-delay: 0.9;
-  -ms-animation-delay: 0.9;
-  animation-delay: 0.9;
-  -webkit-transform: rotate(0deg);
-  -moz-transform: rotate(0deg);
-  -ms-transform: rotate(0deg);
-  transform: rotate(0deg);
-}
-@-moz-keyframes fade {
-  0% {
-    background-color: #514943;
-  }
-  100% {
-    background-color: #ffffff;
-  }
-}
-@-webkit-keyframes fade {
-  0% {
-    background-color: #514943;
-  }
-  100% {
-    background-color: #ffffff;
-  }
-}
-@-ms-keyframes fade {
-  0% {
-    background-color: #514943;
-  }
-  100% {
-    background-color: #ffffff;
-  }
-}
-@keyframes fade {
-  0% {
-    background-color: #514943;
-  }
-  100% {
-    background-color: #ffffff;
-  }
-}
-.spinner > span {
-  -webkit-transform: scale(0.4);
-  -moz-transform: scale(0.4);
-  -ms-transform: scale(0.4);
-  transform: scale(0.4);
-  -webkit-animation-name: fade;
-  -moz-animation-name: fade;
-  -ms-animation-name: fade;
-  animation-name: fade;
-  -webkit-animation-duration: 0.72s;
-  -moz-animation-duration: 0.72s;
-  -ms-animation-duration: 0.72s;
-  animation-duration: 0.72s;
-  -webkit-animation-iteration-count: infinite;
-  -moz-animation-iteration-count: infinite;
-  -ms-animation-iteration-count: infinite;
-  animation-iteration-count: infinite;
-  -webkit-animation-direction: linear;
-  -moz-animation-direction: linear;
-  -ms-animation-direction: linear;
-  animation-direction: linear;
-  background-color: #ffffff;
-  border-radius: 6px;
-  clip: rect(0 0.28571429em 0.1em 0);
-  height: .1em;
-  margin-top: 0.5em;
-  position: absolute;
-  width: 1em;
-}
-.ie9 .spinner {
-  background: url('../images/ajax-loader.gif') no-repeat center;
-}
-.ie9 .spinner > span {
-  display: none;
-}
-.message-system-inner {
-  background: #fffbbb;
-}
-.message-system-inner .message-system-list {
-  float: left;
-  width: 75%;
-}
-.message-system-list {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-.message-system-short {
-  overflow: hidden;
-  text-align: right;
-}
-.message-system-short .message-system-short-label {
-  display: inline-block;
-  padding: 1.8rem 0.3rem 1.8rem 1rem;
-}
-.message-system-short .message {
-  display: inline-block;
-  padding: 1.8rem 2rem 1.8rem 3.3rem;
-}
-.message-system-short .message:before {
-  left: .3rem;
-}
-.menu-wrapper {
-  height: 100%;
-  left: 0;
-  position: fixed;
-  top: 0;
-  width: 8.8rem;
-  z-index: 700;
-}
-.menu-wrapper:after {
-  background-color: #373330;
-  bottom: 0;
-  content: '';
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 699;
-}
-.menu-wrapper .logo {
-  display: block;
-  height: 6.5rem;
-  margin-bottom: 1rem;
-  padding: 1.2rem 0;
-  position: relative;
-  text-align: center;
-  z-index: 700;
-}
-.menu-wrapper .logo:hover .logo-img {
-  -webkit-filter: brightness(1.1);
-  filter: brightness(1.1);
-}
-.menu-wrapper .logo:active .logo-img {
-  transform: scale(0.95);
-}
-.menu-wrapper .logo .logo-img {
-  height: 4.1rem;
-  transition: -webkit-filter 0.2s linear, filter 0.2s linear, transform 0.1s linear;
-  width: 3.5rem;
-}
-.admin__menu {
-  position: relative;
-}
-.admin__menu li {
-  display: block;
-}
-.admin__menu .level-0:first-child > a {
-  position: relative;
-}
-.admin__menu .level-0:first-child > a:after {
-  background-color: #736963;
-  content: '';
-  display: block;
-  height: 1px;
-  left: 0;
-  margin-left: 16%;
-  position: absolute;
-  top: 0;
-  width: 68%;
-}
-.admin__menu .level-0:first-child._active > a:after {
-  display: none;
-}
-.admin__menu .level-0._active > a,
-.admin__menu .level-0._hover > a,
-.admin__menu .level-0:hover > a {
-  background-color: #524d49;
-  color: #f7f3eb;
-}
-.admin__menu .level-0 > a {
-  color: #aaa6a0;
-  display: block;
-  font-size: 1rem;
-  letter-spacing: .025em;
-  min-height: 6.2rem;
-  padding: 1.2rem .5rem .5rem;
-  position: relative;
-  text-align: center;
-  text-decoration: none;
-  text-transform: uppercase;
-  transition: background-color 0.1s linear;
-  word-break: break-all;
-  z-index: 700;
-}
-.admin__menu .level-0 > a:focus {
-  box-shadow: none;
-}
-.admin__menu .level-0 > a:before {
-  content: '\e63a';
-  display: block;
-  font-family: 'Admin Icons';
-  font-size: 2.2rem;
-  height: 2.2rem;
-  margin-bottom: .3rem;
-}
-.admin__menu .level-0 > .submenu {
-  background-color: #524d49;
-  box-shadow: 0 0 3px #000000;
-  left: -90rem;
-  min-height: ~" calc(7.5rem + 2rem + 100%)";
-  padding: 2rem 0 0;
-  position: absolute;
-  top: -7.5rem;
-  transition: all .5s ease;
-  visibility: hidden;
-  z-index: 698;
-}
-.admin__menu .level-0 > .submenu._show {
-  left: 100%;
-  visibility: visible;
-}
-.admin__menu .level-0._recent._hover .submenu {
-  left: 100%;
-  visibility: visible;
-}
-.admin__menu .level-1 {
-  margin-left: 1.5rem;
-  margin-right: 1.5rem;
-}
-.admin__menu [class*='level-']:not(.level-0) a {
-  display: block;
-  padding: 1.25rem 1.5rem;
-}
-.admin__menu .submenu li {
-  min-width: 23.8rem;
-}
-.admin__menu .submenu a {
-  color: #fcfcfc;
-}
-.keyfocus .admin__menu .submenu a {
-  text-decoration: none;
-}
-.admin__menu .submenu a:active,
-.admin__menu .submenu a:focus {
-  box-shadow: none;
-}
-.keyfocus .admin__menu .submenu a:active,
-.keyfocus .admin__menu .submenu a:focus {
-  background-color: #403934;
-}
-.admin__menu .submenu .parent {
-  margin-bottom: 4.5rem;
-}
-.admin__menu .submenu .parent > a,
-.admin__menu .submenu .parent .submenu-group-title {
-  color: #a79d95;
-  display: block;
-  font-size: 1.6rem;
-  font-weight: 600;
-  margin-bottom: .7rem;
-  padding: 1.25rem 1.5rem;
-  pointer-events: none;
-}
-.admin__menu .submenu .column {
-  display: table-cell;
-}
-.admin__menu .submenu-title {
-  color: #ffffff;
-  display: block;
-  font-size: 2.2rem;
-  font-weight: 600;
-  margin-bottom: 4.2rem;
-  margin-left: 3rem;
-  margin-right: 5.8rem;
-}
-.admin__menu .submenu-sub-title {
-  color: #ffffff;
-  display: block;
-  font-size: 1.2rem;
-  margin: -3.8rem 5.8rem 3.8rem 3rem;
-}
-.admin__menu .submenu-close {
-  padding: 2.4rem 2.8rem;
-  position: absolute;
-  right: 0;
-  top: 0;
-}
-.admin__menu .submenu-close:active {
-  transform: scale(0.9);
-}
-.admin__menu .submenu-close:before {
-  color: #a79d95;
-  content: '\e62f';
-  font-size: 1.7rem;
-  transition: color 0.1s linear;
-}
-.admin__menu .submenu-close:hover:before {
-  color: #ffffff;
-}
-.admin__menu .item-dashboard > a:before {
-  content: '\e604';
-  font-size: 1.8rem;
-  padding-top: 0.4rem;
-}
-.admin__menu .item-sales > a:before {
-  content: '\e60b';
-}
-.admin__menu .item-catalog > a:before {
-  content: '\e608';
-}
-.admin__menu .item-customer > a:before {
-  content: '\e603';
-  font-size: 2.6rem;
-  position: relative;
-  top: -0.4rem;
-}
-.admin__menu .item-marketing > a:before {
-  content: '\e609';
-  font-size: 2rem;
-  padding-top: 0.2rem;
-}
-.admin__menu .item-content > a:before {
-  content: '\e602';
-  font-size: 2.4rem;
-  position: relative;
-  top: -0.2rem;
-}
-.admin__menu .item-report > a:before {
-  content: '\e60a';
-}
-.admin__menu .item-stores > a:before {
-  content: '\e60d';
-  font-size: 1.9rem;
-  padding-top: 0.3rem;
-}
-.admin__menu .item-system > a:before {
-  content: '\e610';
-}
-.admin__menu-overlay {
-  bottom: 0;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 697;
-}
-.admin-user {
-  float: right;
-  line-height: 1.4;
-  margin-left: .3rem;
-  position: relative;
-  z-index: 390;
-}
-.admin-user.active .admin-user-account {
-  border-color: #007bdb;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-}
-.admin-user.active .admin-user-account-text-wrapper:after {
-  background-color: #ffffff;
-  content: '';
-  height: 6px;
-  left: -6px;
-  position: absolute;
-  right: 0;
-  top: 100%;
-}
-.admin-user.active .admin-user-menu {
-  opacity: 1;
-  visibility: visible;
-}
-.admin-user-account {
-  padding-right: 2.8rem;
-  font-size: 1.3rem;
-  letter-spacing: .05em;
-  padding-bottom: 0.4rem;
-  padding-left: 4rem;
-  padding-top: 0.7rem;
-  z-index: 2;
-}
-.admin-user-account._active:after,
-.admin-user-account.active:after {
-  transform: rotate(180deg);
-}
-.admin-user-account:after {
-  border-color: #41362f transparent transparent transparent;
-  border-style: solid;
-  border-width: 0.5rem 0.4rem 0 0.4rem;
-  content: '';
-  height: 0;
-  margin-top: -0.2rem;
-  position: absolute;
-  right: 1.3rem;
-  top: 50%;
-  transition: all .2s linear;
-  width: 0;
-}
-._active .admin-user-account:after,
-.active .admin-user-account:after {
-  transform: rotate(180deg);
-}
-.admin-user-account:hover:after {
-  border-color: #060504 transparent transparent transparent;
-}
-.admin-user-account:before {
-  content: '\e600';
-  font-size: 2rem;
-  left: 1.1rem;
-  margin-top: -1.1rem;
-  position: absolute;
-  top: 50%;
-}
-.admin-user-account-text {
-  display: inline-block;
-  max-width: 11.2rem;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.admin-user-menu {
-  line-height: 1.4;
-  min-width: 20rem;
-  padding: 0.5em 1rem;
-  z-index: 1;
-}
-.admin-user-menu:before {
-  z-index: 1;
-}
-.admin-user-menu > li > a {
-  color: #41362f;
-  display: block;
-  padding: 0.6rem 1.8rem 0.6rem 0.5em;
-  text-decoration: none;
-  transition: background-color 0.1s linear;
-  white-space: nowrap;
-}
-.admin-user-menu > li > a:hover {
-  background-color: #e0f6fe;
-  color: #41362f;
-}
-.admin-user-menu > li > a:active {
-  background-color: #c7effd;
-  bottom: -1px;
-  position: relative;
-}
-.admin-user-menu .admin-user-name {
-  display: inline-block;
-  max-width: 20rem;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  vertical-align: text-top;
-  white-space: nowrap;
-}
-.search-global {
-  float: right;
-  margin-right: -0.3rem;
-  position: relative;
-  z-index: 380;
-}
-.search-global-field {
-  min-width: 5rem;
-}
-.search-global-field._active .search-global-input {
-  background-color: #ffffff;
-  border-color: #007bdb;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-  padding-right: 4rem;
-  width: 25rem;
-}
-.search-global-field._active .search-global-action {
-  display: block;
-  height: 3.4rem;
-  position: absolute;
-  right: 0;
-  text-indent: -100%;
-  top: 0;
-  width: 5rem;
-  z-index: 3;
-}
-.search-global-field .autocomplete-results {
-  height: 3.4rem;
-  position: absolute;
-  right: 0;
-  top: 0;
-  width: 25rem;
-}
-.search-global-field .search-global-menu {
-  border: 1px solid #007bdb;
-  border-top-color: transparent;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-  left: 0;
-  margin-top: -2px;
-  padding: 0;
-  position: absolute;
-  right: 0;
-  top: 100%;
-  z-index: 2;
-}
-.search-global-field .search-global-menu:after {
-  background-color: #ffffff;
-  content: '';
-  height: 5px;
-  left: 0;
-  position: absolute;
-  right: 0;
-  top: -5px;
-}
-.search-global-field .search-global-menu > li {
-  background-color: #ffffff;
-  border-top: 1px solid #dddddd;
-  display: block;
-  font-size: 1.2rem;
-  padding: 0.8rem 1.4rem 0.6rem;
-}
-.search-global-field .search-global-menu .title {
-  display: block;
-  font-size: 1.4rem;
-}
-.search-global-field .search-global-menu .type {
-  color: #231d1a;
-  display: block;
-}
-.search-global-label {
-  cursor: pointer;
-  height: 3.4rem;
-  padding: 0.8rem 1.4rem 0.6rem;
-  position: absolute;
-  right: 0;
-  top: 0;
-  z-index: 2;
-}
-.search-global-label:active {
-  transform: scale(0.9);
-}
-.search-global-label:hover:before {
-  color: #060504;
-}
-.search-global-label:before {
-  content: '\e60c';
-  font-size: 2rem;
-}
-.search-global-input {
-  background-color: transparent;
-  border: 1px solid transparent;
-  font-size: 1.4rem;
-  height: 3.4rem;
-  padding: 0.8rem 1.4rem 0.6rem;
-  position: absolute;
-  right: 0;
-  top: 0;
-  transition: all .1s linear, width .3s linear;
-  width: 5rem;
-  z-index: 1;
-}
-.search-global-action {
-  display: none;
-}
-.notifications-wrapper {
-  float: right;
-  line-height: 1;
-  position: relative;
-}
-.notifications-wrapper.active {
-  z-index: 400;
-}
-.notifications-wrapper.active .notifications-action {
-  border-color: #007bdb;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-}
-.notifications-wrapper.active .notifications-action:after {
-  background-color: #ffffff;
-  content: '';
-  height: 6px;
-  left: -6px;
-  position: absolute;
-  right: 0;
-  top: 100%;
-}
-.notifications-wrapper.active .notifications-list {
-  opacity: 1;
-  visibility: visible;
-}
-.notifications-action {
-  padding: 0.8rem 2rem 0.7rem;
-  z-index: 2;
-}
-.notifications-action:before {
-  content: '\e607';
-  font-size: 1.9rem;
-}
-.notifications-action:active:before {
-  position: relative;
-  top: 1px;
-}
-.notifications-action .notifications-counter {
-  background-color: #e22626;
-  border-radius: 1em;
-  color: #ffffff;
-  display: inline-block;
-  font-size: 1.1rem;
-  font-weight: 700;
-  left: 50%;
-  margin-left: .3em;
-  margin-top: -1.1em;
-  padding: .3em .5em;
-  position: absolute;
-  top: 50%;
-}
-.notifications-list {
-  padding-top: 1rem;
-  width: 32rem;
-  z-index: 1;
-}
-.notifications-list:before {
-  z-index: 2;
-}
-.notifications-entry {
-  line-height: 1.4;
-  padding: 0.6rem 2rem 0.8rem;
-  position: relative;
-  transition: background-color 0.2s linear;
-}
-.notifications-entry:hover {
-  background-color: #e0f6fe;
-}
-.notifications-entry.notifications-entry-last {
-  margin: 0 2rem;
-  padding: .3rem 0 1.3rem;
-  text-align: center;
-}
-.notifications-entry.notifications-entry-last:hover {
-  background-color: transparent;
-}
-.notifications-entry + .notifications-entry-last {
-  border-top: 1px solid #dddddd;
-  padding-bottom: .6rem;
-}
-.notifications-entry ._cutted {
-  cursor: pointer;
-}
-.notifications-entry ._cutted .notifications-entry-description-start:after {
-  content: '...';
-}
-.notifications-entry-title {
-  color: #ef672f;
-  display: block;
-  font-size: 1.1rem;
-  font-weight: 700;
-  margin-bottom: .7rem;
-  margin-right: 1em;
-}
-.notifications-entry-description {
-  color: #333333;
-  font-size: 1.1rem;
-  margin-bottom: .8rem;
-}
-.notifications-entry-description-end {
-  display: none;
-}
-.notifications-entry-description-end._show {
-  display: inline;
-}
-.notifications-entry-time {
-  color: #777777;
-  font-size: 1.1rem;
-}
-.notifications-close {
-  line-height: 1;
-  padding: 1rem;
-  position: absolute;
-  right: 0;
-  top: .6rem;
-}
-.notifications-close:before {
-  color: #cccccc;
-  content: '\e620';
-  transition: color 0.1s linear;
-}
-.notifications-close:hover:before {
-  color: #b3b3b3;
-}
-.notifications-close:active {
-  transform: scale(0.95);
-}
-.abs-page-header-action,
-.admin-user-account,
-.notifications-action {
-  background-color: #ffffff;
-  border: 1px solid transparent;
-  border-bottom: none;
-  color: #41362f;
-  display: inline-block;
-  height: 3.4rem;
-  position: relative;
-  transition: border-color 0.15s ease;
-}
-.abs-page-header-action:hover,
-.admin-user-account:hover,
-.notifications-action:hover {
-  color: #060504;
-  text-decoration: none;
-}
-.abs-page-header-action-menu,
-.admin-user-menu,
-.notifications-list {
-  background-color: #ffffff;
-  border: 1px solid #007bdb;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-  margin-top: -1px;
-  opacity: 0;
-  position: absolute;
-  right: 0;
-  top: 100%;
-  transition: all 0.15s ease;
-  visibility: hidden;
-}
-.abs-page-header-action-menu:before,
-.admin-user-menu:before,
-.notifications-list:before {
-  content: '';
-  position: absolute;
-}
-.abs-page-header-action-menu > li,
-.admin-user-menu > li,
-.notifications-list > li {
-  display: block;
-}
-.page-header-actions {
-  padding-top: 1.1rem;
-}
-.page-header-hgroup {
-  padding-right: 1.5rem;
-}
-.page-title-wrapper {
-  margin-top: 1.7rem;
-}
-.page-title {
-  color: #41362f;
-  font-size: 2.8rem;
-  margin-bottom: 0;
-}
-.page-header {
-  margin-bottom: 1.2rem;
-  padding: 1.5rem 3rem;
-}
-.page-footer {
-  background-color: #f5f5f5;
-  border-top: 0.1rem solid #dddddd;
-  color: #777777;
-  margin-top: auto;
-  padding: 2.6rem 2rem 6rem 3rem;
-}
-.page-footer a {
-  color: #ef672f;
-  text-decoration: underline;
-}
-.page-footer a:hover {
-  color: #ef672f;
-}
-.magento-version {
-  margin-bottom: .5rem;
-}
-.magento-version strong {
-  color: #666666;
-}
-.copyright {
-  margin-bottom: -0.2rem;
-  position: relative;
-}
-.copyright .link-copyright {
-  display: inline-block;
-  margin-right: .5rem;
-  text-decoration: none;
-  vertical-align: top;
-}
-.copyright .link-copyright:hover:before {
-  color: #f38a5e;
-}
-.copyright .link-copyright:before {
-  transition: color 0.1s linear;
-  color: #eb5202;
-  content: '\e606';
-  display: block;
-  font-size: 2.5rem;
-  position: relative;
-  top: -0.2rem;
-}
-.copyright .link-copyright:active:before {
-  transform: scale(0.9);
-}
-.footer-legal {
-  padding-top: 1rem;
-  text-align: right;
-}
-.locale-switcher .label {
-  display: block;
-  margin-bottom: 1rem;
-}
-.store-switcher {
-  color: #41362f;
-  float: left;
-  font-size: 1.3rem;
-  margin-top: 1.1rem;
-}
-.store-switcher .admin__action-dropdown {
-  margin-left: .5em;
-}
-.store-switcher .dropdown {
-  display: inline-block;
-  position: relative;
-}
-.store-switcher .dropdown:before,
-.store-switcher .dropdown:after {
-  content: "";
-  display: table;
-}
-.store-switcher .dropdown:after {
-  clear: both;
-}
-.store-switcher .dropdown .action.toggle {
-  cursor: pointer;
-  display: inline-block;
-  text-decoration: none;
-}
-.store-switcher .dropdown .action.toggle:after {
-  font-family: 'icons-blank-theme';
-  content: '\e607';
-  font-size: 22px;
-  line-height: 2;
-  color: #41362f;
-  overflow: hidden;
-  speak: none;
-  font-weight: normal;
-  -webkit-font-smoothing: antialiased;
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-  margin: 0;
-}
-.store-switcher .dropdown .action.toggle:hover:after {
-  color: #41362f;
-}
-.store-switcher .dropdown .action.toggle:active:after {
-  color: #41362f;
-}
-.store-switcher .dropdown .action.toggle.active {
-  display: inline-block;
-  text-decoration: none;
-}
-.store-switcher .dropdown .action.toggle.active:after {
-  font-family: 'icons-blank-theme';
-  content: '\e618';
-  font-size: 22px;
-  line-height: 2;
-  color: #41362f;
-  overflow: hidden;
-  speak: none;
-  font-weight: normal;
-  -webkit-font-smoothing: antialiased;
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-  margin: 0;
-}
-.store-switcher .dropdown .action.toggle.active:hover:after {
-  color: #41362f;
-}
-.store-switcher .dropdown .action.toggle.active:active:after {
-  color: #41362f;
-}
-.store-switcher .dropdown .dropdown-menu {
-  margin: 0;
-  padding: 0;
-  list-style: none none;
-  box-sizing: border-box;
-  background: #ffffff;
-  border: 1px #ada89e solid;
-  position: absolute;
-  z-index: 100;
-  top: 100%;
-  min-width: 19.5rem;
-  margin-top: 4px;
-  display: none;
-  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-}
-.store-switcher .dropdown .dropdown-menu li {
-  margin: 0;
-  padding: 0;
-}
-.store-switcher .dropdown .dropdown-menu li:hover {
-  background: transparent;
-  cursor: pointer;
-}
-.store-switcher .dropdown.active {
-  overflow: visible;
-}
-.store-switcher .dropdown.active .dropdown-menu {
-  display: block;
-}
-.store-switcher .dropdown-menu {
-  left: 0;
-  margin-top: .5em;
-  padding-top: .25em;
-}
-.store-switcher .dropdown-menu li {
-  border: 0;
-  cursor: default;
-}
-.store-switcher .dropdown-menu li:hover {
-  cursor: default;
-}
-.store-switcher .dropdown-menu li a,
-.store-switcher .dropdown-menu li span {
-  color: #41362f;
-  display: block;
-  padding: .5rem 1.3rem;
-}
-.store-switcher .dropdown-menu li a {
-  text-decoration: none;
-}
-.store-switcher .dropdown-menu li a:hover {
-  background: #e9e9e9;
-}
-.store-switcher .dropdown-menu li span {
-  color: #adadad;
-  cursor: default;
-}
-.store-switcher .dropdown-menu li.current span {
-  background: #eee;
-  color: #41362f;
-}
-.store-switcher .dropdown-menu .store-switcher-store a,
-.store-switcher .dropdown-menu .store-switcher-store span {
-  padding-left: 2.6rem;
-}
-.store-switcher .dropdown-menu .store-switcher-store-view a,
-.store-switcher .dropdown-menu .store-switcher-store-view span {
-  padding-left: 3.9rem;
-}
-.store-switcher .dropdown-menu .dropdown-toolbar {
-  border-top: 1px solid #ebebeb;
-  margin-top: 1rem;
-}
-.store-switcher .dropdown-menu .dropdown-toolbar a:before {
-  content: '\e610';
-  margin-right: .25em;
-  position: relative;
-  top: 1px;
-}
-.store-switcher-label {
-  font-weight: 700;
-}
-.store-switcher-alt {
-  display: inline-block;
-  position: relative;
-}
-.store-switcher-alt.active .dropdown-menu {
-  display: block;
-}
-.store-switcher-alt .dropdown-menu {
-  margin-top: 2px;
-  white-space: nowrap;
-}
-.store-switcher-alt .dropdown-menu ul {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-.store-switcher-alt strong {
-  color: #a6a098;
-  display: block;
-  font-size: 14px;
-  font-weight: 500;
-  line-height: 1.333;
-  padding: 5px 10px;
-}
-.store-switcher-alt .store-selected {
-  color: #676056;
-  cursor: pointer;
-  font-size: 12px;
-  font-weight: 400;
-  line-height: 1.333;
-}
-.store-switcher-alt .store-selected:after {
-  color: #b3b0ad;
-  content: '\e02c';
-  /* arrow down icon */
-  -webkit-font-smoothing: antialiased;
-  font-style: normal;
-  font-weight: normal;
-  margin: 0 0 0 3px;
-  speak: none;
-  vertical-align: text-top;
-}
-.store-switcher-alt .store-switcher-website,
-.store-switcher-alt .store-switcher-store {
-  padding: 0;
-}
-.store-switcher-alt .store-switcher-website:hover,
-.store-switcher-alt .store-switcher-store:hover {
-  background: none;
-}
-.store-switcher-alt .store-switcher-store-view {
-  padding: 0;
-}
-.store-switcher-alt .store-switcher-all,
-.store-switcher-alt .manage-stores {
-  padding: 0;
-}
-.store-switcher-alt .store-switcher-all > a,
-.store-switcher-alt .manage-stores > a {
-  color: #676056;
-  display: block;
-  font-size: 12px;
-  padding: 8px 15px;
-  text-decoration: none;
-}
-.store-switcher-website {
-  margin: 5px 0 0;
-}
-.store-switcher-website > strong {
-  padding-left: 13px;
-}
-.store-switcher-store {
-  margin: 1px 0 0;
-}
-.store-switcher-store > strong {
-  padding-left: 20px;
-}
-.store-switcher-store > ul {
-  margin-top: 1px;
-}
-.store-switcher-store-view:first-child {
-  border-top: 1px solid #e5e5e5;
-}
-.store-switcher-store-view > a {
-  color: #333;
-  display: block;
-  font-size: 13px;
-  padding: 5px 15px 5px 24px;
-  text-decoration: none;
-}
-.tooltip {
-  display: inline-block;
-  margin-left: .5em;
-}
-.tooltip .help span,
-.tooltip .help a {
-  cursor: pointer;
-  display: inline-block;
-  height: 22px;
-  position: relative;
-  vertical-align: middle;
-  width: 22px;
-  z-index: 2;
-}
-.tooltip .help span:before,
-.tooltip .help a:before {
-  color: #41362f;
-  content: '\e633';
-  font-size: 1.7rem;
-}
-.tooltip .help span span,
-.tooltip .help a span {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-.tooltip .help a:hover {
-  text-decoration: none;
-}
-.tooltip .tooltip-content {
-  background: rgba(49, 48, 43, 0.8);
-  background: #000;
-  border-radius: 3px;
-  color: #fff;
-  display: none;
-  margin-left: -19px;
-  margin-top: 10px;
-  max-width: 200px;
-  padding: 4px 8px;
-  position: absolute;
-  text-shadow: none;
-  z-index: 20;
-}
-.tooltip .tooltip-content:before {
-  border-bottom: 5px solid #000;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  content: '';
-  height: 0;
-  left: 20px;
-  opacity: .8;
-  position: absolute;
-  top: -5px;
-  width: 0;
-}
-.tooltip .tooltip-content.loading {
-  position: absolute;
-}
-.tooltip .tooltip-content.loading:before {
-  border-bottom-color: rgba(0, 0, 0, 0.3);
-}
-.tooltip:hover > .tooltip-content {
-  display: block;
-}
-.page-main-actions,
-.page-actions.fixed {
-  background: #f8f8f8;
-  border-bottom: 1px solid #e3e3e3;
-  border-top: 1px solid #e3e3e3;
-  padding: 1.5rem;
-}
-.page-main-actions {
-  margin: 0 0 2rem;
-}
-.page-actions {
-  float: right;
-}
-.page-actions.fixed {
-  left: 8.8rem;
-  position: fixed;
-  right: 0;
-  top: 0;
-  z-index: 400;
-}
-.page-actions.fixed .page-actions-inner:before {
-  color: #41362f;
-  content: attr(data-title);
-  float: left;
-  font-size: 2.8rem;
-  margin-top: .3rem;
-  max-width: 50%;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.page-actions > button,
-.page-actions .page-actions-buttons > button {
-  float: right;
-  margin-left: 1.3rem;
-}
-.page-actions > button.back,
-.page-actions .page-actions-buttons > button.back,
-.page-actions > button.action-back,
-.page-actions .page-actions-buttons > button.action-back {
-  float: left;
-  -ms-flex-order: -1;
-  -webkit-order: -1;
-  order: -1;
-}
-.page-actions > button.back:before,
-.page-actions .page-actions-buttons > button.back:before,
-.page-actions > button.action-back:before,
-.page-actions .page-actions-buttons > button.action-back:before {
-  content: '\e626';
-  margin-right: .5em;
-  position: relative;
-  top: 1px;
-}
-.page-actions > button.action-primary,
-.page-actions .page-actions-buttons > button.action-primary,
-.page-actions > button.primary,
-.page-actions .page-actions-buttons > button.primary {
-  -ms-flex-order: 2;
-  -webkit-order: 2;
-  order: 2;
-}
-.page-actions > button.save:not(.primary),
-.page-actions .page-actions-buttons > button.save:not(.primary) {
-  -ms-flex-order: 1;
-  -webkit-order: 1;
-  order: 1;
-}
-.page-actions > button.delete,
-.page-actions .page-actions-buttons > button.delete {
-  -ms-flex-order: -1;
-  -webkit-order: -1;
-  order: -1;
-}
-.page-actions .actions-split {
-  float: right;
-  margin-left: 1.3rem;
-  -ms-flex-order: 2;
-  -webkit-order: 2;
-  order: 2;
-}
-.page-actions .actions-split .dropdown-menu .item {
-  display: block;
-}
-.page-actions-buttons {
-  float: right;
-  justify-content: flex-end;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-}
-.customer-index-edit .page-actions-buttons {
-  background-color: transparent;
-}
-.dashboard-data {
-  background: #ffffff;
-  font-size: 1.3rem;
-  width: 100%;
-}
-.dashboard-data th,
-.dashboard-data td {
-  padding: 1rem 0 1rem 1rem;
-}
-.dashboard-data th:first-child,
-.dashboard-data td:first-child {
-  padding-left: 0;
-}
-.dashboard-data th {
-  border-top: 0;
-}
-.dashboard-main .dashboard-data th,
-.dashboard-main .dashboard-data td {
-  text-align: right;
-  white-space: nowrap;
-  width: 15%;
-}
-.dashboard-main .dashboard-data .col-name {
-  text-align: left;
-  white-space: normal;
-  width: 55%;
-}
-.dashboard-main .dashboard-data .col-product {
-  width: 70%;
-}
-.dashboard-main .dashboard-data .col-orders_count {
-  text-align: left;
-}
-.dashboard-secondary .dashboard-data .col-popularity,
-.dashboard-secondary .dashboard-data .col-total {
-  text-align: right;
-  width: 21.27659574%;
-}
-.dashboard-secondary .dashboard-data .col-customer,
-.dashboard-secondary .dashboard-data .col-search_query {
-  width: 57.44680851%;
-}
-.dashboard-container .empty-text {
-  background: #ffffff;
-  font-size: 1.3rem;
-}
-.dashboard-diagram-disabled {
-  padding: .5rem 2rem 2rem;
-}
-.dashboard-diagram-switcher {
-  margin-bottom: 2rem;
-}
-.dashboard-diagram-image {
-  max-width: 100%;
-}
-.dashboard-totals {
-  margin: 1rem 2rem 6rem;
-}
-.dashboard-totals-list {
-  display: table;
-  width: 100%;
-}
-.dashboard-totals-item {
-  display: table-cell;
-  padding: 0 1rem 0 0;
-  width: 25%;
-}
-.dashboard-totals-item:first-child .price {
-  color: #eb5202;
-}
-.dashboard-totals-label {
-  display: block;
-  font-size: 1.3rem;
-  font-weight: 700;
-}
-.dashboard-totals-value {
-  font-size: 2.4rem;
-  font-weight: 600;
-}
-.dashboard-store-stats .ui-tabs {
-  position: relative;
-}
-.dashboard-store-stats .ui-tabs:before {
-  background-color: rgba(255, 255, 255, 0);
-  background-repeat: repeat-x;
-  background-image: -webkit-linear-gradient(left, color-stop(rgba(255, 255, 255, 0) 0%), color-stop(#ffffff 100%));
-  background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, #ffffff 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='rgba(255, 255, 255, 0)', endColorstr='#ffffff', GradientType=1);
-  content: '';
-  height: 4.8rem;
-  position: absolute;
-  right: 0;
-  top: 0;
-  width: 2rem;
-}
-.dashboard-store-stats .ui-tabs-panel {
-  background: url(../images/ajax-loader-small.gif) no-repeat 50% 50%;
-  min-height: 6rem;
-}
-.dashboard-store-stats .tabs-horiz {
-  border-right: 1px solid #ffffff;
-  float: left;
-  overflow-x: auto;
-  white-space: nowrap;
-  width: 100%;
-}
-.dashboard-store-stats .tabs-horiz .ui-state-default {
-  display: inline-block;
-  float: none;
-  margin-right: .1rem;
-}
-.dashboard-container .dashboard-secondary {
-  padding-right: 3.5rem;
-}
-.dashboard-item {
-  margin-bottom: 3rem;
-}
-.dashboard-item-title {
-  font-size: 1.8rem;
-  font-weight: 700;
-}
-.dashboard-item-primary:first-child .dashboard-sales-value {
-  color: #eb5202;
-}
-.dashboard-sales-value {
-  font-size: 2.4rem;
-  font-weight: 600;
-}
-.admin__section-nav {
-  padding-bottom: 51px;
-}
-.admin__section-nav-title {
-  padding: 0;
-  margin: 0 0 -1px;
-  color: #303030;
-  display: block;
-  padding: 20px 13px;
-  background: #f1f1f1;
-  text-transform: uppercase;
-  border: 1px solid #e3e3e3;
-  line-height: 1.2;
-}
-.admin__section-nav-title._collapsible {
-  padding-right: 35px;
-}
-.admin__section-nav-title._collapsible:after {
-  content: '\e628';
-  font-family: 'Admin Icons';
-  -webkit-font-smoothing: antialiased;
-  font-weight: normal;
-  speak: none;
-  position: absolute;
-  right: 18px;
-  top: 22px;
-  font-size: 1.3rem;
-}
-.admin__section-nav-title strong {
-  font-weight: 700;
-}
-.admin__section-nav-items {
-  list-style-type: none;
-  padding: 0;
-  margin: 0;
-}
-.admin__section-nav-item {
-  padding: 0;
-  border-left: 3px solid transparent;
-  margin: 0 0 -1px;
-}
-.admin__section-nav-item._active {
-  border-color: #eb5202;
-}
-.admin__section-nav-item._active .admin__section-nav-link {
-  border-color: #e3e3e3;
-  margin: 0;
-}
-.admin__section-nav-item._active .admin__section-nav-link:hover {
-  text-decoration: none;
-}
-.admin__section-nav-item._loading {
-  position: relative;
-  z-index: 1;
-}
-.admin__section-nav-item._loading:before {
-  content: "";
-  display: block;
-  position: absolute;
-  z-index: 2;
-  background: url('../images/loader-2.gif') no-repeat 50% 50%;
-  background-size: 120px;
-  width: 2rem;
-  height: 2rem;
-  top: 2.1rem;
-  right: .5rem;
-}
-.admin__section-nav-link {
-  border: 1px solid transparent;
-  border-width: 1px 0;
-  line-height: 1.2;
-  font-weight: 500;
-  color: #303030;
-  display: block;
-  padding: 20px 30px 20px 10px;
-}
-.admin__section-nav-link:hover {
-  color: #303030;
-  text-decoration: underline;
-}
-.admin__section-nav-link._changed {
-  position: relative;
-  z-index: 1;
-}
-.admin__section-nav-link._changed:before {
-  content: '\e623';
-  font-family: 'Admin Icons';
-  -webkit-font-smoothing: antialiased;
-  font-style: normal;
-  font-weight: normal;
-  speak: none;
-  position: absolute;
-  z-index: 2;
-  font-size: 17px;
-  color: #eb5202;
-  width: 20px;
-  height: 20px;
-  top: 15px;
-  right: 5px;
-}
-@media all and (max-width: 1023px) {
-  .admin__menu .submenu li {
-    min-width: 19.8rem;
-  }
-}
-@media all and (min-width: 768px) {
-  .col-m-1, .col-m-2, .col-m-3, .col-m-4, .col-m-5, .col-m-6, .col-m-7, .col-m-8, .col-m-9, .col-m-10, .col-m-11, .col-m-12 {
-    float: left;
-  }
-  .col-m-12 {
-    width: 100%;
-  }
-  .col-m-11 {
-    width: 91.66666667%;
-  }
-  .col-m-10 {
-    width: 83.33333333%;
-  }
-  .col-m-9 {
-    width: 75%;
-  }
-  .col-m-8 {
-    width: 66.66666667%;
-  }
-  .col-m-7 {
-    width: 58.33333333%;
-  }
-  .col-m-6 {
-    width: 50%;
-  }
-  .col-m-5 {
-    width: 41.66666667%;
-  }
-  .col-m-4 {
-    width: 33.33333333%;
-  }
-  .col-m-3 {
-    width: 25%;
-  }
-  .col-m-2 {
-    width: 16.66666667%;
-  }
-  .col-m-1 {
-    width: 8.33333333%;
-  }
-  .col-m-pull-12 {
-    right: 100%;
-  }
-  .col-m-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-m-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-m-pull-9 {
-    right: 75%;
-  }
-  .col-m-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-m-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-m-pull-6 {
-    right: 50%;
-  }
-  .col-m-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-m-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-m-pull-3 {
-    right: 25%;
-  }
-  .col-m-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-m-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-m-pull-0 {
-    right: auto;
-  }
-  .col-m-push-12 {
-    left: 100%;
-  }
-  .col-m-push-11 {
-    left: 91.66666667%;
-  }
-  .col-m-push-10 {
-    left: 83.33333333%;
-  }
-  .col-m-push-9 {
-    left: 75%;
-  }
-  .col-m-push-8 {
-    left: 66.66666667%;
-  }
-  .col-m-push-7 {
-    left: 58.33333333%;
-  }
-  .col-m-push-6 {
-    left: 50%;
-  }
-  .col-m-push-5 {
-    left: 41.66666667%;
-  }
-  .col-m-push-4 {
-    left: 33.33333333%;
-  }
-  .col-m-push-3 {
-    left: 25%;
-  }
-  .col-m-push-2 {
-    left: 16.66666667%;
-  }
-  .col-m-push-1 {
-    left: 8.33333333%;
-  }
-  .col-m-push-0 {
-    left: auto;
-  }
-  .col-m-offset-12 {
-    margin-left: 100%;
-  }
-  .col-m-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-m-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-m-offset-9 {
-    margin-left: 75%;
-  }
-  .col-m-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-m-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-m-offset-6 {
-    margin-left: 50%;
-  }
-  .col-m-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-m-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-m-offset-3 {
-    margin-left: 25%;
-  }
-  .col-m-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-m-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-m-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media all and (min-width: 1024px) {
-  .col-l-1, .col-l-2, .col-l-3, .col-l-4, .col-l-5, .col-l-6, .col-l-7, .col-l-8, .col-l-9, .col-l-10, .col-l-11, .col-l-12 {
-    float: left;
-  }
-  .col-l-12 {
-    width: 100%;
-  }
-  .col-l-11 {
-    width: 91.66666667%;
-  }
-  .col-l-10 {
-    width: 83.33333333%;
-  }
-  .col-l-9 {
-    width: 75%;
-  }
-  .col-l-8 {
-    width: 66.66666667%;
-  }
-  .col-l-7 {
-    width: 58.33333333%;
-  }
-  .col-l-6 {
-    width: 50%;
-  }
-  .col-l-5 {
-    width: 41.66666667%;
-  }
-  .col-l-4 {
-    width: 33.33333333%;
-  }
-  .col-l-3 {
-    width: 25%;
-  }
-  .col-l-2 {
-    width: 16.66666667%;
-  }
-  .col-l-1 {
-    width: 8.33333333%;
-  }
-  .col-l-pull-12 {
-    right: 100%;
-  }
-  .col-l-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-l-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-l-pull-9 {
-    right: 75%;
-  }
-  .col-l-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-l-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-l-pull-6 {
-    right: 50%;
-  }
-  .col-l-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-l-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-l-pull-3 {
-    right: 25%;
-  }
-  .col-l-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-l-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-l-pull-0 {
-    right: auto;
-  }
-  .col-l-push-12 {
-    left: 100%;
-  }
-  .col-l-push-11 {
-    left: 91.66666667%;
-  }
-  .col-l-push-10 {
-    left: 83.33333333%;
-  }
-  .col-l-push-9 {
-    left: 75%;
-  }
-  .col-l-push-8 {
-    left: 66.66666667%;
-  }
-  .col-l-push-7 {
-    left: 58.33333333%;
-  }
-  .col-l-push-6 {
-    left: 50%;
-  }
-  .col-l-push-5 {
-    left: 41.66666667%;
-  }
-  .col-l-push-4 {
-    left: 33.33333333%;
-  }
-  .col-l-push-3 {
-    left: 25%;
-  }
-  .col-l-push-2 {
-    left: 16.66666667%;
-  }
-  .col-l-push-1 {
-    left: 8.33333333%;
-  }
-  .col-l-push-0 {
-    left: auto;
-  }
-  .col-l-offset-12 {
-    margin-left: 100%;
-  }
-  .col-l-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-l-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-l-offset-9 {
-    margin-left: 75%;
-  }
-  .col-l-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-l-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-l-offset-6 {
-    margin-left: 50%;
-  }
-  .col-l-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-l-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-l-offset-3 {
-    margin-left: 25%;
-  }
-  .col-l-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-l-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-l-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media all and (min-width: 1440px) {
-  .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 {
-    float: left;
-  }
-  .col-xl-12 {
-    width: 100%;
-  }
-  .col-xl-11 {
-    width: 91.66666667%;
-  }
-  .col-xl-10 {
-    width: 83.33333333%;
-  }
-  .col-xl-9 {
-    width: 75%;
-  }
-  .col-xl-8 {
-    width: 66.66666667%;
-  }
-  .col-xl-7 {
-    width: 58.33333333%;
-  }
-  .col-xl-6 {
-    width: 50%;
-  }
-  .col-xl-5 {
-    width: 41.66666667%;
-  }
-  .col-xl-4 {
-    width: 33.33333333%;
-  }
-  .col-xl-3 {
-    width: 25%;
-  }
-  .col-xl-2 {
-    width: 16.66666667%;
-  }
-  .col-xl-1 {
-    width: 8.33333333%;
-  }
-  .col-xl-pull-12 {
-    right: 100%;
-  }
-  .col-xl-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-xl-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-xl-pull-9 {
-    right: 75%;
-  }
-  .col-xl-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-xl-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-xl-pull-6 {
-    right: 50%;
-  }
-  .col-xl-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-xl-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-xl-pull-3 {
-    right: 25%;
-  }
-  .col-xl-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-xl-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-xl-pull-0 {
-    right: auto;
-  }
-  .col-xl-push-12 {
-    left: 100%;
-  }
-  .col-xl-push-11 {
-    left: 91.66666667%;
-  }
-  .col-xl-push-10 {
-    left: 83.33333333%;
-  }
-  .col-xl-push-9 {
-    left: 75%;
-  }
-  .col-xl-push-8 {
-    left: 66.66666667%;
-  }
-  .col-xl-push-7 {
-    left: 58.33333333%;
-  }
-  .col-xl-push-6 {
-    left: 50%;
-  }
-  .col-xl-push-5 {
-    left: 41.66666667%;
-  }
-  .col-xl-push-4 {
-    left: 33.33333333%;
-  }
-  .col-xl-push-3 {
-    left: 25%;
-  }
-  .col-xl-push-2 {
-    left: 16.66666667%;
-  }
-  .col-xl-push-1 {
-    left: 8.33333333%;
-  }
-  .col-xl-push-0 {
-    left: auto;
-  }
-  .col-xl-offset-12 {
-    margin-left: 100%;
-  }
-  .col-xl-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-xl-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-xl-offset-9 {
-    margin-left: 75%;
-  }
-  .col-xl-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-xl-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-xl-offset-6 {
-    margin-left: 50%;
-  }
-  .col-xl-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-xl-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-xl-offset-3 {
-    margin-left: 25%;
-  }
-  .col-xl-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-xl-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-xl-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media all and (max-width: 767px) {
-  .footer-legal {
-    padding-top: 3rem;
-    text-align: left;
-  }
-  .dashboard-totals-item {
-    float: left;
-    margin-bottom: 1rem;
-    width: 50%;
-  }
-}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_actions.less b/app/design/adminhtml/Magento/backend/web/css/source/_actions.less
index f74a3ca904a394d1463ebb48c2df431a71e0e896..7a3f017a0a5b58b1841e07680b58341e1e00a9f6 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_actions.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_actions.less
@@ -145,7 +145,8 @@ button {
     color: @button-primary__color;
     text-shadow: 1px 1px 0 rgba(0, 0, 0, .25);
     &:hover,
-    &:active {
+    &:active,
+    &:focus {
         background-color: @button-primary__hover__background-color;
         border-color: @button-primary__hover__border-color;
         box-shadow: @button__hover__box-shadow;
@@ -171,7 +172,8 @@ button {
     color: @button-secondary__color;
     text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);
     &:hover,
-    &:active {
+    &:active,
+    &:focus {
         background-color: @button-secondary__hover__background-color;
         box-shadow: @button__hover__box-shadow;
         color: @button-secondary__color;
@@ -193,7 +195,8 @@ button {
     border-color: transparent;
     text-shadow: none;
     &:active,
-    &:hover {
+    &:hover,
+    &:focus {
         background-color: transparent;
         border-color: transparent;
         box-shadow: none;
@@ -203,7 +206,8 @@ button {
 .action-tertiary {
     color: @link__color;
     &:active,
-    &:hover {
+    &:hover,
+    &:focus {
         color: @link__hover__color;
         text-decoration: underline;
     }
@@ -212,7 +216,8 @@ button {
 .action-quaternary {
     color: @text__color;
     &:active,
-    &:hover {
+    &:hover,
+    &:focus {
         color: darken(@text__color, 10%);
     }
 }
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_components.less b/app/design/adminhtml/Magento/backend/web/css/source/_components.less
index 84093e4e0d6aa991e426bfcaa4a0b34c53fa4261..906c538fc04f7391d62733bd2768aafd188babfd 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_components.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_components.less
@@ -7,4 +7,7 @@
 //  Components
 //  _____________________________________________
 
-@import 'components/_spinner.less';
+@import 'components/_spinner';
+@import 'components/_calendar-temp.less';
+@import 'components/_messages.less';
+@import 'components/_popups.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_reset.less b/app/design/adminhtml/Magento/backend/web/css/source/_reset.less
index 7eb8e5df2a1247474bbb6688887d79f7b3769c39..ee4daecbb9ef6f8985a368c7ca67739f86b424e2 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_reset.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_reset.less
@@ -3,10 +3,15 @@
 //  * See COPYING.txt for license details.
 //  */
 
-.normalize();
+//
+//  Reset, based on normalize.css v3.0.2 | MIT License | git.io/normalize
+//  _____________________________________________
 
 html {
     box-sizing: border-box;
+    //  Prevent iOS text size adjust after orientation change, without disabling user zoom.
+    -webkit-text-size-adjust: 100%;
+        -ms-text-size-adjust: 100%;
 }
 
 * {
@@ -21,12 +26,127 @@ html {
     }
 }
 
-.keyfocus * {
+//  Keyboard actions detection helper
+._keyfocus * {
     &:focus {
         box-shadow: @focus__box-shadow;
     }
 }
 
+//  Remove default margin.
+body {
+    margin: 0;
+}
+
+//
+//  HTML5 display definitions
+//  ---------------------------------------------
+
+//  Correct 'block' display not defined for any HTML5 element in IE 8/9.
+//  Correct 'block' display not defined for 'details' or 'summary' in IE 10/11 and Firefox.
+//  Correct 'block' display not defined for 'main' in IE 11.
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+main,
+menu,
+nav,
+section,
+summary {
+    display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+    display: inline-block; // Correct 'inline-block' display not defined in IE 8/9.
+    vertical-align: baseline; // Normalize vertical alignment of 'progress' in Chrome, Firefox, and Opera.
+}
+
+audio:not([controls]) {
+    display: none; // Prevent modern browsers from displaying 'audio' without controls.
+    height: 0; // Remove excess height in iOS 5 devices.
+}
+
+//  Address '[hidden]' styling not present in IE 8/9/10.
+//  Hide the 'template' element in IE 8/9/11, Safari, and Firefox < 22.
+[hidden],
+template {
+    display: none;
+}
+
+//
+//  Links
+//  ---------------------------------------------
+
+a {
+    background-color: transparent; // Remove the gray background color from active links in IE 10.
+    //  Improve readability when focused and also mouse hovered in all browsers.
+    &:active,
+    &:hover {
+        outline: 0;
+    }
+}
+
+//  Text-level semantics
+//  ---------------------------------------------
+
+//  Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+abbr {
+    &[title] {
+        border-bottom: 1px dotted;
+    }
+}
+
+//  Address style set to 'bolder' in Firefox 4+, Safari, and Chrome.
+b,
+strong {
+    font-weight: bold;
+}
+
+//  Address styling not present in Safari and Chrome.
+dfn {
+    font-style: italic;
+}
+
+//  Address styling not present in IE 8/9.
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+//  Prevent 'sub' and 'sup' affecting 'line-height' in all browsers.
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+//
+//  Embedded content
+//  ---------------------------------------------
+
+//  Remove border when inside 'a' element in IE 8/9/10.
+img {
+    border: 0;
+}
+
+//  Responsive width
 img,
 video,
 embed,
@@ -34,6 +154,165 @@ object {
     max-width: 100%;
 }
 
+//  Correct overflow not hidden in IE 9/10/11.
+svg {
+    &:not(:root) {
+        overflow: hidden;
+    }
+}
+
+//
+//  Grouping content
+//  ---------------------------------------------
+
+//  Address margin not present in IE 8/9 and Safari.
+figure {
+    margin: 1em 40px;
+}
+
+//  Address differences between Firefox and other browsers.
+hr {
+    -moz-box-sizing: content-box;
+         box-sizing: content-box;
+    height: 0;
+}
+
+//  Contain overflow in all browsers.
+pre {
+    overflow: auto;
+}
+
+//  Address odd 'em'-unit font size rendering in all browsers.
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, monospace;
+    font-size: 1em;
+}
+
+//
+//  Forms
+//  ---------------------------------------------
+
+//  Known limitation: by default, Chrome and Safari on OS X allow very limited styling of 'select', unless a 'border' property is set.
+button,
+input,
+optgroup,
+select,
+textarea {
+    color: inherit; // Correct color not being inherited. Known issue: affects color of disabled elements.
+    font: inherit; // Correct font properties not being inherited.
+    margin: 0; // Address margins set differently in Firefox 4+, Safari, and Chrome.
+}
+
+//  Address 'overflow' set to 'hidden' in IE 8/9/10/11.
+button {
+    overflow: visible;
+}
+
+//  Address inconsistent 'text-transform' inheritance for 'button' and 'select'.
+//  All other form control elements do not inherit 'text-transform' values.
+//  Correct 'button' style inheritance in Firefox, IE 8/9/10/11, and Opera.
+//  Correct 'select' style inheritance in Firefox.
+button,
+select {
+    text-transform: none;
+}
+
+//  Avoid the WebKit bug in Android 4.0.* where (2) destroys native 'audio' and 'video' controls.
+//  Correct inability to style clickable 'input' types in iOS.
+//  Improve usability and consistency of cursor style between image-type 'input' and others.
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button;
+    cursor: pointer;
+}
+
+//  Re-set default cursor for disabled elements.
+button[disabled],
+html input[disabled] {
+    cursor: default;
+}
+
+//  Remove inner padding and border in Firefox 4+.
+button,
+input {
+    &::-moz-focus-inner {
+        border: 0;
+        padding: 0;
+    }
+}
+
+//  Address Firefox 4+ setting 'line-height' on 'input' using '!important' in the UA stylesheet.
+input {
+    line-height: normal;
+}
+
+//  Firefox's implementation doesn't respect box-sizing, padding, or width.
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; // Address box sizing set to 'content-box' in IE 8/9/10.
+    padding: 0; // Remove excess padding in IE 8/9/10.
+}
+
+//  Fix the cursor style for Chrome's increment/decrement buttons. For certain 'font-size' values of the 'input', it causes the cursor style of the decrement button to change from 'default' to 'text'.
+input[type="number"] {
+    &::-webkit-inner-spin-button,
+    &::-webkit-outer-spin-button {
+        height: auto;
+    }
+}
+
+//  Address 'appearance' set to 'searchfield' in Safari and Chrome.
+input[type="search"] {
+    -webkit-appearance: textfield;
+}
+
+//  Remove inner padding and search cancel button in Safari and Chrome on OS X.
+//  Safari (but not Chrome) clips the cancel button when the search input has padding (and 'textfield' appearance).
+input[type="search"] {
+    &::-webkit-search-cancel-button,
+    &::-webkit-search-decoration {
+        -webkit-appearance: none;
+    }
+}
+
+//  Correct 'color' not being inherited in IE 8/9/10/11.
+//  Remove padding so people aren't caught out if they zero out fieldsets.
+legend {
+    border: 0;
+    padding: 0;
+}
+
+//  Remove default vertical scrollbar in IE 8/9/10/11.
+textarea {
+    overflow: auto;
+}
+
+//  Don't inherit the 'font-weight' (applied by a rule above).
+//  NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+optgroup {
+    font-weight: bold;
+}
+
+//
+//  Tables
+//  ---------------------------------------------
+
+//  Remove most spacing between table cells.
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+td,
+th {
+    padding: 0;
+}
+
 //  ToDo UI: experimantal, need to test on webkit
 //.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
 //    html {
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_sources.less b/app/design/adminhtml/Magento/backend/web/css/source/_sources.less
index 575a5a6fcc5e1afcfb70598c7ee41037aa3f2ac0..82de6e8fd0d1b023a6739df8b85ab07b820f1724 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_sources.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_sources.less
@@ -16,15 +16,10 @@
 @import '_forms.less';
 @import '_actions.less';
 @import '_tables.less';
-@import '_messages.less';
 @import '_grid.less';
 @import '_extends.less';
 @import '_tabs.less';
 @import '_structure.less';
-@import '_calendar-temp.less';
-@import '_popups.less';
-@import '_login.less';
-
 
 //
 //  Components
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_structure.less b/app/design/adminhtml/Magento/backend/web/css/source/_structure.less
index fa01ce62b577a3dc6ec10cd902c135cfc0080acf..f971e04756ee517f8ded56eaf5346c5cf1726c81 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_structure.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_structure.less
@@ -17,6 +17,7 @@
 @page-wrapper__background-color: @color-white;
 
 @page-content__padding-horizontal: @content__indent;
+@page-content__padding-vertical: @content__indent;
 
 @notices-wrapper__border-color: @color-gray83;
 
@@ -32,6 +33,8 @@ body {
 }
 
 .page-content {
+    .extend__clearfix();
+    padding-bottom: @page-content__padding-vertical;
     padding-left: @page-content__padding-horizontal;
     padding-right: @page-content__padding-horizontal;
 }
@@ -43,23 +46,17 @@ body {
     }
 }
 
-//
-//  Popups
-//  ---------------------------------------------
-
-@popup__background-color: @color-white;
-@popup__padding__horizontal: 3rem;
-@popup__padding__vertical: 3rem;
-
-@popup-title__color: @color-gray20;
-@popup-title__font-size: 2.4rem;
-
-@popup-close-icon__color: @color-brownie-vanilla;
-@popup-close-icon__hover__color: @color-gray68;
-@popup-close-icon__font: @icons-admin__font-name;
-@popup-close-icon__font-size: 2rem;
-@popup-close-icon__content: @icon-close-mage__content;
-@popup-close-icon__right: 3rem;
-@popup-close-icon__top: 3rem;
-
-@popup-overlay__background-color: rgba(0, 0, 0, .35);
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .page-layout-admin-2columns-left {
+        .page-columns {
+            #mix-grid .row();
+            .main-col {
+                #mix-grid .width(9,12);
+                float: right;
+            }
+            .side-col {
+                #mix-grid .column(3,12);
+            }
+        }
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_tabs.less b/app/design/adminhtml/Magento/backend/web/css/source/_tabs.less
index 9353e93e411612d918f83d782ecbf0abcc147636..fa113a59c52acb0e46b2968e09eab6d0c9f33f49 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_tabs.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_tabs.less
@@ -48,12 +48,16 @@
         display: block;
         padding: 1.5rem 1.8rem 1.3rem;
         text-decoration: none;
+        &:hover { // ToDo UI: should be deleted with old styles
+            color: @color-brown-darkie;
+            text-decoration: none;
+        }
     }
 }
 
 //  Tabs content
 .ui-tabs-panel {
-    border-top: .1rem solid @color-gray68;
-    margin-top: -.1rem;
+    border-top: 1px solid @color-gray68;
+    margin-top: -1px;
     padding: 2rem;
 }
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_typography.less b/app/design/adminhtml/Magento/backend/web/css/source/_typography.less
index 762fe46e82ddaf41df2906e1e98be9ae9a1130b1..476415b15756aca49c23ba1c8218a3cc679666a6 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_typography.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_typography.less
@@ -103,6 +103,10 @@ p {
     margin: 0 0 .5em;
 }
 
+small {
+    font-size: @font-size__s;
+}
+
 //  Links
 a {
     color: @link__color;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-split.less b/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-split.less
index 34c59e186a530f2a3388529244bb9effcab61dae..050e9bf71fbfc21c19218280971f16cf0169695f 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-split.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-split.less
@@ -102,6 +102,7 @@
             padding: .6875em;
             &:hover {
                 background-color: @_action-split-dropdown__hover__background-color;
+                cursor: pointer;
             }
             &:active {
                 background-color: darken(@_action-split-dropdown__hover__background-color, 10%);
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_calendar-temp.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_calendar-temp.less
similarity index 99%
rename from app/design/adminhtml/Magento/backend/web/css/source/_calendar-temp.less
rename to app/design/adminhtml/Magento/backend/web/css/source/components/_calendar-temp.less
index b44e8820d1c991e8c60bc2e8df245827f3fad819..5e59707575f588a5996565b8c7931c0efc2ae9e4 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_calendar-temp.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_calendar-temp.less
@@ -4,7 +4,7 @@
 //  */
 
 // ToDo UI Align variables after complete migration to new styles
-@import 'lib/_lib.less';
+@import '../lib/_lib.less';
 
 //
 //  Variables
@@ -42,9 +42,6 @@
         vertical-align: top;
         margin-left: -4rem;
         display: inline-block;
-        img {
-            display: none;
-        }
     }
 }
 
@@ -125,6 +122,7 @@
 .ui-datepicker .ui-datepicker-title select {
     font-size: 1em;
     margin: 1px 0;
+    min-width: 0;
 }
 
 .ui-datepicker select.ui-datepicker-month-year {
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_messages.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less
similarity index 100%
rename from app/design/adminhtml/Magento/backend/web/css/source/_messages.less
rename to app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_popups.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
similarity index 99%
rename from app/design/adminhtml/Magento/backend/web/css/source/_popups.less
rename to app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
index f036b1bf4ede5e58fbbfe322eeeadba1f77eac8e..414d670182ee328d9860814e1427a8b0b19bc0dd 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_popups.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
@@ -131,8 +131,13 @@
         }
     }
 
+    .side-col {
+        width: 20%;
+    }
+
     .main-col {
         padding-right: 0;
+        width: 80%;
     }
 
     .grid,
@@ -337,7 +342,9 @@
     }
     .ui-dialog-content {
         background: @color-lazy-sun;
+        margin-bottom: 0;
         padding: 0 2rem 2rem;
+        .messages,
         .message {
             &:last-child {
                 margin-bottom: 0;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_spinner.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_spinner.less
index acc813b35333baa299431f28d6ac569eb841dd78..c9eb6f63a9e7e9266ffc677d3bd60ecddce5a8b2 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_spinner.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_spinner.less
@@ -65,3 +65,78 @@
         }
     }
 }
+
+
+//  ToDo UI: remove old loaders style while loaders redesign
+
+.popup-loading {
+    position: fixed;
+    z-index: 1003;
+    width: 200px;
+    background: rgba(255, 255, 255, .8);
+    left: 50%;
+    top: 40%;
+    margin-left: -100px;
+    color: #d85909;
+    border-color: #d85909;
+    font-size: 14px;
+    font-weight: bold;
+    text-align: center;
+    padding: 100px 0 10px;
+}
+
+.popup-loading:after {
+    position: absolute;
+    left: 50%;
+    top: 40%;
+    background-image: url('../mui/images/ajax-loader-big.gif');
+    width: 64px;
+    height: 64px;
+    margin: -32px 0 0 -32px;
+    content: '';
+    z-index: 2;
+}
+
+//  Loading mask
+.loading-old,
+.loading-mask {
+    background: rgba(255, 255, 255, .4);
+    z-index: 999;
+}
+
+.loading-old,
+.loading-mask {
+    position: fixed;
+    left: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+}
+
+.loading-old .loader,
+.loading-mask .loader {
+    position: absolute;
+    margin: auto;
+    left: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    width: 160px;
+    height: 160px;
+    color: #5e5b56;
+    font-size: 14px;
+    font-weight: bold;
+    text-align: center;
+    background: #e5e2dd url(../mui/images/ajax-loader-big.gif) no-repeat 50% 30%;
+    border-radius: 5px;
+    opacity: .95;
+}
+
+.loading-mask img {
+    display: none;
+}
+
+.loading-old p,
+.loading-mask p {
+    margin-top: 118px;
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_tooltip-temp.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_tooltip-temp.less
similarity index 95%
rename from app/design/adminhtml/Magento/backend/web/css/source/_tooltip-temp.less
rename to app/design/adminhtml/Magento/backend/web/css/source/components/_tooltip-temp.less
index 13da06ecca185047a5843120c4166a9dbec99dbd..a084345880534fc4da31a03cd7ac6136a4402848 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_tooltip-temp.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_tooltip-temp.less
@@ -34,9 +34,6 @@
             text-align: center;
             color: #ffffff;
             background-color: #514943;
-            .page-main-actions & {
-                background-color: transparent;
-            }
         }
         span {
             .visually-hidden();
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_control-table.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_control-table.less
new file mode 100644
index 0000000000000000000000000000000000000000..0a5bda543853f0f2734bcf8fbb3934469ac02eb2
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_control-table.less
@@ -0,0 +1,55 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Variables
+//  _____________________________________________
+
+// @todo ui - rebuilt dynamic table control
+
+//
+//  Table control
+//  ---------------------------------------------
+
+.admin__control-table-wrapper {
+    max-width: 100%;
+    overflow-x: auto;
+    overflow-y: hidden;
+}
+
+.admin__control-table {
+    width: 100%;
+    thead {
+        background: none;
+    }
+    td,
+    th {
+        background: @color-white-dark-smoke;
+        border: 0;
+        border-bottom: 1px solid @color-white;
+        padding: 1.3rem 2.5rem 1.3rem 0;
+        text-align: left;
+        vertical-align: top;
+        &:first-child {
+            padding-left: 1.5rem;
+        }
+    }
+    th {
+        border: 0;
+        vertical-align: bottom;
+        color: @color-very-dark-gray-black;
+        font-size: @font-size__base;
+        font-weight: @font-weight__semibold;
+        padding-bottom: 0;
+        &._required {
+            span {
+                &:after {
+                    color: @field-label__required__color;
+                    content: '*';
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
index 987d5f6f39f406ed9f1b5aa1c89be49566bf78b8..ed51b9110dc72ebfbb5c2222b0c512f6016a6e0c 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
@@ -4,6 +4,7 @@
 //  */
 
 @import (reference) '_extends.less';
+@import '_control-table.less';
 
 //
 //  Variables
@@ -187,8 +188,8 @@ option:empty {
     }
     &:focus {
          + label {
-            .keyfocus & {
-                &:extend(.keyfocus *:focus);
+            ._keyfocus & {
+                &:extend(._keyfocus *:focus);
             }
             &:before {
                 border-color: @field-control__focus__border-color;
@@ -288,7 +289,7 @@ option:empty {
         &[disabled] + [class*='admin__addon-']:before {
             &:extend(.__form-control-styles[disabled]);
         }
-        &:focus + label:before {
+        &:focus + [class*='admin__addon-']:before {
             &:extend(.__form-control-styles:focus);
         }
     }
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less
index d1a4f148c350ea82dece47f8ad6055f22dfb1bf2..59165529f481db32ecfe4a18f09a757d77e0f808 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_fields.less
@@ -39,6 +39,9 @@
         padding: 0;
         #mix-grid .row();
 
+        &.admin__field-wide {
+            .extend__field-rows();
+        }
         > .admin__field-control {
             #mix-grid .column(4,9);
         }
@@ -66,6 +69,7 @@
         line-height: 3.2rem;
         padding: 0;
         white-space: nowrap;
+        word-break: break-all;
 
         &:before {
             content: '.';
@@ -138,9 +142,11 @@
             color: @field-scope__color;
             content: attr(data-config-scope);
             display: inline-block;
-            position: absolute;
+            font-size: @font-size__s;
             left: @_length;
+            line-height: 3.2rem;
             margin-left: 2 * @temp_gutter;
+            position: absolute;
 
             & {
                 #mix-grid .return_length(2,9);
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_temp.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_temp.less
index a94060d0e7684662eed362292d0cdd339653420d..93c09e6a81c7f083560e312087c5109bcab7ba0f 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_temp.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_temp.less
@@ -34,21 +34,6 @@
     }
 }
 
-.col-2-left-layout {
-    #mix-grid .row();
-    margin-top: 50px;
-    width: auto;
-
-    .main-col {
-        #mix-grid .width(9);
-        float: right;
-    }
-
-    .side-col {
-        #mix-grid .column(9);
-    }
-}
-
 //
 //  Admin section wrapper title @todo ui - find the right place
 //  _____________________________________________
@@ -61,23 +46,90 @@
     }
 }
 
-// @todo ui Move to other place:
+// @todo ui Move to other place - will be done in upcoming task "Address Tabs":
+
 .address-item-edit-content {
+    background: #fff;
+    border: 1px solid #dad1c8;
+    box-shadow: 0 2px 1px 0 rgba(217, 210, 202, .5);
+    margin-left: 359px;
+    max-width: 500px;
     padding: 15px 30px;
     .admin__field {
         .extend__field-rows();
     }
+    .admin__legend {
+        display: none;
+    }
 }
 
-
 .address-list {
     float: left;
     list-style-type: none;
     margin:0;
     padding: 0;
     width: 360px;
+    .address-list-item-actions {
+        position: absolute;
+        right: 1rem;
+        top: 1rem;
+    }
     .address-list-item {
-        margin-bottom: 30px;
+        background: #f1f1f1;
+        border: 1px solid #d9d2ca;
+        cursor: pointer;
+        margin-bottom: -1px;
+        padding: 10px 10px 15px;
+        position: relative;
+        z-index: 1;
+        &.ui-state-active {
+            background: #fff;
+            box-shadow: 0 1px 1px 0 rgba(217, 210, 202, 1);
+            margin-left: -2px;
+            padding-left: 12px;
+            position: relative;
+            z-index: 2;
+
+            &:before,
+            &:after {
+                color: #fff;
+                content: "\e02a";
+                font-family: 'MUI-Icons';
+                font-size: 18px;
+                font-style: normal;
+                font-weight: normal;
+                line-height: 11px;
+                margin-top: -5px;
+                position: absolute;
+                right: -9px;
+                speak: none;
+                text-indent: -6px;
+                top: 50%;
+                width: 10px;
+                z-index: 2;
+            }
+            &:before {
+                color: #d9d2ca;
+                right: -11px;
+                z-index: 1;
+            }
+        }
+    }
+    address:first-line {
+        //  its not work  if First Name and Last Name in two lines
+        font-weight: bold;
+    }
+    address {
+        font-style: normal;
+        line-height: 1.5;
+        margin: 0 20px 15px 0;
+    }
+    .address-list-actions {
+        background: none;
+        border: 0;
+        box-shadow: none;
+        cursor: default;
+        padding: 20px 0 0;
     }
     .action-delete {
         .button-reset();
@@ -125,14 +177,6 @@
     }
 }
 
-.address-item-edit {
-    margin-left: 359px;
-    .admin__legend {
-        display: none;
-    }
-    max-width: 500px;
-}
-
 //
 //  Login page form errors @todo ui - remove after validation consistency
 //  _____________________________________________
@@ -186,3 +230,8 @@
     }
 }
 
+//
+//  Selectbox in calendar @todo ui - Remove after default select styles set
+//  _____________________________________________
+
+.ui-datepicker .ui-datepicker-title select:extend(.admin__control-select all) {};
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/variables/_colors.less b/app/design/adminhtml/Magento/backend/web/css/source/variables/_colors.less
index 59d0db38fd547342d35fa909f35e0e69432c4093..61823ceffe0be26f3e8d9bea2908fee156846cc2 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/variables/_colors.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/variables/_colors.less
@@ -63,3 +63,4 @@
 
 @primary__color: @color-phoenix;
 @text__color: @color-brown-darkie;
+@border__color: @color-gray89;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/variables/_structure.less b/app/design/adminhtml/Magento/backend/web/css/source/variables/_structure.less
index 714ae8aff69e1e261f982f7e051f1f33b94dd6c7..2e081b044437fa866129b1d5b83ac9b6e736bf24 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/variables/_structure.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/variables/_structure.less
@@ -42,6 +42,7 @@
 
 // z-index 5
 @field-tooltip__z-index: @z-index-5;
+@admin__page-nav-tooltip__z-index: @field-tooltip__z-index;
 
 // z-index 7
 @menu__z-index: @z-index-7;
diff --git a/app/design/adminhtml/Magento/backend/web/css/styles-migration.less b/app/design/adminhtml/Magento/backend/web/css/styles-migration.less
deleted file mode 100644
index e236fd73383d5ecec3cfed66836b08f94b5ac1a6..0000000000000000000000000000000000000000
--- a/app/design/adminhtml/Magento/backend/web/css/styles-migration.less
+++ /dev/null
@@ -1,54 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//  Temporary migration overrides
-//  _____________________________________________
-
-@import (reference) 'override.less';
-
-.ie9 #html-body[class][data-container="body"] .admin__scope:extend(.ie9 all) {}
-#html-body[class][data-container="body"].keyfocus:extend(.keyfocus all) {}
-
-//  Including popups styles
-#html-body[class][data-container="body"] {
-    .popup-window:extend(.popup-window all) {}
-
-    .overlay_magento:extend(.overlay_magento all) {}
-
-    .ui-dialog:extend(.ui-dialog all) {}
-
-    .ui-widget-overlay:extend(.ui-widget-overlay all) {}
-
-    .fade:extend(.fade all) {}
-
-    .insert-variable:extend(.insert-variable all) {}
-
-    .magento_message:extend(.magento_message all) {}
-
-    .ui-popup-message:extend(.ui-popup-message all) {}
-
-}
-
-#html-body[class][data-container="body"] .admin__scope {
-    box-sizing: border-box;
-    @import (multiple) 'override.less';
-}
-
-// ToDo UI: Hidding menu (should be fixed in layouts)
-.attribute-popup {
-    .page-wrapper {
-        margin-left: 0;
-    }
-    .menu-wrapper,
-    .page-header-hgroup,
-    .page-header-actions {
-        display: none;
-    }
-}
-
-// ToDo UI: Temporary. Should be changed
-@import 'source/_calendar-temp.less';
-@import 'source/_tooltip-temp.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/styles-old.less b/app/design/adminhtml/Magento/backend/web/css/styles-old.less
index a71df1e2d9945943a91b0d5e25974b5eee9d2af6..a00d8cbb543d1fcd5e1015053ed6e45bc24e0170 100644
--- a/app/design/adminhtml/Magento/backend/web/css/styles-old.less
+++ b/app/design/adminhtml/Magento/backend/web/css/styles-old.less
@@ -7,5453 +7,5885 @@
 @import 'source/lib/_utilities.less';
 @baseDir: "../"; // Default
 
-.normalize();
-
-/* Backend */
+// Backend
 @import "../mui/clearless/all.less";
 @import "../mui/styles/vars.less";
-@import "../mui/styles/base.less";
-@import "../mui/styles/table.less"; // Import table styles
-@import "../mui/styles/dashboard.less"; // Import dashboard
 @import (reference) "../mui/styles/abstract.less"; // Import some abstract
 
+.admin__scope-old {
+    box-sizing: content-box;
+
+    @import "../mui/styles/base.less";
+    @import "../mui/styles/table.less"; // Import table styles
+
+    //
+    //  Reset 'button view' for actions
+    //  --------------------------------------
+
+    .customer-current-activity .action-refresh,
+    .data-table .action-.delete,
+    .data-table .action-.delete:hover,
+    .data-table .action-.delete:active,
+    .data-table .action-.delete.active,
+    .data-table .action-delete,
+    .data-table .action-delete:hover,
+    .data-table .action-delete:active,
+    .data-table .action-delete.active,
+    .data-table .action-locked,
+    .data-table .action-locked:hover,
+    .data-table .action-locked:active,
+    .data-table .action-locked.active,
+    .data-table .action-locked[disabled],
+    #product-variations-matrix .action-choose,
+    #product-variations-matrix .action-choose:hover,
+    #product-variations-matrix .action-choose:active,
+    #product-variations-matrix .action-choose.active,
+    #product-variations-matrix .action-choose[disabled],
+    .action-manage-images,
+    .action-manage-images:hover,
+    .action-manage-images:active,
+    .action-manage-images.active,
+    .action-manage-images[disabled],
+    .image-panel .action-close,
+    .image-panel .action-close:hover,
+    .image-panel .action-close:active,
+    .image-panel .action-close.active,
+    .image-panel .action-close[disabled],
+    .image-panel-controls .action-remove,
+    .image-panel-controls .action-remove:hover,
+    .image-panel-controls .action-remove:active,
+    .image-panel-controls .action-remove.active,
+    .image-panel-controls .action-remove[disabled],
+    .vde-image-sizing .action-connect,
+    .vde-image-sizing .action-connect:hover,
+    .vde-image-sizing .action-connect:active,
+    .vde-image-sizing .action-connect.active,
+    .vde-image-sizing .action-connect[disabled],
+    .suggest-expandable .action-show-all,
+    .suggest-expandable .action-show-all:hover,
+    .suggest-expandable .action-show-all:active,
+    .suggest-expandable .action-show-all.active,
+    .suggest-expandable .action-show-all[disabled],
+    .custom-file > .action-add,
+    .custom-file > .action-add:hover,
+    .custom-file > .action-add:active,
+    .custom-file > .action-add.active,
+    .custom-file > .action-add[disabled],
+    .vde-tools-header .action-close,
+    .vde-tools-header .action-close:hover,
+    .vde-tools-header .action-close:active,
+    .vde-tools-header .action-close.active,
+    .image .action-delete,
+    .image .action-delete:hover,
+    .image .action-delete:active,
+    .image .action-delete.active,
+    .fieldset-wrapper-title .actions .action-delete,
+    .fieldset-wrapper-title .actions .action-delete:hover,
+    .fieldset-wrapper-title .actions .action-delete:active,
+    .fieldset-wrapper-title .actions .action-delete.active,
+    .notification .action-close,
+    .notification .action-close:hover,
+    .notification .action-close:active,
+    .notification .action-close.active,
+    .page-login .action-forgotpassword,
+    .page-login .action-forgotpassword:hover,
+    .page-login .action-forgotpassword:active,
+    .page-login .action-forgotpassword.active,
+    .page-login .action-back,
+    .page-login .action-back:hover,
+    .page-login .action-back:active,
+    .page-login .action-back.active,
+    .data-table .action-.delete[disabled],
+    .data-table .action-delete[disabled],
+    .data-table .action-locked[disabled],
+    #product-variations-matrix .action-choose[disabled],
+    .image-panel .action-close[disabled],
+    .image-panel-controls .action-remove[disabled],
+    .suggest-expandable .action-show-all[disabled],
+    #store-view-window [class^='action-close'],
+    #store-view-window [class^='action-close']:hover,
+    #store-view-window [class^='action-close']:active,
+    #store-view-window [class^='action-close'].active,
+    #store-view-window [class^='action-close'][disabled],
+    .custom-file > .action-add[disabled],
+    .image .action-delete,
+    .image .action-delete:hover,
+    .image .action-delete:active,
+    .image .action-delete.active,
+    .fieldset-wrapper-title .actions .action-delete,
+    .fieldset-wrapper-title .actions .action-delete:hover,
+    .fieldset-wrapper-title .actions .action-delete:active,
+    .fieldset-wrapper-title .actions .action-delete.active,
+    .notification .action-close,
+    .notification .action-close:hover,
+    .notification .action-close:active,
+    .notification .action-close.active,
+    .vde-tools-header .action-close[disabled],
+    .vde-image-sizing .action-reset,
+    .vde-image-sizing .action-reset:hover,
+    .vde-image-sizing .action-reset:active,
+    .vde-image-sizing .action-reset.active,
+    .vde-image-sizing .action-reset[disabled],
+    .vde-image-sizing .action-connect,
+    .vde-image-sizing .action-connect:hover,
+    .vde-image-sizing .action-connect:active,
+    .vde-image-sizing .action-connect.active,
+    .vde-image-sizing .action-connect[disabled],
+    .vde-tab-data .action-download,
+    .vde-tab-data .action-download:hover,
+    .vde-tab-data .action-download:active,
+    .vde-tab-data .action-download.active,
+    .vde-tab-data .action-download[disabled],
+    .vde-tab-data .action-delete,
+    .vde-tab-data .action-delete:hover,
+    .vde-tab-data .action-delete:active,
+    .vde-tab-data .action-delete.active,
+    .vde-tab-data .action-delete[disabled],
+    .vde-tab-data .action-edit,
+    .vde-tab-data .action-edit:hover,
+    .vde-tab-data .action-edit:active,
+    .vde-tab-data .action-edit.active,
+    .vde-tab-data .action-edit[disabled],
+    .image .action-delete[disabled],
+    .fieldset-wrapper-title .actions .action-delete[disabled] {
+        border: none;
+        border-radius: 0;
+        background: none;
+        margin: 0;
+        padding: 0;
+        box-shadow: none;
+        text-shadow: none;
+        filter: none;
+    }
 
-/*
-    Reset 'button view' for actions
--------------------------------------- */
-.customer-current-activity .action-refresh,
-.data-table .action-.delete,
-.data-table .action-.delete:hover,
-.data-table .action-.delete:active,
-.data-table .action-.delete.active,
-.data-table .action-delete,
-.data-table .action-delete:hover,
-.data-table .action-delete:active,
-.data-table .action-delete.active,
-.data-table .action-locked,
-.data-table .action-locked:hover,
-.data-table .action-locked:active,
-.data-table .action-locked.active,
-.data-table .action-locked[disabled],
-#product-variations-matrix .action-choose,
-#product-variations-matrix .action-choose:hover,
-#product-variations-matrix .action-choose:active,
-#product-variations-matrix .action-choose.active,
-#product-variations-matrix .action-choose[disabled],
-.action-manage-images,
-.action-manage-images:hover,
-.action-manage-images:active,
-.action-manage-images.active,
-.action-manage-images[disabled],
-.image-panel .action-close,
-.image-panel .action-close:hover,
-.image-panel .action-close:active,
-.image-panel .action-close.active,
-.image-panel .action-close[disabled],
-.image-panel-controls .action-remove,
-.image-panel-controls .action-remove:hover,
-.image-panel-controls .action-remove:active,
-.image-panel-controls .action-remove.active,
-.image-panel-controls .action-remove[disabled],
-.vde-image-sizing .action-connect,
-.vde-image-sizing .action-connect:hover,
-.vde-image-sizing .action-connect:active,
-.vde-image-sizing .action-connect.active,
-.vde-image-sizing .action-connect[disabled],
-.suggest-expandable .action-show-all,
-.suggest-expandable .action-show-all:hover,
-.suggest-expandable .action-show-all:active,
-.suggest-expandable .action-show-all.active,
-.suggest-expandable .action-show-all[disabled],
-.custom-file > .action-add,
-.custom-file > .action-add:hover,
-.custom-file > .action-add:active,
-.custom-file > .action-add.active,
-.custom-file > .action-add[disabled],
-.vde-tools-header .action-close,
-.vde-tools-header .action-close:hover,
-.vde-tools-header .action-close:active,
-.vde-tools-header .action-close.active,
-.image .action-delete,
-.image .action-delete:hover,
-.image .action-delete:active,
-.image .action-delete.active,
-.fieldset-wrapper-title .actions .action-delete,
-.fieldset-wrapper-title .actions .action-delete:hover,
-.fieldset-wrapper-title .actions .action-delete:active,
-.fieldset-wrapper-title .actions .action-delete.active,
-.notification .action-close,
-.notification .action-close:hover,
-.notification .action-close:active,
-.notification .action-close.active,
-.page-login .action-forgotpassword,
-.page-login .action-forgotpassword:hover,
-.page-login .action-forgotpassword:active,
-.page-login .action-forgotpassword.active,
-.page-login .action-back,
-.page-login .action-back:hover,
-.page-login .action-back:active,
-.page-login .action-back.active {
-    border: none;
-    border-radius: 0;
-    background: none;
-    margin: 0;
-    padding: 0;
-    box-shadow: none;
-    text-shadow: none;
-    filter: none;
-}
-
-.attribute-popup .messages {
-    margin: 0 15px;
-}
-
-.data-table .action-.delete[disabled],
-.data-table .action-delete[disabled],
-.data-table .action-locked[disabled],
-#product-variations-matrix .action-choose[disabled],
-.image-panel .action-close[disabled],
-.image-panel-controls .action-remove[disabled],
-.suggest-expandable .action-show-all[disabled],
-#store-view-window [class^='action-close'],
-#store-view-window [class^='action-close']:hover,
-#store-view-window [class^='action-close']:active,
-#store-view-window [class^='action-close'].active,
-#store-view-window [class^='action-close'][disabled],
-.custom-file > .action-add[disabled],
-.image .action-delete,
-.image .action-delete:hover,
-.image .action-delete:active,
-.image .action-delete.active,
-.fieldset-wrapper-title .actions .action-delete,
-.fieldset-wrapper-title .actions .action-delete:hover,
-.fieldset-wrapper-title .actions .action-delete:active,
-.fieldset-wrapper-title .actions .action-delete.active,
-.notification .action-close,
-.notification .action-close:hover,
-.notification .action-close:active,
-.notification .action-close.active {
-    border: none;
-    border-radius: 0;
-    background: none;
-    margin: 0;
-    padding: 0;
-    box-shadow: none;
-    text-shadow: none;
-    filter: none;
-}
-
-.fade.critical-notification {
-    display: block;
-}
+    .attribute-popup .messages {
+        margin: 0 15px;
+    }
 
-.fade.critical-notification .popup {
-    top: 200px;
-}
+    .fade.critical-notification {
+        display: block;
+    }
 
-.data-table .action-.delete[disabled],
-.data-table .action-delete[disabled],
-.data-table .action-locked[disabled],
-#product-variations-matrix .action-choose[disabled],
-.image-panel .action-close[disabled],
-.image-panel-controls .action-remove[disabled],
-.suggest-expandable .action-show-all[disabled],
-#store-view-window [class^='action-close'],
-#store-view-window [class^='action-close']:hover,
-#store-view-window [class^='action-close']:active,
-#store-view-window [class^='action-close'].active,
-#store-view-window [class^='action-close'][disabled],
-.custom-file > .action-add[disabled],
-.vde-tools-header .action-close[disabled],
-.vde-image-sizing .action-reset,
-.vde-image-sizing .action-reset:hover,
-.vde-image-sizing .action-reset:active,
-.vde-image-sizing .action-reset.active,
-.vde-image-sizing .action-reset[disabled],
-.image .action-delete[disabled],
-.fieldset-wrapper-title .actions .action-delete[disabled] {
-    border: 0;
-    border-radius: 0;
-    background: none;
-    margin: 0;
-    padding: 0;
-    box-shadow: none;
-    text-shadow: none;
-    filter: none;
-}
+    .fade.critical-notification .popup {
+        top: 200px;
+    }
 
-.vde-image-sizing .action-connect,
-.vde-image-sizing .action-connect:hover,
-.vde-image-sizing .action-connect:active,
-.vde-image-sizing .action-connect.active,
-.vde-image-sizing .action-connect[disabled],
-.vde-tab-data .action-download,
-.vde-tab-data .action-download:hover,
-.vde-tab-data .action-download:active,
-.vde-tab-data .action-download.active,
-.vde-tab-data .action-download[disabled],
-.vde-tab-data .action-delete,
-.vde-tab-data .action-delete:hover,
-.vde-tab-data .action-delete:active,
-.vde-tab-data .action-delete.active,
-.vde-tab-data .action-delete[disabled],
-.vde-tab-data .action-edit,
-.vde-tab-data .action-edit:hover,
-.vde-tab-data .action-edit:active,
-.vde-tab-data .action-edit.active,
-.vde-tab-data .action-edit[disabled] {
-    border: none;
-    border-radius: 0;
-    background: none;
-    margin: 0;
-    padding: 0;
-    box-shadow: none;
-    text-shadow: none;
-}
+    //
+    //  Actions as links
+    //  --------------------------------------
 
-/*
-    Actions as links
--------------------------------------- */
-.notification-entry-dialog .action-close {
-    background: none;
-    border: none;
-    color: #6d665e;
-    font-weight: normal;
-    font-size: 12px;
-    cursor: pointer;
-    text-decoration: underline;
-}
+    .notification-entry-dialog .action-close {
+        background: none;
+        border: none;
+        color: #6d665e;
+        font-weight: normal;
+        font-size: 12px;
+        cursor: pointer;
+        text-decoration: underline;
+    }
 
-.notification-entry-dialog .action-close:hover {
-    color: #000;
-    border-bottom-color: #000;
-    filter: none;
-}
+    .notification-entry-dialog .action-close:hover {
+        color: #000;
+        border-bottom-color: #000;
+        filter: none;
+    }
 
-/*
-    Fileupload button
--------------------------------------- */
-.action-upload {
-    position: relative;
-}
+    //
+    //  Fileupload button
+    //  --------------------------------------
 
-.action-upload > span {
-}
+    .action-upload {
+        position: relative;
+    }
 
-.action-upload > input[type="file"] {
-    position: absolute;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    opacity: 0;
-    font-size: 10em;
-}
+    .action-upload > input[type="file"] {
+        position: absolute;
+        left: 0;
+        top: 0;
+        right: 0;
+        bottom: 0;
+        opacity: 0;
+        font-size: 10em;
+    }
 
-/*
-    Dropdown menu
--------------------------------------- */
-.dropdown-menu,
-.ui-autocomplete {
-    position: absolute;
-    display: none;
-    list-style: none;
-    min-width: 100px;
-    margin: 1px 0 0;
-    padding: 0;
-    right: 0;
-    top: 100%;
-    border: 1px solid #cac2b5;
-    background: #fff;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
-    z-index: 990;
-}
+    //
+    //  Dropdown menu
+    //  --------------------------------------
 
-.dropdown-menu > li,
-.ui-autocomplete > li {
-    padding: 5px;
-    border-bottom: 1px solid #e5e5e5;
-}
+    .dropdown-menu,
+    .ui-autocomplete {
+        position: absolute;
+        display: none;
+        list-style: none;
+        min-width: 100px;
+        margin: 1px 0 0;
+        padding: 0;
+        right: 0;
+        top: 100%;
+        border: 1px solid #cac2b5;
+        background: #fff;
+        box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
+        z-index: 990;
+    }
 
-.dropdown-menu > li.selected,
-.ui-autocomplete > li.selected {
-    background: #eef8fc;
-}
+    .dropdown-menu > li,
+    .ui-autocomplete > li {
+        padding: 5px;
+        border-bottom: 1px solid #e5e5e5;
+    }
 
-.dropdown-menu > li:hover,
-.ui-autocomplete > li:hover {
-    background: #eef8fc;
-}
+    .dropdown-menu > li.selected,
+    .ui-autocomplete > li.selected {
+        background: #eef8fc;
+    }
 
-.dropdown-menu > li:last-child,
-.ui-autocomplete > li:last-child {
-    border-bottom: none;
-}
+    .dropdown-menu > li:hover,
+    .ui-autocomplete > li:hover {
+        background: #eef8fc;
+    }
 
-.dropdown-menu > li > .item,
-.ui-autocomplete > li > .item {
-    cursor: pointer;
-}
+    .dropdown-menu > li:last-child,
+    .ui-autocomplete > li:last-child {
+        border-bottom: none;
+    }
 
-.dropdown-menu-top {
-    margin: 0 0 3px;
-    top: auto;
-    bottom: 100%;
-}
+    .dropdown-menu > li > .item,
+    .ui-autocomplete > li > .item {
+        cursor: pointer;
+    }
 
-.ui-autocomplete {
-    right: auto;
-}
+    .dropdown-menu-top {
+        margin: 0 0 3px;
+        top: auto;
+        bottom: 100%;
+    }
 
-.ui-autocomplete > li {
-    padding: 0;
-}
+    .ui-autocomplete {
+        right: auto;
+    }
 
-.ui-autocomplete > li > a {
-    display: block;
-    padding: 5px;
-}
+    .ui-autocomplete > li {
+        padding: 0;
+    }
 
-.ui-autocomplete > li > a.level-0 {
-    padding-left: 5px !important;
-}
+    .ui-autocomplete > li > a {
+        display: block;
+        padding: 5px;
+    }
 
-.ui-autocomplete .ui-state-focus {
-    background: #f5f5f5;
-}
+    .ui-autocomplete > li > a.level-0 {
+        padding-left: 5px !important;
+    }
 
-.active .dropdown-menu {
-    display: block;
-}
+    .ui-autocomplete .ui-state-focus {
+        background: #f5f5f5;
+    }
 
-/*
-    Actions Dropdown
--------------------------------------- */
-.action-dropdown {
-    text-align: left;
-    position: relative;
-    display: inline-block;
-}
+    .active .dropdown-menu {
+        display: block;
+    }
 
-.action-dropdown > [class^='action-'] {
-    float: left;
-    border-radius: 0;
-}
+    //
+    //  Actions Dropdown
+    //  --------------------------------------
 
-.action-dropdown > .action-default {
-    border-radius: 5px 0 0 5px;
-}
+    .action-dropdown {
+        text-align: left;
+        position: relative;
+        display: inline-block;
+    }
 
-.action-dropdown > .action-toggle {
-    border-left: 1px solid #c5c0b9;
-    border-radius: 0 5px 5px 0;
-    margin-left: -1px;
-    padding: 4px 7px;
-}
+    .action-dropdown > [class^='action-'] {
+        float: left;
+        border-radius: 0;
+    }
 
-.action-dropdown > .action-toggle > span {
-    display: none;
-}
+    .action-dropdown > .action-default {
+        border-radius: 5px 0 0 5px;
+    }
 
-.action-dropdown > .action-toggle:before {
-    display: block;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    content: '\e02c'; /* arrow down */
-    font-size: 11px;
-}
+    .action-dropdown > .action-toggle {
+        border-left: 1px solid #c5c0b9;
+        border-radius: 0 5px 5px 0;
+        margin-left: -1px;
+        padding: 4px 7px;
+    }
 
-.action-dropdown > .action-toggle.active:before {
-    content: '\e029'; /* arrow up */
-}
+    .action-dropdown > .action-toggle > span {
+        display: none;
+    }
 
-.action-dropdown > .action-toggle.primary {
-    border-left: 1px solid #e1721d;
-}
+    .action-dropdown > .action-toggle:before {
+        display: block;
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        speak: none;
+        font-weight: normal;
+        -webkit-font-smoothing: antialiased;
+        content: '\e02c'; // arrow down
+        font-size: 11px;
+    }
 
-.action-dropdown > .action-toggle.primary:hover {
-    background: #e2701a;
-    margin-left: -1px;
-}
+    .action-dropdown > .action-toggle.active:before {
+        content: '\e029'; // arrow up
+    }
 
-.action-dropdown.active .dropdown-menu {
-    display: block;
-    white-space: nowrap;
-}
+    .action-dropdown > .action-toggle.primary {
+        border-left: 1px solid #e1721d;
+    }
 
-.action-dropdown.active .dropdown-menu > li {
-    padding: 0;
-}
+    .action-dropdown > .action-toggle.primary:hover {
+        background: #e2701a;
+        margin-left: -1px;
+    }
 
-.action-dropdown .dropdown-menu > li > .item {
-    display: block;
-    padding: 6px 10px 5px;
-    color: #333;
-    text-decoration: none;
-}
+    .action-dropdown.active .dropdown-menu {
+        display: block;
+        white-space: nowrap;
+    }
 
-/*
-    Action delete icon
--------------------------------------- */
-/* TODO: replase ".action-.delete" to ".action-delete" after buttons refactoring */
-.data-table .action-.delete span,
-.data-table .action-delete span,
-.data-table .action-locked span,
-.image .action-delete span,
-.fieldset-wrapper-title .actions .action-delete span {
-    display: none;
-}
+    .action-dropdown.active .dropdown-menu > li {
+        padding: 0;
+    }
 
-.data-table .action-.delete:before,
-.data-table .action-delete:before,
-.image .action-delete:before,
-.fieldset-wrapper-title .actions .action-delete:before {
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    font-size: 18px;
-    -webkit-font-smoothing: antialiased;
-    content: '\e07f'; /* delete icon */
-    color: #b7b3ad;
-}
+    .action-dropdown .dropdown-menu > li > .item {
+        display: block;
+        padding: 6px 10px 5px;
+        color: #333;
+        text-decoration: none;
+    }
 
-/*
-    Locked action icon
--------------------------------------- */
-.data-table .action-locked:before {
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    font-size: 20px;
-    -webkit-font-smoothing: antialiased;
-    content: '\e03e'; /* lock icon */
-    color: #b7b3ad;
-}
+    //
+    //  Action delete icon
+    //  --------------------------------------
 
-.data-table .action-.delete:hover:before,
-.data-table .action-delete:hover:before,
-.data-table .action-locked:hover:before,
-.image .action-delete:hover:before,
-.fieldset-wrapper-title .actions .action-delete:hover:before {
-    color: #7e7e7e;
-}
+    // TODO: replase ".action-.delete" to ".action-delete" after buttons refactoring
+    .data-table .action-.delete span,
+    .data-table .action-delete span,
+    .data-table .action-locked span,
+    .image .action-delete span,
+    .fieldset-wrapper-title .actions .action-delete span {
+        display: none;
+    }
 
-.data-table input.action-.delete[type="button"],
-.data-table input.action-.delete[type="submit"],
-.data-table input.action-.delete[type="reset"],
-.data-table button.action-.delete,
-.data-table input.action-.delete[type="button"]:visited,
-.data-table input.action-.delete[type="submit"]:visited,
-.data-table input.action-.delete[type="reset"]:visited,
-.data-table button.action-.delete:visited,
-.data-table input.action-.delete[type="button"]:hover,
-.data-table input.action-.delete[type="submit"]:hover,
-.data-table input.action-.delete[type="reset"]:hover,
-.data-table button.action-.delete:hover,
-.data-table input.action-.delete[type="button"]:active,
-.data-table input.action-.delete[type="submit"]:active,
-.data-table input.action-.delete[type="reset"]:active,
-.data-table button.action-.delete:active {
-    background: transparent;
-    padding: 3px 7px 0;
-}
+    .data-table .action-.delete:before,
+    .data-table .action-delete:before,
+    .image .action-delete:before,
+    .fieldset-wrapper-title .actions .action-delete:before {
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        speak: none;
+        font-weight: normal;
+        font-size: 18px;
+        -webkit-font-smoothing: antialiased;
+        content: '\e07f'; // delete icon
+        color: #b7b3ad;
+    }
 
-.data-table input.action-.delete[type=button]:hover:before,
-.data-table input.action-.delete[type=submit]:hover:before,
-.data-table input.action-.delete[type=reset]:hover:before,
-.data-table button.action-.delete:hover:before,
-.data-table input.action-.delete[type=button]:focus:before,
-.data-table input.action-.delete[type=submit]:focus:before,
-.data-table input.action-.delete[type=reset]:focus:before,
-.data-table button.action-.delete:focus:before {
-    background: transparent;
-    color: #a5a29d;
-}
+    //
+    //  Locked action icon
+    //  --------------------------------------
+
+    .data-table .action-locked:before {
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        speak: none;
+        font-weight: normal;
+        font-size: 20px;
+        -webkit-font-smoothing: antialiased;
+        content: '\e03e'; // lock icon
+        color: #b7b3ad;
+    }
 
-/*
-    Forms
--------------------------------------- */
+    .data-table .action-.delete:hover:before,
+    .data-table .action-delete:hover:before,
+    .data-table .action-locked:hover:before,
+    .image .action-delete:hover:before,
+    .fieldset-wrapper-title .actions .action-delete:hover:before {
+        color: #7e7e7e;
+    }
 
-fieldset {
-    border: 1px solid #ccc;
-    padding: 20px;
-}
+    .data-table input.action-.delete[type="button"],
+    .data-table input.action-.delete[type="submit"],
+    .data-table input.action-.delete[type="reset"],
+    .data-table button.action-.delete,
+    .data-table input.action-.delete[type="button"]:visited,
+    .data-table input.action-.delete[type="submit"]:visited,
+    .data-table input.action-.delete[type="reset"]:visited,
+    .data-table button.action-.delete:visited,
+    .data-table input.action-.delete[type="button"]:hover,
+    .data-table input.action-.delete[type="submit"]:hover,
+    .data-table input.action-.delete[type="reset"]:hover,
+    .data-table button.action-.delete:hover,
+    .data-table input.action-.delete[type="button"]:active,
+    .data-table input.action-.delete[type="submit"]:active,
+    .data-table input.action-.delete[type="reset"]:active,
+    .data-table button.action-.delete:active {
+        background: transparent;
+        padding: 3px 7px 0;
+    }
 
-legend {
-    padding: 0 10px;
-    margin: 0 -10px;
-}
+    .data-table input.action-.delete[type=button]:hover:before,
+    .data-table input.action-.delete[type=submit]:hover:before,
+    .data-table input.action-.delete[type=reset]:hover:before,
+    .data-table button.action-.delete:hover:before,
+    .data-table input.action-.delete[type=button]:focus:before,
+    .data-table input.action-.delete[type=submit]:focus:before,
+    .data-table input.action-.delete[type=reset]:focus:before,
+    .data-table button.action-.delete:focus:before {
+        background: transparent;
+        color: #a5a29d;
+    }
 
-fieldset legend + br {
-    display: none;
-}
+    //
+    //  Forms
+    //  --------------------------------------
 
-label {
-    display: inline-block;
-}
 
-label > input[type="radio"],
-label > input[type="checkbox"] {
-    margin: -3px 3px 0 0;
-    vertical-align: middle;
-}
+    fieldset {
+        border: 1px solid #ccc;
+        padding: 20px;
+    }
 
-input[type=text],
-input[type=password],
-input[type=datetime],
-input[type=datetime-local],
-input[type=date],
-input[type=month],
-input[type=time],
-input[type=week],
-input[type=number],
-input[type=range],
-input[type=email],
-input[type=url],
-input[type=search],
-input.search,
-input[type=tel],
-input[type=color],
-textarea,
-select {
-    box-sizing: border-box;
-    border: 1px solid #adadad;
-    border-radius: 1px;
-    padding: 4px;
-    color: #303030;
-    background-color: #fff;
-    font-weight: 500;
-    font-size: 14px;
-    height: 33px;
-    &:focus {
-        border-color: #007bdb;
-        outline: 0;
+    legend {
+        padding: 0 10px;
+        margin: 0 -10px;
     }
-}
 
-select {
-    &:not([multiple]) {
-        .css(appearance, none, 1);
+    fieldset legend + br {
+        display: none;
+    }
 
+    label {
         display: inline-block;
-        line-height: normal;
-        min-width: 80px;
+    }
+
+    label > input[type="radio"],
+    label > input[type="checkbox"] {
+        margin: -3px 3px 0 0;
+        vertical-align: middle;
+    }
 
-        background-repeat: no-repeat;
-        background-image+: url('../images/arrows-bg.svg');
-        background-position+: ~'calc(100% - 12px)' -34px;
-        background-size+: auto;
+    input[type=text],
+    input[type=password],
+    input[type=datetime],
+    input[type=datetime-local],
+    input[type=date],
+    input[type=month],
+    input[type=time],
+    input[type=week],
+    input[type=number],
+    input[type=range],
+    input[type=email],
+    input[type=url],
+    input[type=search],
+    input.search,
+    input[type=tel],
+    input[type=color],
+    textarea,
+    select {
+        box-sizing: border-box;
+        border: 1px solid #adadad;
+        border-radius: 1px;
+        padding: 4px;
+        color: #303030;
+        background-color: #fff;
+        font-weight: 500;
+        font-size: 14px;
+        height: 33px;
+        &:focus {
+            border-color: #007bdb;
+            outline: 0;
+        }
+    }
 
-        background-image+: linear-gradient(#e3e3e3, #e3e3e3);
-        background-position+: 100%;
-        background-size+: 33px 100%;
+    select {
+        &:not([multiple]) {
+            .css(appearance, none, 1);
 
-        background-image+: linear-gradient(#adadad, #adadad);
-        background-position+: ~'calc(100% - 33px)' 0;
-        background-size+: 1px 100%;
+            display: inline-block;
+            line-height: normal;
+            min-width: 80px;
 
-        padding-right: 44px;
-        &:focus {
+            background-repeat: no-repeat;
             background-image+: url('../images/arrows-bg.svg');
-            background-position+: ~'calc(100% - 12px)' 13px;
+            background-position+: ~'calc(100% - 12px)' -34px;
+            background-size+: auto;
 
             background-image+: linear-gradient(#e3e3e3, #e3e3e3);
             background-position+: 100%;
+            background-size+: 33px 100%;
 
-            background-image+: linear-gradient(#007bdb, #007bdb);
+            background-image+: linear-gradient(#adadad, #adadad);
             background-position+: ~'calc(100% - 33px)' 0;
-        }
-        &::-ms-expand {
-            display: none;
-        }
-        .ie9 & {
-            padding-right: 4px;
-            min-width: 0;
-        }
-    }
-}
+            background-size+: 1px 100%;
 
-select[multiple],
-select[size] {
-    height: auto;
-}
+            padding-right: 44px;
+            &:focus {
+                background-image+: url('../images/arrows-bg.svg');
+                background-position+: ~'calc(100% - 12px)' 13px;
 
-textarea {
-    resize: vertical;
-    padding-top: 6px;
-    padding-bottom: 6px;
-    line-height: 1.18em;
-    max-width: none;
-    min-height: 100px;
-}
+                background-image+: linear-gradient(#e3e3e3, #e3e3e3);
+                background-position+: 100%;
 
-textarea,
-.input-text {
-    height: auto;
-}
+                background-image+: linear-gradient(#007bdb, #007bdb);
+                background-position+: ~'calc(100% - 33px)' 0;
+            }
+            &::-ms-expand {
+                display: none;
+            }
+        }
+    }
 
-input[type="radio"],
-input[type="checkbox"] {
-    background: #fff;
-    border: 1px solid #adadad;
-    border-radius: 2px;
-    cursor: pointer;
-    display: inline-block;
-    vertical-align: middle;
-    margin: 0 5px 0 0;
-    height: 16px;
-    width: 16px;
-    position: relative;
-    appearance: none;
-    -webkit-appearance: none;
-    -moz-appearance: none;
-    transition: all 0.1s ease-in;
-    &:focus {
-        border-color: #007bdb;
-        outline: 0;
+    select[multiple],
+    select[size] {
+        height: auto;
     }
-    &[disabled] {
-        background-color: #e9e9e9;
-        border-color: #adadad;
-        opacity: .5;
+
+    textarea {
+        resize: vertical;
+        padding-top: 6px;
+        padding-bottom: 6px;
+        line-height: 1.18em;
+        max-width: none;
+        min-height: 100px;
     }
-    &:checked {
-        &:after {
-            font-family: 'Admin Icons';
-            content: "\e62d";
-            display: inline-block;
-            position: absolute;
-            top: 0;
-            left: 0;
-            width: 14px;
-            color: #514943;
-            font-size: 11px;
-            line-height: 13px;
-            text-align: center;
-            font-weight: 400
-        }
+
+    textarea,
+    .input-text {
+        height: auto;
     }
-}
 
-input[type="radio"]  {
-    border-radius: 8px;
-    &:checked {
-        &:after {
-            content: '';
-            display: block;
-            width: 10px;
-            height: 10px;
-            border-radius: 10px;
-            background: #514943;
-            top: 50%;
-            left: 50%;
-            position: absolute;
-            margin-top: -5px;
-            margin-left: -5px;
+    input[type="radio"],
+    input[type="checkbox"] {
+        background: #fff;
+        border: 1px solid #adadad;
+        border-radius: 2px;
+        cursor: pointer;
+        display: inline-block;
+        vertical-align: middle;
+        margin: 0 5px 0 0;
+        height: 16px;
+        width: 16px;
+        position: relative;
+        appearance: none;
+        -webkit-appearance: none;
+        -moz-appearance: none;
+        transition: all 0.1s ease-in;
+        &:focus {
+            border-color: #007bdb;
+            outline: 0;
+        }
+        &[disabled] {
+            background-color: #e9e9e9;
+            border-color: #adadad;
+            opacity: .5;
+        }
+        &:checked {
+            &:after {
+                font-family: 'Admin Icons';
+                content: "\e62d";
+                display: inline-block;
+                position: absolute;
+                top: 0;
+                left: 0;
+                width: 14px;
+                color: #514943;
+                font-size: 11px;
+                line-height: 13px;
+                text-align: center;
+                font-weight: 400
+            }
         }
     }
-}
 
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-    cursor: not-allowed;
-    background-color: #fff;
-    border-color: #eee;
-    box-shadow: none;
-    color: #999;
-}
+    input[type="radio"]  {
+        border-radius: 8px;
+        &:checked {
+            &:after {
+                content: '';
+                display: block;
+                width: 10px;
+                height: 10px;
+                border-radius: 10px;
+                background: #514943;
+                top: 50%;
+                left: 50%;
+                position: absolute;
+                margin-top: -5px;
+                margin-left: -5px;
+            }
+        }
+    }
 
-select[disabled] option[selected] {
-    color: #fff;
-    background: #aaa;
-}
+    input[disabled],
+    select[disabled],
+    textarea[disabled],
+    input[readonly],
+    select[readonly],
+    textarea[readonly] {
+        cursor: not-allowed;
+        background-color: #fff;
+        border-color: #eee;
+        box-shadow: none;
+        color: #999;
+    }
 
-textarea:-moz-placeholder,
-input:-moz-placeholder {
-    color: #999 !important;
-    font-style: italic;
-}
+    select[disabled] option[selected] {
+        color: #fff;
+        background: #aaa;
+    }
 
-option.placeholder {
-    color: #999 !important;
-    font-style: italic !important;
-}
+    textarea:-moz-placeholder,
+    input:-moz-placeholder {
+        color: #999 !important;
+        font-style: italic;
+    }
 
-:-ms-input-placeholder {
-    color: #999 !important;
-    font-style: italic;
-}
+    option.placeholder {
+        color: #999 !important;
+        font-style: italic !important;
+    }
 
-::-webkit-input-placeholder {
-    color: #999 !important;
-}
+    :-ms-input-placeholder {
+        color: #999 !important;
+        font-style: italic;
+    }
 
-:-moz-placeholder {
-    color: #999 !important;
-}
+    ::-webkit-input-placeholder {
+        color: #999 !important;
+    }
 
-.form-inline .control {
-    width: 100%;
-    .control-inner-wrap {
-        padding-top: 7px;
+    :-moz-placeholder {
+        color: #999 !important;
     }
-}
 
-.form-inline .label {
-    width: 20%;
-    padding-top: 8px;
-    padding-right: 30px;
-}
+    .form-inline .control {
+        width: 100%;
+        .control-inner-wrap {
+            padding-top: 7px;
+        }
+    }
 
-.form-inline .label ~ .control {
-    width: 60%;
-}
+    .form-inline .label {
+        width: 20%;
+        padding-top: 8px;
+        padding-right: 30px;
+    }
 
-.form-inline .no-label .control {
-    margin-left: 20%;
-    width: 60%;
-}
+    .form-inline .label ~ .control {
+        width: 60%;
+    }
 
-fieldset.field [class^='fields-group-'] .field .control {
-    width: auto;
-    margin: 0 0 0 20px;
-}
+    .form-inline .no-label .control {
+        margin-left: 20%;
+        width: 60%;
+    }
 
-.form-inline .field-service {
-    box-sizing: border-box;
-    float: left;
-    width: 20%;
-    padding: 7px 0 0 15px;
-    color: #999;
-    font-size: 12px;
-    letter-spacing: .05em;
-}
+    fieldset.field [class^='fields-group-'] .field .control {
+        width: auto;
+        margin: 0 0 0 20px;
+    }
 
-.form-inline .field-service[value-scope]:before {
-    content: attr(value-scope) !important;
-    white-space: nowrap;
-    display: block;
-    margin-bottom: 5px;
-}
+    .form-inline .field-service {
+        box-sizing: border-box;
+        float: left;
+        width: 20%;
+        padding: 7px 0 0 15px;
+        color: #999;
+        font-size: 12px;
+        letter-spacing: .05em;
+    }
 
-.form-inline .field-service .checkbox {
-    margin: 0;
-    vertical-align: middle;
-}
+    .form-inline .field-service[value-scope]:before {
+        content: attr(value-scope) !important;
+        white-space: nowrap;
+        display: block;
+        margin-bottom: 5px;
+    }
 
-.form-inline > form > div > .message {
-    margin-left: 18px;
-    margin-right: 18px;
-}
+    .form-inline .field-service .checkbox {
+        margin: 0;
+        vertical-align: middle;
+    }
 
-.control > input {
-    width: 100%;
-    padding: 4px 10px;
-}
+    .form-inline > form > div > .message {
+        margin-left: 18px;
+        margin-right: 18px;
+    }
 
-.control > input[type="button"] {
-    width: auto;
-}
+    .control > input {
+        width: 100%;
+        padding: 4px 10px;
+    }
 
-.control > input.hasDatepicker {
-    width: 160px;
-}
-
-.control {
-    > input[type="file"] {
+    .control > input[type="button"] {
         width: auto;
     }
-    > input[type="checkbox"],
-    > input[type="radio"] {
-        width: 16px;
-        padding: 0;
+
+    .control > input.hasDatepicker {
+        width: 160px;
     }
-}
 
-.control > table {
-    width: 100%;
-}
+    .control {
+        > input[type="file"] {
+            width: auto;
+        }
+        > input[type="checkbox"],
+        > input[type="radio"] {
+            width: 16px;
+            padding: 0;
+        }
+    }
 
-.multi-input {
-    margin: 0 0 20px;
-}
+    .control > table {
+        width: 100%;
+    }
 
-.multi-input > input {
-    width: 100%;
-}
+    .multi-input {
+        margin: 0 0 20px;
+    }
 
-.control .input-file {
-    margin-top: 4px;
-}
+    .multi-input > input {
+        width: 100%;
+    }
 
-/* TODO: remove styles for images when images will be replaced by font icons */
-.control .hasDatepicker + img {
-    margin: -3px 0 0 5px;
-    vertical-align: middle;
-}
+    .control .input-file {
+        margin-top: 4px;
+    }
 
-.nobr {
-    white-space: nowrap;
-}
+    .control {
+        .hasDatepicker {
+            & + .ui-datepicker-trigger {
+                .button-reset();
+                .icon-font(
+                @icon-calendar,
+                @_icon-font-size: 42px,
+                @_icon-font-line-height: 30px,
+                @_icon-font-text-hide: true,
+                @_icon-font-position: after,
+                @_icon-font-color: @field-date-icon--color
+                );
+                display: inline-block;
+                vertical-align: middle;
+                &:focus {
+                    outline: 0;
+                    box-shadow: none;
+                }
+            }
+        }
+    }
 
-/*
-    Form Validation
--------------------------------------- */
-label.mage-error {
-    border: 1px solid #e22626;
-    display: block;
-    margin: 2px 0 0;
-    padding: 6px 10px 10px;
-    background: #fff8d6;
-    color: #555;
-    font-size: 12px;
-    font-weight: 500;
-    box-sizing: border-box;
-}
+    .nobr {
+        white-space: nowrap;
+    }
 
-textarea.mage-error,
-select.mage-error,
-input.mage-error {
-    border-color: #e22626 !important;
-}
+    //
+    //  Form Validation
+    //  --------------------------------------
 
-input.mage-error ~ .addafter {
-    border-color: #e22626 !important;
-}
+    label.mage-error {
+        border: 1px solid #e22626;
+        display: block;
+        margin: 2px 0 0;
+        padding: 6px 10px 10px;
+        background: #fff8d6;
+        color: #555;
+        font-size: 12px;
+        font-weight: 500;
+        box-sizing: border-box;
+    }
 
-/*
-    Forms for Store Scope
--------------------------------------- */
-.form-inline .field-store_id .label + .control,
-.form-inline .field-store_ids .label + .control,
-.form-inline .field-website_ids .label + .control,
-.form-inline .field-website_id .label + .control,
-.form-inline .field-select_stores .label + .control,
-.form-inline .field-stores .label + .control {
-    width: auto;
-}
+    textarea.mage-error,
+    select.mage-error,
+    input.mage-error {
+        border-color: #e22626 !important;
+    }
 
-/*
-    Forms styles
--------------------------------------- */
-.page-content-inner {
-    position: relative;
-    background: #f5f2ed;
-    border: 1px solid #b7b2a6;
-    border-radius: 5px;
-    padding: 20px;
-}
+    input.mage-error ~ .addafter {
+        border-color: #e22626 !important;
+    }
 
-.fieldset-wrapper,
-.fieldset {
-    background: #fff;
-    border: 0;
-    margin: 0;
-    padding: 5px 18px 38px;
-    position: relative;
-}
+    //
+    //  Forms for Store Scope
+    //  --------------------------------------
 
-.fieldset-wrapper > .fieldset-wrapper-title,
-.fieldset > .legend {
-    position: static;
-    float: left;
-    width: 100%;
-    box-sizing: border-box;
-    padding: 0;
-    border-bottom: 1px solid #cac3b4;
-    margin: 0 0 18px;
-}
+    .form-inline .field-store_id .label + .control,
+    .form-inline .field-store_ids .label + .control,
+    .form-inline .field-website_ids .label + .control,
+    .form-inline .field-website_id .label + .control,
+    .form-inline .field-select_stores .label + .control,
+    .form-inline .field-stores .label + .control {
+        width: auto;
+    }
 
-.fieldset-wrapper > .fieldset-wrapper-title {
-    float: none;
-}
+    //
+    //  Forms styles
+    //  --------------------------------------
 
-.fieldset-wrapper > .fieldset-wrapper-title .title,
-.fieldset > .legend span {
-    .style10();
-    padding: 7px 0 10px;
-    display: inline-block;
-}
+    .page-content-inner {
+        position: relative;
+        background: #f5f2ed;
+        border: 1px solid #b7b2a6;
+        border-radius: 5px;
+        padding: 20px;
+    }
 
-//
-//    Collapsable fieldset-wrapper
-//--------------------------------------
-.collapsable-wrapper {
-    padding-bottom: 2px;
-    > .fieldset-wrapper-title {
+    .fieldset-wrapper,
+    .fieldset {
+        background: #fff;
+        border: 0;
+        margin: 0;
+        padding: 5px 18px 38px;
+        position: relative;
+    }
+
+    .fieldset-wrapper > .fieldset-wrapper-title,
+    .fieldset > .legend {
+        position: static;
+        float: left;
+        width: 100%;
+        box-sizing: border-box;
+        padding: 0;
         border-bottom: 1px solid #cac3b4;
-        margin-bottom: 0;
-        > .title {
-            position: relative;
-            padding-left: 22px;
-            cursor: pointer;
-            float: left;
-            &:before {
-                position: absolute;
-                left: 0;
-                top: 11px;
-                font-family: 'MUI-Icons';
-                font-size: 16px;
-                font-style: normal;
-                speak: none;
-                font-weight: normal;
-                -webkit-font-smoothing: antialiased;
-                content: '\e02a'; // arrow right icon
-                color: #b2b0ad;
-            }
-            &:hover:before {
-                color: #7e7e7e;
-            }
-        }
+        margin: 0 0 18px;
+    }
+
+    .fieldset-wrapper > .fieldset-wrapper-title {
+        float: none;
+    }
+
+    .fieldset-wrapper > .fieldset-wrapper-title .title,
+    .fieldset > .legend span {
+        .style10();
+        padding: 7px 0 10px;
+        display: inline-block;
     }
-    &.opened {
-        padding-bottom: 18px;
+
+    //
+    //  Collapsable fieldset-wrapper
+    //  --------------------------------------
+    .collapsable-wrapper {
+        padding-bottom: 2px;
         > .fieldset-wrapper-title {
-            //border-bottom: 1px solid #ededed;
-            margin-bottom: 18px;
-            > .title:before {
-                content: '\e02c'; // arrow down icon
+            border-bottom: 1px solid #cac3b4;
+            margin-bottom: 0;
+            > .title {
+                position: relative;
+                padding-left: 22px;
+                cursor: pointer;
+                float: left;
+                &:before {
+                    position: absolute;
+                    left: 0;
+                    top: 11px;
+                    font-family: 'MUI-Icons';
+                    font-size: 16px;
+                    font-style: normal;
+                    speak: none;
+                    font-weight: normal;
+                    -webkit-font-smoothing: antialiased;
+                    content: '\e02a'; // arrow right icon
+                    color: #b2b0ad;
+                }
+                &:hover:before {
+                    color: #7e7e7e;
+                }
+            }
+        }
+        &.opened {
+            padding-bottom: 18px;
+            > .fieldset-wrapper-title {
+                //border-bottom: 1px solid #ededed;
+                margin-bottom: 18px;
+                > .title:before {
+                    content: '\e02c'; // arrow down icon
+                }
             }
         }
     }
-}
-
-/* Fieldset styles in another fieldset */
-.fieldset .fieldset-wrapper,
-.fieldset-wrapper .fieldset-wrapper {
-    border: 1px solid #cac3b4;
-    border-radius: 2px;
-    padding: 0;
-}
 
-.fieldset .fieldset-wrapper .fieldset-wrapper-title,
-.fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title {
-    background:#f7f3eb;
-    padding: 0 18px;
-    border: 0;
-}
-
-.fieldset .fieldset-wrapper.opened .fieldset-wrapper-title,
-.fieldset-wrapper .fieldset-wrapper.opened .fieldset-wrapper-title {
-    border-bottom: 1px solid #cccbca;
-    -webkit-touch-callout: none;
-    -webkit-user-select: none; // use in 41 Chrome
-    -moz-user-select: none; // use in 36 Firefox
-    -ms-user-select: none; // use in 11 IE
-    min-height: 39px;
-}
+    // Fieldset styles in another fieldset
+    .fieldset .fieldset-wrapper,
+    .fieldset-wrapper .fieldset-wrapper {
+        border: 1px solid #cac3b4;
+        border-radius: 2px;
+        padding: 0;
+    }
 
-.fieldset .fieldset-wrapper .fieldset-wrapper-title .actions,
-.fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title .actions {
-    padding: 6px 0 0;
-}
+    .fieldset .fieldset-wrapper .fieldset-wrapper-title,
+    .fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title {
+        background:#f7f3eb;
+        padding: 0 18px;
+        border: 0;
+    }
 
-.fieldset .fieldset-wrapper .fieldset-wrapper-title .title,
-.fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title .title {
-    padding-top: 9px;
-    padding-bottom: 8px;
-    color: #555;
-    font: normal 16px/1.333 Arial, Verdana, sans-serif;
-}
+    .fieldset .fieldset-wrapper.opened .fieldset-wrapper-title,
+    .fieldset-wrapper .fieldset-wrapper.opened .fieldset-wrapper-title {
+        border-bottom: 1px solid #cccbca;
+        -webkit-touch-callout: none;
+        -webkit-user-select: none; // use in 41 Chrome
+        -moz-user-select: none; // use in 36 Firefox
+        -ms-user-select: none; // use in 11 IE
+        min-height: 39px;
+    }
 
-.fieldset .fieldset-wrapper .fieldset-wrapper-title .title:before,
-.fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title .title:before {
-    top: 9px;
-}
+    .fieldset .fieldset-wrapper .fieldset-wrapper-title .actions,
+    .fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title .actions {
+        padding: 6px 0 0;
+    }
 
-.fieldset-wrapper-content .fieldset > .title {
-    margin-top: 0;
-    padding-left: 22px;
-}
+    .fieldset .fieldset-wrapper .fieldset-wrapper-title .title,
+    .fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title .title {
+        padding-top: 9px;
+        padding-bottom: 8px;
+        color: #555;
+        font: normal 16px/1.333 Arial, Verdana, sans-serif;
+    }
 
-.fieldset-wrapper .draggable-handle,
-.fieldset .draggable-handle {
-    width: 8px;
-    height: 14px;
-    line-height: 14px;
-    background: url(../Magento_Backend/images/draggable-handle-vertical.png) no-repeat 0 0;
-    cursor: ns-resize;
-    color: #b2b0ad;
-}
+    .fieldset .fieldset-wrapper .fieldset-wrapper-title .title:before,
+    .fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-title .title:before {
+        top: 9px;
+    }
 
-.fieldset-wrapper-title > .draggable-handle {
-    position: absolute;
-    left: 10px;
-    top: 12px;
-}
+    .fieldset-wrapper-content .fieldset > .title {
+        margin-top: 0;
+        padding-left: 22px;
+    }
 
-.fieldset .fieldset-wrapper .fieldset-wrapper-content,
-.fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-content {
-    padding: 0 10px;
-}
+    .fieldset-wrapper .draggable-handle,
+    .fieldset .draggable-handle {
+        width: 8px;
+        height: 14px;
+        line-height: 14px;
+        background: url(../Magento_Backend/images/draggable-handle-vertical.png) no-repeat 0 0;
+        cursor: ns-resize;
+        color: #b2b0ad;
+    }
 
-/* Sortable fieldsets */
-.ui-sortable .entry-edit .fieldset-wrapper-title,
-#product_options_container_top .fieldset-wrapper-title {
-    padding-left: 30px;
-}
+    .fieldset-wrapper-title > .draggable-handle {
+        position: absolute;
+        left: 10px;
+        top: 12px;
+    }
 
-.ui-sortable .entry-edit .fieldset-wrapper-title > .title {
-}
+    .fieldset .fieldset-wrapper .fieldset-wrapper-content,
+    .fieldset-wrapper .fieldset-wrapper .fieldset-wrapper-content {
+        padding: 0 10px;
+    }
 
-.fieldset-wrapper-title > .actions,
-.fieldset .legend > .actions {
-    float: right;
-    padding-top: 8px;
-}
+    // Sortable fieldsets
+    .ui-sortable .entry-edit .fieldset-wrapper-title,
+    #product_options_container_top .fieldset-wrapper-title {
+        padding-left: 30px;
+    }
 
-.fieldset > .legend + br {
-    display: block;
-    height: 0;
-    overflow: hidden;
-    clear: left;
-}
+    .ui-sortable .entry-edit .fieldset-wrapper-title > .title {
+    }
 
-.fieldset-wrapper .fieldset,
-.fieldset .fieldset {
-    background: transparent;
-    padding: 9px 0;
-    border: none;
-    border-radius: 0;
-    margin: 0 0 29px;
-}
+    .fieldset-wrapper-title > .actions,
+    .fieldset .legend > .actions {
+        float: right;
+        padding-top: 8px;
+    }
 
-.fieldset .comment {
-    margin: 0 0 29px 10px;
-}
+    .fieldset > .legend + br {
+        display: block;
+        height: 0;
+        overflow: hidden;
+        clear: left;
+    }
 
-.fieldset {
-    .field {
+    .fieldset-wrapper .fieldset,
+    .fieldset .fieldset {
+        background: transparent;
+        padding: 9px 0;
+        border: none;
+        border-radius: 0;
         margin: 0 0 29px;
     }
-}
-
-.with-note .note,
-.field .note,
-.data-table .note {
-    color: #303030;
-    font-size: 12px;
-    font-weight: 400;
-    margin: 5px 0;
-}
 
-.fieldset .field .options-list {
-    list-style: none;
-    margin: 0;
-    padding: 0;
-}
+    .fieldset .comment {
+        margin: 0 0 29px 10px;
+    }
 
-.fieldset .field .options-list input[type="checkbox"],
-.fieldset .field .options-list input[type="radio"] {
-    margin-right: 5px;
-}
+    .fieldset {
+        .field {
+            margin: 0 0 29px;
+        }
+    }
 
-[class^="fields-group-"] .field {
-    margin-bottom: 0;
-}
+    .with-note .note,
+    .field .note,
+    .data-table .note {
+        color: #303030;
+        font-size: 12px;
+        font-weight: 400;
+        margin: 5px 0;
+    }
 
-.fieldset-wrapper .fieldset:last-child,
-.fieldset .fieldset:last-child,
-.fieldset .field:last-child {
-    margin-bottom: 0;
-}
+    .fieldset .field .options-list {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
 
-.fieldset .label {
-    color: #303030;
-    font-size: 14px;
-    font-weight: 600;
-}
+    .fieldset .field .options-list input[type="checkbox"],
+    .fieldset .field .options-list input[type="radio"] {
+        margin-right: 5px;
+    }
 
-.fieldset .control .label {
-    .style9();
-    padding-top: 0;
-}
+    [class^="fields-group-"] .field {
+        margin-bottom: 0;
+    }
 
-.form-inline div:not([class*='fields-group']) > .field > .label,
-.form-inline .fieldset > .field > .label {
-    color: #303030;
-    font-size: 14px;
-    font-weight: 600;
-    line-height: 3.2rem;
-    padding: 0 30px 0 0;
-    white-space: nowrap;
-
-    &:before {
-        content: '.';
-        margin-left: -7px;
-        overflow: hidden;
-        visibility: hidden;
-        width: 0;
+    .fieldset-wrapper .fieldset:last-child,
+    .fieldset .fieldset:last-child,
+    .fieldset .field:last-child {
+        margin-bottom: 0;
     }
 
-    span {
-        display: inline-block;
-        line-height: 1.33;
-        vertical-align: middle;
-        white-space: normal;
+    .fieldset .label {
+        color: #303030;
+        font-size: 14px;
+        font-weight: 600;
     }
-}
-.details-content > .field.required > .label,
-.fieldset > .field.required > .label {
-    &:after {
-        content:'';
+
+    .fieldset .control .label {
+        .style9();
+        padding-top: 0;
     }
-    padding-left: 1.5rem;
-    .form-inline & {
-        padding-left: 0;
+
+    .form-inline div:not([class*='fields-group']) > .field > .label,
+    .form-inline .fieldset > .field > .label {
+        color: #303030;
+        font-size: 14px;
+        font-weight: 600;
+        line-height: 3.2rem;
+        padding: 0 30px 0 0;
+        white-space: nowrap;
+        word-break: break-all;
+        &:before {
+            content: '.';
+            margin-left: -7px;
+            overflow: hidden;
+            visibility: hidden;
+            width: 0;
+        }
+
+        span {
+            display: inline-block;
+            line-height: 1.33;
+            vertical-align: middle;
+            white-space: normal;
+        }
     }
-    span {
+
+    .details-content > .field.required > .label,
+    .fieldset > .field.required > .label {
         &:after {
-            color: #e22626;
-            content: '*';
-            display: inline-block;
-            font-size: 1.6rem;
-            font-weight: 500;
-            left: 0;
-            line-height: 1;
-            position: absolute;
-            top: .2rem;
-            z-index: 1;
-            .form-inline & {
-                left: auto;
+            content:'';
+        }
+        padding-left: 1.5rem;
+        span {
+            &:after {
+                color: #eb5202;
+                content: '*';
+                display: inline-block;
+                font-size: 1.6rem;
+                font-weight: 500;
+                line-height: 1;
                 margin-left: 10px;
+                position: absolute;
                 top: 1.2rem;
+                z-index: 1;
             }
         }
     }
-}
 
+    .form-inline {
+        .details-content > .field.required > .label,
+        .fieldset > .field.required > .label {
+            padding-left: 0;
+            span {
+                &:after {
+                    left: auto;
+                    margin-left: 10px;
+                    top: 1.2rem;
+                }
+            }
+        }
+    }
 
-.with-addon .textarea {
-    margin: 0 0 6px;
-}
+    .with-addon .textarea {
+        margin: 0 0 6px;
+    }
 
-.fieldset .control .textarea,
-.fieldset .control .addon .textarea {
-    width: 100%;
-}
-.details-content > .field > input[type="checkbox"],
-.fieldset > .field > input[type="checkbox"] {
-    margin-top: 9px;
-}
+    .fieldset .control .textarea,
+    .fieldset .control .addon .textarea {
+        width: 100%;
+    }
+    .details-content > .field > input[type="checkbox"],
+    .fieldset > .field > input[type="checkbox"] {
+        margin-top: 9px;
+    }
 
-.fieldset-alt {
-    position: relative;
-    display: table-row;
-    border: 0;
-    padding: 0;
-    margin-bottom: 20px;
-    width: 100%;
-}
+    .fieldset-alt {
+        position: relative;
+        display: table-row;
+        border: 0;
+        padding: 0;
+        margin-bottom: 20px;
+        width: 100%;
+    }
 
-.fieldset-alt > .field {
-    display: table-cell;
-    vertical-align: top;
-    padding-right: 4%;
-}
+    .fieldset-alt > .field {
+        display: table-cell;
+        vertical-align: top;
+        padding-right: 4%;
+    }
 
-.fieldset-alt > .field.no-display {
-    display: none;
-}
+    .fieldset-alt > .field.no-display {
+        display: none;
+    }
 
-.fieldset-alt .field > .label {
-    display: block;
-    width: 100%;
-    clear: both;
-    text-align: left;
-    margin: 0 0 10px;
-}
+    .fieldset-alt .field > .label {
+        display: block;
+        width: 100%;
+        clear: both;
+        text-align: left;
+        margin: 0 0 10px;
+    }
 
-.fieldset-alt .label + .control {
-    width: 100%;
-}
+    .fieldset-alt .label + .control {
+        width: 100%;
+    }
 
-.fieldset-alt .field-option-title {
-    width: 50%;
-}
+    .fieldset-alt .field-option-title {
+        width: 50%;
+    }
 
-.fieldset .tooltip .help {
-    margin: 5px 0 0 15px;
-    display: inline-block;
-}
+    .fieldset .tooltip .help {
+        margin: 5px 0 0 15px;
+        display: inline-block;
+    }
 
-.fieldset-alt .field-option-store-view {
-    width: 20%;
-}
+    .fieldset-alt .field-option-store-view {
+        width: 20%;
+    }
 
-.fieldset-alt .field-option-input-type {
-    width: 20%;
-}
+    .fieldset-alt .field-option-input-type {
+        width: 20%;
+    }
 
-.fieldset-alt .field-option-input-type select {
-    width: 100%;
-}
+    .fieldset-alt .field-option-input-type select {
+        width: 100%;
+    }
 
-.fieldset-alt .field-option-req {
-    width: 105px;
-    white-space: nowrap;
-}
+    .fieldset-alt .field-option-req {
+        width: 105px;
+        white-space: nowrap;
+    }
 
-.fieldset-alt .field-option-req .control {
-    position: relative;
-    top: 32px;
-}
+    .fieldset-alt .field-option-req .control {
+        position: relative;
+        top: 32px;
+    }
 
-.fieldset-alt .field-option-position,
-.fieldset-alt .field-option-position .control {
-    width: 60px;
-}
+    .fieldset-alt .field-option-position,
+    .fieldset-alt .field-option-position .control {
+        width: 60px;
+    }
 
-/* "Use default" checkbox */
-.use-default {
+    // "Use default" checkbox
+    .use-default {
 
-}
+    }
 
-.use-default-control {
-    display: none;
-}
-
-.use-default-label {
-    cursor: pointer;
-    text-decoration: underline;
-    font-size: 11px;
-    color: #a29c94;
-}
+    .use-default-control {
+        display: none;
+    }
 
-.use-default-label:hover {
-    color: #7e7e7e;
-}
+    .use-default-label {
+        cursor: pointer;
+        text-decoration: underline;
+        font-size: 11px;
+        color: #a29c94;
+    }
 
-/*
-    Custom Multiselect
--------------------------------------- */
-.multiselect-alt {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-    border: 1px solid #ccc;
-    border-radius: 5px;
-    color: #333;
-}
+    .use-default-label:hover {
+        color: #7e7e7e;
+    }
 
-.multiselect-alt .item {
-    position: relative;
-    border-top: 1px solid #fff;
-    cursor: pointer;
-}
+    //
+    //  Custom Multiselect
+    //  --------------------------------------
 
-.multiselect-alt .item:first-child {
-    border-top: 0;
-}
+    .multiselect-alt {
+        margin: 0;
+        padding: 0;
+        list-style: none;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        color: #333;
+    }
 
-.multiselect-alt .item.selected {
-    background: #d7ebf5;
-}
+    .multiselect-alt .item {
+        position: relative;
+        border-top: 1px solid #fff;
+        cursor: pointer;
+    }
 
-.multiselect-alt .item.selected:hover {
-    background: #afdef2;
-}
+    .multiselect-alt .item:first-child {
+        border-top: 0;
+    }
 
-.multiselect-alt label {
-    display: block;
-    cursor: pointer;
-    padding: 6px 25px 5px;
-}
+    .multiselect-alt .item.selected {
+        background: #d7ebf5;
+    }
 
-.multiselect-alt .item.selected label:before {
-    position: absolute;
-    left: 8px;
-    top: 1px;
-    bottom: 0;
-    width: 10px;
-    line-height: 28px;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    content: '\e01e'; /* checked icon */
-    text-align: center;
-    color: #7ba4b1;
-    font-size: 9px;
-    text-shadow: 0 -1px 1px #60727b;
-}
+    .multiselect-alt .item.selected:hover {
+        background: #afdef2;
+    }
 
-.multiselect-alt input[type="checkbox"] {
-    width: 0;
-    height: 0;
-    opacity: 0;
-    margin: 0;
-    padding: 0;
-}
+    .multiselect-alt label {
+        display: block;
+        cursor: pointer;
+        padding: 6px 25px 5px;
+    }
 
-//
-//    Form item with table
-// --------------------------------------
+    .multiselect-alt .item.selected label:before {
+        position: absolute;
+        left: 8px;
+        top: 1px;
+        bottom: 0;
+        width: 10px;
+        line-height: 28px;
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        speak: none;
+        font-weight: normal;
+        -webkit-font-smoothing: antialiased;
+        content: '\e01e'; // checked icon
+        text-align: center;
+        color: #7ba4b1;
+        font-size: 9px;
+        text-shadow: 0 -1px 1px #60727b;
+    }
 
-.with-table {
-    .label {
-        float: none;
-        text-align: left;
-        width: 100%;
+    .multiselect-alt input[type="checkbox"] {
+        width: 0;
+        height: 0;
+        opacity: 0;
+        margin: 0;
+        padding: 0;
     }
-    .control {
-        clear: left;
-        float: none;
-        width: 100%;
+
+    //
+    //  Form item with table
+    //  --------------------------------------
+
+    .with-table {
+        .label {
+            float: none;
+            text-align: left;
+            width: 100%;
+        }
+        .control {
+            clear: left;
+            float: none;
+            width: 100%;
+        }
     }
-}
 
-//
-//    Form currency label
-// --------------------------------------
+    //
+    //  Form currency label
+    //  --------------------------------------
 
-.addon {
-    input[type="text"] {
-        border-width: 1px 1px 1px 0;
-        ~ .addafter strong {
-            .field-price & {
-                font-size: 18px;
+    .addon {
+        input[type="text"] {
+            border-width: 1px 1px 1px 0;
+            ~ .addafter strong {
+                display: inline-block;
+                background: #fff;
+                line-height: 24px;
+                margin: 0 3px 0 0;
+                padding-left: 4px;
+                padding-right: 4px;
+                position: relative;
+                font-size: 14px;
+                font-weight: 400;
+                color: #858585;
+                top: 0;
             }
-            display: inline-block;
-            background: #fff;
-            line-height: 24px;
-            margin: 0 3px 0 0;
-            padding-left: 4px;
-            padding-right: 4px;
-            position: relative;
-            font-size: 14px;
-            font-weight: 400;
-            color: #858585;
-            top: 0;
-        }
-        &:focus ~ .addafter {
-            border-color: #007bdb;
-            strong {
-                margin-top: 0;
+            &:focus ~ .addafter {
+                border-color: #007bdb;
+                strong {
+                    margin-top: 0;
+                }
             }
         }
-    }
-    .addafter {
-        background: none;
-        color: #a6a6a6;
-        border-width: 1px 1px 1px 0;
-        border-radius: 1px 1px 0 0;
-        padding: 0;
-        border-color: #ada89e;
-    }
-    input[type="text"],
-    select {
-        &[disabled],
-        &[readonly] {
-            ~ .addafter {
-                border-color: #eee;
-                color: #999;
+        .addafter {
+            background: none;
+            color: #a6a6a6;
+            border-width: 1px 1px 1px 0;
+            border-radius: 1px 1px 0 0;
+            padding: 0;
+            border-color: #ada89e;
+        }
+        input[type="text"],
+        select {
+            &[disabled],
+            &[readonly] {
+                ~ .addafter {
+                    background-color: #e9e9e9;
+                    border-color: #adadad;
+                    color: #303030;
+                    opacity: .5;
+                    cursor: not-allowed;
+                }
             }
         }
+        .pager input {
+            border-width: 1px;
+        }
     }
-    .pager input {
-        border-width: 1px;
+
+    .field-price .addon input[type="text"] ~ .addafter strong {
+        font-size: 18px;
     }
-}
 
-.field-weight {
-    .addon {
-        input[type="text"] {
-            border-width: 1px 0 1px 1px;
+    .field-weight,
+    .field-base_price {
+        .addon {
+            input[type="text"] {
+                border-width: 1px 0 1px 1px;
+            }
         }
     }
-}
-
-.field.type-price .addon,
-.field-price .addon,
-.field-special_price .addon,
-.field-msrp .addon {
-    direction: rtl;
-}
-
-.field.type-price .addon > *,
-.field-price .addon > *,
-.field-special_price .addon > *,
-.field-msrp .addon > * {
-    direction: ltr;
-}
-
-.field.type-price .addon .addafter,
-.field-price .addon .addafter,
-.field-special_price .addon .addafter,
-.field-msrp .addon .addafter {
-    border-width: 1px 0 1px 1px;
-    border-radius: 1px 0 0 1px;
-}
-
-.field.type-price .addon input[type=text]:first-child,
-.field-price .addon input[type=text]:first-child,
-.field-special_price .addon input[type=text]:first-child,
-.field-msrp .addon input[type=text]:first-child {
-    border-radius: 0 1px 1px 0;
-}
-
-.field.type-price input:focus,
-.field-price input:focus,
-.field-special_price input:focus,
-.field-msrp input:focus {
-    border-color: #007bdb;
-}
 
-.field.type-price input:focus ~ label.addafter,
-.field-price input:focus ~ label.addafter,
-.field-special_price input:focus ~ label.addafter,
-.field-msrp input:focus ~ label.addafter {
-    border-color: #007bdb;
-}
-
-.field.type-price input ~ label.addafter strong,
-.field-price input ~ label.addafter strong,
-.field-special_price input ~ label.addafter strong,
-.field-msrp input ~ label.addafter strong,
-.field-gift_wrapping_price input ~ label.addafter strong {
-    margin-left: 2px;
-    margin-right: -2px;
-}
+    .field.type-price .addon,
+    .field-price .addon,
+    .field-special_price .addon,
+    .field-msrp .addon {
+        direction: rtl;
+    }
 
-/*
-    Details element
--------------------------------------- */
-summary {
-    cursor: pointer;
-    display: inline-block;
-}
+    .field.type-price .addon > *,
+    .field-price .addon > *,
+    .field-special_price .addon > *,
+    .field-msrp .addon > * {
+        direction: ltr;
+    }
 
-.no-details details > * {
-    display: none;
-}
+    .field.type-price .addon .addafter,
+    .field-price .addon .addafter,
+    .field-special_price .addon .addafter,
+    .field-msrp .addon .addafter {
+        border-width: 1px 0 1px 1px;
+        border-radius: 1px 0 0 1px;
+    }
 
-.no-details details > summary:before {
-    float: left;
-    width: 20px;
-    content: 'â–º ';
-}
+    .field.type-price .addon input[type=text]:first-child,
+    .field-price .addon input[type=text]:first-child,
+    .field-special_price .addon input[type=text]:first-child,
+    .field-msrp .addon input[type=text]:first-child {
+        border-radius: 0 1px 1px 0;
+    }
 
-.no-details details.open > summary:before {
-    content: 'â–¼ ';
-}
+    .field.type-price input:focus,
+    .field-price input:focus,
+    .field-special_price input:focus,
+    .field-msrp input:focus {
+        border-color: #007bdb;
+    }
 
-.no-details details summary {
-    display: block;
-}
+    .field.type-price input:focus ~ label.addafter,
+    .field-price input:focus ~ label.addafter,
+    .field-special_price input:focus ~ label.addafter,
+    .field-msrp input:focus ~ label.addafter {
+        border-color: #007bdb;
+    }
 
-/*
-    Blockquotes
--------------------------------------- */
-blockquote {
-    border-left: 2px solid #ccc;
-    padding-left: 5px;
-}
+    .field.type-price input ~ label.addafter strong,
+    .field-price input ~ label.addafter strong,
+    .field-special_price input ~ label.addafter strong,
+    .field-msrp input ~ label.addafter strong,
+    .field-gift_wrapping_price input ~ label.addafter strong {
+        margin-left: 2px;
+        margin-right: -2px;
+    }
 
-blockquote small:before {
-    content: '\2014 \00A0';
-}
+    //
+    //  Details element
+    //  --------------------------------------
 
-/*
-    Addresses
--------------------------------------- */
-address {
-    font-style: normal;
-}
+    summary {
+        cursor: pointer;
+        display: inline-block;
+    }
 
-/*
-    X-tree styles
--------------------------------------- */
-.x-tree-node .leaf .x-tree-node-icon {
-    background-image: url(../images/fam_leaf.png);
-}
+    .no-details details > * {
+        display: none;
+    }
 
-.x-tree-node .system-leaf .x-tree-node-icon {
-    background-image: url(../images/fam_application_form_delete.png);
-}
+    .no-details details > summary:before {
+        float: left;
+        width: 20px;
+        content: 'â–º ';
+    }
 
-/*
-    Styles for "js" tooltip with positionings
--------------------------------------- */
-.tipsy {
-    padding: 11px;
-}
+    .no-details details.open > summary:before {
+        content: 'â–¼ ';
+    }
 
-.tipsy-inner {
-    padding: 12px 15px;
-    max-width: 185px;
-    background: #faf8f6;
-    border: 1px solid #dcd8ce;
-    box-shadow: 0 2px 5px rgba(49, 48, 43, .4);
-}
+    .no-details details summary {
+        display: block;
+    }
 
-.tipsy-inner .error {
-    width: 158px;
-}
+    //
+    //  Blockquotes
+    //  --------------------------------------
 
-.tipsy-inner .error h5 {
-    color: #be0a0a;
-    font-size: 16px;
-    font-weight: 500;
-    margin: 0 0 6px;
-}
+    blockquote {
+        border-left: 2px solid #ccc;
+        padding-left: 5px;
+    }
 
-.tipsy-inner .error p {
-    color: #676056;
-    line-height: 1.5;
-    margin: 0;
-}
+    blockquote small:before {
+        content: '\2014 \00A0';
+    }
 
-.tipsy-e .tipsy-arrow {
-    top: 50%;
-    left: 1px;
-    margin-top: -10px;
-    border-top: 10px solid transparent;
-    border-right: 10px solid #dcd8ce;
-    border-bottom: 10px solid transparent;
-    border-left: none;
-}
+    //
+    //  Addresses
+    //  --------------------------------------
 
-.tipsy-w .tipsy-arrow {
-    top: 50%;
-    right: 0;
-    margin-top: -10px;
-    border-top: 10px solid transparent;
-    border-right: none;
-    border-bottom: 10px solid transparent;
-    border-left: 10px solid #dcd8ce;
-}
+    address {
+        font-style: normal;
+    }
 
-.tipsy-n .tipsy-arrow,
-.tipsy-ne .tipsy-arrow,
-.tipsy-nw .tipsy-arrow {
-    bottom: 1px;
-    border-top: 10px solid #dcd8ce;
-    border-right: 10px solid transparent;
-    border-bottom: none;
-    border-left: 10px solid transparent;
-}
+    //
+    //  X-tree styles
+    //  --------------------------------------
 
-.tipsy-ne .tipsy-arrow {
-    left: 16px;
-}
+    .x-tree-node .leaf .x-tree-node-icon {
+        background-image: url(../images/fam_leaf.png);
+    }
 
-.tipsy-nw .tipsy-arrow {
-    right: 16px;
-}
+    .x-tree-node .system-leaf .x-tree-node-icon {
+        background-image: url(../images/fam_application_form_delete.png);
+    }
 
-.tipsy-s .tipsy-arrow,
-.tipsy-se .tipsy-arrow,
-.tipsy-sw .tipsy-arrow {
-    top: 1px;
-    border-left: 10px solid transparent;
-    border-right: 10px solid transparent;
-    border-bottom: 10px solid #dcd8ce;
-    border-top: none;
-}
+    //
+    //  Styles for "js" tooltip with positionings
+    //  --------------------------------------
 
-.tipsy-se .tipsy-arrow {
-    left: 16px;
-}
+    .tipsy {
+        padding: 11px;
+    }
 
-.tipsy-sw .tipsy-arrow {
-    right: 16px;
-}
+    .tipsy-inner {
+        padding: 12px 15px;
+        max-width: 185px;
+        background: #faf8f6;
+        border: 1px solid #dcd8ce;
+        box-shadow: 0 2px 5px rgba(49, 48, 43, .4);
+    }
 
-.tipsy-arrow:after,
-.tipsy-arrow:before {
-    position: absolute;
-    width: 0;
-    height: 0;
-    content: '';
-}
+    .tipsy-inner .error {
+        width: 158px;
+    }
 
-.tipsy-e .tipsy-arrow:after {
-    top: -5px;
-    left: 2px;
-    margin-top: -4px;
-    border-top: 9px solid transparent;
-    border-right: 9px solid #faf8f6;
-    border-bottom: 9px solid transparent;
-}
+    .tipsy-inner .error h5 {
+        color: #be0a0a;
+        font-size: 16px;
+        font-weight: 500;
+        margin: 0 0 6px;
+    }
 
-.tipsy-e .tipsy-arrow:before {
-    top: -8px;
-    margin-top: 0;
-    border-top: 10px solid transparent;
-    border-right: 10px solid rgba(49, 48, 43, .1);
-    border-bottom: 10px solid transparent;
-}
+    .tipsy-inner .error p {
+        color: #676056;
+        line-height: 1.5;
+        margin: 0;
+    }
 
-.tipsy-w .tipsy-arrow:after {
-    top: -5px;
-    left: -12px;
-    margin-top: -4px;
-    border-top: 9px solid transparent;
-    border-right: none;
-    border-bottom: 9px solid transparent;
-    border-left: 9px solid #faf8f6;
-}
+    .tipsy-e .tipsy-arrow {
+        top: 50%;
+        left: 1px;
+        margin-top: -10px;
+        border-top: 10px solid transparent;
+        border-right: 10px solid #dcd8ce;
+        border-bottom: 10px solid transparent;
+        border-left: none;
+    }
 
-.tipsy-w .tipsy-arrow:before {
-    top: -8px;
-    left: -10px;
-    margin-top: 0;
-    border-top: 10px solid transparent;
-    border-right: none;
-    border-bottom: 10px solid transparent;
-    border-left: 10px solid rgba(49, 48, 43, .1);
-}
+    .tipsy-w .tipsy-arrow {
+        top: 50%;
+        right: 0;
+        margin-top: -10px;
+        border-top: 10px solid transparent;
+        border-right: none;
+        border-bottom: 10px solid transparent;
+        border-left: 10px solid #dcd8ce;
+    }
 
-.tipsy-n .tipsy-arrow:after,
-.tipsy-ne .tipsy-arrow:after,
-.tipsy-nw .tipsy-arrow:after {
-    margin-top: -4px;
-    left: -9px;
-    top: -7px;
-    border-top: 9px solid #faf8f6;
-    border-right: 9px solid transparent;
-    border-left: 9px solid transparent;
-}
+    .tipsy-n .tipsy-arrow,
+    .tipsy-ne .tipsy-arrow,
+    .tipsy-nw .tipsy-arrow {
+        bottom: 1px;
+        border-top: 10px solid #dcd8ce;
+        border-right: 10px solid transparent;
+        border-bottom: none;
+        border-left: 10px solid transparent;
+    }
 
-.tipsy-n .tipsy-arrow:before,
-.tipsy-ne .tipsy-arrow:before,
-.tipsy-nw .tipsy-arrow:before {
-    left: -10px;
-    top: -8px;
-    margin-top: 0;
-    border-top: 10px solid rgba(49, 48, 43, .1);
-    border-right: 10px solid transparent;
-    border-left: 10px solid transparent;
-}
+    .tipsy-ne .tipsy-arrow {
+        left: 16px;
+    }
 
-.tipsy-s .tipsy-arrow:after,
-.tipsy-sw .tipsy-arrow:after,
-.tipsy-se .tipsy-arrow:after {
-    left: -9px;
-    top: 6px;
-    margin-top: -4px;
-    border-top: none;
-    border-right: 9px solid transparent;
-    border-bottom: 9px solid #faf8f6;
-    border-left: 9px solid transparent;
-}
+    .tipsy-nw .tipsy-arrow {
+        right: 16px;
+    }
 
-.tipsy-inner dl {
-    margin: 0;
-}
+    .tipsy-s .tipsy-arrow,
+    .tipsy-se .tipsy-arrow,
+    .tipsy-sw .tipsy-arrow {
+        top: 1px;
+        border-left: 10px solid transparent;
+        border-right: 10px solid transparent;
+        border-bottom: 10px solid #dcd8ce;
+        border-top: none;
+    }
 
-.tipsy-inner dt {
-    margin: 0 0 4px;
-    font-size: 16px;
-    font-weight: 400;
-    color: #f47b20;
-}
+    .tipsy-se .tipsy-arrow {
+        left: 16px;
+    }
 
-.tipsy-inner dd {
-    margin: 0;
-    color: #676056;
-    font-size: 12px;
-    line-height: 18px;
-    font-family: Arial, Helvetica, sans-serif;
-}
+    .tipsy-sw .tipsy-arrow {
+        right: 16px;
+    }
 
-/*
-    Popups
--------------------------------------- */
-.fade .popup {
-    padding: 0;
-    border: 5px solid #969288;
-    border-radius: 8px;
-}
+    .tipsy-arrow:after,
+    .tipsy-arrow:before {
+        position: absolute;
+        width: 0;
+        height: 0;
+        content: '';
+    }
 
-.wrapper-popup {
-    padding: 0 10px;
-}
+    .tipsy-e .tipsy-arrow:after {
+        top: -5px;
+        left: 2px;
+        margin-top: -4px;
+        border-top: 9px solid transparent;
+        border-right: 9px solid #faf8f6;
+        border-bottom: 9px solid transparent;
+    }
 
-.fade .popup .popup-inner {
-    padding: 20px;
-    border-radius: 3px;
-}
+    .tipsy-e .tipsy-arrow:before {
+        top: -8px;
+        margin-top: 0;
+        border-top: 10px solid transparent;
+        border-right: 10px solid rgba(49, 48, 43, .1);
+        border-bottom: 10px solid transparent;
+    }
 
-.fade .popup .popup-title {
-    margin: 0 0 10px;
-}
+    .tipsy-w .tipsy-arrow:after {
+        top: -5px;
+        left: -12px;
+        margin-top: -4px;
+        border-top: 9px solid transparent;
+        border-right: none;
+        border-bottom: 9px solid transparent;
+        border-left: 9px solid #faf8f6;
+    }
 
-.popup-loading {
-    position: fixed;
-    z-index: 1003;
-    width: 200px;
-    background: rgba(255, 255, 255, .8);
-    left: 50%;
-    top: 40%;
-    margin-left: -100px;
-    color: #d85909;
-    border-color: #d85909;
-    font-size: 14px;
-    font-weight: bold;
-    text-align: center;
-    padding: 100px 0 10px;
-}
+    .tipsy-w .tipsy-arrow:before {
+        top: -8px;
+        left: -10px;
+        margin-top: 0;
+        border-top: 10px solid transparent;
+        border-right: none;
+        border-bottom: 10px solid transparent;
+        border-left: 10px solid rgba(49, 48, 43, .1);
+    }
 
-.popup-loading:after {
-    position: absolute;
-    left: 50%;
-    top: 40%;
-    background-image: url(../mui/images/ajax-loader-big.gif);
-    width: 64px;
-    height: 64px;
-    margin: -32px 0 0 -32px;
-    content: '';
-    z-index: 2;
-}
+    .tipsy-n .tipsy-arrow:after,
+    .tipsy-ne .tipsy-arrow:after,
+    .tipsy-nw .tipsy-arrow:after {
+        margin-top: -4px;
+        left: -9px;
+        top: -7px;
+        border-top: 9px solid #faf8f6;
+        border-right: 9px solid transparent;
+        border-left: 9px solid transparent;
+    }
 
-/* Loading mask */
-.loading-old,
-.loading-mask {
-    background: rgba(255, 255, 255, .4);
-    z-index: 999;
-}
+    .tipsy-n .tipsy-arrow:before,
+    .tipsy-ne .tipsy-arrow:before,
+    .tipsy-nw .tipsy-arrow:before {
+        left: -10px;
+        top: -8px;
+        margin-top: 0;
+        border-top: 10px solid rgba(49, 48, 43, .1);
+        border-right: 10px solid transparent;
+        border-left: 10px solid transparent;
+    }
 
-.loading-old,
-.loading-mask {
-    position: fixed;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
-}
+    .tipsy-s .tipsy-arrow:after,
+    .tipsy-sw .tipsy-arrow:after,
+    .tipsy-se .tipsy-arrow:after {
+        left: -9px;
+        top: 6px;
+        margin-top: -4px;
+        border-top: none;
+        border-right: 9px solid transparent;
+        border-bottom: 9px solid #faf8f6;
+        border-left: 9px solid transparent;
+    }
 
-.loading-old .loader,
-.loading-mask .loader {
-    position: absolute;
-    margin: auto;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    width: 160px;
-    height: 160px;
-    color: #5e5b56;
-    font-size: 14px;
-    font-weight: bold;
-    text-align: center;
-    background: #e5e2dd url(../mui/images/ajax-loader-big.gif) no-repeat 50% 30%;
-    border-radius: 5px;
-    opacity: .95;
-}
+    .tipsy-inner dl {
+        margin: 0;
+    }
 
-.loading-mask img {
-    display: none;
-}
+    .tipsy-inner dt {
+        margin: 0 0 4px;
+        font-size: 16px;
+        font-weight: 400;
+        color: #f47b20;
+    }
 
-.loading-old p,
-.loading-mask p {
-    margin-top: 118px;
-}
+    .tipsy-inner dd {
+        margin: 0;
+        color: #676056;
+        font-size: 12px;
+        line-height: 18px;
+        font-family: Arial, Helvetica, sans-serif;
+    }
 
-/* Backup popup */
-/* TODO: remove after backups page js refactoring */
-.backup-dialog {
-    margin-top: inherit !important;
-}
+    // Backup popup
+    // TODO: remove after backups page js refactoring
+    .backup-dialog {
+        margin-top: inherit !important;
+    }
+//
+//  .side-col {
+//      box-sizing: border-box;
+//      padding-bottom: 20px;
+//      padding-right: 10px;
+//      position: relative;
+//      width: 25%;
+//  }
+//
+//  .main-col {
+//      position: relative;
+//      width: 75%;
+//      padding: 0 20px 20px;
+//      box-sizing: border-box;
+//  }
+
+    .col-left {
+        float: left;
+    }
 
-/*
-    Page Structure
--------------------------------------- */
-
-//.page-title-wrapper-wrapper.complex .title {
-//    float: left;
-//    width: 70%;
-//    overflow: hidden;
-//    text-overflow: ellipsis;
-//    white-space: nowrap;
-//}
-
-//.page-title-wrapper.complex .store-switcher-alt {
-//    float: right;
-//    margin: 12px 0 0;
-//}
-
-.side-col {
-    padding-bottom: 20px;
-    position: relative;
-    width: 20%;
-}
+    .col-right {
+        float: right;
+    }
 
-.main-col {
-    position: relative;
-    width: 80%;
-    padding: 0 20px 20px;
-    box-sizing: border-box;
-}
+    .col-1-layout {
+        .main-col {
+            width: auto;
+        }
+    }
 
-.col-left {
-    float: left;
-}
+    .col-2-left-layout,
+    .col-1-layout {
+        margin: 0 auto;
+        position: relative;
+    }
 
-.col-right {
-    float: right;
-}
+    .col-2-left-layout {
+        &:before {
+            position: absolute;
+            content: "";
+            background-color: #fff;
+            right:0;
+            top: 0;
+            bottom: 0;
+            min-width: 730px;
+            width: 80%;
+        }
+//      .main-col {
+//          padding-right: 0;
+//          padding-left: 0;
+//          float: right;
+//      }
+//      .side-col {
+//          float: left;
+//      }
+    }
 
-.col-1-layout {
-    .main-col {
-        width: auto;
+//  .col-2-right-layout {
+//      .side-col {
+//          float: right;
+//      }
+//      .main-col {
+//          float: left;
+//      }
+//  }
+
+    .col-2-left-layout .main-col,
+    .col-2-right-layout .main-col {
+        min-width: 730px;
     }
-}
 
-.col-2-left-layout,
-.col-1-layout {
-    background: #f7f3eb;
-    margin: 0 auto;
-    position: relative;
-}
+    //
+    //  Horizontal Tabs
+    //  --------------------------------------
 
-.col-2-left-layout {
-    padding-top: 20px;
-    &:before {
-        position: absolute;
-        content: "";
-        background-color: #fff;
-        right:0;
-        top: 0;
-        bottom: 0;
-        min-width: 730px;
-        width: 80%;
+    .ui-tabs {
+        clear: both;
+        margin-bottom: 0;
     }
-    .main-col {
-        padding-right: 0;
-        padding-left: 0;
-        float: right;
+    .tabs-horiz {
+        list-style: none;
+        margin: 0;
+        padding: 3px 0 0;
     }
-    .side-col {
+
+    .tabs-horiz > li {
         float: left;
+        margin: 0 5px 0 0;
     }
-}
 
-.col-2-right-layout {
-    .side-col {
-        float: right;
+    .tabs-horiz .ui-tabs-anchor {
+        position: relative;
+        display: block;
+        text-decoration: none;
+        .style7();
+        background: #e0dacf;
+        padding: 11px 15px 13px;
+        border-radius: 2px 2px 0 0;
     }
-    .main-col {
-        float: left;
+
+    .tabs-horiz > .ui-state-active .ui-tabs-anchor {
+        background: #fff;
     }
-}
 
-.col-2-left-layout .main-col,
-.col-2-right-layout .main-col {
-    min-width: 730px;
-}
+    //
+    //  Switcher
+    //  --------------------------------------
 
-/* Sidebar title */
-/* TODO: temporary styles */
-.side-col h3 {
-    padding: 0 17px;
-    margin-top: 16px;
-}
+    .switcher {
+        -webkit-touch-callout: none;
+        -webkit-user-select: none; // use in 41 Chrome
+        -moz-user-select: none; // use in 36 Firefox
+        -ms-user-select: none; // use in 11 IE
+        user-select: none;
+        cursor: pointer;
+        display: inline-block;
+        overflow: hidden;
+    }
 
-.side-col .ui-tabs h3 {
-    margin-bottom: 5px;
-    color: #524c44;
-    text-shadow: 0 1px 0 #fff;
-}
+    .switcher input[type="checkbox"] {
+        position: absolute;
+        left: -999em;
+    }
 
-//
-//    Universal Sidebar Tabs
-// --------------------------------------
-// TODO: for "Product" page only while refactoring */
-.side-col .ui-tabs .ui-accordion-header {
-    margin: 10px 0 0;
-    padding: 0;
-    &:focus {
-        outline: none;
-    }
-    span {
-        color: #524c44;
-        cursor: pointer;
-        display: block;
-        position: relative;
-        padding: 5px 20px;
-        text-shadow: 0 1px 0 #fff;
-        &:before {
-            position: absolute;
-            left: 4px;
-            top: 7px;
-            font-family: 'MUI-Icons';
-            font-style: normal;
-            speak: none;
-            font-weight: normal;
-            -webkit-font-smoothing: antialiased;
-            content: '\e02a'; // arrow right icon
-            font-size: 14px;
-            color: #ada79e;
-        }
+    .switcher-label {
+        .style2();
+        text-transform: uppercase;
     }
-    &:hover {
-        span:before {
-            color: #777;
-        }
+
+    .switcher-label:after {
+        display: inline-block;
+        margin-left: 10px;
+        vertical-align: bottom;
+        width: 34px;
+        height: 17px;
+        background: url(../images/switcher.png) no-repeat;
+        content: '';
     }
-    &-active span:before {
-        content: '\e02c'; // arrow down icon
+
+    .switcher input[type="checkbox"] + .switcher-label:before {
+        content: attr(data-text-off);
+        background: none;
+        border-radius: 0;
+        border: none;
+        float: none;
+        font-size: 14px;
+        height: auto;
+        line-height: normal;
+        margin: 0;
+        text-align: left;
+        width: auto;
     }
-}
 
-.side-col .tabs {
-    margin: 0 0 30px;
-    padding: 0;
-    list-style: none;
-    font-weight: 500;
-}
+    .switcher input[type="checkbox"]:focus + .switcher-label:after {
+        border-color: #007bdb;
+    }
 
-.side-col > .ui-tabs > .tabs:first-child > li:first-child > a {
-    border-top-left-radius: 5px;
-}
+    .switcher input[type="checkbox"]:checked + .switcher-label:after {
+        background-position: -34px 0;
+    }
 
-.side-col .tabs > li {
-    border-bottom: 1px solid #e5e1db;
-}
+    .switcher input[type="checkbox"]:checked + .switcher-label:before {
+        content: attr(data-text-on);
+    }
 
-.side-col .tabs > li:first-child {
-    border-top: 1px solid #e5e1db;
-}
+    //
+    //  Content actions panel (with buttons, switchers...)
+    //  --------------------------------------
 
-.side-col .tabs > li a {
-    position: relative;
-    display: block;
-    padding: 8px 18px;
-    text-decoration: none;
-    color: #676056;
-    transition: background .3s ease-in-out;
-}
+    // .page-actions {
+    //   padding: 0 0 20px;
+    //   text-align: right;
+    // }
 
-.side-col .tabs > li a:hover {
-    background: #fff;
-}
+    .page-actions .buttons-group {
+        vertical-align: top;
+        text-align: left;
+    }
 
-.side-col .tabs > .ui-state-active a {
-    border-left: 3px solid #d87e34;
-    padding-left: 15px;
-    background: #dedcd8;
-    box-shadow: 0 1px 2px #ccc inset;
-}
+    .page-actions > .switcher {
+        display: inline-block;
+        vertical-align: top;
+        margin: 6px 10px 0 0;
+    }
 
-.side-col .tabs > .ui-state-active a:after,
-.side-col .tabs > .ui-state-active a:before {
-    position: absolute;
-    top: 50%;
-    right: 0;
-    width: 14px;
-    margin-top: -14px;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    content: '\e02b'; /* left turned triangle icon */
-    font-size: 22px;
-    color: #fff;
-    overflow: hidden;
-    z-index: 4;
-}
+    // .main-col .page-actions {
+    //   padding: 20px 0;
+    // }
 
-.side-col .tabs > .ui-state-active a:before {
-    color: #bdbbb7;
-    margin-top: -13px;
-    z-index: 3;
-}
+    .catalog-product-index .page-actions {
+        padding-top: 0;
+    }
 
-.side-col .tabs span.error,
-.side-col .tabs span.loader {
-    display: none;
-    position: absolute;
-    right: 12px;
-    top: 7px;
-    width: 16px;
-    height: 16px;
-    font-size: 16px;
-}
+    [class^=" catalog-product-"] .store-scope .store-tree {
+        float: left;
+    }
 
-.side-col .tab-item-link.changed {
-    font-style: italic;
-}
+    // TODO: refactor trees
+    .x-tree ul {
+        margin: 0;
+        padding: 0;
+    }
 
-.side-col .tab-item-link.error span.error,
-.side-col .ui-tabs-loading span.loader {
-    display: block;
-}
+    .tree-wrapper {
+        width: 100%;
+        overflow: auto;
+        float: left; // Fixed Chrome scroll issue
+    }
 
-.side-col .tab-item-link.error span.error:after {
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    content: '\e006'; /* warning icon */
-    color: #d87e34;
-}
+    .page-actions.fixed .page-actions-inner:before {
+        content: attr(data-title);
+        float: left;
+        font-size: 20px;
+        max-width: 50%;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
 
-.side-col .ui-tabs-loading span.loader:after {
-    background: url(../mui/images/ajax-loader-small.gif) no-repeat 50% 50%;
-    display: block;
-    content: '';
-    width: 16px;
-    height: 16px;
-}
+    // Dynamic Grid
+    // Used in pages like Catalog -> Attributes
+    .dynamic-grid th {
+        padding: 2px;
+        width: 100px;
+    }
 
-/* TODO: styles for navigation on System > Configuration page */
+    .dynamic-grid td {
+        padding: 2px;
+    }
 
-/*
-    Horizontal Tabs
--------------------------------------- */
-.ui-tabs {
-    clear: both;
-}
-.tabs-horiz {
-    list-style: none;
-    margin: 0;
-    padding: 3px 0 0;
-}
+    .dynamic-grid td input {
+        width: 94px;
+    }
 
-.tabs-horiz > li {
-    float: left;
-    margin: 0 5px 0 0;
-}
+    tr.dynamic-grid td,
+    tr.dynamic-grid th {
+        padding: 2px 10px 2px 0;
+        width: auto;
+    }
 
-.tabs-horiz .ui-tabs-anchor {
-    position: relative;
-    display: block;
-    text-decoration: none;
-    .style7();
-    background: #e0dacf;
-    padding: 11px 15px 13px;
-    border-radius: 2px 2px 0 0;
-}
+    tr.dynamic-grid input.input-text {
+        width: 154px;
+    }
 
-.tabs-horiz > .ui-state-active .ui-tabs-anchor {
-    background: #fff;
-}
+    .available {
+        color: #080;
+        font-weight: bold;
+    }
 
-/*
-    System -> Configuration page navigation in sidebar
--------------------------------------- */
-.config-nav,
-.config-nav .items {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-}
+    .not-available {
+        color: #800;
+    }
 
-.config-nav-block {
+    .categories-side-col {
+        padding: 0 3%;
+    }
 
-}
+    //
+    //  Website store views tree
+    //  --------------------------------------
+    .store-tree {
+        .website-name {
+            font-size: 14px;
+            font-weight: bold;
+        }
+        .webiste-groups {
+            margin: 5px 0 20px 18px;
+            dt {
+                font-weight: bold;
+            }
+            dd {
+                margin: 5px 0 15px 15px;
+                > ul {
+                    list-style: none;
+                    margin: 0;
+                    padding: 0;
+                    > li {
+                        margin: 0 0 5px;
+                    }
+                }
+            }
+        }
+    }
 
-.config-nav-block:last-child {
-    margin-bottom: 30px;
-}
+    //
+    //  Customer Reviews
+    //  --------------------------------------
+    .field-detailed_rating {
+        .control-value {
+            padding: 0;
+        }
+        .nested {
+            padding: 0;
+        }
+        .field-rating {
+            margin: 15px 0 0;
+            &:first-child {
+                margin-top: 0;
+            }
+            .label {
+                width: 75px;
+            }
+            .control {
+                unicode-bidi: bidi-override;
+                direction: rtl;
+                width: 125px;
+                label {
+                    color: #ccc;
+                    cursor: pointer;
+                    font-size: 18px;
+                    float: right;
+                    overflow: hidden;
+                    white-space: nowrap;
+                    width: 18px;
+                    transition: color 150ms linear;
+                    &:before {
+                        display: none;
+                    }
+                }
+            }
+        }
+        input[type="radio"] {
+            display: none;
+        }
+    }
 
-.config-nav .item {
-    border-top: 1px solid #E5E1DB;
-}
+    //
+    //  Tree Store Scope
+    //  --------------------------------------
+    .tree-store-scope {
+        .buttons-set {
+            margin-bottom: 9px;
+            button {
+                margin-right: 4px;
+            }
+        }
+        .field {
+            margin: 0 0 5px;
+            input[type="checkbox"] {
+                margin-right: 8px;
+                position: relative;
+                top: 2px;
+            }
+            .addafter {
+                display: inline-block;
+                padding-top: 6px;
+            }
+        }
+        [class^="field field-website_"] .label,
+        [class^="field field-group_"] .label,
+        [class^="field field-w_"] .label,
+        [class^="field field-sg_"] .label {
+            text-align: left;
+            font-size: 18px;
+            padding-right: 0;
+            width: auto;
+        }
+        [class^="field field-group_"] .label,
+        [class^="field field-sg_"] .label {
+            padding-left: 20px;
+        }
+        .tooltip .help {
+            margin-top: 11px;
+        }
+    }
 
-.config-nav .item:first-child {
-    border-top: 0;
-}
+    //
+    //  Widgets
+    //  --------------------------------------
+    .widget-layout-updates .fieldset-wrapper,
+    .widget-layout-updates .data-table {
+        margin: 0 0 18px;
+    }
 
-.config-nav .title {
-    margin-bottom: 0;
-    text-transform: uppercase;
-    color: #444;
-    border: solid #CCC;
-    border-width: 1px 0;
-    opacity: .8;
-    padding: 7px 17px;
-    background: #E6E3DE;
-}
+    .widget-layout-updates .fieldset-wrapper-title label {
+        &:not(.mage-error) {
+            padding: 10px 0 0;
+        }
+    }
 
-.config-nav .item-nav {
-    display: block;
-    padding: 8px 18px;
-    text-decoration: none;
-    color: #676056;
-    transition: background .3s ease-in-out;
-}
+    .widget-layout-updates .fieldset-wrapper-title select {
+        margin: 3px 10px 5px;
+    }
 
-.config-nav .item-nav:hover {
-    background: #fff;
-}
+    .widget-layout-updates .fieldset-wrapper-title span,
+    .widget-layout-updates .fieldset-wrapper-title select {
+        vertical-align: middle;
+    }
 
-.config-nav .item-nav.active {
-    position: relative;
-    border-left: 3px solid #d87e34;
-    padding-left: 15px;
-    background: #dedcd8;
-    box-shadow: 0 1px 2px #ccc inset;
-}
+    .widget-layout-updates .data-table {
+        table-layout: fixed;
+    }
 
-.config-nav .item-nav.active:after {
-    position: absolute;
-    top: 50%;
-    right: 0;
-    width: 14px;
-    margin-top: -14px;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    content: '\e02b'; /* left turned triangle icon */
-    font-size: 22px;
-    text-shadow: -1px 1px 0 #bdbbb7;
-    color: #fff;
-    overflow: hidden;
-    z-index: 3;
-}
+    .widget-layout-updates .data-table,
+    .widget-layout-updates .data-table tr:nth-child(odd) td,
+    .widget-layout-updates .data-table tr:nth-child(odd):hover td {
+        background: none;
+        border: none;
+    }
 
+    .widget-layout-updates .data-table th,
+    .widget-layout-updates .data-table tbody td {
+        border: none;
+        padding: 5px 10px;
+    }
 
-/*
-    Switcher
--------------------------------------- */
-.switcher {
-    -webkit-touch-callout: none;
-    -webkit-user-select: none; // use in 41 Chrome
-    -moz-user-select: none; // use in 36 Firefox
-    -ms-user-select: none; // use in 11 IE
-    user-select: none;
-    cursor: pointer;
-    display: inline-block;
-    overflow: hidden;
-}
+    .widget-layout-updates .data-table select {
+        margin: 0;
+        max-width: 99%;
+        overflow: hidden;
+    }
 
-.switcher input[type="checkbox"] {
-    position: absolute;
-    left: -999em;
-}
+    .widget-layout-updates .chooser_container {
+        padding: 0 10px;
+        margin-bottom: 18px;
+    }
 
-.switcher-label {
-    .style2();
-    text-transform: uppercase;
-}
+    .widget-layout-updates .chooser_container p {
+        margin: 0 0 18px;
+    }
 
-.switcher-label:after {
-    display: inline-block;
-    margin-left: 10px;
-    vertical-align: bottom;
-    width: 34px;
-    height: 17px;
-    background: url(../images/switcher.png) no-repeat;
-    content: '';
-}
+    .widget-layout-updates .chooser_container p img,
+    .widget-layout-updates .chooser_container p input {
+        vertical-align: middle;
+    }
 
-.switcher input[type="checkbox"] + .switcher-label:before {
-    content: attr(data-text-off);
-    background: none;
-    border-radius: 0;
-    border: none;
-    float: none;
-    font-size: 14px;
-    height: auto;
-    line-height: normal;
-    margin: 0;
-    text-align: left;
-    width: auto;
-}
+    //
+    //  Preview window
+    //  --------------------------------------
 
-.switcher input[type="checkbox"]:focus + .switcher-label:after {
-    border-color: #007bdb;
-}
+    .preview-window {
+        background: #fff;
+    }
 
-.switcher input[type="checkbox"]:checked + .switcher-label:after {
-    background-position: -34px 0;
-}
+    .preview-window .toolbar {
+        background: #f5f2ed;
+        padding: 20px;
+    }
 
-.switcher input[type="checkbox"]:checked + .switcher-label:before {
-    content: attr(data-text-on);
-}
+    .preview-window .toolbar .switcher {
+        margin: 0;
+    }
 
-/*
-    Content actions panel (with buttons, switchers...)
--------------------------------------- */
-// .page-actions {
-//     padding: 0 0 20px;
-//     text-align: right;
-// }
-
-.page-actions .buttons-group {
-    vertical-align: top;
-    text-align: left;
-}
+    .preview-window .toolbar .switcher span {
+        background: none;
+        width: auto;
+    }
 
-.page-actions > .switcher {
-    display: inline-block;
-    vertical-align: top;
-    margin: 6px 10px 0 0;
-}
+    //
+    //  Global 'No Products found' block
+    //  --------------------------------------
 
-// .main-col .page-actions {
-//     padding: 20px 0;
-// }
+    .no-products-message {
+        background: #fbfaf6;
+        padding: 12px;
+        text-align: center;
+        font-size: 12px;
+        color: #666;
+        margin-bottom: 13px;
+    }
 
-.catalog-product-index .page-actions {
-    padding-top: 0;
-}
+    //
+    //  WYSIWYG
+    //  --------------------------------------
 
-[class^=" catalog-product-"] .store-scope .store-tree {
-    float: left;
-}
+    .action-wysiwyg {
+        margin: 10px 0;
+    }
 
-// TODO: refactor trees
-.x-tree ul {
-    margin: 0;
-    padding: 0;
-}
+    #catalog-wysiwyg-editor .buttons-set {
+        margin-bottom: 9px;
+    }
 
-.tree-wrapper {
-    width: 100%;
-    overflow: auto;
-    float: left; // Fixed Chrome scroll issue
-}
+    #catalog-wysiwyg-editor .buttons-set button {
+        margin-right: 4px;
+    }
 
-.page-actions.fixed .page-actions-inner:before {
-    content: attr(data-title);
-    float: left;
-    font-size: 20px;
-    max-width: 50%;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-}
+    //
+    //  Add Attribute Popup
+    //  --------------------------------------
 
-/* Dynamic Grid */
-/* Used in pages like Catalog -> Attributes */
-.dynamic-grid th {
-    padding: 2px;
-    width: 100px;
-}
+    #create_new_attribute {
+        overflow: hidden;
+    }
 
-.dynamic-grid td {
-    padding: 2px;
-}
+    #create_new_attribute > .loading-mask {
+        left: -25px;
+        top: -50px;
+    }
 
-.dynamic-grid td input {
-    width: 94px;
-}
+    .attribute-popup {
+        background: none;
+    }
 
-tr.dynamic-grid td,
-tr.dynamic-grid th {
-    padding: 2px 10px 2px 0;
-    width: auto;
-}
+    .attribute-popup #edit_form {
+        display: block;
+        > div:last-of-type {
+            margin-bottom: 150px;
+        }
+    }
 
-tr.dynamic-grid input.input-text {
-    width: 154px;
-}
+    .attribute-popup #edit_form > .fieldset > .legend {
+        display: none;
+    }
 
-.available {
-    color: #080;
-    font-weight: bold;
-}
+    .attribute-popup .wrapper-popup {
+        padding: 0;
+        height: 511px;
+        overflow-x: hidden;
+        overflow-y: auto;
+    }
 
-.not-available {
-    color: #800;
-}
+    .attribute-popup .fieldset,
+    .attribute-popup .fieldset-wrapper {
+        border: none;
+        border-radius: 0;
+        padding: 4px 0 20px;
+        margin: 0 23px 20px;
+    }
 
-.categories-side-col {
-    padding: 0 3%;
-}
+    .attribute-popup .fieldset-wrapper {
+        border-top: none;
+    }
 
-//
-//    Website store views tree
-// --------------------------------------
-.store-tree {
-    .website-name {
+    .attribute-popup .fieldset-wrapper:not(.collapsable-wrapper) .fieldset-wrapper-title {
+        border-bottom: none;
+    }
+
+    .attribute-popup .fieldset-wrapper .fieldset-wrapper-content > .fieldset {
+        margin-left: 0;
+        margin-right: 0;
+    }
+
+    .attribute-popup .fieldset > .field > input[type="checkbox"] {
+        margin-top: 7px;
+    }
+
+    .attribute-popup .fieldset .label {
+        width: 35%;
+    }
+
+    .attribute-popup .collapsable-wrapper,
+    #manage-titles-wrapper .fieldset-wrapper-title {
+        margin-bottom: 0;
+        padding-bottom: 0;
+    }
+
+    .attribute-popup .collapsable-wrapper .fieldset-wrapper-title > .title:before {
+        color: #797269;
         font-size: 14px;
-        font-weight: bold;
+        top: 9px;
     }
-    .webiste-groups {
-        margin: 5px 0 20px 18px;
-        dt {
-            font-weight: bold;
-        }
-        dd {
-            margin: 5px 0 15px 15px;
-            > ul {
-                list-style: none;
-                margin: 0;
-                padding: 0;
-                > li {
-                    margin: 0 0 5px;
-                }
-            }
-        }
+
+    .attribute-popup form .entry-edit:first-child .fieldset {
+        border-bottom: 1px solid #dfdcd7;
     }
-}
 
-//
-//    Customer Reviews
-// --------------------------------------
-.field-detailed_rating {
-    .control-value {
-        padding: 0;
+    .attribute-popup .fieldset .legend {
+        border: none;
     }
-    .nested {
-        padding: 0;
+
+    .attribute-popup .page-actions [class^='action-'] {
+        margin-left: 18px;
     }
-    .field-rating {
-        margin: 15px 0 0;
-        &:first-child {
-            margin-top: 0;
-        }
-        .label {
-            width: 75px;
-        }
-        .control {
-            unicode-bidi: bidi-override;
-            direction: rtl;
-            width: 125px;
-            label {
-                color: #ccc;
-                cursor: pointer;
-                font-size: 18px;
-                float: right;
-                overflow: hidden;
-                white-space: nowrap;
-                width: 18px;
-                transition: color 150ms linear;
-                &:before {
-                    display: none;
-                }
-            }
-        }
+
+    .attribute-popup #base_fieldset {
+        padding-top: 20px;
     }
-    input[type="radio"] {
+
+    .attribute-popup #base_fieldset > .legend {
         display: none;
     }
-}
 
-//
-//    Tree Store Scope
-// --------------------------------------
-.tree-store-scope {
-    .buttons-set {
-        margin-bottom: 9px;
-        button {
-            margin-right: 4px;
+    .attribute-popup .page-actions-placeholder {
+        display: none;
+    }
+
+    .attribute-popup .page-actions.fixed .page-actions-inner {
+        background: #fff;
+        padding: 0;
+        min-width: 100%;
+        max-width: 100%;
+        min-height: 100%;
+        margin: 0;
+    }
+
+    .attribute-popup .footer {
+        display: none;
+    }
+
+    #manage-options-panel > .data-table {
+        clear: both;
+    }
+
+    // Custom grids view
+    .CustomGridView {
+        .page-layout-admin-1column .page-columns {
+            background: transparent;
         }
     }
-    .field {
-        margin: 0 0 5px;
-        input[type="checkbox"] {
-            margin-right: 8px;
-            position: relative;
-            top: 2px;
+
+    // Custom grid action view for Primary Add Button at grid tables
+    .CustomGridAction {
+        .grid-actions {
+            border-radius: 5px 5px 0 0;
+            margin-top: 20px;
+            padding: 9px 15px;
         }
-        .addafter {
-            display: inline-block;
-            padding-top: 6px;
+        .page-actions.fixed {
+            left: 0;
+            margin: 0;
+            padding: 0 21px;
+            position: fixed;
+        }
+        .page-actions {
+            position: absolute;
+            z-index: 2;
+            margin-top: 10px;
+            margin-left: 15px;
+            padding: 0;
         }
     }
-    [class^="field field-website_"] .label,
-    [class^="field field-group_"] .label,
-    [class^="field field-w_"] .label,
-    [class^="field field-sg_"] .label {
-        text-align: left;
-        font-size: 18px;
-        padding-right: 0;
-        width: auto;
-    }
-    [class^="field field-group_"] .label,
-    [class^="field field-sg_"] .label {
-        padding-left: 20px;
+
+    //  Custom page-actions view
+    .sidebar-actions {
+        padding: 14px 0;
     }
-    .tooltip .help {
-        margin-top: 11px;
+
+    .sidebar-actions button {
+        margin: 0 0 5px;
     }
-}
 
-//
-//    Widgets
-//--------------------------------------
-.widget-layout-updates .fieldset-wrapper,
-.widget-layout-updates .data-table {
-    margin: 0 0 18px;
-}
 
-.widget-layout-updates .fieldset-wrapper-title label {
-    &:not(.mage-error) {
-        padding: 10px 0 0;
+    .data-table .fpt-item-container {
+        td {
+            vertical-align: top;
+        }
+        select:first-child {
+            margin-bottom: 8px;
+        }
     }
-}
 
-.widget-layout-updates .fieldset-wrapper-title select {
-    margin: 3px 10px 5px;
-}
+    // Clearfix
+    .clearfix:before,
+    .clearfix:after,
+    [class$="-layout"]:after,
+    .tabs-horiz:before,
+    .tabs-horiz:after,
+    .page-create-order:before,
+    .page-create-order:after,
+    .order-addresses:before,
+    .order-addresses:after,
+    .order-methods:before,
+    .order-methods:after,
+    .order-summary:before,
+    .order-summary:after,
+    .order-methods:before,
+    .order-methods:after,
+    .grid-actions:before,
+    .grid-actions:after,
+    .fieldset-wrapper-title:before,
+    .fieldset-wrapper-title:after {
+        content: "";
+        display: table;
+    }
 
-.widget-layout-updates .fieldset-wrapper-title span,
-.widget-layout-updates .fieldset-wrapper-title select {
-    vertical-align: middle;
-}
+    .clearfix:after,
+    [class$="-layout"]:after,
+    .tabs-horiz:after,
+    .page-create-order:after,
+    .order-addresses:after,
+    .order-methods:after,
+    .order-summary:after,
+    .order-methods:after,
+    .grid-actions:after,
+    .fieldset-wrapper-title:after {
+        clear: both;
+    }
 
-.widget-layout-updates .data-table {
-    table-layout: fixed;
-}
+    //
+    //  Pages.less (begin)
+    //  ---------------------------------------------
 
-.widget-layout-updates .data-table,
-.widget-layout-updates .data-table tr:nth-child(odd) td,
-.widget-layout-updates .data-table tr:nth-child(odd):hover td {
-    background: none;
-    border: none;
-}
+    .field-weight .control .field:first-child {
+        width: 36%;
+        margin-right: 15px;
+    }
 
-.widget-layout-updates .data-table th,
-.widget-layout-updates .data-table tbody td {
-    border: none;
-    padding: 5px 10px;
-}
+    #allow_open_amount {
+        margin-top: 8px;
+    }
 
-.widget-layout-updates .data-table select {
-    margin: 0;
-    max-width: 99%;
-    overflow: hidden;
-}
+    #tab_content_downloadableInfo .data-table td {
+        vertical-align: top;
+        .row {
+            margin-bottom: 10px;
+        }
+    }
 
-.widget-layout-updates .chooser_container {
-    padding: 0 10px;
-    margin-bottom: 18px;
-}
+    //
+    //  Customer
+    //  ---------------------------------------
 
-.widget-layout-updates .chooser_container p {
-    margin: 0 0 18px;
-}
 
-.widget-layout-updates .chooser_container p img,
-.widget-layout-updates .chooser_container p input {
-    vertical-align: middle;
-}
+    #customer_info_tabs_account_content #_accountsendemail {
+        margin-top: 8px;
+    }
 
-/*
-    Preview window
--------------------------------------- */
-.preview-window {
-    background: #fff;
-}
+    .customer-information:before,
+    .customer-information:after {
+        content: "";
+        display: table;
+    }
 
-.preview-window .toolbar {
-    background: #f5f2ed;
-    padding: 20px;
-}
+    .customer-information:after {
+        clear: both;
+    }
 
-.preview-window .toolbar .switcher {
-    margin: 0;
-}
+    .customer-information .data-table,
+    .customer-information address {
+        width: 48.5%;
+    }
 
-.preview-window .toolbar .switcher span {
-    background: none;
-    width: auto;
-}
+    .customer-information .data-table {
+        float: left;
+        width: 48.5%;
+    }
 
-/*
-    Global 'No Products found' block
--------------------------------------- */
-.no-products-message {
-    background: #fbfaf6;
-    padding: 12px;
-    text-align: center;
-    font-size: 12px;
-    color: #666;
-    margin-bottom: 13px;
-}
+    .customer-information address {
+        padding-top: 4px;
+        line-height: 2.2;
+        float: right;
+    }
 
-/*
-    WYSIWYG
--------------------------------------- */
-.action-wysiwyg {
-    margin: 10px 0;
-}
+    .address-list {
+        list-style: none;
+        width: 278px;
+        margin: 0 0 10px;
+        padding: 0;
+        float: left;
+    }
 
-#catalog-wysiwyg-editor .buttons-set {
-    margin-bottom: 9px;
-}
+    //
+//      Configuration -> Design
+//  --------------------------------------
 
-#catalog-wysiwyg-editor .buttons-set button {
-    margin-right: 4px;
-}
+    #row_design_theme_ua_regexp .design_theme_ua_regexp {
+        float: left;
+        width: 100%;
+    }
+    #row_design_theme_ua_regexp .tooltip {
+        margin-top: 8px;
+    }
+    #row_design_theme_ua_regexp .note {
+        clear: both;
+    }
 
-/*
-    Add Attribute Popup
--------------------------------------- */
-#create_new_attribute {
-    overflow: hidden;
-}
+    //
+    //  CMS -> Banners
+    //  --------------------------------------
 
-#create_new_attribute > .loading-mask {
-    left: -25px;
-    top: -50px;
-}
 
-.attribute-popup {
-    background: none;
-}
+    // Banner Properties
+    #banner_properties_customer_segment_ids {
+        min-width: 20%;
+    }
 
-.attribute-popup #edit_form {
-    display: block;
-    > div:last-of-type {
-        margin-bottom: 150px;
+    // Content
+
+    .field-store_default_content .buttons-set {
+        margin-bottom: 9px;
     }
-}
 
-.attribute-popup #edit_form > .fieldset > .legend {
-    display: none;
-}
+    .field-store_default_content .buttons-set button {
+        margin-right: 4px;
+    }
 
-.attribute-popup .wrapper-popup {
-    padding: 0;
-    height: 511px;
-    overflow-x: hidden;
-    overflow-y: auto;
-}
+    .field-store_0_content_use input[type="checkbox"] {
+        margin-right: 8px;
+        position: relative;
+        top: 2px;
+    }
 
-.attribute-popup .fieldset,
-.attribute-popup .fieldset-wrapper {
-    border: none;
-    border-radius: 0;
-    padding: 4px 0 20px;
-    margin: 0 23px 20px;
-}
+    //
+    //  CMS -> Manage Hierarchy
+    //  --------------------------------------
 
-.attribute-popup .fieldset-wrapper {
-    border-top: none;
-}
 
-.attribute-popup .fieldset-wrapper:not(.collapsable-wrapper) .fieldset-wrapper-title {
-    border-bottom: none;
-}
+    .cms-hierarchy .cms-scope {
+        float: right;
+        margin-right: 25px;
+        position: relative;
+        top: 2px;
+        z-index: 1;
+    }
 
-.attribute-popup .fieldset-wrapper .fieldset-wrapper-content > .fieldset {
-    margin-left: 0;
-    margin-right: 0;
-}
+    .cms-hierarchy #tree-container {
+        margin-top: 25px;
+        overflow: auto;
+        padding-bottom: 10px;
+    }
 
-.attribute-popup .fieldset > .field > input[type="checkbox"] {
-    margin-top: 7px;
-}
+    .cms-hierarchy .buttons-set {
+        margin-bottom: 10px;
+    }
 
-.attribute-popup .fieldset .label {
-    width: 35%;
-}
+    .cms-hierarchy .cms-hierarchy-tree {
+        width: 48.93617020799999%;
+        float: left;
+        margin: 10px 0 8px 0;
+    }
 
-.attribute-popup .collapsable-wrapper,
-#manage-titles-wrapper .fieldset-wrapper-title {
-    margin-bottom: 0;
-    padding-bottom: 0;
-}
+    .cms-hierarchy .cms-hierarchy-node {
+        width: 48.93617020799999%;
+        float: left;
+        margin: 10px 0 8px 2.127659574%;
+    }
 
-.attribute-popup .collapsable-wrapper .fieldset-wrapper-title > .title:before {
-    color: #797269;
-    font-size: 14px;
-    top: 9px;
-}
+    .cms-hierarchy #cms_page_grid_container {
+        clear: both;
+    }
 
-.attribute-popup form .entry-edit:first-child .fieldset {
-    border-bottom: 1px solid #dfdcd7;
-}
+    .cms-hierarchy .store-switcher {
+        position: relative;
+        top: 10px;
+    }
 
-.attribute-popup .fieldset .legend {
-    border: none;
-}
+    .cms-hierarchy .store-switcher label {
+        margin-right: 8px;
+    }
 
-.attribute-popup .page-actions [class^='action-'] {
-    margin-left: 18px;
-}
+    .cms-hierarchy-node #node_properties_fieldset #node_preview {
+        position: relative;
+        top: 6px;
+    }
 
-.attribute-popup #base_fieldset {
-    padding-top: 20px;
-}
+    .cms-hierarchy-node .form-inline .label {
+        width: 30%;
+    }
 
-.attribute-popup #base_fieldset > .legend {
-    display: none;
-}
+    //
+    //  CMS -> Widgets
+    //  --------------------------------------
 
-.attribute-popup .page-actions-placeholder {
-    display: none;
-}
 
-.attribute-popup .page-actions.fixed .page-actions-inner {
-    background: #fff;
-    padding: 0;
-    min-width: 100%;
-    max-width: 100%;
-    min-height: 100%;
-    margin: 0;
-}
+    #widget_instace_tabs_properties_section_content .widget-option-label {
+        margin-top: 6px;
+    }
 
-.attribute-popup .footer {
-    display: none;
-}
+    //
+    //  CMS -> Static Blocks
+    //  --------------------------------------
 
-#manage-options-panel > .data-table {
-    clear: both;
-}
 
-// Custom grids view
-.CustomGridView {
-    .col-1-layout {
-        background: transparent;
+    #buttonsblock_content.buttons-set {
+        margin-bottom: 9px;
     }
-}
 
-// Custom grid action view for Primary Add Button at grid tables
-.CustomGridAction {
-    .grid-actions {
-        border-radius: 5px 5px 0 0;
-        margin-top: 20px;
-        padding: 9px 15px;
-    }
-    .page-actions.fixed {
-        left: 0;
-        margin: 0;
-        padding: 0 21px;
-        position: fixed;
+    #buttonsblock_content.buttons-set button {
+        margin-right: 4px;
     }
-    .page-actions {
-        position: absolute;
-        z-index: 2;
-        margin-top: 10px;
-        margin-left: 15px;
-        padding: 0;
-    }
-}
-
-// Custom page-actions view
-.adminhtml-googleshopping-items-index .grid-title {
-    padding: 15px;
-}
-
-.adminhtml-googleshopping-items-index .grid {
-    padding-bottom: 25px;
-}
 
-.adminhtml-googleshopping-items-index .grid-title .title {
-    font-size: 18px;
-}
+    //
+    //  CMS -> Manage Content
+    //  --------------------------------------
 
-.adminhtml-googleshopping-items-index .page-actions {
-    float: right;
-}
 
-.adminhtml-system-backup-index .page-actions.fixed,
-.adminhtml-scheduled-operation-index .page-actions.fixed,
-.adminhtml-system-currency-index .page-actions.fixed,
-.adminhtml-system-currencysymbol-index .page-actions.fixed,
-.adminhtml-cache-index .page-actions.fixed,
-.adminhtml-system-store-index .page-actions.fixed,
-.sales-order-status-index .page-actions.fixed {
-    background-image: none;
-    padding: 0 21px;
-    position: fixed;
-}
+    // Content
 
-.adminhtml-cache-index .additional-cache-management {
-    margin-bottom: 0;
-}
+    .cms-manage-content-actions .buttons-set {
+        margin-bottom: 9px;
+    }
 
-.sidebar-actions {
-    padding: 14px 0;
-}
+    .cms-manage-content-actions .buttons-set button {
+        margin-right: 4px;
+    }
 
-.sidebar-actions button {
-    margin: 0 0 5px;
-}
+    .cms-manage-content-actions textarea {
+        width: 100%;
+    }
 
-.adminhtml-system-currency-index .page-actions.fixed .import-service {
-    display: inline-block;
-    float: none;
-}
+    //
+    //  System -> Action Log -> Report
+    //  --------------------------------------
 
-.data-table .fpt-item-container {
-    td {
-        vertical-align: top;
-    }
-    select:first-child {
-        margin-bottom: 8px;
-    }
-}
+    .adminhtml-logging-details .log-details-grid table {
+        th {
+            border: 1px solid #c9c2b8;
+            border-width: 0 0 1px;
+            padding: 6px 10px 7px;
+            background: #fff;
+            .style2();
 
-.eq-ie9 {
-    .col-1-layout,
-    .catalog-product-edit,
-    .catalog-product-new,
-    .sales-order-view,
-    .catalog-category-edit {
-        table.data {
-            table-layout: fixed;
-            word-wrap: break-word;
-            th {
-                word-wrap: normal;
-                overflow: hidden;
-                vertical-align: top;
-                > span {
-                    white-space: normal;
-                }
-            }
-            th:not(.col-select):not(.col-id):not(.col-severity),
-            td:not(.col-select):not(.col-id):not(.col-severity) {
-                width: auto;
+            span {
+                border: 0;
+                padding: 0;
             }
         }
-    }
 
-    #setGrid_table,
-    #attributeGrid_table,
-    .custom-options .data-table,
-    .ui-dialog .data,
-    .col-1-layout .data,
-    .sales-order-view .data,
-    .catalog-category-edit .data {
-        word-wrap: break-word;
-        table-layout: fixed;
-    }
-    .fieldset-wrapper {
-        table.data {
-            table-layout: inherit;
-            word-wrap: normal;
+        td {
+            border: none;
+            padding: 6px 10px 7px;
+            background: #fff;
         }
-    }
-    .sales-order-create-index table.data,
-    .sales-order-create-index .fieldset-wrapper table.data {
-        table-layout: fixed;
-        word-wrap: break-word;
-        th {
-            word-wrap: normal;
-            overflow: hidden;
-            vertical-align: top;
-            > span {
-                white-space: normal;
-            }
+
+        tr:last-child td {
+            border: 1px solid #eae8e4;
+            border-width: 0 0 1px;
         }
-    }
 
-    .entry-edit .product-options .grouped-items-table {
-        table-layout: fixed;
-        word-wrap: break-word;
-        th {
-            word-wrap: normal;
-            overflow: hidden;
-            vertical-align: top;
-            > span {
-                white-space: normal;
-            }
+        tr.on-mouse {
+            cursor: inherit;
         }
-    }
 
-    .catalog-category-edit,
-    .adminhtml-cache-index,
-    .adminhtml-process-list,
-    .indexer-indexer-list,
-    .adminhtml-notification-index {
-        table.data {
-            table-layout: inherit;
-            word-wrap: normal;
+        tr:nth-child(odd) td,
+        tr.on-mouse:nth-child(odd):hover td {
+            background: #fbfaf6;
         }
     }
-}
 
-// Clearfix
-.clearfix:before,
-.clearfix:after,
-[class$="-layout"]:after,
-.tabs-horiz:before,
-.tabs-horiz:after,
-.page-create-order:before,
-.page-create-order:after,
-.order-addresses:before,
-.order-addresses:after,
-.order-methods:before,
-.order-methods:after,
-.order-summary:before,
-.order-summary:after,
-.order-methods:before,
-.order-methods:after,
-.grid-actions:before,
-.grid-actions:after,
-.fieldset-wrapper-title:before,
-.fieldset-wrapper-title:after {
-    content: "";
-    display: table;
-}
+    //
+    //  System -> Roles
+    // --------------------------------------
 
-.clearfix:after,
-[class$="-layout"]:after,
-.tabs-horiz:after,
-.page-create-order:after,
-.order-addresses:after,
-.order-methods:after,
-.order-summary:after,
-.order-methods:after,
-.grid-actions:after,
-.fieldset-wrapper-title:after {
-    clear: both;
-}
+    #gws_container ul {
+        padding: 0;
+        margin: 0;
+        list-style: none;
+    }
 
-/* ==========================================================================
-   pages.less (begin)
-   ========================================================================== */
-[class^=" catalog-product-"] .page-actions .action-back.mage-error,
-[class^=" newsletter-"] .page-actions .action-back.mage-error {
-    color: #b57c72;
-}
+    #gws_container ul ul {
+        margin: .8em 0 .8em 1.4em;
+    }
 
-.field-weight .control .field:first-child {
-    width: 36%;
-    margin-right: 15px;
-}
+    #gws_container input[type="checkbox"] {
+        margin-right: 3px;
+        position: relative;
+        top: -1px;
+    }
 
-#allow_open_amount {
-    margin-top: 8px;
-}
+    //
+    //  Reports
+    // --------------------------------------
+    .reports-title .page-actions {
+        float: right;
+    }
 
-.catalog-product-new .user-defined.type-select select,
-.catalog-product-edit .user-defined.type-select select {
-    width: 100%;
-}
-
-#tab_content_downloadableInfo .data-table td {
-    vertical-align: top;
-    .row {
-        margin-bottom: 10px;
+    .reports-title .store-switcher {
+        padding: 14px 0 18px;
     }
-}
-
-/*
-    Customer
----------------------------------------*/
-.customer-index-edit .grid tr.headings th > span {
-    white-space: normal;
-}
-
-#customer_info_tabs_account_content #_accountsendemail {
-    margin-top: 8px;
-}
 
-.customer-information:before,
-.customer-information:after {
-    content: "";
-    display: table;
-}
+    .reports-content select {
+        width: 160px;
+    }
 
-.customer-information:after {
-    clear: both;
-}
+    .reports-content input.hasDatepicker {
+        width: 133px;
+    }
 
-.customer-information .data-table,
-.customer-information address {
-    width: 48.5%;
-}
+    .reports-content .required .control {
+        position: relative;
+    }
 
-.customer-information .data-table {
-    float: left;
-    width: 48.5%;
-}
+    .reports-content input.hasDatepicker + label.mage-error {
+        left: 0;
+        position: absolute;
+        top: 30px;
+    }
 
-.customer-information address {
-    padding-top: 4px;
-    line-height: 2.2;
-    float: right;
-}
+    .reports-title:before,
+    .reports-title:after {
+        content: "";
+        display: table;
+    }
 
-.address-list {
-    list-style: none;
-    width: 278px;
-    margin: 0 0 10px;
-    padding: 0;
-    float: left;
-}
+    .reports-title:after {
+        clear: both;
+    }
 
-.address-list li {
-    border: 1px solid #d9d2ca;
-    background: #f7f2ec;
-    padding: 10px 10px 15px;
-    cursor: pointer;
-    margin-bottom: -1px;
-}
+    .table-fieldset-alt,
+    .type-options {
+        margin-bottom: 20px;
+    }
 
-.address-list li.ui-state-active {
-    background: #fff;
-    position: relative;
-    box-shadow: 0 1px 1px 0 rgba(217, 210, 202, 1);
-    margin-left: -2px;
-    padding-left: 12px;
-}
+    .table-fieldset-alt thead th,
+    .table-fieldset-alt tbody tr td {
+        border-width: 0;
+    }
 
-.address-list li.ui-state-active:before,
-.address-list li.ui-state-active:after {
-    position: absolute;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    font-weight: normal;
-    font-size: 18px;
-    color: #fff;
-    content: "\e02a";
-    speak: none;
-    line-height: 11px;
-    width: 10px;
-    right: -9px;
-    text-indent: -6px;
-    top: 50%;
-    margin-top: -5px;
-    z-index: 2;
-}
+    .table-fieldset-alt tbody tr:nth-child(odd) td,
+    .table-fieldset-alt tbody tr:nth-child(odd):hover td {
+        background: #fff;
+    }
 
-.address-list li.ui-state-active:before {
-    color: #d9d2ca;
-    right: -11px;
-    z-index: 1;
-}
+    //
+    //  System - Tax
+    //  --------------------------------------
 
-.address-list li.address-list-actions:before,
-.address-list li.address-list-actions:after {
-    display: none;
-}
 
-.address-list li.address-list-actions {
-    padding: 20px 0 0;
-    border: 0;
-    background: none;
-    box-shadow: none;
-    cursor: default;
-}
 
-.address-list li.address-list-actions:first-child {
-    padding: 0;
-}
+    .mselect-hidden + .mage-error {
+        position: absolute;
+        top: 100%;
+    }
 
-.address-list .label {
-    float: none;
-    width: auto;
-    padding: 0 0 0 10px;
-}
+    //
+    //  Tags
+    //  --------------------------------------
 
-.address-list input[type="checkbox"] {
-    float: left;
-}
+    .tag-title {
+        overflow: hidden;
+    }
 
-.address-list address:first-line {
-    /*  its not work  if First Name and Last Name in two lines */
-    font-weight: bold;
-}
+    .tag-title .page-actions {
+        float: right;
+    }
 
-.address-list address {
-    margin: 0 20px 15px 0;
-    line-height: 1.5;
-}
+    //
+    //  Attribute Mapping
+    //  --------------------------------------
 
-.address-list-item-actions {
-    float: right;
-}
+    .field-attributes_box .control-value {
+        width: 100%;
+    }
 
-.address-list .action-edit {
-    display: none;
-}
+    .adminhtml-googleshopping-types-new #attribute_set {
+        padding: 0;
+    }
 
-.address-list .field {
-    margin-bottom: 15px;
-}
+    .adminhtml-googleshopping-types-new #gcontent_attributes_container {
+        margin-top: -6px;
+    }
 
-.ui-tabs-nav .address-list-item a {
-    text-decoration: none;
-    color: #676056;
-}
+    //
+    //  Sales
+    //  --------------------------------------
 
-.address-item-edit {
-    margin-left: 277px;
-}
 
-.address-item-edit-content {
-    border: 1px solid #dad1c8;
-    background: #fff;
-    box-shadow: 0 2px 1px 0 rgba(217, 210, 202, .5);
-    padding-left: 10px;
-}
+    #order-totals strong {
+        .style28();
+    }
 
-.address-item-edit-content .fieldset:last-child {
-    margin-bottom: 29px;
-}
+    #order-shipping-method-summary a {
+        .style3();
+    }
 
-.address-item-edit .legend {
-    border-bottom: 0;
-    margin: 0 0 18px;
-    padding-left: 20%;
-}
+    .order-sidebar {
+        float: left;
+        width: 22%;
+    }
 
-.address-item-edit .legend span {
-    padding-left: 0;
-}
+    .customer-current-activity-inner {
+        padding: 18px;
+    }
 
-.address-item-edit-actions {
-    padding: 0 0 18px 20%;
-}
+    .customer-current-activity .action-refresh {
+        float: right;
+        &:hover {
+            text-decoration: none;
+        }
+    }
 
-/*
-    Configuration -> Design
--------------------------------------- */
-#row_design_theme_ua_regexp .design_theme_ua_regexp {
-    float: left;
-    width: 100%;
-}
-#row_design_theme_ua_regexp .tooltip {
-    margin-top: 8px;
-}
-#row_design_theme_ua_regexp .note {
-    clear: both;
-}
+    .order-currency {
+        padding: 18px;
+    }
+    .order-detail {
+    }
+    .order-details-existing-customer {
+        background: #fff;
+        padding-left: 0;
+        position: relative;
+        width: 77.9%;
+        float: right;
+    }
 
-/*
-    Configuration -> Payment Methods
--------------------------------------- */
-.adminhtml-system-config-edit .payflow-settings-notice .important-label {
-    .style32();
-}
+    .order-billing-address,
+    .order-billing-method {
+        float: left;
+        width: 49.5%;
+    }
 
-.adminhtml-system-config-edit .payflow-settings-notice ul.options-list strong {
-    .style28();
-}
+    .order-shipping-address,
+    .order-shipping-method {
+        float: right;
+        width: 49%;
+    }
 
-/*
-    CMS -> Banners
--------------------------------------- */
+    #order-data .order-account-information {
+        float: none;
+        width: auto;
+    }
 
-/* Banner Properties */
-#banner_properties_customer_segment_ids {
-    min-width: 20%;
-}
+    #order-data .actions .action-add,
+    #order-data .actions .action-delete,
+    #order-customer-selector .actions .action-add {
+        margin: 0 0 0 20px;
+    }
 
-/* Content */
+    #order-data .order-methods ul {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
 
-.field-store_default_content .buttons-set {
-    margin-bottom: 9px;
-}
+    #order-data .order-methods dl,
+    #order-data .order-methods dt,
+    #order-data .order-methods dd,
+    #order-data .payment-methods dl,
+    #order-data .payment-methods dt,
+    #order-data .payment-methods dd {
+        margin: 0;
+        padding: 0;
+    }
 
-.field-store_default_content .buttons-set button {
-    margin-right: 4px;
-}
+    #order-data .order-methods dd + dt,
+    #order-data .payment-methods dd + dt {
+        margin-top: 17px;
+    }
 
-.field-store_0_content_use input[type="checkbox"] {
-    margin-right: 8px;
-    position: relative;
-    top: 2px;
-}
+    #order-data .order-methods dt,
+    #order-data .payment-methods dt {
+        margin: 0 0 8px;
+    }
 
-/*
-    CMS -> Manage Hierarchy
--------------------------------------- */
+    .order-coupons .box-left,
+    .order-gift-options .box-left {
+        float: left;
+        width: 49%;
+    }
 
-.cms-hierarchy .cms-scope {
-    float: right;
-    margin-right: 25px;
-    position: relative;
-    top: 2px;
-    z-index: 1;
-}
+    .order-coupons .box-right,
+    .order-gift-options .box-right {
+        float: right;
+        width: 49%;
+    }
 
-.cms-hierarchy #tree-container {
-    margin-top: 25px;
-    overflow: auto;
-    padding-bottom: 10px;
-}
+    .order-gift-options .box-left:last-child,
+    .order-gift-options .fieldset-wrapper-title + .box-right {
+        float: none;
+        width: auto;
+    }
 
-.cms-hierarchy .buttons-set {
-    margin-bottom: 10px;
-}
+    .order-coupons .content {
+        .action- {
+            vertical-align: top;
+        }
+        input[type="text"] {
+            height: 28px;
+        }
+    }
 
-.cms-hierarchy .cms-hierarchy-tree {
-    width: 48.93617020799999%;
-    float: left;
-    margin: 10px 0 8px 0;
-}
+    .order-gift-options {
+        fieldset {
+            border-radius: 5px;
+        }
 
-.cms-hierarchy .cms-hierarchy-node {
-    width: 48.93617020799999%;
-    float: left;
-    margin: 10px 0 8px 2.127659574%;
-}
+        .gift-wrapping-form select {
+            margin-left: 10px;
+        }
 
-.cms-hierarchy #cms_page_grid_container {
-    clear: both;
-}
+        .giftmessage-entire-order textarea {
+            height: 6em;
+            width: 100%;
+        }
 
-.cms-hierarchy .store-switcher {
-    position: relative;
-    top: 10px;
-}
+        .giftmessage-whole-order-container {
+            textarea {
+                height: 6em;
+                width: 100%;
+            }
+            .actions {
+                margin-left: 20%;
+            }
+        }
+    }
 
-.cms-hierarchy .store-switcher label {
-    margin-right: 8px;
-}
+    .ui-dialog.gift-options-popup .ui-dialog-content {
+        padding: 25px;
+    }
 
-.cms-hierarchy-node #node_properties_fieldset #node_preview {
-    position: relative;
-    top: 6px;
-}
+    .ui-dialog.gift-options-popup .ui-dialog-content h4 {
+        margin: 0 0 17px;
+    }
 
-.cms-hierarchy-node .form-inline .label {
-    width: 30%;
-}
+    .gift-options-tooltip {
+        background: #fff;
+        border-radius: 5px;
+        padding: 10px;
+        box-shadow: 0 0 3px rgba(0, 0, 0, .3);
+    }
 
-/*
-    CMS -> Widgets
--------------------------------------- */
+    #order-data .box-left fieldset,
+    #order-data .box-right fieldset {
+        border-radius: 5px;
+    }
 
-#widget_instace_tabs_properties_section_content .widget-option-label {
-    margin-top: 6px;
-}
+    .adminhtml-rma-new .order-totals,
+    .order-comments-history .order-comments-history {
+        float: none;
+        width: 100%;
+    }
 
-/*
-    CMS -> Static Blocks
--------------------------------------- */
+    //
+    //  Sales -> Create Order
+    // --------------------------------------
 
-#buttonsblock_content.buttons-set {
-    margin-bottom: 9px;
-}
+    .summary-total {
+        .summary-collapse {
+            cursor: pointer;
+            display: inline-block;
+            &:before {
+                @iconsize: 16px;
+                content: "\e02d";
+                color: #816063;
+                background: #f2ebde;
+                display: inline-block;
+                text-indent: 0;
+                font-size: @iconsize;
+                width:@iconsize;
+                height:@iconsize;
+                line-height: @iconsize;
+                overflow: hidden;
+                font-family: 'MUI-Icons';
+                border:1px solid #ada89e;
+                font-style: normal;
+                vertical-align: top;
+                margin-right:7px;
+                font-weight: normal;
+                speak: none;
+                -webkit-font-smoothing: antialiased;
+                border-radius: 2px;
+            }
+            &:hover:before {
+                background: #cac3b4;
+            }
+        }
+        &.show-details .summary-collapse:before {
+            content: "\e03a";
+        }
+    }
 
-#buttonsblock_content.buttons-set button {
-    margin-right: 4px;
-}
+    tr.row-totals:nth-child(even) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(even) td,
+    tr.row-totals:nth-child(even) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(even) ~ tr.row-totals:nth-child(even) td,
+    tr.row-totals:nth-child(odd) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(odd) ~ tr.row-totals:nth-child(even) td {
+        background:  #fbfaf6;
+    }
 
-/*
-    CMS -> Manage Content
--------------------------------------- */
+    tr.row-totals:nth-child(odd) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(odd) ~ tr.row-totals:nth-child(odd) td,
+    tr.row-totals:nth-child(even) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(even) ~ tr.row-totals:nth-child(odd) td,
+    tr.row-totals:nth-child(odd) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(odd) td {
+        background: #fff;
+    }
 
-/* Content */
 
-.cms-manage-content-actions .buttons-set {
-    margin-bottom: 9px;
-}
+    #order-data .page-actions {
+        padding-top: 0;
+    }
 
-.cms-manage-content-actions .buttons-set button {
-    margin-right: 4px;
-}
+    .create-order-sidebar-container > div + div {
+        border-top: 1px solid #cac3b4;
+        margin-top: 35px;
+    }
 
-.cms-manage-content-actions textarea {
-    width: 100%;
-}
+    .create-order-sidebar-container > div .head h5 {
+        .style9();
+        margin: 17px 0 17px;
+    }
 
-/*
-    System -> Action Log -> Report
--------------------------------------- */
-.adminhtml-logging-details .log-details-grid table {
-    th {
-        border: 1px solid #c9c2b8;
-        border-width: 0 0 1px;
-        padding: 6px 10px 7px;
-        background: #fff;
-        .style2();
+    .customer-current-activity-inner > h4 {
+        .style10();
+        border-bottom: 1px solid #cac3b4;
+        margin-top: 0;
+        padding: 0 0 16px;
+    }
 
-        span {
+    .customer-current-activity-inner .auto-scroll {
+        margin-right: -18px;
+        margin-left: -18px;
+        .no-items {
+            padding: 5px 18px;
+            display: block;
+        }
+    }
+    .customer-current-activity-inner .data-table {
+        thead {
+            background-color: transparent;
+        }
+        thead th {
+            background-color: transparent;
+            .style18();
             border: 0;
-            padding: 0;
+            &:first-child {
+                padding-left: 18px;
+            }
+            &:last-child {
+                padding-right: 18px;
+            }
+        }
+        tbody tr {
+            td {
+                background-color: transparent;
+                border: 0;
+                &:first-child {
+                    padding-left: 18px;
+                }
+                &:first-child {
+                    padding-right: 18px;
+                }
+            }
+            &:nth-child(2n + 1) td {
+                background: #e0dace;
+            }
         }
     }
+    .customer-current-activity .action-refresh {
+        float: right;
+    }
 
-    td {
-        border: none;
-        padding: 6px 10px 7px;
-        background: #fff;
+    .customer-current-activity .action-refresh,
+    .customer-current-activity .data-table .icon {
+        display: inline-block;
+        text-indent: 100%;
+        overflow: hidden;
+        height: 16px;
+        width: 16px;
+        line-height: 16px;
+        white-space: nowrap;
     }
 
-    tr:last-child td {
-        border: 1px solid #eae8e4;
-        border-width: 0 0 1px;
+    .customer-current-activity .action-refresh:before,
+    .customer-current-activity .data-table .icon:before {
+        content: "\e010";
+        color: #c3c2be;
+        display: block;
+        text-indent: 0;
+        font-size: 16px;
+        line-height: 16px;
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        font-weight: normal;
+        speak: none;
+        -webkit-font-smoothing: antialiased;
     }
 
-    tr.on-mouse {
-        cursor: inherit;
+    .customer-current-activity .data-table .icon-remove:before {
+        content: "\e07f";
     }
 
-    tr:nth-child(odd) td,
-    tr.on-mouse:nth-child(odd):hover td {
-        background: #fbfaf6;
+    .customer-current-activity .data-table .icon-add:before {
+        content: "\e071";
     }
-}
 
-//
-//    System -> Roles
-// --------------------------------------
+    .customer-current-activity .auto-scroll {
+        .style18();
+        overflow: auto;
+        max-height: 150px;
+    }
 
-#gws_container ul {
-    padding: 0;
-    margin: 0;
-    list-style: none;
-}
+    .customer-current-activity .auto-scroll + button {
+        margin: 22px 0 0;
+    }
 
-#gws_container ul ul {
-    margin: .8em 0 .8em 1.4em;
-}
+    .customer-current-activity .actions {
+        border-top: none;
+        margin: 20px 0 0;
+        padding: 0;
+    }
 
-#gws_container input[type="checkbox"] {
-    margin-right: 3px;
-    position: relative;
-    top: -1px;
-}
+    .overlay {
+        background: rgba(255, 255, 255, .5);
+        border-radius: 5px;
+        position: absolute;
+        top: 0;
+        bottom: 0;
+        left: 0;
+        right: 0;
 
-//
-//    Reports
-// -------------------------------------- */
-.reports-title .page-actions {
-    float: right;
-}
+        span {
+            color: #111;
+            font-weight: bold;
+            position: absolute;
+            top: 56px;
+            left: 0;
+            margin: 0 8px;
+            padding: 10px;
+            background: #fff;
+        }
+    }
 
-.reports-title .store-switcher {
-    padding: 14px 0 18px;
-}
+    //
+    //  Order view
+    // --------------------------------------
 
-.reports-content select {
-    width: 160px;
-}
+    .order-comments-history fieldset {
+        border: 0;
+        margin: 0;
+        padding: 0;
+    }
 
-.reports-content input.hasDatepicker {
-    width: 133px;
-}
-
-.reports-content .required .control {
-    position: relative;
-}
-
-.reports-content input.hasDatepicker + label.mage-error {
-    left: 0;
-    position: absolute;
-    top: 30px;
-}
-
-.reports-title:before,
-.reports-title:after {
-    content: "";
-    display: table;
-}
-
-.reports-title:after {
-    clear: both;
-}
-
-//
-//    Reports - PayPal Settlement Reports
-//--------------------------------------
-
-.adminhtml-paypal-reports-index .grid tr.headings th > span {
-    white-space: normal;
-}
-
-.adminhtml-paypal-reports-index .col-transaction_event_code {
-    max-width: 150px;
-}
-
-.adminhtml-paypal-reports-index .col-amount,
-.adminhtml-paypal-reports-index .col-fee-amount {
-    text-align: right;
-}
-
-/*
-    Newsletter Templates
--------------------------------------- */
-.newsletter-template-index .col-id {
-    width: 35px;
-}
-
-.newsletter-template-index .col-actions {
-    width: 80px;
-}
-
-.newsletter-template-index .col-type {
-    width: 100px;
-}
-
-.newsletter-template-index .col-added,
-.newsletter-template-index .col-updated {
-    width: 140px;
-}
-
-[class^=' newsletter-'] .buttons-set {
-    margin: 0 0 15px;
-}
-
-[class^=" newsletter-"] .buttons-set button {
-    margin-right: 4px;
-}
-
-/*
-    Newsletter - Queue
--------------------------------------- */
-.newsletter-queue-index .col-id {
-    width: 35px;
-}
+    .order-comments-history textarea,
+    .rma-history-form textarea {
+        height: 6em;
+        margin: 5px 0 10px;
+        resize: vertical;
+        width: 100%;
+    }
 
-.newsletter-queue-index .col-finish,
-.newsletter-queue-index .col-start {
-    width: 130px;
-}
+    .order-comments-history input[type="checkbox"] {
+        margin-right: 5px;
+    }
 
-.newsletter-queue-index .col-status,
-.newsletter-queue-index .col-processed,
-.newsletter-queue-index .col-recipients {
-    white-space: nowrap;
-    width: 85px;
-}
+    .order-history-comments-options {
+        float: left;
+    }
 
-.newsletter-queue-index td.col-processed,
-.newsletter-queue-index td.col-recipients {
-    text-align: right;
-}
+    .order-comments-history .actions {
+        float: right;
+    }
 
-.newsletter-queue-index .col-actions {
-    width: 80px;
-}
+    [class*="-order-"] .fieldset-wrapper address {
+        overflow: auto;
+    }
 
-/*
-    Newsletter - Subscribers
--------------------------------------- */
-.newsletter-subscriber-index .col-id {
-    width: 35px;
-}
+    //
+    //  Orders comments
+    //--------------------------------------
+    .note-list {
+        list-style: none;
+        padding: 0;
+        li {
+            border-top: 1px solid #ededed;
+            padding: 9px 0;
+            &:first-child {
+                border: 0;
+                padding-top: 13px;
+            }
+        }
+        div {
+            font-size: 12px;
+        }
+        .note-list-date,
+        .note-list-status,
+        .note-list-customer span {
+            font-weight: bold;
+        }
+        .note-list-time,
+        .note-list-status {
+            border-right: 1px solid #676056;
+            padding: 0 5px 0 0;
+            margin: 0 5px 0 0;
+        }
+        .note-list-customer {
+            white-space: nowrap;
+        }
+        .note-list-comment {
+            margin: 5px 0 0;
+        }
+        .note-list-customer-notapplicable {
+            color: #d87e34;
+        }
+        .note-list-customer-notified {
+            color: #185b00;
+        }
+        .note-list-customer-not-notified {
+            color: #963535;
+        }
+    }
 
-.newsletter-subscriber-index .col-type {
-    width: 75px;
-}
+    .adminhtml-rma-item-attribute-edit .col-position input {
+        text-align: center;
+    }
 
-.newsletter-subscriber-index .col-status {
-    white-space: nowrap;
-    width: 85px;
-}
+    .order-subtotal .label {
+        text-align: right;
+    }
 
-/*
-    Newsletter - Problems
--------------------------------------- */
-.newsletter-problem-index .col-select {
-    width: 25px;
-}
+    .items-to-invoice {
+        border: 1px solid #c0bbaf;
+        margin-top: 13px;
+        width: 100%;
+    }
 
-.newsletter-problem-index .col-id {
-    width: 35px;
-}
+    .items-to-invoice td,
+    table.items-to-invoice tbody tr:hover td {
+        background-color: #e6e3de;
+        border: 0;
+        text-align: center;
+    }
 
-.newsletter-problem-index .col-start {
-    width: 130px;
-}
+    .items-to-invoice .grand-total {
+        color: #19a3d1;
+        font-weight: bold;
+    }
 
-.newsletter-problem-index .col-error-code {
-    width: 150px;
-}
+    .creditmemo-totals .data-table input[type="text"] {
+        text-align: right;
+        width: 60px;
+    }
 
+    .col-product .product_to_add {
+        float: right;
+    }
 
-.table-fieldset-alt,
-.type-options {
-    margin-bottom: 20px;
-}
+    //
+    //  Orders refund
+    //--------------------------------------
+    .field-refund-store-credit {
+        .input-text {
+            text-align: right;
+            width: 60px;
+        }
+    }
 
-.table-fieldset-alt thead th,
-.table-fieldset-alt tbody tr td {
-    border-width: 0;
-}
+    //
+    //  Packaging for Shipping Popup
+    // --------------------------------------
+    #popup-window-mask,
+    .popup-window-mask {
+        background: rgba(0, 0, 0, .5);
+        position: absolute;
+        top: 0;
+        right: 0;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        z-index: 999;
+    }
 
-.table-fieldset-alt tbody tr:nth-child(odd) td,
-.table-fieldset-alt tbody tr:nth-child(odd):hover td {
-    background: #fff;
-}
+    .packaging-window,
+    .packed-window {
+        background: #fff;
+        box-shadow: 0 3px 6px rgba(0, 0, 0, .4);
+        left: 50%;
+        margin: -200px 0 0 -471px;
+        position: fixed;
+        top: 50%;
+        width: 1000px;
+        z-index: 1000;
+    }
 
-/*
-    System - Tax
---------------------------------------*/
+    .packaging-window .entry-edit-head {
+        padding: 3px 5px;
+    }
 
-.tax-rate-popup .form-inline .field {
-    position: static;
-    &.required .label {
+    .packaging-window .messages {
+        padding: 10px 26px 10px 32px;
+        border-radius: 0;
+        color: #963535;
+        text-shadow: none;
         position: relative;
-        z-index: 1;
+        background: #f3dcd8;
+        border: 1px solid #963535;
+        margin-top: -1px;
     }
-}
-
-.mselect-hidden + .mage-error {
-    position: absolute;
-    top: 100%;
-}
-
-/*
-    Tags
--------------------------------------- */
-.tag-title {
-    overflow: hidden;
-}
-
-.tag-title .page-actions {
-    float: right;
-}
-
-/*
-    Attribute Mapping
--------------------------------------- */
-.field-attributes_box .control-value {
-    width: 100%;
-}
-
-.adminhtml-googleshopping-types-new #attribute_set {
-    padding: 0;
-}
-
-.adminhtml-googleshopping-types-new #gcontent_attributes_container {
-    margin-top: -6px;
-}
-
 
-/*
-    Sales
--------------------------------------- */
-
-#order-totals strong {
-    .style28();
-}
-
-#order-shipping-method-summary a {
-    .style3();
-}
-
-.order-sidebar {
-    float: left;
-    width: 22%;
-}
-
-.customer-current-activity-inner {
-    padding: 18px;
-}
-
-.customer-current-activity .action-refresh {
-    float: right;
-    &:hover {
-        text-decoration: none;
+    .packaging-window .messages:before {
+        position: absolute;
+        left: 8px;
+        top: 50%;
+        margin-top: -11px;
+        background: none;
+        text-shadow: none;
+        width: auto;
+        height: auto;
+        border: 0;
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        speak: none;
+        font-weight: normal;
+        -webkit-font-smoothing: antialiased;
+        font-size: 16px;
+        content: '\e069';
+        color: #963535;
     }
-}
 
-.order-currency {
-    padding: 18px;
-}
-.order-detail {
-}
-.order-details-existing-customer {
-    background: #fff;
-    padding-left: 0;
-    position: relative;
-    width: 77.9%;
-    float: right;
-}
+    .packaging-window .validation-failed {
+        background: #fef0ed;
+        border: 1px dashed #d6340e;
+    }
 
-.order-billing-address,
-.order-billing-method,
-[class*="-order-"] .order-history,
-[class*="-order-"] .order-comments-history,
-[class*="-order-"] .order-information,
-[class*="-order-"] .order-billing-address,
-[class*="-order-"] .order-payment-method,
-[class^=" adminhtml-rma-"] .order-comments-history,
-[class^=" adminhtml-rma-"] .order-shipping-address,
-[class^=" adminhtml-rma-"] .rma-request-details {
-    float: left;
-    width: 49.5%;
-}
+    .packaging-window {
+        .packaging-content {
+            overflow: auto;
+            overflow-x: hidden;
+            height: auto !important;
+            max-height: 400px;
+            .measures {
+                width: 50px;
+            }
+            .options-weight {
+                vertical-align: top;
+            }
+        }
+    }
 
-.order-shipping-address,
-.order-shipping-method,
-[class*="-order-"] .order-totals,
-[class*="-order-"] .order-account-information,
-[class*="-order-"] .order-shipping-address,
-[class*="-order-"] .order-payment-method-virtual,
-[class*="-order-"] .order-shipping-method,
-[class^=" adminhtml-rma-"] .rma-confirmation,
-[class^=" adminhtml-rma-"] .order-shipping-method,
-[class^=" adminhtml-rma-"] .order-return-address {
-    float: right;
-    width: 49%;
-}
+    .packaging-window .package-options {
+        width: 100%;
+        border-top: 1px solid #ccc;
+        padding: 10px 0 0;
+        margin: 3px 0 0;
+    }
 
-[class*="-order-"] {
-    .order-card-validation {
-        width: 49.5%;
-        box-sizing: border-box;
+    .packaging-window .package-options td {
+        vertical-align: middle;
+    }
 
-        .actions {
-            margin-top: 17px;
-        }
+    .packaging-window .package-options .input-text {
+        width: 50px;
     }
-    .order-totals {
-        .field.choice {
-            margin: 20px 0;
-        }
+
+    .packaging-window .package_prapare {
+        margin-bottom: 15px;
     }
-}
 
-#order-data .order-account-information {
-    float: none;
-    width: auto;
-}
+    .packaging-window .package-options .customs-value {
+        width: 80px;
+    }
 
-[class^=" sales-"] .order-information .fieldset-wrapper > .fieldset-wrapper-title .title {
-    width: 100%;
-}
+    .packaging-window .package-options .options-weight {
+        width: 75px;
+    }
 
-#order-data .actions .action-add,
-#order-data .actions .action-delete,
-#order-customer-selector .actions .action-add {
-    margin: 0 0 0 20px;
-}
+    .packaging-window .package-options .options-units-weight {
+        width: 45px;
+    }
 
-#order-data .order-methods ul {
-    list-style: none;
-    margin: 0;
-    padding: 0;
-}
+    .packaging-window .package-options .options-units-dimensions {
+        width: 45px;
+    }
 
-#order-data .order-methods dl,
-#order-data .order-methods dt,
-#order-data .order-methods dd,
-#order-data .payment-methods dl,
-#order-data .payment-methods dt,
-#order-data .payment-methods dd {
-    margin: 0;
-    padding: 0;
-}
+    .packaging-window .package-options .options-content-type {
+        width: 120px;
+    }
 
-#order-data .order-methods dd + dt,
-#order-data .payment-methods dd + dt {
-    margin-top: 17px;
-}
+    .packaging-window .package-options input[type=text].disabled,
+    .packaging-window .package-options select.disabled {
+        background: #eee;
+    }
 
-#order-data .order-methods dt,
-#order-data .payment-methods dt {
-    margin: 0 0 8px;
-}
+    .packaging-window .package-options-contents {
+        border-top: 0;
+    }
 
-.order-coupons .box-left,
-.order-gift-options .box-left {
-    float: left;
-    width: 49%;
-}
+    .packaging-window .package-add-products {
+        margin: 20px 0 0;
+    }
 
-.order-coupons .box-right,
-.order-gift-options .box-right {
-    float: right;
-    width: 49%;
-}
+    .packaging-window .package-add-products .grid {
+        padding: 0;
+    }
 
-.order-gift-options .box-left:last-child,
-.order-gift-options .fieldset-wrapper-title + .box-right {
-    float: none;
-    width: auto;
-}
+    .packaging-window .package-add-products .grid button {
+        vertical-align: middle;
+    }
 
-.order-coupons .content {
-    .action- {
-        vertical-align: top;
+    .packaging-window .package-number {
+        font-weight: bold;
     }
-    input[type="text"] {
-        height: 28px;
+
+    .packaging-window .package-number span {
+        margin-left: 5px;
     }
-}
 
-.order-gift-options {
-    fieldset {
-        border-radius: 5px;
+    .packed-window .entry-edit-head {
+        padding: 3px 5px;
     }
 
-    .gift-wrapping-form select {
-        margin-left: 10px;
+    .packed-window .packed-content {
+        padding: 10px 10px 0;
+        overflow: auto;
+        max-height: 400px;
     }
 
-    .giftmessage-entire-order textarea {
-        height: 6em;
-        width: 100%;
+    .packed-window .package {
+        border-top: 1px solid #ededed;
+        margin-bottom: 30px;
+        padding: 10px;
     }
 
-    .giftmessage-whole-order-container {
-        textarea {
-            height: 6em;
-            width: 100%;
-        }
-        .actions {
-            margin-left: 20%;
-        }
+    .packed-window .package:first-child {
+        border-top: 0;
     }
-}
 
-.ui-dialog.gift-options-popup .ui-dialog-content {
-    padding: 25px;
-}
+    .package-info {
+        background: #e6e3de;
+        border: 1px solid #c0bbaf;
+    }
 
-.ui-dialog.gift-options-popup .ui-dialog-content h4 {
-    margin: 0 0 17px;
-}
+    .package-info th {
+        font-weight: bold;
+    }
 
-.gift-options-tooltip {
-    background: #fff;
-    border-radius: 5px;
-    padding: 10px;
-    box-shadow: 0 0 3px rgba(0, 0, 0, .3);
-}
+    .packed-window .package-info table tbody tr td,
+    .packed-window .package-info table tbody tr th,
+    .package-info table tbody tr:nth-child(2n+1) td,
+    .package-info table tbody tr:nth-child(2n+1) th {
+        background: none;
+        border: 0;
+        padding: 5px 5px 2px;
+    }
 
-#order-data .box-left fieldset,
-#order-data .box-right fieldset {
-    border-radius: 5px;
-}
+    .packed-window .package .grid {
+        padding: 0;
+    }
 
-.adminhtml-rma-new .order-totals,
-.order-comments-history .order-comments-history,
-[class^=" adminhtml-rma-"] .rma-comments-history {
-    float: none;
-    width: 100%;
-}
+    .packed-window .package-options {
+        width: 60%;
+    }
 
-[class*="-order-"] .order-billing-address .actions,
-[class*="-order-"] .order-shipping-address .actions {
-    margin: 17px 0;
-}
+    .packed-window .package-options td,
+    .packed-window .package-options th {
+        padding: 1px 0;
+    }
 
-[class*="-order-"] .order-billing-address .control + label,
-[class*="-order-"] .order-shipping-address .control + label {
-    margin: 17px 0 0;
-}
+    .grid .popup-window {
+        text-align: left;
+    }
 
-.sales-order-create-index #order-message .messages .message,
-.sales-order-edit-index #order-message  .messages .message {
-    margin: 0 0 60px;
-}
+    .grid tr.on-mouse td .popup-window .data-table tbody tr:nth-child(2n+1) td,
+    .grid table tbody tr.on-mouse:nth-child(odd):hover td .popup-window .data-table tbody tr:nth-child(2n+1) td,
+    .grid table tbody tr.on-mouse:nth-child(odd):hover td .popup-window .data-table tbody tr:nth-child(2n+1):hover td,
+    .grid table tbody tr.on-mouse:nth-child(2n+1):hover td .popup-window .data-table tbody tr:nth-child(2n+1) td,
+    .grid table tbody tr.on-mouse:nth-child(2n+1):hover td .popup-window .data-table tbody tr:nth-child(2n+1):hover td,
+    .grid table tbody tr.on-mouse:hover td .popup-window .data-table tbody tr:nth-child(2n+1),
+    .grid table tbody tr.on-mouse:hover th .popup-window .data-table tbody tr:nth-child(2n+1) {
+        background-color: #fbfaf6;
+    }
 
-//
-//    Sales -> Create Order
-// --------------------------------------
-.sales-order-create-index {
+    .grid .popup-window {
+        text-align: left;
+    }
 
-}
+    .popup-window-buttons-set {
+        text-align: right;
+        padding: 25px;
+    }
 
-.sales-order-create-index .order-items.fieldset-wrapper,
-.sales-order-create-index .order-search-items.fieldset-wrapper,
-.sales-order-create-index .order-additional-area.fieldset-wrapper,
-.sales-order-create-index .order-errors,
-.checkout-index-index .checkout-errors {
-    .fieldset-wrapper-title {
-        border-bottom: 0;
-        margin: 0;
+    .popup-window-title {
+        background: #f3efea;
+        padding: 19px 20px;
     }
-    .title {
-        border-bottom: 1px solid #cac3b4;
-        margin: 0 0 18px;
-        width: 100%;
+
+    .popup-window-title .title {
+        color: #676056;
+        display: block;
+        font-size: 20px;
+        line-height: 1;
     }
-}
 
-[class*="-order-"] {
-    .fieldset-wrapper-title {
-        .actions {
-            float: right;
-            padding: 0;
-            a:link,
-            a:visited,
-            a:hover,
-            a:active {
-                color: #a29c94;
-            }
-        }
+    .popup-window-title .actions {
+        float: right;
     }
-    .order-customer-selector .fieldset-wrapper-title .actions {
-        padding-top: 8px;
+
+    .popup-window-content {
+        padding: 25px 25px 0;
     }
-    .order-details .fieldset-wrapper-title .actions {
-        padding-bottom: 15px;
+
+    .popup-window-content > ul {
+        list-style: none;
+        padding: 0;
     }
-}
 
-.sales-order-create-index {
-    // Configure product popup
-    .ui-dialog {
-        // Virtual and downloadable product
-        .downloadable.information .link {
-            .label {
-                margin-left: 0;
-            }
-            .nested {
-                margin-left: 8px;
-            }
-        }
-        // Bundle product
-        .fieldset.bundle {
-            .nested {
-                padding-left: 6px;
-                .field {
-                    margin: 0 0 5px;
-                }
-                .label {
-                    font-size: 13px;
-                    margin: 0;
-                }
-                .qty .control {
-                    display: inline-block;
-                    margin: 0 0 0 10px;
-                    width: 60px;
-                }
-            }
-        }
+    .packaging-window .col-weight {
+        text-align: left;
+        width: 60px;
     }
-    .order-billing-method {
-        .payment-methods {
-            .fieldset {
-                padding: 0;
-                margin: 0;
-                .field {
-                    margin: 0 0 12px 0;
-                }
-            }
-        }
+
+    .packaging-window .col-qty {
+        text-align: left;
+        width: 80px;
     }
-    .grid .action-configure {
-        float: right;
-        &.disabled {
-            cursor: default;
-            opacity: .5;
-            &:hover {
-                text-decoration: none;
-            }
-        }
+
+    .packed-window .col-qty,
+    .packed-window .col-weight,
+    .packed-window .col-qty_ordered {
+        text-align: right;
+        width: 70px;
     }
-    .order-items.fieldset-wrapper {
-        .clearfix();
+
+    .packaging-window .col-select,
+    .packaging-window .col-measure {
+        text-align: center;
+        width: 35px;
     }
-}
 
-.summary-total {
-    .summary-collapse {
-        cursor: pointer;
+    .popup-fieldset-title .title {
+        color: #666;
         display: inline-block;
-        &:before {
-            @iconsize: 16px;
-            content: "\e02d";
-            color: #816063;
-            background: #f2ebde;
-            display: inline-block;
-            text-indent: 0;
-            font-size: @iconsize;
-            width:@iconsize;
-            height:@iconsize;
-            line-height: @iconsize;
-            overflow: hidden;
-            font-family: 'MUI-Icons';
-            border:1px solid #ada89e;
-            font-style: normal;
-            vertical-align: top;
-            margin-right:7px;
-            font-weight: normal;
-            speak: none;
-            -webkit-font-smoothing: antialiased;
-            border-radius: 2px;
-        }
-        &:hover:before {
-            background: #cac3b4;
-        }
+        font-size: 18px;
+        font-weight: normal;
+        padding: 7px 0 10px;
     }
-    &.show-details .summary-collapse:before {
-        content: "\e03a";
+
+    .popup-fieldset-title .actions {
+        float: right;
     }
-}
 
-tr.row-totals:nth-child(even) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(even) td,
-tr.row-totals:nth-child(even) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(even) ~ tr.row-totals:nth-child(even) td,
-tr.row-totals:nth-child(odd) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(odd) ~ tr.row-totals:nth-child(even) td {
-    background:  #fbfaf6;
-}
+    .packaging-window select {
+        margin-bottom: 0;
+    }
 
-tr.row-totals:nth-child(odd) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(odd) ~ tr.row-totals:nth-child(odd) td,
-tr.row-totals:nth-child(even) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(even) ~ tr.row-totals:nth-child(odd) td,
-tr.row-totals:nth-child(odd) + tr.summary-details ~ tr.summary-total:not(.show-details):nth-child(odd) td {
-    background: #fff;
-}
+    .packaging-window .col-width,
+    .packaging-window .col-height,
+    .packaging-window .col-length,
+    .packaging-window .data-table .col-total-weight input[type="text"],
+    .packaging-window .data-table .col-custom input[type="text"] {
+        width: 60px;
+    }
 
-/* ----------------------------------- */
+    .packaging-window .col-total-weight {
+        white-space: nowrap;
+        width: 100px;
+    }
 
-#order-data .page-actions {
-    padding-top: 0;
-}
+    .packaging-window .col-signature {
+        width: 160px;
+    }
 
-// #order-data .store-switcher {
-//     margin: -46px 0 0;
-//     position: relative;
-//     width: 50%;
-// }
+    .packaging-window .data-table .col-actions,
+    .packaging-window .col-total-weight,
+    .packaging-window .data-table .col-custom {
+        white-space: nowrap;
+    }
 
-.create-order-sidebar-container > div + div {
-    border-top: 1px solid #cac3b4;
-    margin-top: 35px;
-}
+    .packaging-window .data-table .action-delete {
+        margin: 5px 0 0 5px;
+    }
 
-.create-order-sidebar-container > div .head h5 {
-    .style9();
-    margin: 17px 0 17px;
-}
+    .packaging-window .grid tr th {
+        border-bottom: 1px solid #c9c2b8;
+    }
 
-.customer-current-activity-inner > h4 {
-    .style10();
-    border-bottom: 1px solid #cac3b4;
-    margin-top: 0;
-    padding: 0 0 16px;
-}
+    .packaging-window .grid tr th:first-child,
+    .packaging-window .grid td:first-child,
+    .packaging-window .grid td:last-child {
+        border-left: 0;
+        border-right: 0;
+    }
 
-.customer-current-activity-inner .auto-scroll {
-    margin-right: -18px;
-    margin-left: -18px;
-    .no-items {
-        padding: 5px 18px;
-        display: block;
+    .packaging-window .data-table .col-qty-edit {
+        white-space: nowrap;
+        width: 50px;
     }
-}
-.customer-current-activity-inner .data-table {
-    thead {
-        background-color: transparent;
+
+    .packaging-window .data-table .col-qty-edit input[type="text"] {
+        width: 50px;
     }
-    thead th {
-        background-color: transparent;
-        .style18();
-        border: 0;
-        &:first-child {
-            padding-left: 18px;
-        }
-        &:last-child {
-            padding-right: 18px;
-        }
+
+    .sp-methods > dt {
+        font-weight: bold;
     }
-    tbody tr {
-        td {
-            background-color: transparent;
-            border: 0;
-            &:first-child {
-                padding-left: 18px;
-            }
-            &:first-child {
-                padding-right: 18px;
-            }
-        }
-        &:nth-child(2n + 1) td {
-            background: #e0dace;
-        }
+
+    .sp-methods > dd {
+        margin: 5px 0 5px 15px;
     }
-}
-.customer-current-activity .action-refresh {
-    float: right;
-}
 
-.customer-current-activity .action-refresh,
-.customer-current-activity .data-table .icon {
-    display: inline-block;
-    text-indent: 100%;
-    overflow: hidden;
-    height: 16px;
-    width: 16px;
-    line-height: 16px;
-    white-space: nowrap;
-}
+    .sp-methods > dd > ul {
+        list-style: none;
+        padding: 0;
+    }
 
-.customer-current-activity .action-refresh:before,
-.customer-current-activity .data-table .icon:before {
-    content: "\e010";
-    color: #c3c2be;
-    display: block;
-    text-indent: 0;
-    font-size: 16px;
-    line-height: 16px;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    font-weight: normal;
-    speak: none;
-    -webkit-font-smoothing: antialiased;
-}
+    //
+    //  Popup Configuration Popup
+    //  --------------------------------------
 
-.customer-current-activity .data-table .icon-remove:before {
-    content: "\e07f";
-}
+    #product_composite_configure_messages {
+        margin-left: 0 !important;
+        padding: 10px 15px;
+    }
 
-.customer-current-activity .data-table .icon-add:before {
-    content: "\e071";
-}
+    .rma-popup,
+    .cms-popup {
+        background: #fff;
+        box-shadow: 0 3px 6px rgba(0, 0, 0, .4);
+        cursor: default;
+        position: fixed;
+        left: 50%;
+        top: 50%;
+        z-index: 1000;
+    }
 
-.customer-current-activity .auto-scroll {
-    .style18();
-    overflow: auto;
-    max-height: 150px;
-}
+    .rma-popup {
+        width: 540px;
+        margin: 0 0 0 -271px;
+    }
 
-.customer-current-activity .auto-scroll + button {
-    margin: 22px 0 0;
-}
+    .rma-popup .entry-edit .fieldset {
+        border: none;
+    }
 
-.customer-current-activity .actions {
-    border-top: none;
-    margin: 20px 0 0;
-    padding: 0;
-}
+    .rma-popup .validation-advice,
+    .rma-popup label.mage-error {
+        margin-left: 0;
+    }
 
-.overlay {
-    background: rgba(255, 255, 255, .5);
-    border-radius: 5px;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-
-    span {
-        color: #111;
-        font-weight: bold;
-        position: absolute;
-        top: 56px;
-        left: 0;
-        margin: 0 8px;
-        padding: 10px;
+    .rma-popup .content {
         background: #fff;
+        border-bottom: 1px solid #ccc;
+        max-height: 400px;
+        overflow: auto;
     }
-}
 
-//
-//    Order view
-// --------------------------------------
+    .rma-popup .content .grid {
+        padding: 0;
+    }
 
-.order-comments-history fieldset {
-    border: 0;
-    margin: 0;
-    padding: 0;
-}
+    .rma-popup .content .grid table {
+        border-bottom: 1px solid #cbd3d4;
+    }
 
-.order-comments-history textarea,
-.rma-history-form textarea {
-    height: 6em;
-    margin: 5px 0 10px;
-    resize: vertical;
-    width: 100%;
-}
+    .rma-popup .product-options {
+        border-bottom: 1px solid #e7e7e7;
+        margin: 0 0 15px;
+        padding: 0 0 12px;
+    }
 
-.order-comments-history input[type="checkbox"] {
-    margin-right: 5px;
-}
+    .rma-popup .product-options .required {
+        color: #333 !important;
+        font-weight: normal !important;
+    }
 
-.order-history-comments-options {
-    float: left;
-}
+    .rma-popup .product-options .required em {
+        color: #d40707;
+    }
 
-.order-comments-history .actions {
-    float: right;
-}
+    .rma-popup .last-fieldset .product-options {
+        border: 0 none;
+        margin-bottom: 0;
+        padding-bottom: 0;
+    }
 
-[class*="-order-"] .fieldset-wrapper address {
-    overflow: auto;
-}
+    .rma-popup .buttons-set {
+        text-align: right;
+        margin: 0;
+        overflow: hidden;
+        padding: 7px 10px 8px;
+    }
 
-//
-//    Orders comments
-//--------------------------------------
-.note-list {
-    list-style: none;
-    padding: 0;
-    li {
-        border-top: 1px solid #ededed;
-        padding: 9px 0;
-        &:first-child {
-            border: 0;
-            padding-top: 13px;
-        }
+    .rma-popup .buttons-set {
+        width: 518px;
     }
-    div {
-        font-size: 12px;
+
+    .cms-popup .buttons-set {
+        width: 289px;
     }
-    .note-list-date,
-    .note-list-status,
-    .note-list-customer span {
-        font-weight: bold;
+
+    .rma-popup .buttons-set button {
+        margin: 0 0 0 5px;
     }
-    .note-list-time,
-    .note-list-status {
-        border-right: 1px solid #676056;
-        padding: 0 5px 0 0;
-        margin: 0 5px 0 0;
+
+    .grid .rma-popup .form-list tr,
+    .grid tr.even .rma-popup .form-list tr,
+    .grid tr.on-mouse .rma-popup .form-list tr {
+        background: #fff !important;
     }
-    .note-list-customer {
-        white-space: nowrap;
+
+    //
+    //  URL rewrite
+    //  --------------------------------------
+
+    .adminhtml-urlrewrite-edit .field-entity-type-selector .label {
+        width: auto;
     }
-    .note-list-comment {
-        margin: 5px 0 0;
+
+    //
+    //  Shopping Cart Price Rule
+    //  --------------------------------------
+
+    .fieldset .field-coupon_code,
+    .fieldset .field-rule_use_auto_generation {
+        margin-bottom: 0;
     }
-    .note-list-customer-notapplicable {
-        color: #d87e34;
+
+    .field-rule_use_auto_generation .label {
+        margin-left: 5px;
     }
-    .note-list-customer-notified {
-        color: #185b00;
+
+    .field-rule_use_auto_generation .nested {
+        margin-bottom: 29px;
     }
-    .note-list-customer-not-notified {
-        color: #963535;
+
+    //
+    //  Product Image Placeholders
+    //  --------------------------------------
+
+    #catalog_placeholder .input-file,
+    #catalog_placeholder .delete-image > input {
+        margin-right: 5px;
     }
-}
 
-[class^=" sales-"] tr.headings .col-parent-transaction-id > span,
-[class^=" sales-"] tr.headings .col-method > span,
-[class^=" sales-"] tr.headings .col-transaction-id > span,
-[class^=" sales-"] tr.headings .col-transaction-type > span,
-[class^=" sales-"] tr.headings .col-gtbase > span,
-[class^=" sales-"] tr.headings .col-gtpurchased > span,
-[class*="-order-"] tr.headings .col-discont > span {
-    white-space: normal;
-}
+    // Permanent Redirect for old URL
+    .control > [name="product[url_key_create_redirect]"],
+    .control > [name="general[url_key_create_redirect]"] {
+        float: left;
+        margin: 8px 5px 0 0;
+    }
 
-[class^=" sales-"] .col-2-left-layout .hor-scroll {
-    margin-bottom: -4px;
-    overflow: auto;
-    padding-bottom: 4px;
-    width: 100%;
-}
+    .control > [name="product[url_key_create_redirect]"] + .label,
+    .control > [name="general[url_key_create_redirect]"] + .label {
+        width: auto;
+        padding-top: 8px;
+    }
 
-[class*="-order-"] .col-price .label,
-[class*="-order-"] .col-subtotal .label {
-    display: inline-block;
-    min-width: 60px;
-    white-space: nowrap;
-}
+    //
+    //  New Product Attribute Set
+    //  --------------------------------------
 
-[class*="-order-"] .item-options {
-    margin: 5px 0 5px 10px;
-    dt {
-        font-weight: bold;
+    .field-skeleton_set .select {
+        width: 100%;
     }
-    dd {
-        margin: 0 0 0 10px;
+
+    #affected-attribute-set-form .fieldset .field {
+        margin-bottom: 12px;
+
+        &:last-child {
+            margin-bottom: 0;
+        }
     }
-}
 
-.adminhtml-rma-item-attribute-edit .col-position input {
-    text-align: center;
-}
+    //
+    //  Cache Management
+    //  --------------------------------------
 
-.order-subtotal .label {
-    text-align: right;
-}
+    .additional-cache-management .label {
+        margin-top: 5px;
+    }
 
-.items-to-invoice {
-    border: 1px solid #c0bbaf;
-    margin-top: 13px;
-    width: 100%;
-}
+    //
+    //  Categories
+    //  --------------------------------------
 
-.items-to-invoice td,
-table.items-to-invoice tbody tr:hover td {
-    background-color: #e6e3de;
-    border: 0;
-    text-align: center;
-}
+    .category-content .form-inline.permissions-custom-options {
+        .messages {
+            li {
+                margin-top: 0;
+            }
+        }
+        .data-table {
+            margin-bottom: 25px;
+        }
+    }
 
-[class~=" -order-creditmemo-"] .no-items {
-    padding-top: 13px;
-    text-align: center;
-}
+    //
+    //  Marketing - Email Reminders
+    //  --------------------------------------
 
-.items-to-invoice .grand-total {
-    color: #19a3d1;
-    font-weight: bold;
-}
+    .lt-1280 .adminhtml-reminder-edit #customerGrid .grid .filter .range div.date {
+        min-width: 0;
+    }
 
-.adminhtml-order-shipment-new .order-totals .fieldset-wrapper {
-    padding-top: 18px;
-}
+    //
+    //  Customers - Manage Shopping Cart
+    //  --------------------------------------
 
-.creditmemo-totals .data-table input[type="text"] {
-    text-align: right;
-    width: 60px;
-}
+    .checkout-index-index {
+        .products-search {
+            margin-top: 35px;
+            > .actions {
+                text-align: right;
+                margin: 10px 0;
+            }
+        }
+        .shopping-cart-items {
+            > .actions {
+                margin-bottom: 15px;
+            }
+            .box-left,
+            .box.right {
+                width: 49%;
+                fieldset {
+                    border-radius: 5px;
+                }
+            }
+            .box-left {
+                float: left;
+            }
+            .box.right {
+                float: right;
+            }
+        }
+        .grid table .action-configure {
+            float: right;
+        }
+    }
 
-[class*="-order-"] .order-subtotal .label {
-    width: 80%;
-}
+    //
+    //  Clearfix
+    //  --------------------------------------
+
+    .shopping-cart-items:before,
+    .shopping-cart-items:after,
+    .image-panel:before,
+    .image-panel:after,
+    .images:before,
+    .images:after,
+    .tax-rate-popup .field:before,
+    .tax-rate-popup .field:after,
+    .clearfix:before,
+    .clearfix:after,
+    #tab_content_downloadableInfo .data-table td .row:before,
+    #tab_content_downloadableInfo .data-table td .row:after {
+        content: "";
+        display: table;
+    }
 
-[class^=" adminhtml-rma-"] .rma-items th.col-qty span,
-.adminhtml-rma-edit .rma-items th.col-qty span {
-    text-align: left;
-    white-space: normal;
-}
+    .shopping-cart-items:after,
+    .image-panel:after,
+    .images:after,
+    .tax-rate-popup .field:after,
+    .clearfix:after,
+    #tab_content_downloadableInfo .data-table td .row:after {
+        clear: both;
+    }
+    //
+    //  pages.less (end)
+    //  --------------------------------------
 
-.adminhtml-rma-edit .data-table .col-carrier,
-[class^=" sales-billing-agreement-"] .log-details .data-table th {
-    width: 20%;
-}
 
-.adminhtml-rma-edit .data-table .col-title {
-    width: 35%;
-}
 
-.adminhtml-rma-edit .data-table .col-number {
-    width: 25%;
-}
+    //
+    //  debug.less (begin)
+    //  ==========================================================================
 
-[class*="-order-"] .order-shipping-address .price,
-.order-shipping-address .shipping-description-title {
-    font-weight: bold;
-}
+    //
+    //  This file was created to debug old classes in order to indicate where we must replase it with new ones
 
-[class^=" adminhtml-rma-"] .col-actions a {
-    cursor: pointer;
-    white-space: nowrap;
-}
+    .debug {
+        border: 1px solid red !important;
+    }
 
-[class^=" adminhtml-rma-"] .col-reason input[type="text"] {
-    margin: 5px 0 0;
-    width: 100%;
-}
+    //
+    //  Accordion
+    //  ------------------------
 
-[class^=" adminhtml-rma-"] .col-actions .separator {
-    margin: 0 3px;
-}
+    .accordion {
+        margin: 0 0 8px;
+        padding: 0;
+    }
 
-[class^=" sales-"] .order-payment-method .data-table {
-    margin-top: 15px;
-}
+    .accordion > dt,
+    .accordion > dd.open,
+    .accordion .collapseable,
+    .section-config.active > .collapseable + input + fieldset,
+    .accordion .collapseable.open + input + fieldset {
+        background: #fff;
+        padding: 5px 18px 2px;
+        position: relative;
+    }
 
-[class^=" sales-"] .order-payment-currency {
-    margin-top: 15px;
-}
+    .accordion > dt + dd {
+        display: none;
+    }
 
-[class^=" sales-"] .grid .data {
-    border-bottom: 1px solid #c0bbaf;
-}
+    .accordion > dt.open,
+    .section-config.active > .collapseable,
+    .accordion .collapseable.open {
+        margin: 0;
+        border-bottom: 0;
+        border-radius: 5px 5px 0 0;
+    }
+    .section-config.active > .collapseable + input + fieldset,
+    .accordion > dt + dd.open,
+    .accordion .collapseable.open + input + fieldset {
+        padding: 25px 18px 18px;
+        display: block;
+        margin-left: 0;
+        border-top: 0;
+        border-radius: 0 0 5px 5px;
+    }
 
-[class^=" sales-"] .grid td .option-label {
-    font-weight: bold;
-}
+    .section-config > .collapseable > a,
+    .accordion > dt a,
+    .accordion .collapseable > a {
+        .style10();
+        display: block;
+        padding: 7px 0 10px 22px;
+        text-decoration: none;
+        position: relative;
+        cursor: pointer;
+        border-bottom: 1px solid #cac3b4;
+    }
 
-[class^=" sales-"] .grid td .option-value {
-    margin: 0 0 0 10px;
-}
+    .section-config > .collapseable > a i,
+    .accordion > dt a i,
+    .accordion .collapseable > a i {
+        .style31();
+    }
 
-.col-product .product_to_add {
-    float: right;
-}
+    .section-config > .collapseable > a:before,
+    .accordion > dt a:before,
+    .accordion .collapseable > a:before {
+        position: absolute;
+        left: 0;
+        top: 11px;
+        font-family: 'MUI-Icons';
+        font-style: normal;
+        speak: none;
+        font-size: 16px;
+        font-weight: normal;
+        -webkit-font-smoothing: antialiased;
+        content: '\e02a'; // arrow right icon
+        color: #b2b0ad;
+    }
 
-[class^=" adminhtml-extension-custom-"] {
-    #authors_fieldset .data-table td {
-        vertical-align: top;
+    .section-config.active > .collapseable > a:before,
+    .accordion > dt.open a:before,
+    .accordion .collapseable.open a:before {
+        content: '\e02c'; // arrow down icon
+    }
+    .section-config > .collapseable > a:hover:before,
+    .accordion > dt a:hover:before,
+    .accordion .collapseable > a:hover:before {
+        color: #7e7e7e;
     }
-}
 
-//
-//    Orders refund
-//--------------------------------------
-.field-refund-store-credit {
-    .input-text {
-        text-align: right;
-        width: 60px;
+    // PayPal connected
+
+    .section-config.complex .section-config.with-button {
+        padding:20px 15px;
+        margin:0 -30px 0 -15px;
+        border-bottom:1px solid #eae6e0;
     }
-}
 
-//
-//    Packaging for Shipping Popup
-// --------------------------------------
-#popup-window-mask,
-.popup-window-mask {
-    background: rgba(0, 0, 0, .5);
-    position: absolute;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    z-index: 999;
-}
+    .section-config.complex tr:last-child .section-config.with-button {
+        border-bottom:0;
+    }
 
-.packaging-window,
-.packed-window {
-    background: #fff;
-    box-shadow: 0 3px 6px rgba(0, 0, 0, .4);
-    left: 50%;
-    margin: -200px 0 0 -471px;
-    position: fixed;
-    top: 50%;
-    width: 1000px;
-    z-index: 1000;
-}
+    .section-config.complex .section-config.with-button > .entry-edit-head {
+        padding: 0 0 0 25px;
+        border:0;
+    }
 
-.packaging-window .entry-edit-head {
-    padding: 3px 5px;
-}
+    .section-config.complex .section-config.with-button.enabled > .entry-edit-head:before {
+        content: "\e01e";
+        color:#fff;
+        background: #65940a;
+        font-family: "MUI-Icons";
+        font-weight: normal;
+        padding:3px;
+        font-size: 10px;
+        width:10px;
+        height:10px;
+        line-height: 10px;
+        overflow: hidden;
+        border-radius: 8px;
+        display: block;
+        float:left;
+        margin-left:-25px;
+        margin-top:0;
+    }
 
-.packaging-window .messages {
-    padding: 10px 26px 10px 32px;
-    border-radius: 0;
-    color: #963535;
-    text-shadow: none;
-    position: relative;
-    background: #f3dcd8;
-    border: 1px solid #963535;
-    margin-top: -1px;
-}
+    .section-config.complex .section-config.with-button > .config {
+        margin:10px -10px;
+        border:1px solid #d1d0ce;
+        border-radius: 0;
+        padding:5px 0;
+    }
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr > td {
+        padding:0;
+    }
+
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head {
+        border:0;
+        border-radius: 0;
+        margin-bottom:0;
+        padding:5px 10px 2px;
+        border-bottom:1px solid #d1d0ce;
+        background: transparent;
+    }
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head > a {
+        padding-left: 22px;
+    }
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head > a:before {
+        left: 0;
+    }
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr:last-child > td > .section-config > .entry-edit-head {
+        border:0;
+    }
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head a {
+        border-bottom:0;
+    }
+
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .config {
+        border:0;
+        border-bottom:1px solid #d1d0ce;
+        border-radius: 0;
+        margin:0;
+        padding-bottom:50px;
+    }
+    .section-config.complex .section-config.with-button > .config > table > tbody > tr:last-child > td > .section-config > .config {
+        border-bottom:0;
+    }
 
-.packaging-window .messages:before {
-    position: absolute;
-    left: 8px;
-    top: 50%;
-    margin-top: -11px;
-    background: none;
-    text-shadow: none;
-    width: auto;
-    height: auto;
-    border: 0;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    font-size: 16px;
-    content: '\e069';
-    color: #963535;
-}
+    .section-config .config h4 {
+        padding-left:25%;
+        font-size: 18px;
+    }
 
-.packaging-window .validation-failed {
-    background: #fef0ed;
-    border: 1px dashed #d6340e;
-}
+    .section-config .config td.label label.enabled:before {
+        content: "\e01e";
+        color:#fff;
+        background: #65940a;
+        font-family: "MUI-Icons";
+        font-weight: normal;
+        padding:3px;
+        font-size: 10px;
+        width:10px;
+        height:10px;
+        line-height: 10px;
+        overflow: hidden;
+        border-radius: 8px;
+        display: block;
+        float:left;
+        margin-right:5px;
+    }
 
-.packaging-window {
-    .packaging-content {
-        overflow: auto;
-        overflow-x: hidden;
-        height: auto !important;
-        max-height: 400px;
-        .measures {
-            width: 50px;
-        }
-        .options-weight {
-            vertical-align: top;
-        }
+    .section-config.complex .section-config.with-button > .config:before {
+        content:'';
+        height: 9px;
+        width: 20px;
+        overflow: hidden;
+        display: block;
+        position: absolute;
+        bottom: 100%;
+        left: 50%;
+        z-index: 2;
+        margin-left: -10px;
+        background: url(../images/subconfig-bg.png) no-repeat 0 0;
     }
-}
 
-.packaging-window .package-options {
-    width: 100%;
-    border-top: 1px solid #ccc;
-    padding: 10px 0 0;
-    margin: 3px 0 0;
-}
+    .section-config.config-advanced {
+        padding:30px 0 0;
+    }
+    .section-config.config-advanced > .entry-edit-head {
+        border:0;
+        padding: 0 0 0 25%;
+    }
+    .section-config.config-advanced > .entry-edit-head a {
+        border:0 !important;
+    }
+    .section-config.config-advanced > .config {
+        padding-left:0!important;
+        padding-right:0!important;
+        border:0!important;
+        border-radius: 0!important;
+    }
 
-.packaging-window .package-options td {
-    vertical-align: middle;
-}
+    .section-config.config-advanced > .entry-edit-head a {
+        margin-left:-22px;
+    }
 
-.packaging-window .package-options .input-text {
-    width: 50px;
-}
 
-.packaging-window .package_prapare {
-    margin-bottom: 15px;
-}
+    .section-config.with-button .config-heading strong {
+        display: block;
+        .style28();
+        margin-bottom:5px;
+    }
 
-.packaging-window .package-options .customs-value {
-    width: 80px;
-}
+    .section-config.with-button .config-heading .button-container {
+        margin:15px 0 0;
+    }
+    .section-config.with-button .button-container {
+        line-height: 28px;
+    }
+    .section-config.with-button .button-container a {
+        margin-left:20px;
+    }
 
-.packaging-window .package-options .options-weight {
-    width: 75px;
-}
+    .section-config.with-button .action-configure span {
+        display: block;
+        position: relative;
+        text-align: center;
+    }
+    .section-config.with-button .action-configure .state-opened {
+        visibility: hidden;
+        height:0;
+        overflow: hidden;
+    }
+    .section-config.with-button .action-configure.open .state-opened {
+        visibility: visible;
+        height:auto;
+        overflow: auto;
+    }
+    .section-config.with-button .action-configure.open .state-closed {
+        visibility: hidden;
+        height:0;
+        overflow: hidden;
+    }
 
-.packaging-window .package-options .options-units-weight {
-    width: 45px;
-}
+    .accordion > dt + dd {
+        display: none;
+    }
 
-.packaging-window .package-options .options-units-dimensions {
-    width: 45px;
-}
+    .accordion > dt + .open:empty {
+        background: #fff url(../mui/images/ajax-loader-big.gif) no-repeat center;
+        height: 100px;
+    }
 
-.packaging-window .package-options .options-content-type {
-    width: 120px;
-}
+    // TODO: arrange configuration tables
+    .accordion .collapseable.disabled {
+        background: #f1f1f1;
+    }
 
-.packaging-window .package-options input[type=text].disabled,
-.packaging-window .package-options select.disabled {
-    background: #eee;
-}
+    .accordion .collapseable.disabled > a {
+        cursor: not-allowed;
+    }
 
-.packaging-window .package-options-contents {
-    border-top: 0;
-}
+    .accordion .collapseable.disabled > a:before {
+        content: '';
+    }
 
-.packaging-window .package-add-products {
-    margin: 20px 0 0;
-}
+    .accordion .config {
+        border: 0;
+    }
 
-.packaging-window .package-add-products .grid {
-    padding: 0;
-}
+    .accordion .config {
+        .comment a,
+        .link-more {
+            .style3();
+        }
+    }
 
-.packaging-window .package-add-products .grid button {
-    vertical-align: middle;
-}
+    .accordion .config legend {
+        display: none;
+    }
 
-.packaging-window .package-number {
-    font-weight: bold;
-}
+    .accordion .config table {
+        width: 100%;
+    }
 
-.packaging-window .package-number span {
-    margin-left: 5px;
-}
+    .accordion .config .label {
+        float: none;
+        width: 33%;
+        padding-right: 30px;
+        text-align: right;
+        font-size: 14px;
+        font-weight: 600;
+        color: #303030;
+    }
 
-.packed-window .entry-edit-head {
-    padding: 3px 5px;
-}
+    .accordion .config .value .label {
+        padding: 6px 5px 0 15px;
+        vertical-align: top;
+        width: auto;
+    }
 
-.packed-window .packed-content {
-    padding: 10px 10px 0;
-    overflow: auto;
-    max-height: 400px;
-}
+    .accordion .config .value .label:first-child {
+        padding-left: 0;
+    }
 
-.packed-window .package {
-    border-top: 1px solid #ededed;
-    margin-bottom: 30px;
-    padding: 10px;
-}
+    .accordion .config .label label {
+        padding-top: 7px;
+    }
 
-.packed-window .package:first-child {
-    border-top: 0;
-}
+    .accordion .config td {
+        background: none;
+        border: 0;
+        padding: 22px 15px 0 0;
+        vertical-align: top;
+    }
 
-.package-info {
-    background: #e6e3de;
-    border: 1px solid #c0bbaf;
-}
+    .accordion .paypal-selection-simplified {
+        padding-left: 30px;
+    }
 
-.package-info th {
-    font-weight: bold;
-}
+    .accordion .paypal-selection input[type="checkbox"] {
+        margin: -4px 7px 0 0;
+    }
 
-.packed-window .package-info table tbody tr td,
-.packed-window .package-info table tbody tr th,
-.package-info table tbody tr:nth-child(2n+1) td,
-.package-info table tbody tr:nth-child(2n+1) th {
-    background: none;
-    border: 0;
-    padding: 5px 5px 2px;
-}
+    .accordion .config input[type="text"],
+    .accordion .config input[type="password"],
+    .accordion .config select,
+    .accordion .config textarea {
+        width: 100%;
+    }
 
-.packed-window .package .grid {
-    padding: 0;
-}
+    .accordion .config input.input-file {
+        margin-top: 4px;
+    }
 
-.packed-window .package-options {
-    width: 60%;
-}
+    .accordion .config select.select-date {
+        width: 27%;
+    }
 
-.packed-window .package-options td,
-.packed-window .package-options th {
-    padding: 1px 0;
-}
+    .accordion .config .value {
+        width: 44%;
+        padding-right: 40px;
+        .checkboxes {
+            list-style: none;
+            padding: 0;
+            margin: -3px 0 0;
 
-.grid .popup-window {
-    text-align: left;
-}
+            li {
+                margin: 7px 0;
+            }
 
-.grid tr.on-mouse td .popup-window .data-table tbody tr:nth-child(2n+1) td,
-.grid table tbody tr.on-mouse:nth-child(odd):hover td .popup-window .data-table tbody tr:nth-child(2n+1) td,
-.grid table tbody tr.on-mouse:nth-child(odd):hover td .popup-window .data-table tbody tr:nth-child(2n+1):hover td,
-.grid table tbody tr.on-mouse:nth-child(2n+1):hover td .popup-window .data-table tbody tr:nth-child(2n+1) td,
-.grid table tbody tr.on-mouse:nth-child(2n+1):hover td .popup-window .data-table tbody tr:nth-child(2n+1):hover td,
-.grid table tbody tr.on-mouse:hover td .popup-window .data-table tbody tr:nth-child(2n+1),
-.grid table tbody tr.on-mouse:hover th .popup-window .data-table tbody tr:nth-child(2n+1) {
-    background-color: #fbfaf6;
-}
+            input,
+            label {
+                vertical-align: middle;
+            }
 
-.grid .popup-window {
-    text-align: left;
-}
+            label {
+                margin-left: 5px;
+            }
+        }
+    }
 
-.popup-window-buttons-set {
-    text-align: right;
-    padding: 25px;
-}
+    .accordion .config .value.with-tooltip {
+        padding-top:5px;
+    }
+    .accordion .config .value.with-tooltip .tooltip {
+        position: relative;
+        top:0;
+        left:0;
+        right:0;
+        bottom:0;
+        float:right;
+        margin: 6px -28px 0 0;
+    }
+    .accordion .config .value.with-tooltip .tooltip-content {
+        padding: 18px;
+        margin: 0 -17px 10px 0;
+        right: 0;
+        bottom: 100%;
+        width: 239px;
+        max-width: 239px;
+        font-size: 13px;
+        line-height: 1.4;
+        background: #31302b;
+        background: rgba(49, 48, 43, .8);
+        border-radius: 5px;
+    }
+    .accordion .config .value.with-tooltip .tooltip-content:before {
+        content: '';
+        position: absolute;
+        width: 0;
+        height: 0;
+        top: auto;
+        bottom:-5px;
+        left:auto;
+        right: 20px;
+        border-left: 5px solid transparent;
+        border-right: 5px solid transparent;
+        border-top: 5px solid #31302b;
+        border-bottom:0;
+        opacity: .8;
+    }
 
-.popup-window-title {
-    background: #f3efea;
-    padding: 19px 20px;
-}
+    .accordion .config .value.with-tooltip .help {
+        position: relative;
+        width:auto;
+        margin:0;
+    }
 
-.popup-window-title .title {
-    color: #676056;
-    display: block;
-    font-size: 20px;
-    line-height: 1;
-}
+    .accordion .config .scope-label {
+        color: #999;
+        font-size: 12px;
+        letter-spacing: .05em;
+        padding: 31px 15px 0 0;
+    }
 
-.popup-window-title .actions {
-    float: right;
-}
+    .accordion .config .note {
+        color: #303030;
+        font-size: 12px;
+        margin: 5px 0;
+    }
 
-.popup-window-content {
-    padding: 25px 25px 0;
-}
+    .accordion .config .note a {
+        .style22();
+    }
 
-.popup-window-content > ul {
-    list-style: none;
-    padding: 0;
-}
+    .accordion .config .system-tooltip-box {
+        position: absolute;
+    }
 
-.packaging-window .col-weight {
-    text-align: left;
-    width: 60px;
-}
+    .accordion .paypal-selection {
+        margin: 10px;
+        width: 98%;
+    }
 
-.packaging-window .col-qty {
-    text-align: left;
-    width: 80px;
-}
+    .accordion .paypal-selection th {
+        padding: 6px 10px 7px;
+    }
 
-.packed-window .col-qty,
-.packed-window .col-weight,
-.packed-window .col-qty_ordered {
-    text-align: right;
-    width: 70px;
-}
+    .accordion .paypal-selection {
+        border-bottom: 2px solid #c0bbaf;
+    }
 
-.packaging-window .col-select,
-.packaging-window .col-measure {
-    text-align: center;
-    width: 35px;
-}
+    .accordion .paypal-payment-notice {
+        margin: 10px;
+    }
 
-.popup-fieldset-title .title {
-    color: #666;
-    display: inline-block;
-    font-size: 18px;
-    font-weight: normal;
-    padding: 7px 0 10px;
-}
+    .accordion .custom-options {
+        border: 1px solid #999;
+        padding: 0 10px;
+        margin: 0 0 20px;
+    }
 
-.popup-fieldset-title .actions {
-    float: right;
-}
+    //
+    //  Sales
+    //  --------------------------------------
 
-.packaging-window select {
-    margin-bottom: 0;
-}
 
-.packaging-window .col-width,
-.packaging-window .col-height,
-.packaging-window .col-length,
-.packaging-window .data-table .col-total-weight input[type="text"],
-.packaging-window .data-table .col-custom input[type="text"] {
-    width: 60px;
-}
+    .order-items .entry-edit-head .form-buttons {
+        float: right;
+    }
 
-.packaging-window .col-total-weight {
-    white-space: nowrap;
-    width: 100px;
-}
+    .order-items .entry-edit-head .icon-head {
+        display: inline;
+    }
 
-.packaging-window .col-signature {
-    width: 160px;
-}
+    .order-items .entry-edit-head {
+        margin-bottom: 20px;
+    }
 
-.packaging-window .data-table .col-actions,
-.packaging-window .col-total-weight,
-.packaging-window .data-table .col-custom {
-    white-space: nowrap;
-}
+    .order-items .entry-edit-head:before,
+    .order-items .entry-edit-head:after {
+        content: "";
+        display: table;
+    }
 
-.packaging-window .data-table .action-delete {
-    margin: 5px 0 0 5px;
-}
+    .order-items .entry-edit-head:after {
+        clear: both;
+    }
 
-.packaging-window .grid tr th {
-    border-bottom: 1px solid #c9c2b8;
-}
+    //
+    //  Import-export tax rates
+    //  --------------------------------------
 
-.packaging-window .grid tr th:first-child,
-.packaging-window .grid td:first-child,
-.packaging-window .grid td:last-child {
-    border-left: 0;
-    border-right: 0;
-}
+    .import-export-tax-rates input[type=file] {
+        margin-right: 10px;
+    }
 
-.packaging-window .data-table .col-qty-edit {
-    white-space: nowrap;
-    width: 50px;
-}
+    .import-tax-rates,
+    .export-tax-rates {
+        float: left;
+        width: 48.9362%;
+    }
 
-.packaging-window .data-table .col-qty-edit input[type="text"] {
-    width: 50px;
-}
+    .export-tax-rates {
+        margin-left: 2.12766%;
+    }
 
-.sp-methods > dt {
-    font-weight: bold;
-}
+    .import-export-tax-rates:before,
+    .import-export-tax-rates:after {
+        content: "";
+        display: table;
+    }
 
-.sp-methods > dd {
-    margin: 5px 0 5px 15px;
-}
+    .import-export-tax-rates:after {
+        clear: both;
+    }
 
-.sp-methods > dd > ul {
-    list-style: none;
-    padding: 0;
-}
+    //
+    //  Product
+    //  --------------------------------------
 
-[class*="-order-"] .order-billing-address .packaging-window .actions,
-[class*="-order-"] .order-shipping-address .packaging-window .actions {
-    margin: 0;
-}
+    .tier {
+        margin: 20px 0 0;
+    }
 
-/*
-    Popup Configuration Popup
--------------------------------------- */
-#product_composite_configure_messages {
-    margin-left: 0 !important;
-    padding: 10px 15px;
-}
+    //
+    //  Edit attribute set
+    //  --------------------------------------
 
-.rma-popup, .cms-popup {
-    background: #fff;
-    box-shadow: 0 3px 6px rgba(0, 0, 0, .4);
-    cursor: default;
-    position: fixed;
-    left: 50%;
-    top: 50%;
-    z-index: 1000;
-}
+    .attribute-set-col {
+        display: block;
+        float: left;
+        margin-left: 2.127659574%;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box;
+        width: 31.9149%;
+    }
 
-.rma-popup {
-    width: 540px;
-    margin: 0 0 0 -271px;
-}
+    .attribute-set-col:first-child {
+        margin-left: 0;
+    }
 
-.rma-popup .entry-edit .fieldset {
-    border: none;
-}
+    .attribute-set-tree {
+        margin-top: 5px;
+        overflow: auto;
+        height: 400px;
+        width: 100%;
+    }
 
-.rma-popup .validation-advice,
-.rma-popup label.mage-error {
-    margin-left: 0;
-}
+    .attribute-set:before,
+    .attribute-set:after {
+        content: "";
+        display: table;
+    }
+    .attribute-set:after {
+        clear: both;
+    }
 
-.rma-popup .content {
-    background: #fff;
-    border-bottom: 1px solid #ccc;
-    max-height: 400px;
-    overflow: auto;
-}
+    //
+    //  Manage Categories
+    //  --------------------------------------
 
-.rma-popup .content .grid {
-    padding: 0;
-}
+    .catalog-category-edit .category-edit-title {
+        float: left;
+    }
 
-.rma-popup .content .grid table {
-    border-bottom: 1px solid #cbd3d4;
-}
+    //
+    //  Catalog Price Rule
+    //  --------------------------------------
 
-.rma-popup .product-options {
-    border-bottom: 1px solid #e7e7e7;
-    margin: 0 0 15px;
-    padding: 0 0 12px;
-}
+    .rule-tree-wrapper {
+        line-height: 28px;
+    }
 
-.rma-popup .product-options .required {
-    color: #333 !important;
-    font-weight: normal !important;
-}
+    .rule-tree .fieldset {
+        min-width: 0; // Fixed Chrome fieldset issue
+    }
 
-.rma-popup .product-options .required em {
-    color: #d40707;
-}
+    @-moz-document url-prefix() { // Fixed Firefox fieldset issue
+        .rule-tree .fieldset {
+            display: table-cell;
+        }
+    }
 
-.rma-popup .last-fieldset .product-options {
-    border: 0 none;
-    margin-bottom: 0;
-    padding-bottom: 0;
-}
+    .rule-tree ul {
+        list-style: none;
+        padding-left: 16px;
+        border-left: dotted 1px #888;
+    }
 
-.rma-popup .buttons-set {
-    text-align: right;
-    margin: 0;
-    overflow: hidden;
-    padding: 7px 10px 8px;
-}
+    .rule-tree li {
+        margin: 0 0 10px;
+    }
 
-.rma-popup .buttons-set {
-    width: 518px;
-}
+    .rule-tree .x-tree ul {
+        padding-left: 0 !important;
+        border-left: none !important;
+    }
 
-.cms-popup .buttons-set {
-    width: 289px;
-}
+    .rule-param .label {
+        color: #000;
+        float: none;
+        text-align: left;
+        padding: 0;
+        vertical-align: baseline;
+        width: auto;
+    }
 
-.rma-popup .buttons-set button {
-    margin: 0 0 0 5px;
-}
+    .rule-param .label-disabled {
+        color: #eee;
+        cursor: default;
+        text-decoration: none;
+    }
 
-.grid .rma-popup .form-list tr,
-.grid tr.even .rma-popup .form-list tr,
-.grid tr.on-mouse .rma-popup .form-list tr {
-    background: #fff !important;
-}
+    .rule-chooser,
+    .rule-param .element,
+    .rule-param-edit .label {
+        display: none;
+    }
 
-/*
-    URL rewrite
--------------------------------------- */
-.adminhtml-urlrewrite-edit .field-entity-type-selector .label {
-    width: auto;
-}
+    .rule-chooser .field-row {
+        .clearfix();
+        display: block;
+        margin-bottom: 17px;
+        .input-text {
+            margin-top: 5px;
+        }
+        .ui-datepicker-trigger {
+            margin-left: 5px;
+            margin-top:-2px;
+        }
+    }
 
-/*
-    Shopping Cart Price Rule
--------------------------------------- */
-.fieldset .field-coupon_code,
-.fieldset .field-rule_use_auto_generation {
-    margin-bottom: 0;
-}
+    .rule-param input,
+    .rule-param select {
+        width: auto !important;
+        margin: 0;
+        min-width: 170px;
+    }
 
-.field-rule_use_auto_generation .label {
-    margin-left: 5px;
-}
+    .rule-param-edit .element {
+        display: inline;
+    }
 
-.field-rule_use_auto_generation .nested {
-    margin-bottom: 29px;
-}
+    .rule-param-edit .element .addafter {
+        padding-left: 5px;
+    }
 
-/*
-    Product Image Placeholders
--------------------------------------- */
-#catalog_placeholder .input-file,
-#catalog_placeholder .delete-image > input {
-    margin-right: 5px;
-}
+    [class^="rule-param-"] img,
+    .rule-chooser-trigger img {
+        vertical-align: middle;
+    }
 
-/* Permanent Redirect for old URL */
-.control > [name="product[url_key_create_redirect]"],
-.control > [name="general[url_key_create_redirect]"] {
-    float: left;
-    margin: 8px 5px 0 0;
-}
+    .rule-chooser {
+        border: solid 1px #CCC;
+        margin: 20px;
+        padding: 15px 10px 5px;
+        overflow: auto;
+    }
 
-.control > [name="product[url_key_create_redirect]"] + .label,
-.control > [name="general[url_key_create_redirect]"] + .label {
-    width: auto;
-    padding-top: 8px;
-}
+    .rule-param-wait {
+        background: url(../mui/images/ajax-loader-small.gif) no-repeat left center;
+        padding-left: 20px;
+    }
 
-/*
-    New Product Attribute Set
--------------------------------------- */
-.field-skeleton_set .select {
-    width: 100%;
-}
+    //
+    //  URL Rewrite
+    //  --------------------------------------
 
-#affected-attribute-set-form .fieldset .field {
-    margin-bottom: 12px;
+    .field-entity-type-selector {
+        padding-top: 13px;
+    }
 
-    &:last-child {
-        margin-bottom: 0;
+    // jstree
+    .jstree-default .disabled > a {
+        color: #a29c94;
     }
-}
+    //
+    //  debug.less (end)
+    //  --------------------------------------
 
-/*
-    Cache Management
--------------------------------------- */
-.additional-cache-management .label {
-    margin-top: 5px;
-}
 
-/*
-    Categories
--------------------------------------- */
-.category-content .form-inline.permissions-custom-options {
-    .messages {
-        li {
-            margin-top: 0;
+//  Magento Import instructions
+//@magento_import "source/module.less"; // import theme styles
+
+    //
+    //  WYSIWYG editor styles fixes
+    //  ---------------------------------------------
+    .defaultSkin {
+        table.mceLayout {
+            td {
+                background: #fff;
+            }
+        }
+        td.mceToolbar {
+            padding: 1px 0 0;
         }
     }
-    .data-table {
-        margin-bottom: 25px;
+
+    .ui-tabs-panel {
+        border-top: 0;
+    }
+    #category_tab_content {
+        .ui-tabs-panel {
+            border-top: 1px solid #adadad;
+        }
     }
 }
 
-/*
-    Marketing - Email Reminders
--------------------------------------- */
-.lt-1280 .adminhtml-reminder-edit #customerGrid .grid .filter .range div.date {
-    min-width: 0;
-}
+//
+//  IE9 styles
+//  ---------------------------------------------
 
-/*
-    Customers - Manage Shopping Cart
--------------------------------------- */
-.checkout-index-index {
-    .products-search {
-        margin-top: 35px;
-        > .actions {
-            text-align: right;
-            margin: 10px 0;
+.ie9 {
+.admin__scope-old {
+    select {
+        &:not([multiple]) {
+            padding-right: 4px;
+            min-width: 0;
+        }
+    }
+
+    //  Table Filters
+    .filter select {
+        &:not([multiple]) {
+            padding-right: 0;
         }
     }
-    .shopping-cart-items {
-        > .actions {
-            margin-bottom: 15px;
+
+    .adminhtml-widget-instance-edit {
+        .grid-chooser .control {
+            margin-top: -18px;
         }
-        .box-left,
-        .box.right {
-            width: 49%;
-            fieldset {
-                border-radius: 5px;
+    }
+    .page-layout-admin-1column .page-columns,
+    .catalog-product-edit,
+    .catalog-product-new,
+    .sales-order-view,
+    .catalog-category-edit {
+        table.data {
+            table-layout: fixed;
+            word-wrap: break-word;
+            th {
+                word-wrap: normal;
+                overflow: hidden;
+                vertical-align: top;
+                > span {
+                    white-space: normal;
+                }
+            }
+            th:not(.col-select):not(.col-id):not(.col-severity),
+            td:not(.col-select):not(.col-id):not(.col-severity) {
+                width: auto;
             }
         }
-        .box-left {
-            float: left;
+    }
+
+    #setGrid_table,
+    #attributeGrid_table,
+    .custom-options .data-table,
+    .ui-dialog .data,
+    .page-layout-admin-1column .page-columns .data,
+    .sales-order-view .data,
+    .catalog-category-edit .data {
+        word-wrap: break-word;
+        table-layout: fixed;
+    }
+    .fieldset-wrapper {
+        table.data {
+            table-layout: inherit;
+            word-wrap: normal;
         }
-        .box.right {
-            float: right;
+    }
+    .sales-order-create-index table.data,
+    .sales-order-create-index .fieldset-wrapper table.data {
+        table-layout: fixed;
+        word-wrap: break-word;
+        th {
+            word-wrap: normal;
+            overflow: hidden;
+            vertical-align: top;
+            > span {
+                white-space: normal;
+            }
         }
     }
-    .grid table .action-configure {
-        float: right;
+
+    .entry-edit .product-options .grouped-items-table {
+        table-layout: fixed;
+        word-wrap: break-word;
+        th {
+            word-wrap: normal;
+            overflow: hidden;
+            vertical-align: top;
+            > span {
+                white-space: normal;
+            }
+        }
     }
-}
 
-/*
-    Clearfix
--------------------------------------- */
-.shopping-cart-items:before,
-.shopping-cart-items:after,
-.image-panel:before,
-.image-panel:after,
-.images:before,
-.images:after,
-.tax-rate-popup .field:before,
-.tax-rate-popup .field:after,
-.clearfix:before,
-.clearfix:after,
-#tab_content_downloadableInfo .data-table td .row:before,
-#tab_content_downloadableInfo .data-table td .row:after {
-    content: "";
-    display: table;
+    .catalog-category-edit,
+    .adminhtml-cache-index,
+    .adminhtml-process-list,
+    .indexer-indexer-list,
+    .adminhtml-notification-index {
+        table.data {
+            table-layout: inherit;
+            word-wrap: normal;
+        }
+    }
 }
-
-.shopping-cart-items:after,
-.image-panel:after,
-.images:after,
-.tax-rate-popup .field:after,
-.clearfix:after,
-#tab_content_downloadableInfo .data-table td .row:after {
-    clear: both;
 }
-/* ==========================================================================
-   pages.less (end)
-   ========================================================================== */
-
 
-/* ==========================================================================
-   debug.less (begin)
-   ========================================================================== */
-///*
-//    This file was created to debug old classes in order to indicate where we must replase it with new ones
-
-.debug {
-    border: 1px solid red !important;
+//
+//  Pages styles
+//  ---------------------------------------------
+
+[class^=" catalog-product-"],
+[class^=" newsletter-"] {
+    .admin__scope-old {
+        .page-actions .action-back.mage-error {
+            color: #b57c72;
+        }
+    }
 }
 
-/*
-    Accordion
-------------------------*/
-.accordion {
-    margin: 0 0 8px;
-    padding: 0;
+.catalog-product-new,
+.catalog-product-edit {
+    .admin__scope-old {
+        .user-defined.type-select select {
+            width: 100%;
+        }
+    }
 }
 
-.accordion > dt,
-.accordion > dd.open,
-.accordion .collapseable,
-.section-config.active > .collapseable + input + fieldset,
-.accordion .collapseable.open + input + fieldset {
-    background: #fff;
-    padding: 5px 18px 2px;
-    position: relative;
+.customer-index-edit {
+    .admin__scope-old {
+        .grid tr.headings th > span {
+            white-space: normal;
+        }
+    }
 }
 
-.accordion > dt + dd {
-    display: none;
+//  Configuration -> Payment Methods
+.adminhtml-system-config-edit {
+    .admin__scope-old {
+        .payflow-settings-notice {
+            padding: 10px;
+            .important-label {
+                .style32();
+            }
+            ul.options-list strong {
+                .style28();
+            }
+        }
+    }
 }
 
-.accordion > dt.open,
-.section-config.active > .collapseable,
-.accordion .collapseable.open {
-    margin: 0;
-    border-bottom: 0;
-    border-radius: 5px 5px 0 0;
-}
-.section-config.active > .collapseable + input + fieldset,
-.accordion > dt + dd.open,
-.accordion .collapseable.open + input + fieldset {
-    padding: 25px 18px 18px;
-    display: block;
-    margin-left: 0;
-    border-top: 0;
-    border-radius: 0 0 5px 5px;
+.adminhtml-googleshopping-items-index {
+    .admin__scope-old {
+        .grid-title {
+            padding: 15px;
+            .title {
+                font-size: 18px;
+            }
+        }
+        .grid {
+            padding-bottom: 25px;
+        }
+        .page-actions {
+            float: right;
+        }
+    }
 }
 
-.section-config > .collapseable > a,
-.accordion > dt a,
-.accordion .collapseable > a {
-    .style10();
-    display: block;
-    padding: 7px 0 10px 22px;
-    text-decoration: none;
-    position: relative;
-    cursor: pointer;
-    border-bottom: 1px solid #cac3b4;
+.adminhtml-system-backup-index,
+.adminhtml-scheduled-operation-index,
+.adminhtml-system-currency-index,
+.adminhtml-system-currencysymbol-index,
+.adminhtml-cache-index,
+.adminhtml-system-store-index,
+.sales-order-status-index {
+    .admin__scope-old {
+        .page-actions.fixed {
+            background-image: none;
+            padding: 0 21px;
+            position: fixed;
+        }
+    }
 }
 
-.section-config > .collapseable > a i,
-.accordion > dt a i,
-.accordion .collapseable > a i {
-    .style31();
+.adminhtml-system-currency-index {
+    .admin__scope-old {
+        .page-actions.fixed .import-service {
+            display: inline-block;
+            float: none;
+        }
+    }
 }
 
-.section-config.active > .collapseable > a,
-.accordion .collapseable.open a,
-.accordion dt.open a {
-    /*border-bottom: 1px solid #ededed;*/
-}
-.section-config > .collapseable > a:before,
-.accordion > dt a:before,
-.accordion .collapseable > a:before {
-    position: absolute;
-    left: 0;
-    top: 11px;
-    font-family: 'MUI-Icons';
-    font-style: normal;
-    speak: none;
-    font-size: 16px;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    content: '\e02a'; /* arrow right icon */
-    color: #b2b0ad;
+.adminhtml-cache-index {
+    .admin__scope-old {
+        .additional-cache-management {
+            margin-bottom: 0;
+        }
+    }
 }
 
-
-.section-config.active > .collapseable > a:before,
-.accordion > dt.open a:before,
-.accordion .collapseable.open a:before {
-    content: '\e02c'; /* arrow down icon */
-}
-.section-config > .collapseable > a:hover:before,
-.accordion > dt a:hover:before,
-.accordion .collapseable > a:hover:before {
-    color: #7e7e7e;
+//  Reports - PayPal Settlement Reports
+.adminhtml-paypal-reports-index {
+    .admin__scope-old {
+        .grid tr.headings th > span {
+            white-space: normal;
+        }
+        .col-transaction_event_code {
+            max-width: 150px;
+        }
+        .col-amount,
+        .col-fee-amount {
+            text-align: right;
+        }
+    }
 }
 
-/* PayPal connected */
-
-.section-config.complex .section-config.with-button {
-    padding:20px 15px;
-    margin:0 -30px 0 -15px;
-    border-bottom:1px solid #eae6e0;
+//  Newsletter Templates
+.newsletter-template-index {
+    .admin__scope-old {
+        .col-id {
+            width: 35px;
+        }
+        .col-actions {
+            width: 80px;
+        }
+        .col-type {
+            width: 100px;
+        }
+        .col-added,
+        .col-updated {
+            width: 140px;
+        }
+    }
 }
 
-.section-config.complex tr:last-child .section-config.with-button {
-    border-bottom:0;
+[class^=' newsletter-'] {
+    .admin__scope-old {
+        .buttons-set {
+            margin: 0 0 15px;
+            button {
+                margin-right: 4px;
+            }
+        }
+    }
 }
 
-.section-config.complex .section-config.with-button > .entry-edit-head {
-    padding: 0 0 0 25px;
-    border:0;
+//  Newsletter - Queue
+.newsletter-queue-index {
+    .admin__scope-old {
+        .col-id {
+            width: 35px;
+        }
+        .col-finish,
+        .col-start {
+            width: 130px;
+        }
+        .col-status,
+        .col-processed,
+        .col-recipients {
+            white-space: nowrap;
+            width: 85px;
+        }
+        td.col-processed,
+        .newsletter-queue-index td.col-recipients {
+            text-align: right;
+        }
+        .col-actions {
+            width: 80px;
+        }
+    }
 }
 
-.section-config.complex .section-config.with-button.enabled > .entry-edit-head:before {
-    content: "\e01e";
-    color:#fff;
-    background: #65940a;
-    font-family: "MUI-Icons";
-    font-weight: normal;
-    padding:3px;
-    font-size: 10px;
-    width:10px;
-    height:10px;
-    line-height: 10px;
-    overflow: hidden;
-    border-radius: 8px;
-    display: block;
-    float:left;
-    margin-left:-25px;
-    margin-top:0;
+//  Newsletter - Subscribers
+.newsletter-subscriber-index {
+    .admin__scope-old {
+        .col-id {
+            width: 35px;
+        }
+        .col-type {
+            width: 75px;
+        }
+        .col-status {
+            white-space: nowrap;
+            width: 85px;
+        }
+    }
 }
 
-.section-config.complex .section-config.with-button > .config {
-    margin:10px -10px;
-    border:1px solid #d1d0ce;
-    border-radius: 0;
-    padding:5px 0;
-}
-.section-config.complex .section-config.with-button > .config > table > tbody > tr > td {
-    padding:0;
+//  Newsletter - Problems
+.newsletter-problem-index {
+    .admin__scope-old {
+        .col-select {
+            width: 25px;
+        }
+        .col-id {
+            width: 35px;
+        }
+        .col-start {
+            width: 130px;
+        }
+        .col-error-code {
+            width: 150px;
+        }
+    }
 }
 
-.section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head {
-    border:0;
-    border-radius: 0;
-    margin-bottom:0;
-    padding:5px 10px 2px;
-    border-bottom:1px solid #d1d0ce;
-    background: transparent;
-}
-.section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head > a {
-    padding-left: 22px;
-}
-.section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head > a:before {
-    left: 0;
-}
-.section-config.complex .section-config.with-button > .config > table > tbody > tr:last-child > td > .section-config > .entry-edit-head {
-    border:0;
-}
-.section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .entry-edit-head a {
-    border-bottom:0;
+[class*="-order-"] .admin__scope-old .order-history,
+[class*="-order-"] .admin__scope-old .order-comments-history,
+[class*="-order-"] .admin__scope-old .order-information,
+[class*="-order-"] .admin__scope-old .order-billing-address,
+[class*="-order-"] .admin__scope-old .order-payment-method,
+[class^=" adminhtml-rma-"] .admin__scope-old .order-comments-history,
+[class^=" adminhtml-rma-"] .admin__scope-old .order-shipping-address,
+[class^=" adminhtml-rma-"] .admin__scope-old .rma-request-details {
+    float: left;
+    width: 49.5%;
 }
 
-.section-config.complex .section-config.with-button > .config > table > tbody > tr > td > .section-config > .config {
-    border:0;
-    border-bottom:1px solid #d1d0ce;
-    border-radius: 0;
-    margin:0;
-    padding-bottom:50px;
-}
-.section-config.complex .section-config.with-button > .config > table > tbody > tr:last-child > td > .section-config > .config {
-    border-bottom:0;
+[class*="-order-"] .admin__scope-old .order-totals,
+[class*="-order-"] .admin__scope-old .order-account-information,
+[class*="-order-"] .admin__scope-old .order-shipping-address,
+[class*="-order-"] .admin__scope-old .order-payment-method-virtual,
+[class*="-order-"] .admin__scope-old .order-shipping-method,
+[class^=" adminhtml-rma-"] .admin__scope-old .rma-confirmation,
+[class^=" adminhtml-rma-"] .admin__scope-old .order-shipping-method,
+[class^=" adminhtml-rma-"] .admin__scope-old .order-return-address {
+    float: right;
+    width: 49%;
 }
 
-.section-config .config h4 {
-    padding-left:25%;
-    font-size: 18px;
-}
+[class*="-order-"] {
+    .admin__scope-old {
+        .order-card-validation {
+            width: 49.5%;
+            box-sizing: border-box;
 
-.section-config .config td.label label.enabled:before {
-}
-.section-config .config td.label label.enabled:before {
-    content: "\e01e";
-    color:#fff;
-    background: #65940a;
-    font-family: "MUI-Icons";
-    font-weight: normal;
-    padding:3px;
-    font-size: 10px;
-    width:10px;
-    height:10px;
-    line-height: 10px;
-    overflow: hidden;
-    border-radius: 8px;
-    display: block;
-    float:left;
-    margin-right:5px;
+            .actions {
+                margin-top: 17px;
+            }
+        }
+        .order-totals {
+            .field.choice {
+                margin: 20px 0;
+            }
+        }
+    }
 }
 
-.section-config.complex .section-config.with-button > .config:before {
-    content:'';
-    height: 9px;
-    width: 20px;
-    overflow: hidden;
-    display: block;
-    position: absolute;
-    bottom: 100%;
-    left: 50%;
-    z-index: 2;
-    margin-left: -10px;
-    background: url(../images/subconfig-bg.png) no-repeat 0 0;
+[class^=" sales-"] {
+    .admin__scope-old {
+        .order-information .fieldset-wrapper > .fieldset-wrapper-title .title {
+            width: 100%;
+        }
+    }
 }
 
-.section-config.config-advanced {
-    padding:30px 0 0;
-}
-.section-config.config-advanced > .entry-edit-head {
-    border:0;
-    padding: 0 0 0 25%;
-}
-.section-config.config-advanced > .entry-edit-head a {
-    border:0 !important;
-}
-.section-config.config-advanced > .config {
-    padding-left:0!important;
-    padding-right:0!important;
-    border:0!important;
-    border-radius: 0!important;
+.adminhtml-rma-new .admin__scope-old .order-totals,
+[class^=" adminhtml-rma-"] .admin__scope-old .rma-comments-history {
+    float: none;
+    width: 100%;
 }
 
-.section-config.config-advanced > .entry-edit-head a {
-    margin-left:-22px;
+[class*="-order-"] .admin__scope-old .order-billing-address .actions,
+[class*="-order-"] .admin__scope-old .order-shipping-address .actions {
+    margin: 17px 0;
 }
 
-
-.section-config.with-button .config-heading strong {
-    display: block;
-    .style28();
-    margin-bottom:5px;
+[class*="-order-"] .admin__scope-old .order-billing-address .control + label,
+[class*="-order-"] .admin__scope-old .order-shipping-address .control + label {
+    margin: 17px 0 0;
 }
 
-.section-config.with-button .config-heading .button-container {
-    margin:15px 0 0;
+.sales-order-create-index #order-message .admin__scope-old .messages .message,
+.sales-order-edit-index #order-message .admin__scope-old .messages .message {
+    margin: 0 0 60px;
 }
-.section-config.with-button .button-container {
-    line-height: 28px;
+
+.sales-order-create-index .admin__scope-old .order-items.fieldset-wrapper,
+.sales-order-create-index .admin__scope-old .order-search-items.fieldset-wrapper,
+.sales-order-create-index .admin__scope-old .order-additional-area.fieldset-wrapper,
+.sales-order-create-index .admin__scope-old .order-errors,
+.checkout-index-index .checkout-errors {
+    .fieldset-wrapper-title {
+        border-bottom: 0;
+        margin: 0;
+    }
+    .title {
+        border-bottom: 1px solid #cac3b4;
+        margin: 0 0 18px;
+        width: 100%;
+    }
 }
-.section-config.with-button .button-container a {
-    margin-left:20px;
+
+[class*="-order-"] .admin__scope-old {
+    .fieldset-wrapper-title {
+        .actions {
+            float: right;
+            padding: 0;
+            a:link,
+            a:visited,
+            a:hover,
+            a:active {
+                color: #a29c94;
+            }
+        }
+    }
+    .order-customer-selector .fieldset-wrapper-title .actions {
+        padding-top: 8px;
+    }
+    .order-details .fieldset-wrapper-title .actions {
+        padding-bottom: 15px;
+    }
 }
 
-.section-config.with-button .action-configure span {
-    display: block;
-    position: relative;
-    text-align: center;
+.sales-order-create-index {
+    .admin__scope-old {
+        // Configure product popup
+        .ui-dialog {
+            // Virtual and downloadable product
+            .downloadable.information .link {
+                .label {
+                    margin-left: 0;
+                }
+                .nested {
+                    margin-left: 8px;
+                }
+            }
+            // Bundle product
+            .fieldset.bundle {
+                .nested {
+                    padding-left: 6px;
+                    .field {
+                        margin: 0 0 5px;
+                    }
+                    .label {
+                        font-size: 13px;
+                        margin: 0;
+                    }
+                    .qty .control {
+                        display: inline-block;
+                        margin: 0 0 0 10px;
+                        width: 60px;
+                    }
+                }
+            }
+        }
+        .order-billing-method {
+            .payment-methods {
+                .fieldset {
+                    padding: 0;
+                    margin: 0;
+                    .field {
+                        margin: 0 0 12px 0;
+                    }
+                }
+            }
+        }
+        .grid .action-configure {
+            float: right;
+            &.disabled {
+                cursor: default;
+                opacity: .5;
+                &:hover {
+                    text-decoration: none;
+                }
+            }
+        }
+        .order-items.fieldset-wrapper {
+            .clearfix();
+        }
+    }
 }
-.section-config.with-button .action-configure .state-opened {
-    visibility: hidden;
-    height:0;
-    overflow: hidden;
+
+[class^=" sales-"] {
+    .admin__scope-old {
+        tr.headings {
+            .col-parent-transaction-id > span,
+            .col-method > span,
+            .col-transaction-id > span,
+            .col-transaction-type > span,
+            .col-gtbase > span,
+            .col-gtpurchased > span,
+            .col-discont > span {
+                white-space: normal;
+            }
+        }
+    }
 }
-.section-config.with-button .action-configure.open .state-opened {
-    visibility: visible;
-    height:auto;
-    overflow: auto;
+
+[class*="-order-"] {
+    .admin__scope-old {
+        .col-price .label,
+        .col-subtotal .label {
+            display: inline-block;
+            min-width: 60px;
+            white-space: nowrap;
+        }
+        .order-subtotal .label {
+            width: 80%;
+        }
+    }
 }
-.section-config.with-button .action-configure.open .state-closed {
-    visibility: hidden;
-    height:0;
-    overflow: hidden;
+
+[class*="-order-"] {
+    .admin__scope-old {
+        .item-options {
+            margin: 5px 0 5px 10px;
+            dt {
+                font-weight: bold;
+            }
+            dd {
+                margin: 0 0 0 10px;
+            }
+        }
+    }
 }
 
-.accordion > dt + dd {
-    display: none;
+[class~=" -order-creditmemo-"] {
+    .admin__scope-old {
+        .no-items {
+            padding-top: 13px;
+            text-align: center;
+        }
+    }
 }
 
-.accordion > dt + .open:empty {
-    background: #fff url(../mui/images/ajax-loader-big.gif) no-repeat center;
-    height: 100px;
+.adminhtml-order-shipment-new {
+    .admin__scope-old {
+        .order-totals .fieldset-wrapper {
+            padding-top: 18px;
+        }
+    }
 }
 
-/* TODO: arrange configuration tables */
-.accordion .collapseable.disabled {
-    background: #f1f1f1;
+[class^=" adminhtml-rma-"],
+.adminhtml-rma-edit {
+    .admin__scope-old {
+        .rma-items th.col-qty span {
+            text-align: left;
+            white-space: normal;
+        }
+    }
 }
 
-.accordion .collapseable.disabled > a {
-    cursor: not-allowed;
+.adminhtml-rma-edit .admin__scope-old .data-table .col-carrier,
+[class^=" sales-billing-agreement-"] .admin__scope-old .log-details .data-table th {
+    width: 20%;
 }
 
-.accordion .collapseable.disabled > a:before {
-    content: '';
+.adminhtml-rma-edit {
+    .admin__scope-old {
+        .data-table {
+            .col-title {
+                width: 35%;
+            }
+            .col-number {
+                width: 25%;
+            }
+        }
+    }
 }
 
-.accordion .config {
-    border: 0;
+[class*="-order-"] .admin__scope-old .order-shipping-address .price,
+.order-shipping-address .admin__scope-old .shipping-description-title {
+    font-weight: bold;
 }
 
-.accordion .config {
-    .comment a,
-    .link-more {
-        .style3();
+[class^=" adminhtml-rma-"] {
+    .admin__scope-old {
+        .col-actions a {
+            cursor: pointer;
+            white-space: nowrap;
+        }
+        .col-reason input[type="text"] {
+            margin: 5px 0 0;
+            width: 100%;
+        }
+        .col-actions .separator {
+            margin: 0 3px;
+        }
     }
 }
 
-.accordion .config legend {
-    display: none;
+[class^=" sales-"] {
+    .admin__scope-old {
+        .order-payment-method .data-table {
+            margin-top: 15px;
+        }
+        .order-payment-currency {
+            margin-top: 15px;
+        }
+        .grid .data {
+            border-bottom: 1px solid #c0bbaf;
+        }
+        .grid td .option-label {
+            font-weight: bold;
+        }
+        .grid td .option-value {
+            margin: 0 0 0 10px;
+        }
+    }
 }
 
-.accordion .config table {
-    width: 100%;
+[class^=" adminhtml-extension-custom-"] {
+    .admin__scope-old {
+        #authors_fieldset .data-table td {
+            vertical-align: top;
+        }
+    }
 }
 
-.accordion .config .label {
-    float: none;
-    width: 33%;
-    padding-right: 30px;
-    text-align: right;
-    font-size: 14px;
-    font-weight: 600;
-    color: #303030;
+[class*="-order-"] {
+    .admin__scope-old {
+        .order-billing-address .packaging-window .actions,
+        .order-shipping-address .packaging-window .actions {
+            margin: 0;
+        }
+    }
 }
 
-.accordion .config .value .label {
-    padding: 6px 5px 0 15px;
-    vertical-align: top;
-    width: auto;
+//
+//  Tables
+//  ---------------------------------------------
+
+//  Sales
+[class^=' sales-order-'] {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-220-max all);
+        }
+    }
 }
 
-.accordion .config .value .label:first-child {
-    padding-left: 0;
+.sales-order-view {
+    .admin__scope-old {
+        .grid  {
+            .col-name {
+                &:extend(.col-150-max all);
+            }
+            .col-period {
+                &:extend(.col-70-max all);
+            }
+        }
+    }
 }
 
-.accordion .config .label label {
-    padding-top: 7px;
+.sales-order-index {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-110-max all);
+        }
+    }
 }
 
-.accordion .config td {
-    background: none;
-    border: 0;
-    padding: 22px 15px 0 0;
-    vertical-align: top;
+.sales-order-create-index {
+    .admin__scope-old {
+        .col-phone {
+            &:extend(.col-70-max all);
+        }
+        .col-in_products {
+            &:extend(.col-70);
+        }
+    }
 }
 
-.accordion .paypal-selection-simplified {
-    padding-left: 30px;
+//  Sales -> Create Order
+.sales-order-create-index,
+.sales-order-edit-index {
+    .admin__scope-old {
+        .grid,
+        .grid-actions {
+            &:extend(.side-paddings-0);
+            table .action-configure {
+                float: right;
+                &.disabled {
+                    cursor: default;
+                    opacity: .5;
+                    &:hover {
+                        text-decoration: none;
+                    }
+                }
+            }
+        }
+        .data-table {
+            .border td {
+                padding-bottom: 15px;
+            }
+            .col-product {
+                &:extend(.ellipsis all);
+                &:extend(.col-150-max all);
+            }
+        }
+        .actions.update {
+            margin: 10px 0;
+        }
+    }
 }
 
-.accordion .paypal-selection input[type="checkbox"] {
-    margin: -4px 7px 0 0;
+//  Sales -> Create Shipment
+.adminhtml-order-shipment-new {
+    .admin__scope-old {
+        .grid .col-product {
+            max-width: 770px;
+            width: 770px;
+        }
+    }
 }
 
-.accordion .config input[type="text"],
-.accordion .config input[type="password"],
-.accordion .config select,
-.accordion .config textarea {
-    width: 100%;
+//  Sales -> View order
+[class^=' sales-order-view'] {
+    .admin__scope-old {
+        .grid .col-customer_name {
+            &:extend(.col-110-max all);
+        }
+    }
 }
 
-.accordion .config input.input-file {
-    margin-top: 4px;
+//  Sales -> Return
+[class^=' adminhtml-rma-'] {
+    .admin__scope-old {
+        .fieldset-wrapper .data-table td {
+            &:extend(.ellipsis all);
+            &:extend(.col-670-max);
+        }
+        .grid {
+            .col-product_sku {
+                &:extend(.ellipsis all);
+                &:extend(.col-70-max all);
+            }
+            .col-name,
+            .col-product {
+                &:extend(.col-150-max all);
+            }
+            .col-product_name {
+                &:extend(.ellipsis all);
+                &:extend(.col-110-max all);
+            }
+        }
+        .col-actions {
+            a {
+                &:extend(.col-actions-links);
+            }
+        }
+        .rma-request-details {
+            &:extend(.data-table-td-max all);
+        }
+        #rma_items_grid_table .headings th {
+            &:extend(.nowrap all);
+        }
+    }
 }
 
-.accordion .config select.select-date {
-    width: 27%;
+.adminhtml-rma-edit {
+    .admin__scope-old {
+        .col-product,
+        .col-sku {
+            &:extend(.col-70-max all);
+        }
+    }
 }
 
-.accordion .config .value {
-    width: 44%;
-    padding-right: 40px;
-    .checkboxes {
-        list-style: none;
-        padding: 0;
-        margin: -3px 0 0;
 
-        li {
-            margin: 7px 0;
+//
+//  Products
+// --------------------------------------
+.catalog-product-index {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-110-max all);
         }
+    }
+}
 
-        input,
-        label {
-            vertical-align: middle;
+.catalog-product-edit {
+    .admin__scope-old {
+        .ui-tabs-panel .grid {
+            .hor-scroll {
+                &:extend(.h-scroll);
+            }
+            .col-name,
+            .col-type,
+            .col-sku {
+                &:extend(.col-70-max all);
+            }
+            .col-price,
+            .col-position {
+                &:extend(.col-50 all);
+            }
         }
+    }
+}
 
-        label {
-            margin-left: 5px;
+.catalog-product-index {
+    .admin__scope-old {
+        .grid .hor-scroll {
+            &:extend(.h-scroll);
         }
     }
 }
 
-.accordion .config .value.with-tooltip {
-    padding-top:5px;
-}
-.accordion .config .value.with-tooltip .tooltip {
-    position: relative;
-    top:0;
-    left:0;
-    right:0;
-    bottom:0;
-    float:right;
-    margin: 6px -28px 0 0;
-}
-.accordion .config .value.with-tooltip .tooltip-content {
-    padding: 18px;
-    margin: 0 -17px 10px 0;
-    right: 0;
-    bottom: 100%;
-    width: 239px;
-    max-width: 239px;
-    font-size: 13px;
-    line-height: 1.4;
-    background: #31302b;
-    background: rgba(49, 48, 43, .8);
-    border-radius: 5px;
-}
-.accordion .config .value.with-tooltip .tooltip-content:before {
-    content: '';
-    position: absolute;
-    width: 0;
-    height: 0;
-    top: auto;
-    bottom:-5px;
-    left:auto;
-    right: 20px;
-    border-left: 5px solid transparent;
-    border-right: 5px solid transparent;
-    border-top: 5px solid #31302b;
-    border-bottom:0;
-    opacity: .8;
+.catalog-product-review-index {
+    .admin__scope-old {
+        .grid {
+            .col-name,
+            .col-title {
+                &:extend(.col-110-max all);
+            }
+        }
+    }
 }
 
-.accordion .config .value.with-tooltip .help {
-    position: relative;
-    width:auto;
-    margin:0;
+//  Products -> Categories
+.catalog-category-edit {
+    .admin__scope-old {
+        .grid {
+            .col-name {
+                &:extend(.col-220-max all);
+            }
+        }
+    }
 }
 
-.accordion .config .scope-label {
-    color: #999;
-    font-size: 12px;
-    letter-spacing: .05em;
-    padding: 31px 15px 0 0;
+//  Customer
+.customer-index-index {
+    .admin__scope-old {
+        .grid {
+            .col-name {
+                max-width: 90px;
+                width: 90px;
+            }
+            .col-customer_since,
+            .col-billing_country_id {
+                &:extend(.col-70-max all);
+            }
+            .col-billing_region {
+                width: 70px;
+            }
+        }
+    }
 }
 
-.accordion .config .note {
-    color: #303030;
-    font-size: 12px;
-    margin: 5px 0;
+[class^=' customer-index-'] {
+    .admin__scope-old {
+        .fieldset-wrapper,
+        .accordion {
+            .grid .col-created_at {
+                &:extend(.col-70-max all);
+            }
+        }
+        .col-action a {
+            &:extend(.col-actions-links);
+        }
+    }
 }
 
-.accordion .config .note a {
-    .style22();
+.customer-index-edit {
+    .admin__scope-old {
+        .ui-tabs-panel .grid .col-name {
+            &:extend(.col-110-max all);
+        }
+    }
 }
 
-.accordion .config .system-tooltip-box {
-    position: absolute;
+//  Customer -> Customer Segments
+.col-grid_segment_name {
+    .admin__scope-old {
+        &:extend(.col-570-max all);
+        &:extend(.ellipsis all);
+    }
 }
 
-.accordion .paypal-selection {
-    margin: 10px;
-    width: 98%;
+//  Marketing -> Catalog Event
+.adminhtml-catalog-event-index {
+    .admin__scope-old {
+        .col-category {
+            &:extend(.ellipsis all);
+            &:extend(.col-220-max all);
+        }
+    }
 }
 
-.accordion .paypal-selection th {
-    padding: 6px 10px 7px;
+//  Marketing -> Search Terms
+[class^=' catalog-search'] {
+    .admin__scope-old {
+        .col-search_query,
+        .col-synonym_for,
+        .col-redirect {
+            &:extend(.ellipsis all);
+            &:extend(.col-150-max all);
+        }
+    }
 }
 
-.accordion .paypal-selection {
-    border-bottom: 2px solid #c0bbaf;
+//  Marketing -> URL Rewrites
+.adminhtml-urlrewrite-index {
+    .admin__scope-old {
+        .col-request_path {
+            &:extend(.ellipsis all);
+            &:extend(.col-150-max all);
+        }
+    }
 }
 
-.accordion .paypal-payment-notice {
-    margin: 10px;
+//  Marketing -> Reviews
+.review-product-index {
+    .admin__scope-old {
+        .grid {
+            .hor-scroll {
+                &:extend(.h-scroll);
+            }
+            .col-name {
+                &:extend(.col-110-max all);
+            }
+        }
+    }
 }
 
-.accordion .custom-options {
-    border: 1px solid #999;
-    padding: 0 10px;
-    margin: 0 0 20px;
+//  Content -> Pages
+.adminhtml-cms-page-index {
+    .admin__scope-old {
+        .col-title,
+        .col-identifier {
+            &:extend(.ellipsis all);
+            &:extend(.col-110-max all);
+        }
+    }
 }
 
-/*
-    Sales
--------------------------------------- */
-
-.order-items .entry-edit-head .form-buttons {
-    float: right;
+//  Content -> Hierarchy
+.adminhtml-cms-hierarchy-index {
+    .admin__scope-old {
+        .col-title,
+        .col-identifier {
+            &:extend(.ellipsis all);
+            max-width: 410px;
+            width: 410px;
+        }
+    }
 }
 
-.order-items .entry-edit-head .icon-head {
-    display: inline;
+//  Content -> Frontend Apps
+.adminhtml-widget-instance-index {
+    .admin__scope-old {
+        .col-title {
+            &:extend(.col-370-max all);
+            &:extend(.ellipsis all);
+        }
+    }
 }
 
-.order-items .entry-edit-head {
-    margin-bottom: 20px;
+.adminhtml-widget-instance-edit {
+    .admin__scope-old {
+        .grid-chooser .control {
+            margin-top: -19px;
+            width: 80%;
+            .grid-actions {
+                padding: 0 0 15px;
+            }
+            .grid {
+                padding: 0;
+            }
+            .addon {
+                input:last-child,
+                select:last-child{
+                    border-radius: 0;
+                }
+            }
+        }
+    }
 }
 
-.order-items .entry-edit-head:before,
-.order-items .entry-edit-head:after {
-    content: "";
-    display: table;
+//  Reports -> Low Stock
+.reports-report-product-lowstock {
+    .admin__scope-old {
+        .grid {
+            .col-name {
+                &:extend(.col-670-max all);
+            }
+            .col-sku {
+                &:extend(.col-220-max all);
+            }
+        }
+    }
 }
 
-.order-items .entry-edit-head:after {
-    clear: both;
+.reports-report-shopcart-product,
+.reports-report-review-customer {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-670-max all);
+        }
+    }
 }
 
-/*
-    Import-export tax rates
--------------------------------------- */
-.import-export-tax-rates input[type=file] {
-    margin-right: 10px;
+.reports-report-shopcart-abandoned {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-150-max all);
+        }
+    }
 }
 
-.import-tax-rates,
-.export-tax-rates {
-    float: left;
-    width: 48.9362%;
+//  Reports
+[class^=' reports-'] [class^='col-total'],
+[class^=' reports-'] [class^='col-average'],
+[class^=' reports-'] [class^='col-ref-'],
+[class^=' reports-'] [class^='col-rate'],
+[class^=' reports-'] [class^='col-tax-amount'] {
+    .admin__scope-old {
+        &:extend(.col-70 all);
+    }
 }
 
-.export-tax-rates {
-    margin-left: 2.12766%;
+.reports-report-sales-invoiced,
+.reports-report-sales-refunde {
+    .admin__scope-old {
+        .grid .col-period {
+            &:extend(.col-auto all);
+        }
+    }
 }
 
-.import-export-tax-rates:before,
-.import-export-tax-rates:after {
-    content: "";
-    display: table;
+//  Reports -> Search Terms
+.reports-index-search {
+    .admin__scope-old {
+        .col-query_text {
+            &:extend(.col-570-max all);
+            &:extend(.ellipsis all);
+        }
+    }
 }
 
-.import-export-tax-rates:after {
-    clear: both;
+//  Reports -> Ordered Products Report
+.reports-report-product-sold {
+    .admin__scope-old {
+        .grid .col-name {
+            max-width: 720px;
+            width: 720px;
+        }
+    }
 }
 
-/*
-    Product
--------------------------------------- */
-.tier {
-    margin: 20px 0 0;
+//  Reports -> Newsletter Problem Reports
+.newsletter-problem-index {
+    .admin__scope-old {
+        .grid {
+            .col-name,
+            .col-subject,
+            .col-product {
+                &:extend(.col-220-max all);
+            }
+        }
+    }
 }
 
-/*
-    Edit attribute set
--------------------------------------- */
-.attribute-set-col {
-    display: block;
-    float: left;
-    margin-left: 2.127659574%;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-    width: 31.9149%;
+//  Content -> Banners
+.adminhtml-banner-edit {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-220-max all);
+        }
+    }
 }
 
-.attribute-set-col:first-child {
-    margin-left: 0;
+//  Stroes -> Tax rules
+.tax-rule-index {
+    .admin__scope-old {
+        .grid .col-title {
+            &:extend(.col-150-max all);
+        }
+    }
 }
 
-.attribute-set-tree {
-    margin-top: 5px;
-    overflow: auto;
-    height: 400px;
-    width: 100%;
+//  Stores -> Returns Attributes
+.adminhtml-rma-item-attribute-index {
+    .admin__scope-old {
+        .grid {
+            .col-label {
+                &:extend(.col-220-max all);
+            }
+            .col-attr-code {
+                &:extend(.ellipsis);
+                &:extend(.col-150-max all);
+            }
+        }
+    }
 }
 
-.attribute-set:before,
-.attribute-set:after {
-    content: "";
-    display: table;
-}
-.attribute-set:after {
-    clear: both;
+.adminhtml-rma-edit {
+    .admin__scope-old {
+        .hor-scroll {
+            &:extend(.h-scroll);
+        }
+    }
 }
 
-/*
-    Manage Categories
--------------------------------------- */
-.catalog-category-edit .category-edit-title {
-    float: left;
+//  Stores -> All Stores
+.adminhtml-system-store-index {
+    .admin__scope-old {
+        .grid td {
+            &:extend(.ellipsis all);
+            max-width: 310px;
+        }
+    }
 }
 
-/*
-    Catalog Price Rule
--------------------------------------- */
-.rule-tree-wrapper {
-    line-height: 28px;
-}
 
-.rule-tree .fieldset {
-    min-width: 0; // Fixed Chrome fieldset issue
+//  Stores -> Currency
+.adminhtml-system-currency-index {
+    .admin__scope-old {
+        .grid {
+            padding-top: 0;
+        }
+        .col-currency-edit-rate {
+            min-width: 40px;
+        }
+        .col__base-currency {
+            font-weight: bold;
+        }
+        .old-rate {
+            display: block;
+            margin-top: 3px;
+            text-align: center;
+        }
+        .hor-scroll {
+            overflow-x: auto;
+            min-width: 970px;
+        }
+    }
 }
 
-@-moz-document url-prefix() { // Fixed Firefox fieldset issue
-    .rule-tree .fieldset {
-        display: table-cell;
+//  Stores -> Currency symbol
+.adminhtml-system-currencysymbol-index {
+    .admin__scope-old {
+        .col-currency {
+            width: 35%;
+        }
+        .grid .input-text {
+            margin: 0 10px 0 0;
+            width: 50%;
+        }
     }
 }
 
-.rule-tree ul {
-    list-style: none;
-    padding-left: 16px;
-    border-left: dotted 1px #888;
+//  Stores -> Customer attributes
+[class^=' adminhtml-customer-'],
+.adminhtml-rma-item-attribute-index {
+    .admin__scope-old {
+        .col-label {
+            &:extend(.col-370-max all);
+        }
+        .col-required,
+        .col-system,
+        .col-is_visible,
+        .col-sort_order {
+            &:extend(.col-70 all);
+        }
+    }
 }
 
-.rule-tree li {
-    margin: 0 0 10px;
+//  Stores -> Product Attribute
+.catalog-product-attribute-index {
+    .admin__scope-old {
+        .col-attr-code,
+        .col-label {
+            &:extend(.col-110-max all);
+            &:extend(.ellipsis);
+        }
+        [class^=' col-is_'],
+        .col-required,
+        .col-system {
+            &:extend(.col-70 all);
+        }
+    }
 }
 
-.rule-tree .x-tree ul {
-    padding-left: 0 !important;
-    border-left: none !important;
+.catalog-product-set-index {
+    .admin__scope-old {
+        .col-set_name {
+            max-width: 930px;
+            width: 930px;
+        }
+    }
 }
 
-.rule-param .label {
-    color: #000;
-    float: none;
-    text-align: left;
-    padding: 0;
-    vertical-align: baseline;
-    width: auto;
+//  System -> Export
+.adminhtml-export-index {
+    .admin__scope-old {
+        .grid-actions,
+        .grid {
+            &:extend(.side-paddings-0);
+        }
+        .col-label,
+        .col-code {
+            &:extend(.col-220-max all);
+        }
+        .col-code {
+            &:extend(.ellipsis all);
+        }
+        .grid {
+            td {
+                vertical-align: middle;
+            }
+            .input-text-range {
+                margin: 0 10px 0 5px;
+                width: 37%;
+            }
+            .input-text-range-date {
+                margin: 0 5px;
+                width: 32%;
+            }
+        }
+        .ui-datepicker-trigger {
+            display: inline-block;
+            margin: -3px 10px 0 0;
+            vertical-align: middle;
+        }
+    }
 }
 
-.rule-param .label-disabled {
-    color: #eee;
-    cursor: default;
-    text-decoration: none;
+//  System -> Scheduled Imports/Exports
+.adminhtml-scheduled-operation-index {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-220-max all);
+        }
+    }
 }
 
-.rule-chooser,
-.rule-param .element,
-.rule-param-edit .label {
-    display: none;
+//  System -> Report
+.adminhtml-logging-index {
+    .admin__scope-old {
+        .grid .col-fullaction {
+            &:extend(.ellipsis all);
+            &:extend(.col-220-max all);
+        }
+    }
 }
 
-.rule-chooser .field-row {
-    .clearfix();
-    display: block;
-    margin-bottom: 17px;
-    .input-text {
-        margin-top: 5px;
-    }
-    .ui-datepicker-trigger {
-        margin-left: 5px;
-        margin-top:-2px;
+//  System -> Notifications
+.adminhtml-notification-index {
+    .admin__scope-old {
+        .col-actions a {
+            &:extend(.col-actions-links);
+        }
     }
 }
 
-.rule-param input,
-.rule-param select {
-    width: auto !important;
-    margin: 0;
-    min-width: 170px;
+.adminhtml-process-list {
+    .admin__scope-old {
+        .col-action a,
+        .col-mode {
+            &:extend(.nowrap all);
+        }
+    }
 }
 
-.rule-param-edit .element {
-    display: inline;
+.adminhtml-notification-index,
+.adminhtml-cache-index,
+.adminhtml-process-list,
+.indexer-indexer-list {
+    .admin__scope-old {
+        .grid .col-select {
+            width: 10px;
+        }
+    }
 }
 
-.rule-param-edit .element .addafter {
-    padding-left: 5px;
+//  System -> Locked Users
+.adminhtml-locks-index {
+    .admin__scope-old {
+        .grid .col-name {
+            &:extend(.col-570 all);
+        }
+    }
 }
 
-[class^="rule-param-"] img,
-.rule-chooser-trigger img {
-    vertical-align: middle;
+//  System -> Custom Variables
+.adminhtml-system-variable-index {
+    .admin__scope-old {
+        .grid .col-code {
+            &:extend(.col-370-max all);
+            &:extend(.ellipsis all);
+        }
+    }
 }
 
-.rule-chooser {
-    border: solid 1px #CCC;
-    margin: 20px;
-    padding: 15px 10px 5px;
-    overflow: auto;
+.adminhtml-logging-index {
+    .admin__scope-old {
+        .grid .col-info {
+            &:extend(.col-110-max all);
+            &:extend(.ellipsis all);
+        }
+    }
 }
 
-.rule-param-wait {
-    background: url(../mui/images/ajax-loader-small.gif) no-repeat left center;
-    padding-left: 20px;
-}
+//
+//  Login page captcha reload @todo ui - remove after loader consistency
+//  _____________________________________________
 
-/*
-    URL Rewrite
--------------------------------------- */
-.field-entity-type-selector {
-    padding-top: 13px;
+// Tax popup
+.tax-rate-popup .form-inline .field {
+    position: static;
+    &.required .label {
+        position: relative;
+        z-index: 1;
+    }
 }
 
-/* jstree */
-.jstree-default .disabled > a {
-    color: #a29c94;
+// Product tabs
+#product-edit-form-tabs .ui-tabs-panel {
+    border-top-width: 0;
+    .main-col & {
+        padding-left: 0;
+        padding-right: 0;
+    }
+    .accordion {
+        margin: 0 0 8px;
+        padding: 0;
+        > dt {
+            background: #fff;
+            padding: 5px 18px 2px;
+            position: relative;
+            + dd {
+                display: none;
+                &.open {
+                    padding: 25px 18px 18px;
+                    display: block;
+                    margin-left: 0;
+                    border-top: 0;
+                    border-radius: 0 0 5px 5px;
+                }
+            }
+            &.open {
+                margin: 0;
+                border-bottom: 0;
+                border-radius: 5px 5px 0 0;
+                a {
+                    &:before {
+                        content: '\e02c'; // arrow down icon
+                    }
+                }
+            }
+            a {
+                .style10();
+                display: block;
+                padding: 7px 0 10px 22px;
+                text-decoration: none;
+                position: relative;
+                cursor: pointer;
+                border-bottom: 1px solid #cac3b4;
+                i {
+                    .style31();
+                }
+                &:before {
+                    position: absolute;
+                    left: 0;
+                    top: 11px;
+                    font-family: 'MUI-Icons';
+                    font-style: normal;
+                    speak: none;
+                    font-size: 16px;
+                    font-weight: normal;
+                    -webkit-font-smoothing: antialiased;
+                    content: '\e02a'; // arrow right icon
+                    color: #b2b0ad;
+                }
+                &:hover {
+                    &:before {
+                        color: #7e7e7e;
+                    }
+                }
+            }
+        }
+    }
 }
-/* ==========================================================================
-   debug.less (end)
-   ========================================================================== */
-
-// Magento Import instructions
-//@magento_import "source/module.less"; // import theme styles
diff --git a/app/design/adminhtml/Magento/backend/web/css/styles.less b/app/design/adminhtml/Magento/backend/web/css/styles.less
index 47e26fc2cc41ebcecee31e66643bdc82fec0e6cf..8e4522368a9d25d9647c714bee0e035062d108ca 100644
--- a/app/design/adminhtml/Magento/backend/web/css/styles.less
+++ b/app/design/adminhtml/Magento/backend/web/css/styles.less
@@ -21,6 +21,27 @@
 
 //@magento_import "source/_module.less"; // import theme styles
 
+
+//
+//  Temporary
+//  ---------------------------------------------
+
+// ToDo UI: Hiding menu (should be fixed in layouts)
+.attribute-popup {
+    .page-wrapper {
+        margin-left: 0;
+    }
+    .menu-wrapper,
+    .page-header-hgroup,
+    .page-header-actions {
+        display: none;
+    }
+}
+
+// ToDo UI: Temporary. Should be changed
+@import 'source/components/_calendar-temp.less';
+@import 'source/components/_tooltip-temp.less';
+
 //
 //  Media queries collector
 //  ---------------------------------------------
diff --git a/app/design/adminhtml/Magento/backend/web/images/grid-cal.png b/app/design/adminhtml/Magento/backend/web/images/grid-cal.png
deleted file mode 100644
index 15b3ed03af371fa0f979d99aae6428f34b28e114..0000000000000000000000000000000000000000
Binary files a/app/design/adminhtml/Magento/backend/web/images/grid-cal.png and /dev/null differ
diff --git a/app/design/adminhtml/Magento/backend/web/js/theme.js b/app/design/adminhtml/Magento/backend/web/js/theme.js
index 706bf3bde82bdba2f2a8973620ce71d6dc27e020..56921a21e7f2d83eb9cf13e5c446f86b55640c60 100644
--- a/app/design/adminhtml/Magento/backend/web/js/theme.js
+++ b/app/design/adminhtml/Magento/backend/web/js/theme.js
@@ -12,6 +12,8 @@ define('globalNavigation', [
     $.widget('mage.globalNavigation', {
         options: {
             selectors: {
+                menu: '#nav',
+                currentItem: '._current',
                 topLevelItem: '.level-0',
                 topLevelHref: '> a',
                 subMenu: '> .submenu',
@@ -25,59 +27,79 @@ define('globalNavigation', [
 
             this.menu      = this.element;
             this.menuLinks = $(selectors.topLevelHref, selectors.topLevelItem);
+            this.closeActions = $(selectors.closeSubmenuBtn);
 
             this._initOverlay()
                 ._bind();
         },
 
         _initOverlay: function () {
-            var wrapper = $('<div />').addClass('admin__scope');
-
             this.overlay = $(this.options.overlayTmpl).appendTo('body').hide(0);
 
-            /**
-             * @todo fix LESS and remove next line and wrapper definition
-             */
-            this.overlay.wrap(wrapper);
-
             return this;
         },
 
         _bind: function () {
-            var lighten = this._lighten.bind(this),
-                open    = this._open.bind(this),
-                darken  = this._darken.bind(this);
+            var focus = this._focus.bind(this),
+                open = this._open.bind(this),
+                blur = this._blur.bind(this),
+                keyboard = this._keyboard.bind(this);
 
             this.menuLinks
-                .on('focus', lighten)
-                .on('click', open)
-                .on('blur',  darken);
+                .on('focus', focus)
+                .on('click', open);
+
+            this.menuLinks.last().on('blur', blur);
+
+            this.closeActions.on('keydown', keyboard);
+        },
+
+
+        /**
+         * Remove active class from current menu item
+         * Turn back active class to current page menu item
+         */
+        _blur: function(e){
+            var selectors = this.options.selectors,
+                menuItem  = $(e.target).closest(selectors.topLevelItem),
+                currentItem = $(selectors.menu).find(selectors.currentItem);
+
+            menuItem.removeClass('_active');
+            currentItem.addClass('_active');
         },
 
-        _lighten: function (e) {
+        /**
+         * Add focus to active menu item
+         */
+        _keyboard: function(e) {
             var selectors = this.options.selectors,
                 menuItem  = $(e.target).closest(selectors.topLevelItem);
 
-            menuItem
-                .addClass('_active')
-                .siblings(selectors.topLevelItem)
-                .removeClass('_active');
+            if(e.which === 13) {
+                this._close(e);
+                $(selectors.topLevelHref, menuItem).focus();
+            }
         },
 
-        _darken: function (e) {
+        /**
+         * Toggle active state on focus
+         */
+        _focus: function (e) {
             var selectors = this.options.selectors,
                 menuItem  = $(e.target).closest(selectors.topLevelItem);
 
-            menuItem.removeClass('_active');
+            menuItem.addClass('_active')
+                    .siblings(selectors.topLevelItem)
+                    .removeClass('_active');
         },
 
         _closeSubmenu: function (e) {
             var selectors = this.options.selectors,
-                menuItem  = $(e.target).closest(selectors.topLevelItem);
+                currentItem = $(selectors.menu).find(selectors.currentItem);
 
             this._close(e);
 
-            $(selectors.topLevelHref, menuItem).focus();
+            currentItem.addClass('_active');
         },
 
         _open: function (e) {
@@ -92,33 +114,36 @@ define('globalNavigation', [
                 e.preventDefault();
             }
 
-            menuItem
-                .addClass('_hover _recent')
-                .siblings(menuItemSelector)
-                .removeClass('_hover _recent');
+            menuItem.addClass('_show')
+                    .siblings(menuItemSelector)
+                    .removeClass('_show');
 
             subMenu.attr('aria-expanded', 'true');
 
             closeBtn.on('click', close);
 
             this.overlay.show(0).on('click', close);
+            this.menuLinks.last().off('blur');
         },
 
         _close: function (e) {
             var selectors   = this.options.selectors,
-                menuItem    = this.menu.find(selectors.topLevelItem + '._hover._recent'),
+                menuItem    = this.menu.find(selectors.topLevelItem + '._show'),
                 subMenu     = $(selectors.subMenu, menuItem),
-                closeBtn    = subMenu.find(selectors.closeSubmenuBtn);
+                closeBtn    = subMenu.find(selectors.closeSubmenuBtn),
+                blur        = this._blur.bind(this);
 
             e.preventDefault();
 
             this.overlay.hide(0).off('click');
 
+            this.menuLinks.last().on('blur', blur);
+
             closeBtn.off('click');
 
             subMenu.attr('aria-expanded', 'false');
 
-            menuItem.removeClass('_hover _recent');
+            menuItem.removeClass('_show _active');
         }
     });
 
diff --git a/app/design/adminhtml/Magento/backend/web/mui/styles/dashboard.less b/app/design/adminhtml/Magento/backend/web/mui/styles/dashboard.less
deleted file mode 100644
index a04295c825787e2c2e460e16ec570fdc33ac494b..0000000000000000000000000000000000000000
--- a/app/design/adminhtml/Magento/backend/web/mui/styles/dashboard.less
+++ /dev/null
@@ -1,198 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-/*
-    Dashboard
--------------------------------------- */
-@dashboard-background-color: #f7f3eb;
-@dashboard-tab-content-background-color: #fff;
-@dashboard-active-color: #ef672f;
-
-/*
-    Dashboard Layout
--------------------------------------- */
-.adminhtml-dashboard-index .col-1-layout {
-    max-width: 1300px; // resets global styles
-    border: none; // resets global styles
-    border-radius: 0; // resets global styles
-    padding: 0; // resets global styles
-    background: @dashboard-background-color; // resets global styles
-}
-
-.dashboard-container {
-    .clearfix();
-    padding-top: 35px;
-}
-
-.dashboard-secondary {
-    float: left;
-    width: 32%;
-    margin: 0 1.5%;
-}
-
-.dashboard-main {
-    float: right;
-    width: 65%;
-}
-
-/*
-    Dashboard Diagram
--------------------------------------- */
-.dashboard-diagram {
-    &-chart {
-        max-width: 100%;
-        height: auto;
-    }
-    &-nodata,
-    &-switcher {
-        padding: 20px 0;
-    }
-    &-image {
-        background: @dashboard-tab-content-background-color url(../mui/images/ajax-loader-small.gif) no-repeat 50% 50%;
-    }
-    .form-select-label {
-        display: inline-block;
-    }
-    &-disabled {
-        padding: 10px;
-    }
-}
-
-/*
-    Dashboard Store Stats
--------------------------------------- */
-.dashboard-container {
-    .ui-tabs-panel {
-        background-color: @dashboard-tab-content-background-color;
-        min-height: 40px;
-        padding: 15px;
-    }
-    .empty-text {
-        padding: 10px 12px;
-        text-align: center;
-    }
-}
-
-.dashboard-store-stats {
-    margin-top: 35px;
-    .ui-tabs-panel {
-        background: @dashboard-tab-content-background-color url(../mui/images/ajax-loader-small.gif) no-repeat 50% 50%;
-    }
-    .empty-text { // "no data" messages
-        background: #f7f3eb;
-    }
-}
-
-.dashboard-item {
-    margin-bottom: 30px;
-    &-title {
-        font-weight: 700;
-        margin-left: 5px;
-    }
-    &.dashboard-item-primary {
-        margin-bottom: 35px;
-        .dashboard-item-title {
-            font-size: 22px;
-            margin-bottom: 5px;
-        }
-        .dashboard-sales-value {
-            display: block;
-            text-align: right;
-            font-weight: 600;
-            font-size: 30px;
-            margin-right: 12px;
-            padding-bottom: 5px;
-        }
-        &:first-child {
-            color: @dashboard-active-color;
-        }
-    }
-    .dashboard-secondary & {
-        tr > td:first-child {
-            &:extend(.col-150-max all);
-            &:extend(.ellipsis all);
-        }
-    }
-    .empty-text {
-        background: #e1dbcf;
-    }
-}
-
-.dashboard-totals {
-    background: @dashboard-tab-content-background-color;
-    padding: 50px 15px 25px;
-    &-list {
-        .clearfix();
-        .list-reset-styles();
-    }
-    &-item {
-        float: left;
-        width: 18%;
-        margin-left: 7%;
-        padding-top: 15px;
-        border-top: 2px solid #cac3b4;
-        &:first-child {
-            margin-left: 0;
-        }
-    }
-    &-label {
-        display: block;
-        font-size: 16px;
-        font-weight: 600;
-        padding-bottom: 2px;
-    }
-    &-value {
-        color: @dashboard-active-color;
-        font-size: 20px;
-    }
-}
-
-.dashboard-data {
-    width: 100%;
-    thead {
-        background: transparent; // resets global styles
-        tr {
-            background: none;
-        }
-    }
-    th,
-    td {
-        border: none; // resets global styles
-        padding: 10px 12px; // resets global styles
-        text-align: right; // resets global styles
-        &:first-child {
-            text-align: left;
-        }
-    }
-    th {
-        color: @primary1; // resets global styles
-        font-weight: 600;
-    }
-    td {
-        background-color: transparent; // resets global styles
-    }
-    tbody {
-        tr:hover td {
-            background-color: transparent; // resets global styles
-        }
-        tr:nth-child(odd),
-        tr:nth-child(odd):hover {
-            td,
-            th {
-                background-color: #e1dbcf; // resets global styles
-                .ui-tabs-panel & {
-                    background-color: #f7f3eb; // resets global styles
-                }
-            }
-        }
-    }
-    .ui-tabs-panel & {
-        background-color: @dashboard-tab-content-background-color;
-        .col-name {
-            &:extend(.ellipsis all);
-            &:extend(.col-370-max all);
-        }
-    }
-}
diff --git a/app/design/adminhtml/Magento/backend/web/mui/styles/table.less b/app/design/adminhtml/Magento/backend/web/mui/styles/table.less
index c7b2e60187cdab7df778030f1db4042446dbd3e5..25284d00b65989e4a88a3c3fe51f0d1f2822bfc6 100644
--- a/app/design/adminhtml/Magento/backend/web/mui/styles/table.less
+++ b/app/design/adminhtml/Magento/backend/web/mui/styles/table.less
@@ -194,30 +194,38 @@ table {
             vertical-align: top;
             width: 99%;
         }
-        img {
-            cursor: pointer;
-            height: 25px;
-            width: 25px;
-            right: 0;
-            position: absolute;
-            vertical-align: middle;
-            z-index: 2;
-            opacity: 0;
-        }
-        .icon-font(
-            @icon-calendar,
-            @_icon-font-color: @grid-headings-color,
-            @_icon-font-color-hover: @grid-headings-color-darker,
-            @_icon-font-size: 42px,
-            @_icon-font-line-height: 30px
-        );
-        &:before {
-            height: 29px;
-            margin-left: 5px;
+        .ui-datepicker-trigger {
+            .icon-font(
+                @icon-calendar,
+                @_icon-font-color: @grid-headings-color,
+                @_icon-font-color-hover: @grid-headings-color-darker,
+                @_icon-font-size: 42px,
+                @_icon-font-line-height: 30px
+            );
+            background-color: transparent;
+            border: none;
+            margin: 0;
+            padding: 0;
             position: absolute;
             right: -3px;
             top: -3px;
-            width: 35px;
+            > span {
+                position: absolute;
+                visibility: hidden;
+                z-index: -1;
+            }
+            &:active {
+                top: -2px;
+            }
+            &:focus {
+                outline: 0;
+                box-shadow: none;
+            }
+            &:before {
+                width: 35px;
+                height: 29px;
+                margin-left: 5px;
+            }
         }
     }
 
@@ -226,11 +234,6 @@ table {
         margin: 0;
         padding: 0;
         width: 99%;
-        &:not([multiple]) {
-            .ie9 & {
-                padding-right: 0;
-            }
-        }
     }
 
     input.input-text {
@@ -539,25 +542,6 @@ td.col-type {
         }
     }
 
-    .accordion .config & {
-        thead th,
-        tfoot td {
-            &:extend(.data-table thead all);
-        }
-
-        td {
-            &:extend(.data-table td all);
-        }
-
-        tbody tr:nth-child(odd) td {
-            &:extend(.data-table tbody tr:nth-child(odd) td);
-        }
-
-        tfoot tr:last-child td {
-            &:extend(tfoot tr:last-child td all);
-        }
-    }
-
     input[type="text"] {
         width: 98%;
         padding-left: 1%;
@@ -647,6 +631,25 @@ td.col-type {
     }
 }
 
+.accordion .config .data-table {
+    thead th,
+    tfoot td {
+        &:extend(.data-table thead all);
+    }
+
+    td {
+        &:extend(.data-table td all);
+    }
+
+    tbody tr:nth-child(odd) td {
+        &:extend(.data-table tbody tr:nth-child(odd) td);
+    }
+
+    tfoot tr:last-child td {
+        &:extend(tfoot tr:last-child td all);
+    }
+}
+
 //
 //    Grid - Pager and Buttons row
 // --------------------------------------
@@ -693,12 +696,16 @@ td.col-type {
             float: left;
             margin: 0 15px 0 0;
             position: relative;
-            &:before {
-                color: @color-middle;
-                top: 1px;
-            }
-            &:hover:before {
-                color: @color-dark;
+            .ui-datepicker-trigger {
+                &:before {
+                    color: @color-middle;
+                    top: 1px;
+                }
+                &:hover {
+                    &:before {
+                        color: @color-dark;
+                    }
+                }
             }
         }
         .label {
@@ -759,18 +766,14 @@ td.col-type {
     .link-feed {
         white-space: nowrap;
     }
-    .form-inline & {
-        &:extend(.massaction-form-inline-label-reset all);
-    }
+}
+
+.form-inline .grid-actions {
+    &:extend(.massaction-form-inline-label-reset all);
 }
 
 .pager {
     font-size: 13px;
-    .grid & {
-        margin: 15px 0 0;
-        position: relative;
-        text-align: center;
-    }
     .pages-total-found {
         margin-right: 25px;
     }
@@ -832,6 +835,12 @@ td.col-type {
     }
 }
 
+.grid .pager {
+    margin: 15px 0 0;
+    position: relative;
+    text-align: center;
+}
+
 //
 //    Grid - Mass Action
 // --------------------------------------
@@ -868,9 +877,10 @@ td.col-type {
         border: @validation-border;
         background: @validation-background-color;
     }
-    .form-inline & {
-        &:extend(.massaction-form-inline-label-reset all);
-    }
+}
+
+.form-inline .massaction {
+    &:extend(.massaction-form-inline-label-reset all);
 }
 
 //
@@ -969,31 +979,6 @@ td.col-type {
 //
 //    Sales
 // --------------------------------------
-[class^=' sales-order-'] .grid .col-name {
-    &:extend(.col-220-max all);
-}
-
-.sales-order-view .grid  {
-    .col-name {
-        &:extend(.col-150-max all);
-    }
-    .col-period {
-        &:extend(.col-70-max all);
-    }
-}
-
-.sales-order-index .grid .col-name {
-    &:extend(.col-110-max all);
-}
-
-.sales-order-create-index {
-    .col-phone {
-        &:extend(.col-70-max all);
-    }
-    .col-in_products {
-        &:extend(.col-70);
-    }
-}
 
 .product-options .grouped-items-table {
     .col-name,
@@ -1017,260 +1002,10 @@ td.col-type {
 //    Sales -> Create Order
 //--------------------------------------
 
-.sales-order-create-index,
-.sales-order-edit-index {
-    .grid,
-    .grid-actions {
-        &:extend(.side-paddings-0);
-        table .action-configure {
-            float: right;
-            &.disabled {
-                cursor: default;
-                opacity: .5;
-                &:hover {
-                    text-decoration: none;
-                }
-            }
-        }
-    }
-    .data-table {
-        .border td {
-            padding-bottom: 15px;
-        }
-        .col-product {
-            &:extend(.ellipsis all);
-            &:extend(.col-150-max all);
-        }
-    }
-    .actions.update {
-        margin: 10px 0;
-    }
-}
-
 .order-account-information {
     &:extend(.data-table-td-max all);
 }
 
-//
-//    Sales -> View order
-//--------------------------------------
-
-[class^=' sales-order-view'] {
-    .grid .col-customer_name {
-        &:extend(.col-110-max all);
-    }
-}
-
-//
-//    Sales -> Create Shipment
-//--------------------------------------
-
-.adminhtml-order-shipment-new .grid .col-product {
-    max-width: 770px;
-    width: 770px;
-}
-
-//
-//    Sales -> Return
-//--------------------------------------
-
-[class^=' adminhtml-rma-'] {
-    .fieldset-wrapper .data-table td {
-        &:extend(.ellipsis all);
-        &:extend(.col-670-max);
-    }
-    .grid {
-        .col-product_sku {
-            &:extend(.ellipsis all);
-            &:extend(.col-70-max all);
-        }
-        .col-name,
-        .col-product {
-            &:extend(.col-150-max all);
-        }
-        .col-product_name {
-            &:extend(.ellipsis all);
-            &:extend(.col-110-max all);
-        }
-    }
-    .col-actions {
-        a {
-            &:extend(.col-actions-links);
-        }
-    }
-    .rma-request-details {
-        &:extend(.data-table-td-max all);
-    }
-    #rma_items_grid_table .headings th {
-        &:extend(.nowrap all);
-    }
-}
-
-.adminhtml-rma-edit {
-    .col-product,
-    .col-sku {
-        &:extend(.col-70-max all);
-    }
-}
-
-//
-//    Products
-// --------------------------------------
-.catalog-product-index {
-    .grid .col-name {
-        &:extend(.col-110-max all);
-    }
-}
-
-.catalog-product-edit .ui-tabs-panel .grid {
-    .hor-scroll {
-        &:extend(.h-scroll);
-    }
-    .col-name,
-    .col-type,
-    .col-sku {
-        &:extend(.col-70-max all);
-    }
-    .col-price,
-    .col-position {
-        &:extend(.col-50 all);
-    }
-}
-
-.catalog-product-index .grid .hor-scroll {
-    &:extend(.h-scroll);
-}
-
-.catalog-product-review-index {
-    .grid {
-        .col-name,
-        .col-title {
-            &:extend(.col-110-max all);
-        }
-    }
-}
-
-//
-//    Products -> Categories
-// --------------------------------------
-.catalog-category-edit {
-    .grid {
-        .col-name {
-            &:extend(.col-220-max all);
-        }
-    }
-}
-
-//
-//    Customer
-// --------------------------------------
-.customer-index-index {
-    .grid {
-        .col-name {
-            max-width: 90px;
-            width: 90px;
-        }
-        .col-customer_since,
-        .col-billing_country_id {
-            &:extend(.col-70-max all);
-        }
-        .col-billing_region {
-            width: 70px;
-        }
-    }
-}
-
-[class^=' customer-index-'] {
-    .fieldset-wrapper,
-    .accordion {
-        .grid .col-created_at {
-            &:extend(.col-70-max all);
-        }
-    }
-    .col-action a {
-        &:extend(.col-actions-links);
-    }
-}
-
-.customer-index-edit {
-    .ui-tabs-panel .grid .col-name {
-        &:extend(.col-110-max all);
-    }
-}
-
-//
-//  Customer -> Customer Segments
-// --------------------------------------
-.col-grid_segment_name {
-    &:extend(.col-570-max all);
-    &:extend(.ellipsis all);
-}
-
-//
-//    Marketing -> Catalog Event
-// --------------------------------------
-.adminhtml-catalog-event-index .col-category {
-    &:extend(.ellipsis all);
-    &:extend(.col-220-max all);
-}
-
-//
-//    Marketing -> Search Terms
-// --------------------------------------
-[class^=' catalog-search'] {
-    .col-search_query,
-    .col-synonym_for,
-    .col-redirect {
-        &:extend(.ellipsis all);
-        &:extend(.col-150-max all);
-    }
-}
-
-//
-//    Marketing -> URL Rewrites
-// --------------------------------------
-.adminhtml-urlrewrite-index .col-request_path {
-    &:extend(.ellipsis all);
-    &:extend(.col-150-max all);
-}
-
-//
-//    Marketing -> Reviews
-// --------------------------------------
-.review-product-index {
-    .grid {
-        .hor-scroll {
-            &:extend(.h-scroll);
-        }
-        .col-name {
-            &:extend(.col-110-max all);
-        }
-    }
-}
-
-//
-//    Content -> Pages
-// --------------------------------------
-.adminhtml-cms-page-index {
-    .col-title,
-    .col-identifier {
-        &:extend(.ellipsis all);
-        &:extend(.col-110-max all);
-    }
-}
-
-//
-//    Content -> Hierarchy
-// --------------------------------------
-.adminhtml-cms-hierarchy-index {
-    .col-title,
-    .col-identifier {
-        &:extend(.ellipsis all);
-        max-width: 410px;
-        width: 410px;
-    }
-}
-
 //
 //  Content -> Banners
 // --------------------------------------
@@ -1278,315 +1013,3 @@ td.col-type {
     &:extend(.col-370-max all);
     &:extend(.ellipsis all);
 }
-.adminhtml-banner-edit {
-    .grid .col-name {
-        &:extend(.col-220-max all);
-    }
-}
-
-//
-//  Content -> Frontend Apps
-// --------------------------------------
-.adminhtml-widget-instance-index {
-    .col-title {
-        &:extend(.col-370-max all);
-        &:extend(.ellipsis all);
-    }
-}
-.adminhtml-widget-instance-edit {
-    .grid-chooser .control {
-        margin-top: -19px;
-        width: 80%;
-        .eq-ie9 & {
-            margin-top: -18px;
-        }
-        .grid-actions {
-            padding: 0 0 15px;
-        }
-        .grid {
-            padding: 0;
-        }
-        .addon {
-            input:last-child,
-            select:last-child{
-                border-radius: 0;
-            }
-        }
-    }
-}
-
-//
-//    Reports -> Low Stock
-// --------------------------------------
-.reports-report-product-lowstock {
-    .grid {
-        .col-name {
-            &:extend(.col-670-max all);
-        }
-        .col-sku {
-            &:extend(.col-220-max all);
-        }
-    }
-}
-
-.reports-report-shopcart-product,
-.reports-report-review-customer {
-    .grid .col-name {
-        &:extend(.col-670-max all);
-    }
-}
-.reports-report-shopcart-abandoned {
-    .grid .col-name {
-        &:extend(.col-150-max all);
-    }
-}
-
-//
-//    Reports
-// --------------------------------------
-[class^=' reports-'] [class^='col-total'],
-[class^=' reports-'] [class^='col-average'],
-[class^=' reports-'] [class^='col-ref-'],
-[class^=' reports-'] [class^='col-rate'],
-[class^=' reports-'] [class^='col-tax-amount'] {
-    &:extend(.col-70 all);
-}
-
-.reports-report-sales-invoiced,
-.reports-report-sales-refunde {
-    .grid .col-period {
-        &:extend(.col-auto all);
-    }
-}
-
-//
-//    Reports -> Search Terms
-// --------------------------------------
-.reports-index-search .col-query_text {
-    &:extend(.col-570-max all);
-    &:extend(.ellipsis all);
-}
-
-//
-//    Reports -> Ordered Products Report
-// --------------------------------------
-.reports-report-product-sold .grid .col-name {
-    max-width: 720px;
-    width: 720px;
-}
-
-//
-//    Reports -> Newsletter Problem Reports
-// --------------------------------------
-.newsletter-problem-index .grid {
-    .col-name,
-    .col-subject,
-    .col-product {
-        &:extend(.col-220-max all);
-    }
-}
-
-
-//
-//    Stroes -> Tax rules
-// --------------------------------------
-.tax-rule-index {
-    .grid .col-title {
-        &:extend(.col-150-max all);
-    }
-}
-
-//
-//    Stores -> Returns Attributes
-// --------------------------------------
-.adminhtml-rma-item-attribute-index {
-    .grid {
-        .col-label {
-            &:extend(.col-220-max all);
-        }
-        .col-attr-code {
-            &:extend(.ellipsis);
-            &:extend(.col-150-max all);
-        }
-    }
-}
-.adminhtml-rma-edit {
-    .hor-scroll {
-        &:extend(.h-scroll);
-    }
-}
-
-//
-//    Stores -> All Stores
-// --------------------------------------
-.adminhtml-system-store-index .grid td {
-    &:extend(.ellipsis all);
-    max-width: 310px;
-}
-
-//
-//    Stores -> Currency
-// --------------------------------------
-.adminhtml-system-currency-index {
-    .grid {
-        padding-top: 0;
-    }
-    .col-currency-edit-rate {
-        min-width: 40px;
-    }
-    .col__base-currency {
-        font-weight: bold;
-    }
-    .old-rate {
-        display: block;
-        margin-top: 3px;
-        text-align: center;
-    }
-    .hor-scroll {
-        overflow-x: auto;
-        min-width: 970px;
-    }
-}
-
-//
-//    Stores -> Currency symbol
-// --------------------------------------
-.adminhtml-system-currencysymbol-index {
-    .col-currency {
-        width: 35%;
-    }
-    .grid .input-text {
-        margin: 0 10px 0 0;
-        width: 50%;
-    }
-}
-
-//
-//    Stores -> Customer attributes
-// --------------------------------------
-[class^=' adminhtml-customer-'],
-.adminhtml-rma-item-attribute-index {
-    .col-label {
-        &:extend(.col-370-max all);
-    }
-    .col-required,
-    .col-system,
-    .col-is_visible,
-    .col-sort_order {
-        &:extend(.col-70 all);
-    }
-}
-
-//
-//    Stores -> Product Attribute
-// --------------------------------------
-.catalog-product-attribute-index {
-    .col-attr-code,
-    .col-label {
-        &:extend(.col-110-max all);
-        &:extend(.ellipsis);
-    }
-    [class^=' col-is_'],
-    .col-required,
-    .col-system {
-        &:extend(.col-70 all);
-    }
-}
-
-.catalog-product-set-index .col-set_name {
-    max-width: 930px;
-    width: 930px;
-}
-
-//
-//    System -> Export
-// --------------------------------------
-.adminhtml-export-index {
-    .grid-actions,
-    .grid {
-        &:extend(.side-paddings-0);
-    }
-    .col-label,
-    .col-code {
-        &:extend(.col-220-max all);
-    }
-    .col-code {
-        &:extend(.ellipsis all);
-    }
-    .grid {
-        td {
-            vertical-align: middle;
-        }
-        .input-text-range {
-            margin: 0 10px 0 5px;
-            width: 37%;
-        }
-        .input-text-range-date {
-            margin: 0 5px;
-            width: 32%;
-        }
-    }
-    .ui-datepicker-trigger {
-        display: inline-block;
-        margin: -3px 10px 0 0;
-        vertical-align: middle;
-    }
-}
-
-//
-//    System -> Scheduled Imports/Exports
-// --------------------------------------
-.adminhtml-scheduled-operation-index .grid .col-name {
-    &:extend(.col-220-max all);
-}
-
-//
-//    System -> Report
-// --------------------------------------
-.adminhtml-logging-index .grid .col-fullaction {
-    &:extend(.ellipsis all);
-    &:extend(.col-220-max all);
-}
-
-//
-//    System -> Notifications
-// --------------------------------------
-.adminhtml-notification-index .col-actions a {
-    &:extend(.col-actions-links);
-}
-
-.adminhtml-process-list .col-action a,
-.adminhtml-process-list .col-mode {
-    &:extend(.nowrap all);
-}
-
-.adminhtml-notification-index,
-.adminhtml-cache-index,
-.adminhtml-process-list,
-.indexer-indexer-list {
-    .grid .col-select {
-        width: 10px;
-    }
-}
-
-//
-//    System -> Locked Users
-// --------------------------------------
-.adminhtml-locks-index .grid .col-name {
-    &:extend(.col-570 all);
-}
-
-//
-//    System -> Custom Variables
-// --------------------------------------
-.adminhtml-system-variable-index {
-    .grid .col-code {
-        &:extend(.col-370-max all);
-        &:extend(.ellipsis all);
-    }
-}
-
-.adminhtml-logging-index .grid .col-info {
-    &:extend(.col-110-max all);
-    &:extend(.ellipsis all);
-}
diff --git a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
index 6c5024a57483cca0785fcd89af3c9299b91efb93..cfacc04304f4dbf50113e0b890295eab9737bbd9 100644
--- a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
@@ -46,12 +46,6 @@
 .old.price {
     text-decoration: line-through;
 }
-.msrp-price-wrapper {
-    text-decoration: none;
-    .price-wrapper {
-        text-decoration: line-through;
-    }
-}
 
 .price-tier_price {
     .price-including-tax + .price-excluding-tax {
@@ -217,6 +211,38 @@
             }
         }
     }
+    .fieldset-product-options-inner {
+        .legend {
+            border: none;
+            .css(font-weight, @font-weight__bold);
+            .css(margin, 0 0 @indent__xs);
+            display: inline-block;
+            .font-size(14px);
+            float: none;
+            padding: 0;
+        }
+        &.required {
+            .legend {
+                &:after {
+                    content: '*';
+                    .typography(
+                    @_font-size: @form-field-label-asterisk__font-size,
+                    @_color: @form-field-label-asterisk__color,
+                    @_font-family: @form-field-label-asterisk__font-family,
+                    @_font-weight: @form-field-label-asterisk__font-weight,
+                    @_line-height: @form-field-label-asterisk__line-height,
+                    @_font-style: @form-field-label-asterisk__font-style
+                    );
+                    .css(margin, @form-field-label-asterisk__margin);
+                }
+            }
+        }
+        .datetime-picker {
+            + .time-picker {
+                .css(margin-left, @indent__xs);
+            }
+        }
+    }
 }
 
 .product-info-main,
diff --git a/app/design/frontend/Magento/blank/Magento_CatalogSearch/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_CatalogSearch/web/css/source/_module.less
index 66009f0069383e2a7f2352c3cc90a784ce45b42b..33023f1b68fe411bfef3f9f8593687d4ded40681 100644
--- a/app/design/frontend/Magento/blank/Magento_CatalogSearch/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_CatalogSearch/web/css/source/_module.less
@@ -124,9 +124,6 @@
             }
             &:last-child {
                 position: relative;
-                input {
-                    width: 90%;
-                }
                 div.mage-error[generated] {
                     position: absolute;
                     top: 32px;
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/_module.less
index d4eee51f4323b613c79ad681dc0c5f1f7dd3ef86..9fd0cc27f492effdb869f17edc22b2f513cbf3de 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/_module.less
@@ -153,6 +153,9 @@
             .fieldset > .field > .label {
                 font-weight: @font-weight__regular;
             }
+            .product-item-name {
+                margin: 0;
+            }
         }
         
         .data.table:extend(.abs-product-options-list all) {
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less
index 0758cf95b23585ce288471dc71f6ad27a3ba9bb7..d8d0b25cb90f10fa092cc096fec35d72c733fce6 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less
@@ -4,59 +4,82 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Variables
+//  ---------------------------------------------
+
+@minicart__border-color: @color-gray80;
+@minicart__padding-horizontal: @indent__base;
+
+//
+//  Common
+//  ---------------------------------------------
 
 & when (@media-common = true) {
 
 //
-//    Minicart
-//--------------------------------------
+//  Minicart
+//  ---------------------------------------------
+
 .block-minicart {
     .items-total {
         float: left;
-        margin: 0 10px;
+        margin: 0 @indent__s;
+        .count {
+            font-weight: @font-weight__bold;
+        }
     }
     .subtotal {
-        margin: 0 10px;
+        margin: 0 @indent__s;
         text-align: right;
+        .label {
+            &:extend(.abs-colon all);
+        }
     }
     .amount {
-        .price-wrapper:first-child .price {
-            font-size: @font-size__l;
-            font-weight: @font-weight__bold;
+        .price-wrapper {
+            &:first-child {
+                .price {
+                    font-size: @font-size__l;
+                    font-weight: @font-weight__bold;
+                }
+            }
         }
     }
     .subtitle {
         display: none;
     }
-    .subtitle.empty {
-        display: block;
-        padding: 30px 0 20px;
-        text-align: center;
-        font-size: 14px;
+    .subtitle {
+        &.empty {
+            display: block;
+            padding: @indent__l 0 @indent__base;
+            text-align: center;
+            font-size: 14px;
+        }
     }
-    .empty.text {
-        text-align: center;
+    .text {
+        &.empty {
+            text-align: center;
+        }
     }
-    > .content > .actions {
-        margin-top: 15px;
-        text-align: center;
-        > .primary {
-            margin: 0 10px 15px;
-            .action.primary {
-                &:extend(.abs-button-l all);
-                display: block;
-                width: 100%;
-                margin-bottom: 15px;
-                &:last-child {
-                    margin-bottom: 0;
+    .block-content {
+        > .actions {
+            margin-top: 15px;
+            text-align: center;
+            > .primary {
+                margin: 0 @indent__s 15px;
+                .action {
+                    &.primary {
+                        &:extend(.abs-button-l all);
+                        display: block;
+                        width: 100%;
+                        margin-bottom: 15px;
+                        &:last-child {
+                            margin-bottom: 0;
+                        }
+                    }
                 }
             }
         }
-        > .secondary {
-            margin: 0 0 15px;
-        }
     }
     .block-category-link,
     .block-product-link,
@@ -84,10 +107,10 @@
     );
     float: right;
     .block-minicart {
-        padding: 25px 20px;
+        .css(padding, 25px @minicart__padding-horizontal);
         right: 0;
         width: 320px;
-        > .title {
+        .block-title {
             display: none;
         }
         &:after {
@@ -104,95 +127,138 @@
         > .primary,
         > .secondary {
             display: inline;
-            margin-right: @indent__s;
-            &:last-child {
-                margin-right: 0;
-            }
         }
     }
-    .action.close {
-        display: none;
-    }
-    .action.showcart {
-        .text {
-            &:extend(.abs-visually-hidden all);
+
+    .action {
+        &.close {
+            width: 40px;
+            height: 40px;
+            top: 0;
+            right: 0;
+            position: absolute;
+            .button-reset();
+            .button-icon(
+                @icon-remove,
+                @_icon-font-size: 32px,
+                @_icon-font-line-height: 32px,
+                @_icon-font-text-hide: true
+            );
         }
-        white-space: nowrap;
-        .counter.qty {
-            &.empty {
-               display: none;
+        &.showcart {
+            .text {
+                &:extend(.abs-visually-hidden all);
+            }
+            white-space: nowrap;
+            .counter.qty {
+                &.empty {
+                   display: none;
+                }
+                .css(background, @active__color);
+                border-radius: 2px;
+                .css(color, @page__background-color);
+                clip: none;
+                display: inline-block;
+                height: 24px;
+                line-height: 24px;
+                min-width: 18px;
+                margin: 3px 0 0;
+                padding: 0 3px;
+                overflow: hidden;
+                text-align: center;
+                white-space: normal;
+            }
+            .counter-label {
+                &:extend(.abs-visually-hidden all);
             }
-            .css(background, @active__color);
-            border-radius: 2px;
-            .css(color, @page__background-color);
-            clip: none;
-            display: inline-block;
-            height: 24px;
-            line-height: 24px;
-            min-width: 18px;
-            margin: 3px 0 0;
-            padding: 0 3px;
-            overflow: hidden;
-            text-align: center;
-            white-space: normal;
-        }
-        .counter-label {
-            &:extend(.abs-visually-hidden all);
         }
     }
+    .minicart-widgets {
+        margin-top: 15px;
+    }
+}
+
+.minicart-items-wrapper {
+    .css(border, 1px solid @minicart__border-color);
+    .css(margin, 0 -@minicart__padding-horizontal);
+    border-left: 0;
+    border-right: 0;
+    overflow-x: auto;
+    padding: 15px;
 }
 
-.minilist {
+.minicart-items {
     .list-reset-styles(0, 0);
     .item {
-        border-top: 1px solid @secondary__color;
-        padding: 20px 0;
-        z-index: 1;
-    }
-    .item > .product {
-        &:extend(.abs-add-clearfix all);
+        &:not(:first-child) {
+            .css(border-top, 1px solid @minicart__border-color);
+        }
+        padding: @indent__base 0;
+        &:first-child {
+            padding-top: 0;
+        }
+        &:last-child {
+            padding-bottom: 0;
+        }
+        > .product {
+            &:extend(.abs-add-clearfix all);
+        }
     }
     .product-image-wrapper {
         &:extend(.abs-reset-image-wrapper all);
     }
-    .product {
-        &-item-photo {
-            float: left;
-        }
-        &-item-name {
-            font-weight: @font-weight__regular;
-            margin-top: 0;
-            a {
-                .css(color, @link__color);
-            }
+    .product-item-pricing {
+        .label {
+            display: inline-block;
+            width: 4.5rem;
+         }
+    }
+    .price-minicart {
+        margin-bottom: @indent__xs;
+    }
+    .product-item-photo {
+        float: left;
+    }
+    .product-item-name {
+        font-weight: @font-weight__regular;
+        margin: 0 0 @indent__s;
+        a {
+            .css(color, @link__color);
         }
-        &-item-details {
-            padding-left: 88px;
-            .price {
-                font-weight: @font-weight__bold;
-            }
+    }
+    .product-item-details {
+        padding-left: 88px;
+        .price {
+            font-weight: @font-weight__bold;
         }
-        &.pricing {
-            margin-top: 3px;
-        }
-        &.options {
-            .tooltip.toggle {
-                .icon-font(
-                    @icon-down,
-                    @_icon-font-size: 28px,
-                    @_icon-font-line-height: 28px,
-                    @_icon-font-text-hide: true,
-                    @_icon-font-margin: -3px 0 0 7px,
-                    @_icon-font-position: after
-                );
-            }
+    }
+    .product.options {
+        .tooltip.toggle {
+            .icon-font(
+                @icon-down,
+                @_icon-font-size: 28px,
+                @_icon-font-line-height: 28px,
+                @_icon-font-text-hide: true,
+                @_icon-font-margin: -3px 0 0 7px,
+                @_icon-font-position: after
+            );
         }
     }
-    .details-qty {
-        .label:after {
-            content: ":";
+    .details-qty,
+    .price-minicart {
+        .label {
+            &:extend(.abs-colon all);
         }
     }
+    .item-qty {
+        width: 40px;
+        text-align: center;
+        margin-right: @indent__s;
+    }
+    .item-update {
+        vertical-align: top;
+        .font-size(11);
+    }
     .action {
          &.edit,
          &.delete {
@@ -217,8 +283,9 @@
 }
 
 //
-//    Mobile
-//--------------------------------------
+//  Mobile
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__xs) {
     .minicart-wrapper .block-minicart {
         width: 290px;
@@ -232,8 +299,9 @@
 }
 
 //
-//    Desktop
-//--------------------------------------
+//  Desktop
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .minicart-wrapper {
         margin-left: 13px;
diff --git a/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
index 0588feef2464df93a56d54de0c0a50f1f844cd18..ec5c148b54d6959e9fcba973985442442d4c879d 100644
--- a/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
@@ -49,6 +49,13 @@
     }
 }
 
+.map-old-price {
+    text-decoration: none;
+    .price-wrapper {
+        text-decoration: line-through;
+    }
+}
+
 }
 
 //
diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json
index ccdc3da87013b1cf25caac771f5340cfe051b35c..c0d99f390e24c49932d3a13c943004b7259241d2 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.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/frontend/Magento/blank/web/css/source/_extends.less b/app/design/frontend/Magento/blank/web/css/source/_extends.less
index 3929da185262de71437e686ec752db967c76dd50..bc7e5a2fc3df617f2cd045288d3fe18f6d1ba2ae 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_extends.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_extends.less
@@ -4,8 +4,13 @@
 //  */
 
 //
-//    List default styles reset
-//--------------------------------------
+//  Styles Extends
+//  _____________________________________________
+
+//
+//  List default styles reset
+//  ---------------------------------------------
+
 .abs-reset-list {
     .list-reset-styles();
     > li {
@@ -14,8 +19,9 @@
 }
 
 //
-//    Link as a button
-//--------------------------------------
+//  Link as a button
+//  ---------------------------------------------
+
 .abs-action-link-button {
     .button();
     .link-as-button();
@@ -23,8 +29,9 @@
 }
 
 //
-//    Product options list
-//--------------------------------------
+//  Product options list
+//  ---------------------------------------------
+
 @abs-product-options-list: {
     dt {
         float: left;
@@ -52,8 +59,9 @@
 }
 
 //
-//    Button reset width, floats, margins
-//--------------------------------------
+//  Button reset width, floats, margins
+//  ---------------------------------------------
+
 @abs-button-responsive: {
     .button-responsive();
 };
@@ -75,8 +83,9 @@
 }
 
 //
-//    Blocks in 2 columns
-//--------------------------------------
+//  Blocks in 2 columns
+//  ---------------------------------------------
+
 @abs-blocks-2columns: {
     width: 48.8%;
     &:nth-child(odd) {
@@ -101,8 +110,9 @@
 }
 
 //
-//    Reset image alignment in container
-//--------------------------------------
+//  Reset image alignment in container
+//  ---------------------------------------------
+
 .abs-reset-image-wrapper {
     height: auto;
     padding: 0!important;
@@ -112,8 +122,9 @@
 }
 
 //
-//    Adaptive images
-//--------------------------------------
+//  Adaptive images
+//  ---------------------------------------------
+
 .abs-adaptive-images {
     display: block;
     height: auto;
@@ -128,8 +139,9 @@
 }
 
 //
-//    Title for login blocks
-//--------------------------------------
+//  Title for login blocks
+//  ---------------------------------------------
+
 .abs-login-block-title {
     strong {
         font-weight: 500;
@@ -141,8 +153,9 @@
 }
 
 //
-//    Abstract block title
-//--------------------------------------
+//  Abstract block title
+//  ---------------------------------------------
+
 .abs-block-title {
     > strong {
         .heading(h3);
@@ -151,8 +164,9 @@
 }
 
 //
-//    Account blocks
-//--------------------------------------
+//  Account blocks
+//  ---------------------------------------------
+
 .abs-account-blocks {
     .block-title {
         &:extend(.abs-block-title all);
@@ -182,8 +196,9 @@
 }
 
 //
-//    Simple Dropdown
-//--------------------------------------
+//  Simple Dropdown
+//  ---------------------------------------------
+
 .abs-dropdown-simple {
     .dropdown(
         @_dropdown-list-item-padding: 5px 5px 5px 23px,
@@ -194,23 +209,26 @@
 }
 
 //
-//    Input quantity
-//--------------------------------------
+//  Input quantity
+//  ---------------------------------------------
+
 .abs-input-qty {
     width: 47px;
     text-align: center;
 }
 
 //
-//    Marging for blocks & widgets
-//--------------------------------------
+//  Marging for blocks & widgets
+//  ---------------------------------------------
+
 .abs-margin-for-blocks-and-widgets {
     margin-bottom: @indent__xl;
 }
 
 //
-//    Remove button for blocks
-//--------------------------------------
+//  Remove button for blocks
+//  ---------------------------------------------
+
 .abs-remove-button-for-blocks {
     .icon-font(
         @icon-remove,
@@ -224,8 +242,9 @@
 }
 
 //
-//    Product link
-//--------------------------------------
+//  Product link
+//  ---------------------------------------------
+
 .abs-product-link {
     .link(
         @_link-color: @color-gray19,
@@ -236,8 +255,9 @@
 }
 
 //
-//   Reset left margin
-//--------------------------------------
+//  Reset left margin
+//  ---------------------------------------------
+
 @abs-reset-left-margin: {
     margin-left: 0;
 };
@@ -259,8 +279,9 @@
 }
 
 //
-//    Action with icon remove with text
-//--------------------------------------
+//  Action with icon remove with text
+//  ---------------------------------------------
+
 .abs-action-remove {
     &:extend(.abs-action-button-as-link all);
     width: auto;
@@ -271,8 +292,9 @@
 }
 
 //
-//    Action with icon remove with text for desktop
-//--------------------------------------
+//  Action with icon remove with text for desktop
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .abs-action-remove-desktop when not (@form-field-type-label-inline__width = false) and not (@form-field-type-label-inline__width = '') {
         top: 6px;
@@ -281,8 +303,9 @@
 }
 
 //
-//    Add Recipient
-//--------------------------------------
+//  Add Recipient
+//  ---------------------------------------------
+
 .abs-add-fields {
     .fieldset {
         margin-bottom: 50px;
@@ -329,8 +352,9 @@
 }
 
 //
-//    Add Recipient for desktop
-//--------------------------------------
+//  Add Recipient for desktop
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .abs-add-fields-desktop {
         .fieldset {
@@ -353,8 +377,9 @@
 }
 
 //
-//    Margin for forms
-//--------------------------------------
+//  Margin for forms
+//  ---------------------------------------------
+
 @abs-margin-for-forms-desktop: {
     .css(margin-left, @form-field-type-label-inline__width);
 };
@@ -372,15 +397,17 @@
 }
 
 //
-//    Visibility hidden / show visibility hidden
-//--------------------------------------
+//  Visibility hidden / show visibility hidden
+//  ---------------------------------------------
+
 .abs-hidden {
     .visibility-hidden();
 }
 
 //
-//    Visually hidden / show visually hidden
-//--------------------------------------
+//  Visually hidden / show visually hidden
+//  ---------------------------------------------
+
 @abs-visually-hidden: {
     .visually-hidden();
 };
@@ -414,8 +441,9 @@
 }
 
 //
-//    Clearfix
-//--------------------------------------
+//  Clearfix
+//  ---------------------------------------------
+
 @abs-add-clearfix: {
     .clearfix();
 };
@@ -449,8 +477,9 @@
 }
 
 //
-//    Box-sizing
-//--------------------------------------
+//  Box-sizing
+//  ---------------------------------------------
+
 @abs-add-box-sizing: {
     box-sizing: border-box;
 };
@@ -472,8 +501,9 @@
 }
 
 //
-//    Revert field type
-//--------------------------------------
+//  Revert field type
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .abs-revert-field-type-desktop {
         .fieldset {
@@ -489,8 +519,9 @@
 }
 
 //
-//    Settings icons
-//--------------------------------------
+//  Settings icons
+//  ---------------------------------------------
+
 .abs-navigation-icon {
     .icon-font(
         @_icon-font-content: @icon-down,
@@ -507,8 +538,9 @@
 }
 
 //
-//    Split button
-//--------------------------------------
+//  Split button
+//  ---------------------------------------------
+
 .abs-split-button {
     .dropdown-split(
         @_options-selector : ~".items",
@@ -518,8 +550,9 @@
 }
 
 //
-//    Action addto
-//--------------------------------------
+//  Action addto
+//  ---------------------------------------------
+
 .abs-action-addto-product {
     &:extend(.abs-action-link-button all);
     .button-s();
@@ -538,15 +571,17 @@
 }
 
 //
-//    Large button
-//--------------------------------------
+//  Large button
+//  ---------------------------------------------
+
 .abs-button-l {
     .button-l();
 }
 
 //
-//   Button as a link
-//--------------------------------------
+//  Button as a link
+//  ---------------------------------------------
+
 .abs-action-button-as-link {
     .button-as-link(
         @_margin: false
@@ -561,29 +596,33 @@
 }
 
 //
-//   Button revert secondary color
-//--------------------------------------
+//  Button revert secondary color
+//  ---------------------------------------------
+
 .abs-revert-secondary-color {
     .button-revert-secondary-color();
 }
 
 //
-//   Button revert secondary size
-//--------------------------------------
+//  Button revert secondary size
+//  ---------------------------------------------
+
 .abs-revert-secondary-size {
     .button-revert-secondary-size();
 }
 
 //
-//    Box-tocart block
-//--------------------------------------
+//  Box-tocart block
+//  ---------------------------------------------
+
 .abs-box-tocart {
     margin: @indent__s 0;
 }
 
 //
-//    Excl/Incl tax
-//--------------------------------------
+//  Excl/Incl tax
+//  ---------------------------------------------
+
 .abs-adjustment-incl-excl-tax {
     .price-including-tax,
     .price-excluding-tax,
@@ -605,12 +644,13 @@
 }
 
 //
-//    Cart tax total
-//--------------------------------------
+//  Cart tax total
+//  ---------------------------------------------
+
 .abs-tax-total {
     cursor: pointer;
-    position: relative;
     padding-right: 12px;
+    position: relative;
     .icon-font(
         @icon-down,
         @_icon-font-size: 26px,
@@ -639,8 +679,9 @@
 }
 
 //
-//    Checkout shipping methods title
-//--------------------------------------
+//  Checkout shipping methods title
+//  ---------------------------------------------
+
 .abs-methods-shipping-title {
     .font-size(14);
     margin: 0 0 15px;
@@ -648,20 +689,23 @@
 }
 
 //
-//    Checkout order review price
-//--------------------------------------
+//  Checkout order review price
+//  ---------------------------------------------
+
 .abs-checkout-cart-price {
 }
 
 //
-//    Checkout order product name
-//--------------------------------------
+//  Checkout order product name
+//  ---------------------------------------------
+
 .abs-checkout-product-name {
 }
 
 //
-//    Checkout order review
-//--------------------------------------
+//  Checkout order review
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
     .abs-checkout-order-review {
         tbody tr {
@@ -699,8 +743,9 @@
 }
 
 //
-//    Add colon
-//--------------------------------------
+//  Add colon
+//  ---------------------------------------------
+
 .abs-colon {
     &:after {
         content: ": ";
@@ -708,8 +753,9 @@
 }
 
 //
-//    Icon - create add
-//--------------------------------------
+//  Icon - create add
+//  ---------------------------------------------
+
 .abs-icon-add {
     .icon-font(
         @_icon-font-content: @icon-expand,
@@ -733,8 +779,9 @@
 }
 
 //
-//    Dropdown items - create new
-//--------------------------------------
+//  Dropdown items - create new
+//  ---------------------------------------------
+
 .abs-dropdown-items-new {
     .items .item:last-child {
         &:hover {
@@ -751,8 +798,9 @@
 }
 
 //
-//    Abstract toggle title block
-//--------------------------------------
+//  Abstract toggle title block
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
     .abs-toggling-title-mobile {
         border-top: @border-width__base solid @border-color__base;
@@ -783,8 +831,9 @@
 }
 
 //
-//    Abstract no display
-//--------------------------------------
+//  Abstract no display
+//  ---------------------------------------------
+
 @abs-no-display: {
     display: none;
 };
@@ -806,16 +855,18 @@
 }
 
 //
-//    Status
-//--------------------------------------
+//  Status
+//  ---------------------------------------------
+
 .abs-status {
     display: inline-block;
     margin-bottom: @indent__base;
 }
 
 //
-//    Pager toolbar for non-catalog pages mobile
-//--------------------------------------
+//  Pager toolbar for non-catalog pages mobile
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
     .abs-pager-toolbar-mobile {
         .toolbar-amount,
@@ -828,8 +879,9 @@
 }
 
 //
-//    Pager toolbar for non-catalog pages mobile
-//--------------------------------------
+//  Pager toolbar for non-catalog pages mobile
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
     .abs-pager-toolbar-mobile-s {
         .toolbar-amount,
@@ -841,8 +893,9 @@
 }
 
 //
-//    Pager toolbar for non-catalog pages desktop
-//--------------------------------------
+//  Pager toolbar for non-catalog pages desktop
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .abs-pager-toolbar {
         margin-bottom: @indent__base;
@@ -869,8 +922,9 @@
 }
 
 //
-//    Items counter in blocks
-//--------------------------------------
+//  Items counter in blocks
+//  ---------------------------------------------
+
 .abs-block-items-counter {
     .css(color, @primary__color__lighter);
     .font-size(12px);
@@ -878,8 +932,9 @@
 }
 
 //
-//    Shopping cart items
-//--------------------------------------
+//  Shopping cart items
+//  ---------------------------------------------
+
 .abs-shopping-cart-items {
     .action {
         &.continue {
@@ -944,3 +999,18 @@
         }
     }
 }
+
+//
+//  Form Field Date
+//  ---------------------------------------------
+
+.abs-field-date {
+    .control {
+        &:extend(.abs-add-box-sizing all);
+        position: relative;
+    }
+    input {
+        margin-right: @indent__s;
+        width: calc(~"100% - (@{icon-calendar__font-size} + @{indent__s})");
+    }
+}
diff --git a/app/design/frontend/Magento/blank/web/css/source/_forms.less b/app/design/frontend/Magento/blank/web/css/source/_forms.less
index 563084653f5611d0b8877b492d984b77cac69e91..e05a13a7eac2d28ac35e124837434335cb116f0c 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_forms.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_forms.less
@@ -4,6 +4,7 @@
 //  */
 
 @form-field__vertical-indent__desktop: 29px;
+@form-calendar-icon__color: @primary__color;
 
 //
 //    Common
@@ -26,8 +27,8 @@
         }
         &.choice {
             .label {
-                font-weight: normal;
                 display: inline;
+                font-weight: normal;
             }
         }
         .label {
@@ -59,11 +60,9 @@ fieldset.field {
     border: 0;
     padding: 0;
 }
-.field.date {
-    .control input {
-        margin-right: 10px;
-        min-width: 80px;
-        width: 25%;
+.field {
+    &.date {
+        &:extend(.abs-field-date all);
     }
 }
 
@@ -84,6 +83,26 @@ select:focus ~ .tooltip .tooltip-content {
     display: block;
 }
 
+.hasDatepicker {
+    + .ui-datepicker-trigger {
+        .button-reset();
+        .icon-font(
+        @_icon-font-content: @icon-calendar,
+        @_icon-font-color: @primary__color__lighter,
+        @_icon-font-size: @icon-calendar__font-size,
+        @_icon-font-line-height: @icon-calendar__font-size,
+        @_icon-font-display: block,
+        @_icon-font-text-hide: true
+        );
+        display: inline-block;
+        vertical-align: middle;
+        &:focus {
+            box-shadow: none;
+            outline: 0;
+        }
+    }
+}
+
 //
 //    Sidebar forms
 //--------------------------------------
diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
index d069dbab4926b4da100db3bfca6f4558d0745aa8..6b986fee61ba5493f0f68b3a939f24654665b125 100644
--- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
@@ -256,6 +256,39 @@
                 .css(margin-top, @indent__xs);
             }
         }
+
+    }
+    .fieldset-product-options-inner {
+        .legend {
+            border: none;
+            .css(font-weight, @font-weight__semibold);
+            display: inline-block;
+            .font-size(14px);
+            float: none;
+            padding: 0;
+            margin: 0 0 8px;
+        }
+        &.required {
+            .legend {
+                &:after {
+                    content: '*';
+                    .typography(
+                    @_font-size: @form-field-label-asterisk__font-size,
+                    @_color: @form-field-label-asterisk__color,
+                    @_font-family: @form-field-label-asterisk__font-family,
+                    @_font-weight: @form-field-label-asterisk__font-weight,
+                    @_line-height: @form-field-label-asterisk__line-height,
+                    @_font-style: @form-field-label-asterisk__font-style
+                    );
+                    .css(margin, @form-field-label-asterisk__margin);
+                }
+            }
+        }
+        .datetime-picker {
+            + .time-picker {
+                .css(margin-left, @indent__xs);
+            }
+        }
     }
 }
 
diff --git a/app/design/frontend/Magento/luma/Magento_CatalogSearch/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_CatalogSearch/web/css/source/_module.less
index c51347a3b6e9b5ffae159d4604c82511a9d6fbe3..5272f6cb9d6c7108bab7407cb17abe50bce952d5 100644
--- a/app/design/frontend/Magento/luma/Magento_CatalogSearch/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_CatalogSearch/web/css/source/_module.less
@@ -126,9 +126,6 @@
             }
             &:last-child {
                 position: relative;
-                input {
-                    width: 90%;
-                }
                 div.mage-error[generated] {
                     position: absolute;
                     top: 32px;
@@ -140,6 +137,9 @@
                     padding-right: 45px;
                 }
             }
+            &.date {
+                &:extend(.abs-field-date all);
+            }
         }
     }
     .group.price {
diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less
index 655c892d6dc9fff3b743a6ef799a617fd02c9a9d..3a65f3be3f3055aca8770b2ec9b94145206a63fc 100644
--- a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less
+++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less
@@ -4,58 +4,83 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Variables
+//  ---------------------------------------------
+
+@minicart__border-color: @color-gray80;
+@minicart__padding-horizontal: @indent__base;
+
+//
+//  Common
+//  ---------------------------------------------
 
 & when (@media-common = true) {
 
 //
-//    Minicart
-//--------------------------------------
+//  Minicart
+//  ---------------------------------------------
+
 .block-minicart {
     .items-total {
         float: left;
-        margin: 0 10px;
+        margin: 0 @indent__s;
+        .count {
+            font-weight: @font-weight__bold;
+        }
     }
     .subtotal {
-        margin: 0 10px;
+        margin: 0 @indent__s;
         text-align: right;
+        .label {
+            &:extend(.abs-colon all);
+        }
     }
     .amount {
-        .price-wrapper:first-child .price {
-            font-size: @font-size__l;
-            font-weight: @font-weight__bold;
+        .price-wrapper {
+            &:first-child {
+                .price {
+                    font-size: @font-size__l;
+                    font-weight: @font-weight__bold;
+                }
+            }
         }
     }
     .subtitle {
         display: none;
     }
-    .subtitle.empty {
-        display: block;
-        padding: 30px 0 20px;
-        text-align: center;
-        font-size: 14px;
-    }
-    .empty.text {
-        text-align: center;
-    }
-    > .content > .actions {
-        margin-top: 15px;
-        > .secondary {
-            margin: 15px 0;
+    .subtitle {
+        &.empty {
+            display: block;
+            padding: @indent__l 0 @indent__base;
             text-align: center;
+            font-size: 14px;
         }
-        > .primary {
-            margin: 0 10px;
-            .action.primary {
-                &:extend(.abs-button-l all);
-                display: block;
-                width: 100%;
-            }
+    }
+    .text {
+        &.empty {
+            text-align: center;
         }
-        .paypal-logo {
+    }
+    .block-content {
+        > .actions {
             margin-top: 15px;
-            text-align: center;
+            > .secondary {
+                text-align: center;
+            }
+            > .primary {
+                margin: 0 @indent__s 15px;
+                .action {
+                    &.primary {
+                        &:extend(.abs-button-l all);
+                        display: block;
+                        width: 100%;
+                    }
+                }
+            }
+            .paypal-logo {
+                margin-top: 15px;
+                text-align: center;
+            }
         }
     }
     .block-category-link,
@@ -84,10 +109,10 @@
     );
     float: right;
     .block-minicart {
-        padding: 25px 20px;
+        .css(padding, 25px @minicart__padding-horizontal);
         right: 0;
         width: 320px;
-        > .title {
+        .block-title {
             display: none;
         }
         &:after {
@@ -99,77 +124,123 @@
             right: 26px;
         }
     }
-    .product.actions {
-        float: right;
-        margin: -24px 0 0;
-        > .primary,
-        > .secondary {
-            display: inline;
+    .product {
+        .actions {
+            float: right;
+            margin: -24px 0 0;
+            > .primary,
+            > .secondary {
+                display: inline;
+                &:not(:last-child) {
+                    margin-right: 15px;
+                }
+            }
         }
     }
-    .action.close {
-        display: none;
-    }
-    .action.showcart {
-        .text {
-            &:extend(.abs-visually-hidden all);
+    .action {
+        &.close {
+            width: 40px;
+            height: 40px;
+            top: 0;
+            right: 0;
+            position: absolute;
+            .button-reset();
+            .button-icon(
+                @icon-remove,
+                @_icon-font-color: @minicart-icons-color,
+                @_icon-font-size: 16px,
+                @_icon-font-line-height: 16px,
+                @_icon-font-text-hide: true
+            );
         }
-        white-space: nowrap;
-        .counter.qty {
-            &.empty {
-               display: none;
+        &.showcart {
+            .text {
+                &:extend(.abs-visually-hidden all);
+            }
+            white-space: nowrap;
+            .counter.qty {
+                &.empty {
+                   display: none;
+                }
+                .css(background, @active__color);
+                border-radius: 2px;
+                .css(color, @page__background-color);
+                clip: none;
+                display: inline-block;
+                height: 24px;
+                line-height: 24px;
+                min-width: 18px;
+                margin: 3px 0 0;
+                padding: 0 3px;
+                overflow: hidden;
+                text-align: center;
+                white-space: normal;
+            }
+            .counter-label {
+                &:extend(.abs-visually-hidden all);
             }
-            .css(background, @active__color);
-            border-radius: 2px;
-            .css(color, @page__background-color);
-            clip: none;
-            display: inline-block;
-            height: 24px;
-            line-height: 24px;
-            min-width: 18px;
-            margin: 3px 0 0;
-            padding: 0 3px;
-            overflow: hidden;
-            text-align: center;
-            white-space: normal;
-        }
-        .counter-label {
-            &:extend(.abs-visually-hidden all);
         }
     }
+    .minicart-widgets {
+        margin-top: 15px;
+    }
 }
 
-.minilist {
+.minicart-items-wrapper {
+    .css(border, 1px solid @minicart__border-color);
+    .css(margin, 0 -@minicart__padding-horizontal);
+    border-left: 0;
+    border-right: 0;
+    overflow-x: auto;
+    padding: 15px;
+}
+
+.minicart-items {
     .list-reset-styles(0, 0);
     .item {
-        border-top: 1px solid @secondary__color;
-        padding: 20px 0;
-        z-index: 1;
-    }
-
-    .item > .product {
-        &:extend(.abs-add-clearfix all);
+        &:not(:first-child) {
+            .css(border-top, 1px solid @minicart__border-color);
+        }
+        padding: @indent__base 0;
+        &:first-child {
+            padding-top: 0;
+        }
+        &:last-child {
+            padding-bottom: 0;
+        }
+        > .product {
+            &:extend(.abs-add-clearfix all);
+        }
     }
     .product-image-wrapper {
         &:extend(.abs-reset-image-wrapper all);
     }
-    .product {
-        &-item-photo {
-            float: left;
+    .product-item-pricing {
+        .label {
+            display: inline-block;
+            width: 4.5rem;
         }
-        &-item-name {
-            font-weight: @font-weight__regular;
-            margin-top: 0;
-            a {
-                .css(color, @link__color);
-            }
+    }
+    .price-minicart {
+        margin-bottom: @indent__xs;
+    }
+    .product-item-photo {
+        float: left;
+    }
+    .product-item-name {
+        font-weight: @font-weight__regular;
+        margin: 0 0 @indent__s;
+        a {
+            .css(color, @link__color);
         }
-        &-item-details {
-            padding-left: 88px;
-            .price {
-                font-weight: @font-weight__bold;
-            }
+    }
+    .product-item-details {
+        padding-left: 88px;
+        .price {
+            font-weight: @font-weight__bold;
         }
+    }
+    .product {
         .toggle {
             &:extend(.abs-toggling-title all);
             &:after {
@@ -179,7 +250,6 @@
             }
             border: 0;
             padding: 0 @indent__xl @indent__xs 0;
-
         }
         .active {
             > .toggle {
@@ -205,12 +275,21 @@
             }
         }
     }
-    .details-qty {
-        .label:after {
-            content: ":";
+    .details-qty,
+    .price-minicart {
+        .label {
+            &:extend(.abs-colon all);
         }
     }
-
+    .item-qty {
+        width: 40px;
+        text-align: center;
+        margin-right: @indent__s;
+    }
+    .update-cart-item {
+        vertical-align: top;
+        .font-size(11);
+    }
     .action {
         &.edit,
         &.delete {
@@ -235,8 +314,9 @@
 }
 
 //
-//    Mobile
-//--------------------------------------
+//  Mobile
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__xs) {
     .minicart-wrapper .block-minicart {
         width: 290px;
@@ -249,9 +329,11 @@
     }
 }
 
+
 //
-//    Desktop
-//--------------------------------------
+//  Desktop
+//  ---------------------------------------------
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .minicart-wrapper {
         margin-left: 13px;
diff --git a/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
index f64034240b33029c0876e6f5973f851861499688..b54c31c35877dd5cbea96eb12aa6b0b8f3836568 100644
--- a/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
@@ -57,7 +57,10 @@
 }
 
 .map-old-price {
-    text-decoration: line-through;
+    text-decoration: none;
+    .price-wrapper {
+        text-decoration: line-through;
+    }
 }
 
 .map-old-price,
diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json
index 8210d430f42df6cf719e7e3b3bc26235f1f721f7..7c4a0c1ab12379cec4f85df3b34bbb76efc2761e 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.42.0-beta11",
-        "magento/framework": "0.42.0-beta11",
+        "magento/theme-frontend-blank": "0.74.0-beta2",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/frontend/Magento/luma/web/css/source/_buttons.less b/app/design/frontend/Magento/luma/web/css/source/_buttons.less
index 2791fa2728fe8ffa71982c49602ac6d243176ab6..489082e8757b2df5ef486cdaa71af079dd3a5f76 100644
--- a/app/design/frontend/Magento/luma/web/css/source/_buttons.less
+++ b/app/design/frontend/Magento/luma/web/css/source/_buttons.less
@@ -27,7 +27,7 @@ button {
 }
 
 body {
-    &:not(.keyfocus) {
+    &:not(._keyfocus) {
         button {
             &:focus {
                 box-shadow: none;
diff --git a/app/design/frontend/Magento/luma/web/css/source/_extends.less b/app/design/frontend/Magento/luma/web/css/source/_extends.less
index 8af8975b8ec451735021bc79a34c21f65dc2aa97..863b6b0c06480e9091341f1bc66e2b4a9099524d 100644
--- a/app/design/frontend/Magento/luma/web/css/source/_extends.less
+++ b/app/design/frontend/Magento/luma/web/css/source/_extends.less
@@ -1325,31 +1325,9 @@
     .control {
         position: relative;
         &:extend(.abs-add-box-sizing all);
-        .icon-font(
-            @_icon-font-content: @icon-calendar,
-            @_icon-font-color: @primary__color__lighter,
-            @_icon-font-size: 23px,
-            @_icon-font-line-height: 23px,
-            @_icon-font-display: block
-        );
-        &:before {
-            position: absolute;
-            top: @indent__xs;
-            left: @indent__s;
-            margin-left: 85%;
-            z-index: 0;
-        }
-    }
-    img {
-        opacity: 0;
-        cursor: pointer;
-        position: relative;
-        z-index: 1;
-        width: 20px;
-        vertical-align: middle;
     }
     input {
-        width: 85%;
+        width: calc(~"100% - (@{icon-calendar__font-size} + @{indent__s})");
         margin-right: @indent__s;
     }
 }
diff --git a/app/design/frontend/Magento/luma/web/css/source/_forms.less b/app/design/frontend/Magento/luma/web/css/source/_forms.less
index 25aba849744db13488ea2144b62cd45f18950b2d..6ae20a91277e4a382d9b7c066fe204fca2c1b82f 100644
--- a/app/design/frontend/Magento/luma/web/css/source/_forms.less
+++ b/app/design/frontend/Magento/luma/web/css/source/_forms.less
@@ -5,6 +5,7 @@
 
 @legend-border-bottom: 1px solid @color-gray-light6;
 @form-field__vertical-indent__desktop: 29px;
+@form-calendar-icon__color: @primary__color;
 
 //
 //    Common
@@ -108,6 +109,26 @@ select:focus ~ .tooltip .tooltip-content {
     display: block;
 }
 
+.hasDatepicker {
+    + .ui-datepicker-trigger {
+        .button-reset();
+        .icon-font(
+        @_icon-font-content: @icon-calendar,
+        @_icon-font-color: @primary__color__lighter,
+        @_icon-font-size: @icon-calendar__font-size,
+        @_icon-font-line-height: @icon-calendar__font-size,
+        @_icon-font-display: block,
+        @_icon-font-text-hide: true
+        );
+        display: inline-block;
+        vertical-align: middle;
+        &:focus {
+            box-shadow: none;
+            outline: 0;
+        }
+    }
+}
+
 //
 //    Sidebar forms
 //--------------------------------------
diff --git a/app/design/frontend/Magento/luma/web/css/source/_variables.less b/app/design/frontend/Magento/luma/web/css/source/_variables.less
index 51c89324266cbec9ee561e0e9434db6c777e0fa0..c64aef6e8ca2adee01d531ab3ad5a8771e48fe00 100644
--- a/app/design/frontend/Magento/luma/web/css/source/_variables.less
+++ b/app/design/frontend/Magento/luma/web/css/source/_variables.less
@@ -32,6 +32,8 @@
 @icon-download: '\e626';
 @icon-private: '\e629';
 
+@icon-calendar__font-size: 23px;
+
 //
 //  Tables
 //  ---------------------------------------------
diff --git a/app/etc/di.xml b/app/etc/di.xml
index 9249d1d9dacc93dc0f06e07578131ea925126768..10095a200e3bc10329a48f6a95c1fd40faa49012 100755
--- a/app/etc/di.xml
+++ b/app/etc/di.xml
@@ -556,13 +556,6 @@
             <argument name="publisher" xsi:type="object">developerPublisher</argument>
         </arguments>
     </type>
-    <type name="Magento\Framework\View\Asset\SourceFileGeneratorPool">
-        <arguments>
-            <argument name="fileGeneratorTypes" xsi:type="array">
-                <item name="less" xsi:type="object">Magento\Framework\Less\FileGenerator</item>
-            </argument>
-        </arguments>
-    </type>
     <virtualType name="developerPublisher" type="Magento\Framework\App\View\Asset\Publisher">
         <arguments>
             <argument name="materializationStrategyFactory" xsi:type="object">developerMaterialization</argument>
@@ -576,24 +569,23 @@
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="lessFileGeneratorMaterialization" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
+    <type name="Magento\Framework\View\Asset\SourceFileGeneratorPool">
         <arguments>
-            <argument name="strategiesList" xsi:type="array">
-                <item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
-                <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>
+            <argument name="fileGeneratorTypes" xsi:type="array">
+                <item name="less" xsi:type="object">fileassemblerFileGenerator</item>
             </argument>
         </arguments>
-    </virtualType>
-    <virtualType name="lessFileGeneratorPublisher" type="Magento\Framework\App\View\Asset\Publisher">
+    </type>
+    <virtualType name="fileassemblerFileGenerator" type="Magento\Framework\Less\FileGenerator">
         <arguments>
-            <argument name="materializationStrategyFactory" xsi:type="object">lessFileGeneratorMaterialization</argument>
+            <argument name="relatedGenerator" xsi:type="object">fileassemblerRelatedFilesGenerator</argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Framework\Less\FileGenerator">
+    <virtualType name="fileassemblerRelatedFilesGenerator" type="Magento\Developer\Model\Less\FileGenerator\PublicationDecorator">
         <arguments>
-            <argument name="publisher" xsi:type="object">lessFileGeneratorPublisher</argument>
+            <argument name="publisher" xsi:type="object">developerPublisher</argument>
         </arguments>
-    </type>
+    </virtualType>
     <virtualType name="fallbackResolverSimpleWithGroupedCache" type="Magento\Framework\View\Design\FileResolution\Fallback\Resolver\Simple">
         <arguments>
             <argument name="cache" xsi:type="object">Magento\Framework\View\Design\FileResolution\Fallback\CacheData\Grouped</argument>
@@ -1081,6 +1073,12 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\App\FrontController">
+        <arguments>
+            <argument name="appState" xsi:type="object">Magento\Framework\App\State\Proxy</argument>
+            <argument name="messageManager" xsi:type="object">Magento\Framework\Message\ManagerInterface\Proxy</argument>
+        </arguments>
+    </type>
     <type name="Magento\Framework\Webapi\Rest\Request\DeserializerFactory">
         <arguments>
             <argument name="deserializers" xsi:type="array">
diff --git a/app/i18n/magento/de_de/composer.json b/app/i18n/magento/de_de/composer.json
index e531a741d5ba2686b71cb3db8d6a9b65bd21dba2..3489faab6623a1096e4bce93c145e2db131f690b 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "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 153bc0d9d3253be61f43226fae2fcf87ba063d19..03f6fae4438e0e91e923c22312afe699e0df225e 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "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 93032c4b83eb27ce4aa8f7a8392f0bc9f0bfd761..7b80bcc0f53436a9be865f48c0891a3c44582e39 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "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 d3681cbfc371d5c942ae01c536b06c76aa2fe636..56a2643eef7abb99e163df1e69543150cf0543e2 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "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 91b6f97e6e14afea0d8ef0ecf8837b4e32469345..700e4cab06051364f4e5306a08f2ec6a0856b0af 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "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 87a67bf386eab92396ae8988a5043826b8970de4..d6a8fb0b185001e89b576dfbf7d591f0829f39ea 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "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 0c70befdd1474c7272d190fd963d2f8b536dda47..5d4c631ba8fb2d6c41cdd3751ddd21050058c2b1 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.42.0-beta11",
+        "magento/framework": "0.74.0-beta2",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/composer.json b/composer.json
index cc7fa0106c0fa440fdfd7684b0bf70b96d0b4ac5..643c451b5b02a0f9129d4fbdda4cb44324a25d51 100644
--- a/composer.json
+++ b/composer.json
@@ -2,7 +2,7 @@
     "name": "magento/project-community-edition",
     "description": "Magento project (Community Edition)",
     "type": "project",
-    "version": "0.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/composer.lock b/composer.lock
index 0be074072d1126a112e1c30896fd3689087b972d..00989580f30f29375e5f2fe27c8a2668836854a0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "c42991e56fb8b32295f12ca803bdc6b7",
+    "hash": "2540c30fb9f7ddea359e3a1f9bc67097",
     "packages": [
         {
             "name": "composer/composer",
@@ -471,17 +471,17 @@
         },
         {
             "name": "symfony/console",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Console",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "53f86497ccd01677e22435cfb7262599450a90d1"
+                "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/53f86497ccd01677e22435cfb7262599450a90d1",
-                "reference": "53f86497ccd01677e22435cfb7262599450a90d1",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/e44154bfe3e41e8267d7a3794cd9da9a51cfac34",
+                "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34",
                 "shasum": ""
             },
             "require": {
@@ -490,7 +490,6 @@
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/event-dispatcher": "~2.1",
-                "symfony/phpunit-bridge": "~2.7",
                 "symfony/process": "~2.1"
             },
             "suggest": {
@@ -525,29 +524,26 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-13 17:37:22"
+            "time": "2015-01-25 04:39:26"
         },
         {
             "name": "symfony/finder",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Finder",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Finder.git",
-                "reference": "bebc7479c566fa4f14b9bcef9e32e719eabec74e"
+                "reference": "16513333bca64186c01609961a2bb1b95b5e1355"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Finder/zipball/bebc7479c566fa4f14b9bcef9e32e719eabec74e",
-                "reference": "bebc7479c566fa4f14b9bcef9e32e719eabec74e",
+                "url": "https://api.github.com/repos/symfony/Finder/zipball/16513333bca64186c01609961a2bb1b95b5e1355",
+                "reference": "16513333bca64186c01609961a2bb1b95b5e1355",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -575,29 +571,26 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-12 10:28:44"
+            "time": "2015-01-03 08:01:59"
         },
         {
             "name": "symfony/process",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Process",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "4d717f34f3d1d6ab30fbe79f7132960a27f4a0dc"
+                "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/4d717f34f3d1d6ab30fbe79f7132960a27f4a0dc",
-                "reference": "4d717f34f3d1d6ab30fbe79f7132960a27f4a0dc",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
+                "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -625,7 +618,7 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-12 10:28:44"
+            "time": "2015-01-25 04:39:26"
         },
         {
             "name": "tubalmartin/cssmin",
@@ -2007,16 +2000,16 @@
         },
         {
             "name": "fabpot/php-cs-fixer",
-            "version": "v1.6",
+            "version": "v1.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
-                "reference": "81a46f8a0f92f1ba64587b384a275d0766cf2c70"
+                "reference": "85777ebc6a1dac48c904acf9412b29b58b5dd592"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/81a46f8a0f92f1ba64587b384a275d0766cf2c70",
-                "reference": "81a46f8a0f92f1ba64587b384a275d0766cf2c70",
+                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/85777ebc6a1dac48c904acf9412b29b58b5dd592",
+                "reference": "85777ebc6a1dac48c904acf9412b29b58b5dd592",
                 "shasum": ""
             },
             "require": {
@@ -2056,7 +2049,7 @@
                 }
             ],
             "description": "A script to automatically fix Symfony Coding Standard",
-            "time": "2015-03-26 21:09:59"
+            "time": "2015-03-13 19:33:24"
         },
         {
             "name": "league/climate",
@@ -2210,16 +2203,16 @@
         },
         {
             "name": "phpmd/phpmd",
-            "version": "2.2.2",
+            "version": "2.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpmd/phpmd.git",
-                "reference": "7dc4a6b5c07b119ab5da7960b56303fa6855eb84"
+                "reference": "58c4b00f924d301e8c5281f40cfa9a66f3df9eee"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpmd/phpmd/zipball/7dc4a6b5c07b119ab5da7960b56303fa6855eb84",
-                "reference": "7dc4a6b5c07b119ab5da7960b56303fa6855eb84",
+                "url": "https://api.github.com/repos/phpmd/phpmd/zipball/58c4b00f924d301e8c5281f40cfa9a66f3df9eee",
+                "reference": "58c4b00f924d301e8c5281f40cfa9a66f3df9eee",
                 "shasum": ""
             },
             "require": {
@@ -2268,7 +2261,7 @@
                 "phpmd",
                 "pmd"
             ],
-            "time": "2015-03-26 07:47:05"
+            "time": "2015-03-02 10:26:50"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -3093,26 +3086,23 @@
         },
         {
             "name": "symfony/config",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Config",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Config.git",
-                "reference": "7a47189c7667ca69bcaafd19ef8a8941db449a2c"
+                "reference": "a9f781ba1221067d1f07c8cec0bc50f81b8d7408"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Config/zipball/7a47189c7667ca69bcaafd19ef8a8941db449a2c",
-                "reference": "7a47189c7667ca69bcaafd19ef8a8941db449a2c",
+                "url": "https://api.github.com/repos/symfony/Config/zipball/a9f781ba1221067d1f07c8cec0bc50f81b8d7408",
+                "reference": "a9f781ba1221067d1f07c8cec0bc50f81b8d7408",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
                 "symfony/filesystem": "~2.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -3140,21 +3130,21 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-12 10:28:44"
+            "time": "2015-01-21 20:57:55"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/DependencyInjection",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/DependencyInjection.git",
-                "reference": "a49245b2beebe332924561c30772b16e1d32f13a"
+                "reference": "42bbb43fab66292a1865dc9616c299904c3d4d14"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/a49245b2beebe332924561c30772b16e1d32f13a",
-                "reference": "a49245b2beebe332924561c30772b16e1d32f13a",
+                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/42bbb43fab66292a1865dc9616c299904c3d4d14",
+                "reference": "42bbb43fab66292a1865dc9616c299904c3d4d14",
                 "shasum": ""
             },
             "require": {
@@ -3166,7 +3156,6 @@
             "require-dev": {
                 "symfony/config": "~2.2",
                 "symfony/expression-language": "~2.6",
-                "symfony/phpunit-bridge": "~2.7",
                 "symfony/yaml": "~2.1"
             },
             "suggest": {
@@ -3201,21 +3190,21 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-17 12:44:40"
+            "time": "2015-01-25 04:39:26"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/EventDispatcher",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/EventDispatcher.git",
-                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
+                "reference": "f75989f3ab2743a82fe0b03ded2598a2b1546813"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
-                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/f75989f3ab2743a82fe0b03ded2598a2b1546813",
+                "reference": "f75989f3ab2743a82fe0b03ded2598a2b1546813",
                 "shasum": ""
             },
             "require": {
@@ -3226,7 +3215,6 @@
                 "symfony/config": "~2.0,>=2.0.5",
                 "symfony/dependency-injection": "~2.6",
                 "symfony/expression-language": "~2.6",
-                "symfony/phpunit-bridge": "~2.7",
                 "symfony/stopwatch": "~2.3"
             },
             "suggest": {
@@ -3260,29 +3248,26 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-13 17:37:22"
+            "time": "2015-02-01 16:10:57"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Filesystem",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Filesystem.git",
-                "reference": "fdc5f151bc2db066b51870d5bea3773d915ced0b"
+                "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/fdc5f151bc2db066b51870d5bea3773d915ced0b",
-                "reference": "fdc5f151bc2db066b51870d5bea3773d915ced0b",
+                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a1f566d1f92e142fa1593f4555d6d89e3044a9b7",
+                "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -3310,29 +3295,26 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-12 10:28:44"
+            "time": "2015-01-03 21:13:09"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Stopwatch",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Stopwatch.git",
-                "reference": "ba4e774f71e2ce3e3f65cabac4031b9029972af5"
+                "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/ba4e774f71e2ce3e3f65cabac4031b9029972af5",
-                "reference": "ba4e774f71e2ce3e3f65cabac4031b9029972af5",
+                "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/e8da5286132ba75ce4b4275fbf0f4cd369bfd71c",
+                "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -3360,29 +3342,26 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "http://symfony.com",
-            "time": "2015-02-24 11:52:21"
+            "time": "2015-01-03 08:01:59"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.6.5",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Yaml",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "0cd8e72071e46e15fc072270ae39ea1b66b10a9d"
+                "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/0cd8e72071e46e15fc072270ae39ea1b66b10a9d",
-                "reference": "0cd8e72071e46e15fc072270ae39ea1b66b10a9d",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/60ed7751671113cf1ee7d7778e691642c2e9acd8",
+                "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -3410,7 +3389,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "http://symfony.com",
-            "time": "2015-03-12 10:28:44"
+            "time": "2015-01-25 04:39:26"
         }
     ],
     "aliases": [],
@@ -3420,7 +3399,6 @@
         "phpmd/phpmd": 0
     },
     "prefer-stable": false,
-    "prefer-lowest": false,
     "platform": {
         "php": "~5.5.0|~5.6.0"
     },
diff --git a/dev/tests/api-functional/_files/Magento/TestModule3/Service/V1/Error.php b/dev/tests/api-functional/_files/Magento/TestModule3/Service/V1/Error.php
index 9ef7c6bda142674f4ebdbb87bef10d5bc720109d..eca76949e1cd41749f7a076b4ac98d680aff8f05 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule3/Service/V1/Error.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule3/Service/V1/Error.php
@@ -72,7 +72,7 @@ class Error implements \Magento\TestModule3\Service\V1\ErrorInterface
     public function webapiException()
     {
         throw new \Magento\Framework\Webapi\Exception(
-            'Service not found',
+            __('Service not found'),
             5555,
             \Magento\Framework\Webapi\Exception::HTTP_NOT_FOUND
         );
diff --git a/dev/tests/api-functional/framework/Magento/TestFramework/Annotation/ApiDataFixture.php b/dev/tests/api-functional/framework/Magento/TestFramework/Annotation/ApiDataFixture.php
index 749c0de354ea2b9530f392c478be5eea5ccf5e61..1225eb5340e8a420b3839c3fa6d56749bce77224 100644
--- a/dev/tests/api-functional/framework/Magento/TestFramework/Annotation/ApiDataFixture.php
+++ b/dev/tests/api-functional/framework/Magento/TestFramework/Annotation/ApiDataFixture.php
@@ -32,12 +32,14 @@ class ApiDataFixture
      * Constructor
      *
      * @param string $fixtureBaseDir
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct($fixtureBaseDir)
     {
         if (!is_dir($fixtureBaseDir)) {
-            throw new \Magento\Framework\Exception("Fixture base directory '{$fixtureBaseDir}' does not exist.");
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __("Fixture base directory '%1' does not exist.", $fixtureBaseDir)
+            );
         }
         $this->_fixtureBaseDir = realpath($fixtureBaseDir);
     }
@@ -67,7 +69,7 @@ class ApiDataFixture
      * @param string $scope 'class' or 'method'
      * @param \PHPUnit_Framework_TestCase $test
      * @return array
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getFixtures($scope, \PHPUnit_Framework_TestCase $test)
     {
@@ -77,7 +79,9 @@ class ApiDataFixture
             foreach ($annotations[$scope]['magentoApiDataFixture'] as $fixture) {
                 if (strpos($fixture, '\\') !== false) {
                     // usage of a single directory separator symbol streamlines search across the source code
-                    throw new \Magento\Framework\Exception('Directory separator "\\" is prohibited in fixture declaration.');
+                    throw new \Magento\Framework\Exception\LocalizedException(
+                        __('Directory separator "\\" is prohibited in fixture declaration.')
+                    );
                 }
                 $fixtureMethod = [get_class($test), $fixture];
                 if (is_callable($fixtureMethod)) {
@@ -115,7 +119,7 @@ class ApiDataFixture
      * Execute fixture scripts if any
      *
      * @param array $fixtures
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _applyFixtures(array $fixtures)
     {
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php
index 7bb1fccd68818c9804f508c9c9f4a445527c9257..c57d73035b1a5f558741437393832e9d26f77348 100644
--- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php
@@ -111,7 +111,7 @@ class ProductAttributeRepositoryTest extends \Magento\TestFramework\TestCase\Web
 
         $attributeData = [
             'attribute' => [
-                'attribute_code' => $attributeCode,
+                'attribute_id' => $attribute['attribute_id'],
                 'frontend_labels' => [
                     ['store_id' => 0, 'label' => 'front_lbl_new'],
                 ],
@@ -123,7 +123,7 @@ class ProductAttributeRepositoryTest extends \Magento\TestFramework\TestCase\Web
 
         $serviceInfo = [
             'rest' => [
-                'resourcePath' => self::RESOURCE_PATH . '/' . $attribute['attribute_id'],
+                'resourcePath' => self::RESOURCE_PATH . '/' . $attributeCode,
                 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
             ],
             'soap' => [
@@ -134,7 +134,7 @@ class ProductAttributeRepositoryTest extends \Magento\TestFramework\TestCase\Web
         ];
 
         if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
-            $attributeData['attribute']['attributeId'] = $attribute['attribute_id'];
+            $attributeData['attribute']['attributeCode'] = $attributeCode;
         }
         $result = $this->_webApiCall($serviceInfo, $attributeData);
 
diff --git a/dev/tests/functional/.htaccess b/dev/tests/functional/.htaccess
index db0b8f66ad0008c5f765391d0b93515d711ab1b7..0fe8af43b87597383c5904481c15b751e52630d2 100644
--- a/dev/tests/functional/.htaccess
+++ b/dev/tests/functional/.htaccess
@@ -170,6 +170,8 @@
 ## http://developer.yahoo.com/performance/rules.html#expires
 
     ExpiresDefault "access plus 1 year"
+    ExpiresByType text/html A0
+    ExpiresByType text/plain A0
 
 </IfModule>
 
@@ -191,4 +193,4 @@
 ## If running in cluster environment, uncomment this
 ## http://developer.yahoo.com/performance/rules.html#etags
 
-    #FileETag none
\ No newline at end of file
+    #FileETag none
diff --git a/dev/tests/functional/bootstrap.php b/dev/tests/functional/bootstrap.php
index b661b84d1ceccd96c2b4ceb28ee3ee9ff0d31dc2..5a4f9a7c490dee281665493f4eea214c77d2d4ca 100644
--- a/dev/tests/functional/bootstrap.php
+++ b/dev/tests/functional/bootstrap.php
@@ -4,7 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-session_start();
 defined('MTF_BOOT_FILE') || define('MTF_BOOT_FILE', __FILE__);
 defined('MTF_BP') || define('MTF_BP', str_replace('\\', '/', (__DIR__)));
 require_once __DIR__ . '/../../../app/bootstrap.php';
diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json
index 256e8f34c43778f4f2ff4f4feabb4b5c20547524..41482866c1b241dbf0feb2c100d029ed51e11d68 100644
--- a/dev/tests/functional/composer.json
+++ b/dev/tests/functional/composer.json
@@ -1,6 +1,6 @@
 {
     "require": {
-        "magento/mtf": "1.0.0-rc20",
+        "magento/mtf": "1.0.0-rc21",
         "php": "~5.5.0|~5.6.0",
         "phpunit/phpunit": "4.1.0",
         "phpunit/phpunit-selenium": ">=1.2",
diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Protocol/CurlTransport/BackendDecorator.php b/dev/tests/functional/lib/Magento/Mtf/Util/Protocol/CurlTransport/BackendDecorator.php
index c4b2a9d7f85cc2649fbe9c95f71063f5c9de7115..ff02e15272bd9dc13e0a1c1f58e445024d06c469 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Util/Protocol/CurlTransport/BackendDecorator.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Protocol/CurlTransport/BackendDecorator.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Mtf\Util\Protocol\CurlTransport;
 
-use Magento\Mtf\Config;
+use Magento\Mtf\Config\DataInterface;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 
@@ -40,7 +40,7 @@ class BackendDecorator implements CurlInterface
     /**
      * System config
      *
-     * @var Config
+     * @var DataInterface
      */
     protected $configuration;
 
@@ -48,9 +48,9 @@ class BackendDecorator implements CurlInterface
      * Constructor
      *
      * @param CurlTransport $transport
-     * @param Config $configuration
+     * @param DataInterface $configuration
      */
-    public function __construct(CurlTransport $transport, Config $configuration)
+    public function __construct(CurlTransport $transport, DataInterface $configuration)
     {
         $this->transport = $transport;
         $this->configuration = $configuration;
@@ -65,11 +65,10 @@ class BackendDecorator implements CurlInterface
      */
     protected function authorize()
     {
-        $url = $_ENV['app_backend_url'] .
-            $this->configuration->getParameter('application/backendLoginUrl');
+        $url = $_ENV['app_backend_url'] . $this->configuration->get('application/0/backendLoginUrl/0/value');
         $data = [
-            'login[username]' => $this->configuration->getParameter('application/backendLogin'),
-            'login[password]' => $this->configuration->getParameter('application/backendPassword'),
+            'login[username]' => $this->configuration->get('application/0/backendLogin/0/value'),
+            'login[password]' => $this->configuration->get('application/0/backendPassword/0/value'),
         ];
         $this->transport->write(CurlInterface::POST, $url, '1.0', [], $data);
         $response = $this->read();
diff --git a/dev/tests/functional/phpunit.xml.dist b/dev/tests/functional/phpunit.xml.dist
index 06b2ee9b0603d8fd6e602011e34ddbf2b131c00f..f99b813aa1073903e64d1495ea27d55440cd3547 100755
--- a/dev/tests/functional/phpunit.xml.dist
+++ b/dev/tests/functional/phpunit.xml.dist
@@ -26,7 +26,6 @@
             </arguments>
         </listener>
         <listener class="Magento\Mtf\System\Event\StateListener" />
-        <listener class="Magento\Mtf\System\JUnit"/>
     </listeners>
 
     <php>
@@ -37,7 +36,6 @@
         <env name="log_directory" value="var/log" />
         <env name="events_preset" value="base" />
         <env name="module_whitelist" value="Magento_Install,Magento_Core" />
-        <env name="report_file_name" value="test-cases-report.xml"/>
         <env name="basedir" value="var/log" />
         <env name="credentials_file_path" value="./credentials.xml.dist" />
     </php>
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/Admin/SuperAdmin.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/Admin/SuperAdmin.php
index fd1a66d884fbecb34528b214b112ad0afa7741ca..3d18543896556fd8cd86604348c2ce5da1650900 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/Admin/SuperAdmin.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/Admin/SuperAdmin.php
@@ -22,10 +22,10 @@ class SuperAdmin extends DataFixture
         $this->_data = [
             'fields' => [
                 'username' => [
-                    'value' => $this->_configuration->getParameter('application/backendLogin'),
+                    'value' => $this->_configuration->get('application/0/backendLogin/0/value'),
                 ],
                 'password' => [
-                    'value' => $this->_configuration->getParameter('application/backendPassword'),
+                    'value' => $this->_configuration->get('application/0/backendPassword/0/value'),
                 ],
             ],
         ];
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/GlobalSearch.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/GlobalSearch.xml
index e40e21c4fca28b00ba54d39c6bd30bd66f20f241..7b1c3f2aeac1d2d0f6e9be43c3dab50609066d32 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/GlobalSearch.xml
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Fixture/GlobalSearch.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="globalSearch" module="Magento_Backend" class="Magento\Backend\Test\Fixture\GlobalSearch">
     <dataset name="default">
         <field name="query" xsi:type="string">catalogProductSimple::default::name</field>
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Handler/Extractor.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Handler/Extractor.php
index 967d142da277c2cb30be1ff7927363b03caf93a5..3df57e717b29304175d27a3fc9c66f4cb3cd9456 100755
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Handler/Extractor.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Handler/Extractor.php
@@ -7,7 +7,6 @@
 
 namespace Magento\Backend\Test\Handler;
 
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -62,8 +61,8 @@ class Extractor
      */
     public function getData()
     {
-        /** @var \Magento\Mtf\Config $config */
-        $config = \Magento\Mtf\ObjectManagerFactory::getObjectManager()->get('Magento\Mtf\Config');
+        /** @var \Magento\Mtf\Config\DataInterface $config */
+        $config = \Magento\Mtf\ObjectManagerFactory::getObjectManager()->get('Magento\Mtf\Config\DataInterface');
         $url = $_ENV['app_backend_url'] . $this->url;
         $curl = new BackendDecorator(new CurlTransport(), $config);
         $curl->addOption(CURLOPT_HEADER, 1);
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/AdminAuthLogin.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/AdminAuthLogin.php
index 02f5655d35fa05611ada2a097718106a14bda254..3c258a22f9d864ecfb636d2ebe46c65262f56740 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/AdminAuthLogin.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/AdminAuthLogin.php
@@ -39,7 +39,7 @@ class AdminAuthLogin extends Page
      *
      * @var string
      */
-    protected $messagesBlock = '#messages .messages';
+    protected $messagesBlock = '.messages .message';
 
     /**
      * Constructor.
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml
index 6b345b542bb84bbdcfcfe6bd9ced8353fa68228f..b9f96e1cb55a7ff19150c846a5424c9b8a2c4414 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="bundleProduct" module="Magento_Bundle" type="eav" entity_type="catalog_product" product_type="bundle" collection="Magento\Catalog\Model\Resource\Product\Collection" identifier="sku" repository_class="Magento\Bundle\Test\Repository\BundleProduct" handler_interface="Magento\Bundle\Test\Handler\BundleProduct\BundleProductInterface" class="Magento\Bundle\Test\Fixture\BundleProduct">
     <dataset name="default">
         <field name="name" xsi:type="string">BundleProduct %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Handler/BundleProduct/Curl.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/Handler/BundleProduct/Curl.php
index cbd47bd232e4ea5fd3f79bc667b3f73084b37eb2..6eeb06506c9cd342adeea36c2426cb964edaf6de 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Handler/BundleProduct/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Handler/BundleProduct/Curl.php
@@ -9,7 +9,8 @@ namespace Magento\Bundle\Test\Handler\BundleProduct;
 use Magento\Bundle\Test\Fixture\BundleProduct;
 use Magento\Catalog\Test\Handler\CatalogProductSimple\Curl as ProductCurl;
 use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Config;
+use Magento\Mtf\Config\DataInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
 
 /**
  * Create new bundle product via curl.
@@ -25,11 +26,12 @@ class Curl extends ProductCurl implements BundleProductInterface
 
     /**
      * @constructor
-     * @param Config $configuration
+     * @param DataInterface $configuration
+     * @param EventManagerInterface $eventManager
      */
-    public function __construct(Config $configuration)
+    public function __construct(DataInterface $configuration, EventManagerInterface $eventManager)
     {
-        parent::__construct($configuration);
+        parent::__construct($configuration, $eventManager);
 
         $this->mappingData += [
             'selection_can_change_qty' => [
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/ListProduct.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/ListProduct.php
index 4a55128100962e9f84fab2be865d4439cf1678e5..08c75424ad8c707c1355f16833eaf8e28f17546f 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/ListProduct.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/ListProduct.php
@@ -43,14 +43,14 @@ class ListProduct extends Block
      *
      * @var string
      */
-    protected $productDetailsSelector = '//*[contains(@class, "product details") and .//*[text()="%s"]]';
+    protected $productDetailsSelector = '//*[contains(@class, "product details") and .//*[contains(text(),"%s")]]';
 
     /**
      * Product name.
      *
      * @var string
      */
-    protected $productTitle = './/*[@class="product name product-item-name"]/a[text()="%s"]';
+    protected $productTitle = './/*[@class="product name product-item-name"]/a[contains(text(),"%s")]';
 
     /**
      * Click for Price link on category page.
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml
index e30dafaff1c5a7eb1c90af347f40e670e8fe4b6e..20c3c831f6e627016d8ff8f74fff0f8d26485017 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
     <fixture name="catalogAttributeSet" module="Magento_Catalog" type="flat" entity_type="eav_attribute_set" collection="Magento\Catalog\Model\Resource\Product\Link\Product\Collection" repository_class="Magento\Catalog\Test\Repository\CatalogAttributeSet" handler_interface="Magento\Catalog\Test\Handler\CatalogAttributeSet\CatalogAttributeSetInterface" class="Magento\Catalog\Test\Fixture\CatalogAttributeSet">
     <dataset name="default">
         <field name="attribute_set_name" xsi:type="string">Default_attribute_set_%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml
index 0a33bf96c60d635bad7e1cff10fa6da4f6f646b4..1e99a0752d4e407a6dfac02c519cf83d9f6ded54 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="catalogProductAttribute" module="Magento_Catalog" type="composite" collection="Magento\Catalog\Model\Resource\Attribute" repository_class="Magento\Catalog\Test\Repository\CatalogProductAttribute" handler_interface="Magento\Catalog\Test\Handler\CatalogProductAttribute\CatalogProductAttributeInterface" class="Magento\Catalog\Test\Fixture\CatalogProductAttribute">
     <dataset name="default">
         <field name="frontend_label" xsi:type="string">attribute_label%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
index 1815359930d5d7827cd2ce06681b12c7da7f60a0..59bc10f7eeecdc84fcec704f0166306b479f60f5 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="catalogProductSimple" module="Magento_Catalog" type="eav" entity_type="catalog_product" product_type="simple" collection="Magento\Catalog\Model\Resource\Product\Collection" identifier="sku" repository_class="Magento\Catalog\Test\Repository\CatalogProductSimple" handler_interface="Magento\Catalog\Test\Handler\CatalogProductSimple\CatalogProductSimpleInterface" class="Magento\Catalog\Test\Fixture\CatalogProductSimple">
     <dataset name="default">
         <field name="name" xsi:type="string">Test simple product %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/TaxClass.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/TaxClass.php
index 8ca245b0c1607022eb2da61b21028f5efd077404..7bc605d82acca354327d119a88a570982aec88a4 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/TaxClass.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/TaxClass.php
@@ -9,7 +9,6 @@ namespace Magento\Catalog\Test\Fixture\CatalogProductSimple;
 use Magento\Tax\Test\Fixture\TaxClass as FixtureTaxClass;
 use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -89,7 +88,7 @@ class TaxClass implements FixtureInterface
     protected function setTaxClassId($taxClassName)
     {
         $url = $_ENV['app_backend_url'] . 'tax/rule/new/';
-        $config = \Magento\Mtf\ObjectManagerFactory::getObjectManager()->create('Magento\Mtf\Config');
+        $config = \Magento\Mtf\ObjectManagerFactory::getObjectManager()->create('Magento\Mtf\Config\DataInterface');
         $curl = new BackendDecorator(new CurlTransport(), $config);
         $curl->addOption(CURLOPT_HEADER, 1);
         $curl->write(CurlInterface::POST, $url, '1.0', [], []);
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml
index fd551f743f338cc4b096d7085084070cc2a144a5..158e62ce41f722ec50d060011baf95da903f15f9 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="catalogProductVirtual" module="Magento_Catalog" type="eav" entity_type="catalog_product" product_type="virtual" collection="Magento\Catalog\Model\Resource\Product\Collection" identifier="sku" repository_class="Magento\Catalog\Test\Repository\CatalogProductVirtual" handler_interface="Magento\Catalog\Test\Handler\CatalogProductVirtual\CatalogProductVirtualInterface" class="Magento\Catalog\Test\Fixture\CatalogProductVirtual">
     <dataset name="default">
         <field name="name" xsi:type="string">Test virtual product %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml
index 663a249b5da66e367bd8b0a953e622653aaa065e..9ea63b5e3616f573ba5385f127969f81779f8210 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="category" module="Magento_Catalog" type="eav" entity_type="catalog_category_entity" collection="Magento\Catalog\Model\Resource\Category\Collection" repository_class="Magento\Catalog\Test\Repository\Category" handler_interface="Magento\Catalog\Test\Handler\Category\CategoryInterface" class="Magento\Catalog\Test\Fixture\Category">
     <dataset name="default">
         <field name="name" xsi:type="string">Category%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogAttributeSet/Curl.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogAttributeSet/Curl.php
index 8c7e5905afb7339488389ab62caeedc929ecd784..b5f8585e01fe459e6f67529a6683c2c3281ddba8 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogAttributeSet/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogAttributeSet/Curl.php
@@ -9,7 +9,6 @@ namespace Magento\Catalog\Test\Handler\CatalogAttributeSet;
 use Magento\Catalog\Test\Fixture\CatalogAttributeSet;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php
index 123ef506c991ee390aedc790ce8f2e58fd8224e1..1e7ec99e39fe2fec29869f7faa934711cab988b0 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php
@@ -405,7 +405,8 @@ class Curl extends AbstractCurl implements CatalogProductSimpleInterface
         $curl->close();
 
         if (!strpos($response, 'data-ui-id="messages-message-success"')) {
-            throw new \Exception("Product creation by curl handler was not successful! Response: $response");
+            $this->_eventManager->dispatchEvent(['curl_failed'], [$response]);
+            throw new \Exception('Product creation by curl handler was not successful!');
         }
 
         return $this->parseResponse($response);
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Curl.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Curl.php
index 9770e6726048c6139631ba6022d8801484e1c108..e684946a46f47f152fdd1d4373f31a31b1142dd4 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Category/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Catalog\Test\Handler\Category;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Curl/CreateProductAttribute.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Curl/CreateProductAttribute.php
index 6353c542d857e57541d700b0d9ad45d17e3a7a35..632de082cfe61df3dcfddd9ccf1359a9d3581638 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Curl/CreateProductAttribute.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Curl/CreateProductAttribute.php
@@ -9,7 +9,6 @@ namespace Magento\Catalog\Test\Handler\Curl;
 use Magento\Catalog\Test\Fixture\ProductAttribute;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml
index 073335f8ab0ff6b5aa04801c6d30489a51ac9ba5..88c2147c46a54c83273e0ebe386af6f4e3bf39a9 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="catalogRule" module="Magento_CatalogRule" type="eav" entity_type="catalog_rule" collection="Magento\CatalogRule\Model\Resource\Rule\Product\Price\Collection" repository_class="Magento\CatalogRule\Test\Repository\CatalogRule" handler_interface="Magento\CatalogRule\Test\Handler\CatalogRule\CatalogRuleInterface" class="Magento\CatalogRule\Test\Fixture\CatalogRule">
     <dataset name="default">
         <field name="name" xsi:type="string">CatalogPriceRule %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Handler/CatalogRule/Curl.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Handler/CatalogRule/Curl.php
index 1c6d9a58f87105e992b2e1572477ef0085f32b6c..43089928c2c50da39f1c589cdb05a31ba4b6dc96 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Handler/CatalogRule/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Handler/CatalogRule/Curl.php
@@ -9,7 +9,6 @@ namespace Magento\CatalogRule\Test\Handler\CatalogRule;
 use Magento\Backend\Test\Handler\Conditions;
 use Magento\CatalogRule\Test\Handler\CatalogRule;
 use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml
index 59b4b4ee904fa40efd1b4a71bc46a437543e8d74..940729a21995ef1db6dd3a718c6c92293ddbe299 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="catalogSearchQuery" module="Magento_CatalogSearch" type="flat" entity_type="search_query" collection="Magento\Search\Model\Resource\Query\Collection" repository_class="Magento\CatalogSearch\Test\Repository\CatalogSearchQuery" handler_interface="Magento\CatalogSearch\Test\Handler\CatalogSearchQuery\CatalogSearchQueryInterface" class="Magento\CatalogSearch\Test\Fixture\CatalogSearchQuery">
     <field name="query_id" is_required="1">
       <default_value xsi:type="null"/>
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Handler/CatalogSearchQuery/Curl.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Handler/CatalogSearchQuery/Curl.php
index 049e2e77a7d47967f1cc79cb7339c9ac17d63b0c..3381fe268097374df309f6d511e2b8fa7750747f 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Handler/CatalogSearchQuery/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Handler/CatalogSearchQuery/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\CatalogSearch\Test\Handler\CatalogSearchQuery;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php
index f909e97086b5a2f2bf5dc3a84e15994d526d55d3..24b167d7d5881d0a66498a2f8d51ca204a8fa6e4 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar.php
@@ -21,7 +21,7 @@ class Sidebar extends Block
      *
      * @var string
      */
-    protected $qty = '//*[@class="product"]/*[@title="%s"]/following-sibling::*//*[@class="value qty"]';
+    protected $qty = '//*[@class="product"]/*[@title="%s"]/following-sibling::*//*[@class="item-qty cart-item-qty"]';
 
     /**
      * Mini cart link selector
@@ -42,7 +42,7 @@ class Sidebar extends Block
      *
      * @var string
      */
-    protected $cartItemByProductName = './/*[contains(@class,"products minilist")]//li[.//a[.="%s"]]';
+    protected $cartItemByProductName = './/*[contains(@class,"minicart-items")]//li[.//a[.="%s"]]';
 
     /**
      * Counter qty locator
@@ -91,7 +91,7 @@ class Sidebar extends Block
     {
         $this->openMiniCart();
         $productQty = sprintf($this->qty, $productName);
-        return $this->_rootElement->find($productQty, Locator::SELECTOR_XPATH)->getText();
+        return $this->_rootElement->find($productQty, Locator::SELECTOR_XPATH)->getValue();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart.xml
index 564e190e5f0f65b62786e16a4164e7e360617577..9c79804bfe3b25fd4bbe857f9f17c46fe9da2e08 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="cart" module="Magento_Checkout" type="flat" entity_type="quote" repository_class="Magento\Checkout\Test\Repository\Cart" handler_interface="Magento\Checkout\Test\Handler\Cart\CartInterface" class="Magento\Checkout\Test\Fixture\Cart">
     <field name="entity_id" is_required="1">
       <default_value xsi:type="null"/>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.php
index b99ac46a7261d7d25c83f283e7aabbe389f06b4d..f5d30d2f9bdc2f376563ee8964537b6758553fb2 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/UpdateProductFromMiniShoppingCartEntityTest.php
@@ -85,7 +85,6 @@ class UpdateProductFromMiniShoppingCartEntityTest extends Injectable
      */
     public function test($originalProduct, $checkoutData)
     {
-        $this->markTestIncomplete('Bug: MAGETWO-34259');
         // Preconditions:
         $product = $this->createProduct($originalProduct);
         $this->addToCart($product);
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml
index 4a9a438e8460ae93d277273787204e0d78bfd333..d1f5018824ca4b96d33cf487ce339c285c1022f5 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
     <fixture name="checkoutAgreement" module="Magento_CheckoutAgreements"
              type="flat" entity_type="checkout_agreement" collection="Magento\CheckoutAgreements\Model\Resource\Agreement\Collection"
              repository_class="Magento\CheckoutAgreements\Test\Repository\CheckoutAgreement"
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Handler/CheckoutAgreement/Curl.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Handler/CheckoutAgreement/Curl.php
index 426831f470e92ed668e07a121bdc21fe1f2f1d07..9c241ef1354cd41eea088125162a1fe2b80df565 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Handler/CheckoutAgreement/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Handler/CheckoutAgreement/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\CheckoutAgreements\Test\Handler\CheckoutAgreement;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml
index 36bb9cf39af0421b3a0bc9e6e25115cb312ad55e..5d1a718ff1178b9a4737c8bbcc3df08f9e79accf 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
     <fixture name="cmsBlock" module="Magento_Cms" type="flat" entity_type="cms_block" collection="Magento\Cms\Model\Resource\Block\Grid\Collection" identifier="identifier"
              handler_interface="Magento\Cms\Test\Handler\CmsBlock\CmsBlockInterface" class="Magento\Cms\Test\Fixture\CmsBlock">
         <dataset name="default">
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml
index 149bef091c83163e09710dbaa2cd7f4bc6930058..071897f0c5b13b72147ac1b674931f71e784f333 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
     <fixture name="cmsPage" module="Magento_Cms" type="flat" entity_type="cms_page" collection="Magento\Cms\Model\Resource\Page\Grid\Collection" identifier="identifier"
              repository_class="Magento\Cms\Test\Repository\CmsPage" handler_interface="Magento\Cms\Test\Handler\CmsPage\CmsPageInterface" class="Magento\Cms\Test\Fixture\CmsPage">
         <dataset name="default">
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php
index c3aefd941fc29abf6f5b823497131213d235f6ed..05564ee03f0572909f449a17b07910d1f4d54234 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Cms\Test\Handler\CmsBlock;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php
index 4187350d28d7aead4044c949f745be6968cf1a17..a91b23ff28b1bba3b0802c4a3881a041e0517008 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php
@@ -8,7 +8,8 @@ namespace Magento\Cms\Test\Handler\CmsPage;
 
 use Magento\Backend\Test\Handler\Conditions;
 use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Config;
+use Magento\Mtf\Config\DataInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -55,12 +56,13 @@ class Curl extends Conditions implements CmsPageInterface
 
     /**
      * @constructor
-     * @param Config $configuration
+     * @param DataInterface $configuration
+     * @param EventManagerInterface $eventManager
      */
-    public function __construct(Config $configuration)
+    public function __construct(DataInterface $configuration, EventManagerInterface $eventManager)
     {
         $this->mappingData = array_merge($this->mappingData, $this->additionalMappingData);
-        parent::__construct($configuration);
+        parent::__construct($configuration, $eventManager);
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php
index a467c0ad9af43e6223eb416643bdebafe9b00031..557e1c09882feee7e9194e88305861f2676b9e29 100755
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php
@@ -52,7 +52,7 @@ class AssertChildProductsInGrid extends AbstractConstraint
             }
         }
 
-        \PHPUnit_Framework_Assert::assertEmpty($errors, implode($errors, ' '));
+        \PHPUnit_Framework_Assert::assertEmpty($errors, implode(' ', $errors));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml
index 839a00ef4a8074e7da8e5f7e59398ac5a578a3a7..6eb5ee6976ace67bf42136395b5894d354f7618c 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="configurableProduct"
            module="Magento_ConfigurableProduct" 
            type="eav" 
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Handler/ConfigurableProduct/Curl.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Handler/ConfigurableProduct/Curl.php
index 1bed329a243d055bce4df0c0a5a19b997806a639..7e0813eca10a21cbce34254bfd1eb9e3dafecb20 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Handler/ConfigurableProduct/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Handler/ConfigurableProduct/Curl.php
@@ -10,7 +10,8 @@ use Magento\Catalog\Test\Fixture\CatalogProductAttribute;
 use Magento\Catalog\Test\Handler\CatalogProductSimple\Curl as ProductCurl;
 use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct\ConfigurableAttributesData;
 use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Config;
+use Magento\Mtf\Config\DataInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
 
 /**
  * Class Curl
@@ -21,11 +22,12 @@ class Curl extends ProductCurl implements ConfigurableProductInterface
     /**
      * Constructor
      *
-     * @param Config $configuration
+     * @param DataInterface $configuration
+     * @param EventManagerInterface $eventManager
      */
-    public function __construct(Config $configuration)
+    public function __construct(DataInterface $configuration, EventManagerInterface $eventManager)
     {
-        parent::__construct($configuration);
+        parent::__construct($configuration, $eventManager);
 
         $this->mappingData += [
             'is_percent' => [
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/ConfigData.xml
index 8bed37c9f9ba9a008e35327b901217acf596e00a..6b95f1c29ea9eac1be055d42985aeb2434aaecef 100644
--- a/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/ConfigData.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="configData" 
            module="Magento_Core" 
            type="flat" 
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/SystemVariable.xml b/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/SystemVariable.xml
index 01f5710dc7a3d13d105d0dfbfadf6c06406d55f2..ccb72344e985faaeb96b30a64cf2faa43c8cc27d 100644
--- a/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/SystemVariable.xml
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/Fixture/SystemVariable.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="systemVariable" 
            module="Magento_Core" 
            type="composite" 
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/Handler/ConfigData/Curl.php b/dev/tests/functional/tests/app/Magento/Core/Test/Handler/ConfigData/Curl.php
index 25be5b6e1ff02b819dc98d9fa7cc7467ce135eae..1a761f03046e6420cdef332767f73301ff55c0e5 100644
--- a/dev/tests/functional/tests/app/Magento/Core/Test/Handler/ConfigData/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/Handler/ConfigData/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Core\Test\Handler\ConfigData;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -116,7 +115,8 @@ class Curl extends AbstractCurl implements ConfigDataInterface
         $curl->close();
 
         if (strpos($response, 'data-ui-id="messages-message-success"') === false) {
-            throw new \Exception("Settings are not applied! Response: $response");
+            $this->_eventManager->dispatchEvent(['curl_failed'], [$response]);
+            throw new \Exception("Configuration settings are not applied! Url: $url");
         }
     }
 
@@ -128,7 +128,6 @@ class Curl extends AbstractCurl implements ConfigDataInterface
      */
     protected function getUrl($section)
     {
-        return $_ENV['app_backend_url'] .
-        'admin/system_config/save/section/' . $section;
+        return $_ENV['app_backend_url'] . 'admin/system_config/save/section/' . $section;
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/Handler/SystemVariable/Curl.php b/dev/tests/functional/tests/app/Magento/Core/Test/Handler/SystemVariable/Curl.php
index 6c02a8ae428e78fb67e534d0d4b973f5d52417b9..0ded2518a3b8ff6f98febb4e8f24d851d007a664 100644
--- a/dev/tests/functional/tests/app/Magento/Core/Test/Handler/SystemVariable/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/Handler/SystemVariable/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Core\Test\Handler\SystemVariable;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Fixture/CurrencySymbolEntity.xml b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Fixture/CurrencySymbolEntity.xml
index ad576cb9359802523e8db4a07f0c35d27626bf5f..9b37f90342b5b9e52c0a7b3fa232d85409f6c41f 100644
--- a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Fixture/CurrencySymbolEntity.xml
+++ b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Fixture/CurrencySymbolEntity.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="currencySymbolEntity" module="Magento_CurrencySymbol" type="flat" entity_type="core_config_data" repository_class="Magento\CurrencySymbol\Test\Repository\CurrencySymbolEntity" handler_interface="Magento\CurrencySymbol\Test\Handler\CurrencySymbolEntity\CurrencySymbolEntityInterface" class="Magento\CurrencySymbol\Test\Fixture\CurrencySymbolEntity">
     <dataset name="default">
         <field name="inherit_custom_currency_symbol" xsi:type="string">Yes</field>
diff --git a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Handler/CurrencySymbolEntity/Curl.php b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Handler/CurrencySymbolEntity/Curl.php
index d1b311772c5129904075f55be2f2137f21b0a3eb..34a5317bf187b7e1811371b985c8ecd962fa71b6 100644
--- a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Handler/CurrencySymbolEntity/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Handler/CurrencySymbolEntity/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\CurrencySymbol\Test\Handler\CurrencySymbolEntity;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml
index c092c7e6aa3102711ebab77769dc5a07d48f5c3e..09e93bbf76968ec5a9dc5cdcaec363c71607cb39 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="address" module="Magento_Customer" type="eav" entity_type="customer_address" collection="Magento\Customer\Model\Resource\Address\Collection" repository_class="Magento\Customer\Test\Repository\Address" handler_interface="Magento\Customer\Test\Handler\Address\AddressInterface" class="Magento\Customer\Test\Fixture\Address">
     <dataset name="default">
         <field name="firstname" xsi:type="string">John</field>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml
index d5afd5538951e8d4ecddcfaaeb6820c742ce3e04..fe4bdb7814a700b02ed39663d62dc2b11379f814 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="customer" module="Magento_Customer" type="eav" entity_type="customer" collection="Magento\Customer\Model\Resource\Customer\Collection" identifier="email" repository_class="Magento\Customer\Test\Repository\Customer" handler_interface="Magento\Customer\Test\Handler\Customer\CustomerInterface" class="Magento\Customer\Test\Fixture\Customer">
     <dataset name="default">
         <field name="firstname" xsi:type="string">John</field>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroupInjectable.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroupInjectable.xml
index b470b1c21b5e357d8532cecd566650cff0cb1a51..cec2cec3a74619acaa55ad468a50738441768df7 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroupInjectable.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroupInjectable.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="customerGroupInjectable" module="Magento_Customer" type="flat" entity_type="customer_group" collection="Magento\Customer\Model\Resource\Group\Collection" repository_class="Magento\Customer\Test\Repository\CustomerGroupInjectable" handler_interface="Magento\Customer\Test\Handler\CustomerGroupInjectable\CustomerGroupInjectableInterface" class="Magento\Customer\Test\Fixture\CustomerGroupInjectable">
     <dataset name="default">
         <field name="customer_group_code" xsi:type="string">customer_code_%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerBackend.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerBackend.php
index e9860e68c44a4e346ab2a85c02021ae3c29992b2..cad3c992efa4681f8bf0851d50fa211c22aad7cc 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerBackend.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerBackend.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Test\Handler\Curl;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerGroup.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerGroup.php
index 22410354e5802ef983d6e3429696c464b086abf4..dadc4e66523bbc76d77a1ba8cbb52bba1fa744ff 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerGroup.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Curl/CreateCustomerGroup.php
@@ -8,7 +8,6 @@ namespace Magento\Customer\Test\Handler\Curl;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Curl.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Curl.php
index 1831cdcbd2168ecca66ec836b256511705db838a..67d98b313afe2c576d620daed3c0dfd392d40315 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Customer/Curl.php
@@ -179,6 +179,7 @@ class Curl extends AbstractCurl implements CustomerInterface
         $curl->close();
 
         if (!strpos($response, 'data-ui-id="messages-message-success"')) {
+            $this->_eventManager->dispatchEvent(['curl_failed', [$response]]);
             throw new \Exception('Failed to update customer!');
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/CustomerGroupInjectable/Curl.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/CustomerGroupInjectable/Curl.php
index 4ca4adb67291be8c6fcaf88c6d694c73419a5a65..f2f7c1b52e6d809286919606322486f1421ee6bc 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/CustomerGroupInjectable/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/CustomerGroupInjectable/Curl.php
@@ -9,7 +9,6 @@ namespace Magento\Customer\Test\Handler\CustomerGroupInjectable;
 use Magento\Backend\Test\Handler\Extractor;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Webapi/CreateCustomer.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Webapi/CreateCustomer.php
index 0087460d6e6f69ae0212096882fe0d40b5e06852..af06e68b03ef85b14d92d27f4044803de10e059b 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Webapi/CreateCustomer.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Handler/Webapi/CreateCustomer.php
@@ -24,7 +24,7 @@ class CreateCustomer extends Webapi
      */
     public function persist(FixtureInterface $fixture = null)
     {
-        $configuration = $this->_configuration->getParameter('handler/webapi');
+        $configuration = $this->_configuration->get('handler/0/webapi/0/value');
 
         $soap = new SoapTransport($configuration['soap']);
         return $soap->call('customerCustomerList', $fixture->getData());
diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml
index 546ccb6cda264b3d7100c471dd0489427a3d87cf..1afdae4142c3ca241c73666e9d8c9e310be9b530 100644
--- a/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml
@@ -9,27 +9,27 @@
     <repository class="Magento\Core\Test\Repository\ConfigData">
         <dataset name="config_currency_symbols_usd_and_uah">
             <field path="currency/options/allow" scope="currency" scope_id="1" xsi:type="array">
-                <item label="US Dollar" xsi:type="string">USD</item>
-                <item label="Ukrainian Hryvnia" xsi:type="string">UAH</item>
+                <item name="US Dollar" xsi:type="string">USD</item>
+                <item name="Ukrainian Hryvnia" xsi:type="string">UAH</item>
             </field>
         </dataset>
 
         <dataset name="config_currency_symbols_usd_and_uah_rollback">
             <field path="currency/options/allow" scope="currency" scope_id="1" xsi:type="array">
-                <item label="US Dollar" xsi:type="string">USD</item>
+                <item name="US Dollar" xsi:type="string">USD</item>
             </field>
         </dataset>
 
         <dataset name="config_currency_symbols_usd_and_chf">
             <field path="currency/options/allow" scope="currency" scope_id="1" xsi:type="array">
-                <item label="US Dollar" xsi:type="string">USD</item>
-                <item label="Swiss Franc" xsi:type="string">CHF</item>
+                <item name="US Dollar" xsi:type="string">USD</item>
+                <item name="Swiss Franc" xsi:type="string">CHF</item>
             </field>
         </dataset>
 
         <dataset name="config_currency_symbols_usd">
             <field path="currency/options/allow" scope="currency" scope_id="1" label="" xsi:type="array">
-                <item label="US Dollar" xsi:type="string">USD</item>
+                <item name="US Dollar" xsi:type="string">USD</item>
             </field>
         </dataset>
     </repository>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml
index 572574f962f25db2eff34e2a52855ec760a87e7a..7c7caf2f5c2495c7e0fdf71340026c83ad3e7bb3 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="downloadableProduct" module="Magento_Downloadable" type="eav" entity_type="catalog_product" product_type="downloadable" collection="Magento\Catalog\Model\Resource\Product\Collection" identifier="sku" repository_class="Magento\Downloadable\Test\Repository\DownloadableProduct" handler_interface="Magento\Downloadable\Test\Handler\DownloadableProduct\DownloadableProductInterface" class="Magento\Downloadable\Test\Fixture\DownloadableProduct">
     <dataset name="default">
         <field name="name" xsi:type="string">DownloadableProduct_%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProduct/Curl.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProduct/Curl.php
index 9812c5b6aca7e4266eebc0c6e8a99c5ac2c64155..7d05456656c3ccb3c46190a06b19c26c6cd02950 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProduct/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProduct/Curl.php
@@ -8,7 +8,8 @@ namespace Magento\Downloadable\Test\Handler\DownloadableProduct;
 
 use Magento\Catalog\Test\Handler\CatalogProductSimple\Curl as ProductCurl;
 use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Config;
+use Magento\Mtf\Config\DataInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -22,11 +23,12 @@ class Curl extends ProductCurl implements DownloadableProductInterface
     /**
      * Constructor
      *
-     * @param Config $configuration
+     * @param DataInterface $configuration
+     * @param EventManagerInterface $eventManager
      */
-    public function __construct(Config $configuration)
+    public function __construct(DataInterface $configuration, EventManagerInterface $eventManager)
     {
-        parent::__construct($configuration);
+        parent::__construct($configuration, $eventManager);
 
         $this->mappingData += [
             'links_purchased_separately' => [
diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml
index be06e0300b46846747b71fd0a6b99c1d621277a3..d11995d1e7dc6baef8dc65be2371f688ec1c73dc 100644
--- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml
+++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="giftMessage" module="Magento_GiftMessage" type="flat" entity_type="gift_message" collection="Magento\GiftMessage\Model\Resource\Message\Collection" identifier="gift_message_id" repository_class="Magento\GiftMessage\Test\Repository\GiftMessage" class="Magento\GiftMessage\Test\Fixture\GiftMessage">
     <dataset name="default">
         <field name="allow_gift_options" xsi:type="string">Yes</field>
diff --git a/dev/tests/functional/tests/app/Magento/GoogleShopping/Test/Fixture/GoogleShoppingAttribute.xml b/dev/tests/functional/tests/app/Magento/GoogleShopping/Test/Fixture/GoogleShoppingAttribute.xml
index 61944b24eed8fafc0154028a32cd80db5d596d75..b33b9b5cc9eb62b3c8ae87cebeb824634d22db03 100644
--- a/dev/tests/functional/tests/app/Magento/GoogleShopping/Test/Fixture/GoogleShoppingAttribute.xml
+++ b/dev/tests/functional/tests/app/Magento/GoogleShopping/Test/Fixture/GoogleShoppingAttribute.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="googleShoppingAttribute" module="Magento_GoogleShopping" type="flat" entity_type="googleshopping_types" collection="Magento\GoogleShopping\Model\Resource\Attribute\Collection" repository_class="Magento\GoogleShopping\Test\Repository\GoogleShoppingAttribute" handler_interface="Magento\GoogleShopping\Test\Handler\GoogleShoppingAttribute\GoogleShoppingAttributeInterface" class="Magento\GoogleShopping\Test\Fixture\GoogleShoppingAttribute">
     <dataset name="default">
         <field name="target_country" xsi:type="string">United States</field>
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml
index 22c825f3680670eb388bd767c7f79efbdf545bcf..5fc47bd6a0c653287b86c7ccc4ecd29838839f8d 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="groupedProduct" module="Magento_GroupedProduct" type="eav" entity_type="catalog_product" product_type="grouped" collection="Magento\Catalog\Model\Resource\Product\Collection" identifier="sku" repository_class="Magento\GroupedProduct\Test\Repository\GroupedProduct" handler_interface="Magento\GroupedProduct\Test\Handler\GroupedProduct\GroupedProductInterface" class="Magento\GroupedProduct\Test\Fixture\GroupedProduct">
     <dataset name="default">
         <field name="name" xsi:type="string">GroupedProduct_%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/ImportExport/Test/Fixture/ImportExport.xml b/dev/tests/functional/tests/app/Magento/ImportExport/Test/Fixture/ImportExport.xml
index 08b3dd3c556210d2efd6bc3a25a85e048a209413..01f5463b5f052fac98c49d795f3ac38e4979139f 100644
--- a/dev/tests/functional/tests/app/Magento/ImportExport/Test/Fixture/ImportExport.xml
+++ b/dev/tests/functional/tests/app/Magento/ImportExport/Test/Fixture/ImportExport.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="importExport" module="Magento_ImportExport" type="flat" entity_type="importexport_importdata" class="Magento\ImportExport\Test\Fixture\ImportExport">
     <dataset name="default">
         <field name="entity" xsi:type="string">Products</field>
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertSuccessInstall.php b/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertSuccessInstall.php
index 7bf6181d89616a2c86b5b08b108f19e4c6086aa6..2f7039d86953e8694ebe824973be8225edac004c 100644
--- a/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertSuccessInstall.php
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertSuccessInstall.php
@@ -52,6 +52,11 @@ class AssertSuccessInstall extends AbstractConstraint
         $dbData = $installPage->getInstallBlock()->getDbInfo();
 
         $allData = array_merge($user->getData(), $installConfig->getData());
+
+        foreach ($installConfig->getData() as $key => $value) {
+            $allData[$key] = isset($value['value']) ? $value['value'] : $value;
+        }
+
         $allData['admin'] = $allData['web'] . $allData['admin'] . '/';
 
         foreach ($this->adminFieldsList as $field) {
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/Fixture/Install.xml b/dev/tests/functional/tests/app/Magento/Install/Test/Fixture/Install.xml
index f2d6025c12beb22e083405f5592bf2a209e53985..d846de8f0bd45b0ed71068f8146e171994d682f6 100644
--- a/dev/tests/functional/tests/app/Magento/Install/Test/Fixture/Install.xml
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/Fixture/Install.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="install" module="Magento_Install" type="virtual" entity_type="install" repository_class="Magento\Install\Test\Repository\Install" handler_interface="Magento\Install\Test\Handler\Install\InstallInterface" class="Magento\Install\Test\Fixture\Install">
     <field name="dbHost"/>
     <field name="dbUser"/>
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php
index 912ac3ed260d88b8353621f09628796bc065d798..fbfb262f1206d798a750dcfede4c913b96eed3c5 100644
--- a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php
@@ -10,10 +10,9 @@ use Magento\Cms\Test\Page\CmsIndex;
 use Magento\Install\Test\Page\Install;
 use Magento\Install\Test\Fixture\Install as InstallConfig;
 use Magento\User\Test\Fixture\User;
-use Magento\Mtf\Config;
 use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Mtf\TestCase\Injectable;
-use Magento\Mtf\Config\GlobalConfig;
+use Magento\Mtf\Config\DataInterface;
 use Magento\Install\Test\Constraint\AssertAgreementTextPresent;
 use Magento\Install\Test\Constraint\AssertSuccessfulReadinessCheck;
 use Magento\Mtf\ObjectManagerFactory;
@@ -68,14 +67,14 @@ class InstallTest extends Injectable
      */
     public function __prepare()
     {
-        $config = ObjectManagerFactory::getObjectManager()->get('Magento\Mtf\Config\GlobalConfig');
+        $config = ObjectManagerFactory::getObjectManager()->get('Magento\Mtf\Config\DataInterface');
         // Prepare config data
-        $configData['dbHost'] = $config->get('install/host');
-        $configData['dbUser'] = $config->get('install/user');
-        $configData['dbPassword'] = $config->get('install/password');
-        $configData['dbName'] = $config->get('install/dbName');
-        $configData['web'] = $config->get('install/baseUrl');
-        $configData['admin'] = $config->get('install/backendName');
+        $configData['dbHost'] = $config->get('install/0/host/0');
+        $configData['dbUser'] = $config->get('install/0/user/0');
+        $configData['dbPassword'] = $config->get('install/0/password/0');
+        $configData['dbName'] = $config->get('install/0/dbName/0');
+        $configData['web'] = $config->get('install/0/baseUrl/0');
+        $configData['admin'] = $config->get('install/0/backendName/0');
 
         return ['configData' => $configData];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml b/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml
index 3e58557ff604b5282f1e552fd95d3f0ad6bf65de..30c8310ea5534bdabf634e3e4e005c1ac71a87ca 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="integration" module="Magento_Integration" type="composite" entity_type="integration" collection="Magento\Integration\Model\Resource\Integration\Collection" repository_class="Magento\Integration\Test\Repository\Integration" handler_interface="Magento\Integration\Test\Handler\Integration\IntegrationInterface" class="Magento\Integration\Test\Fixture\Integration">
     <dataset name="default">
         <field name="name" xsi:type="string">default_integration_%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Handler/Integration/Curl.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Handler/Integration/Curl.php
index d8047148bec4461e4396776c0cb3a1b2d5621957..900572434e6de4e5719fabe54f620e87053ce375 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Handler/Integration/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Handler/Integration/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Integration\Test\Handler\Integration;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml
index 9d216c522278f6d9ac793770a231c61ed446e108..6311e64c6602a507e3da61125c06670429df3af5 100644
--- a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml
+++ b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="template" module="Magento_Newsletter" type="flat" entity_type="newsletter_template" collection="Magento\Newsletter\Model\Resource\Template\Collection" identifier="template_id" repository_class="Magento\Newsletter\Test\Repository\Template" handler_interface="Magento\Newsletter\Test\Handler\Template\TemplateInterface" class="Magento\Newsletter\Test\Fixture\Template">
     <dataset name="default">
         <field name="code" xsi:type="string">TemplateName%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Handler/Template/Curl.php b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Handler/Template/Curl.php
index 7578ea44254810996850a51e69d5b37d0377670b..8d94f60cda0c41ae9a9c18434edb8780d9165db6 100644
--- a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Handler/Template/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Handler/Template/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Newsletter\Test\Handler\Template;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/OfflinePayments/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/OfflinePayments/Test/Repository/ConfigData.xml
index 0e2819446d17c536bc36b2f20dc6444b5f102429..a6eb9d9e85ee49354c799e5b7d254786b5198c5c 100644
--- a/dev/tests/functional/tests/app/Magento/OfflinePayments/Test/Repository/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/OfflinePayments/Test/Repository/ConfigData.xml
@@ -19,7 +19,7 @@
             <field path="payment/cashondelivery/active" scope="payment" scope_id="1" label="Yes" xsi:type="string">1</field>
             <field path="payment/cashondelivery/allowspecific" scope="payment" scope_id="1" label="Specific Countries" xsi:type="string">1</field>
             <field path="payment/cashondelivery/specificcountry" scope="payment" scope_id="1" xsi:type="array">
-                <item label="United Kingdom" xsi:type="string">GB</item>
+                <item name="United Kingdom" xsi:type="string">GB</item>
             </field>
         </dataset>
 
@@ -40,7 +40,7 @@
             <field path="payment/checkmo/active" scope="payment" scope_id="1" label="Yes" xsi:type="string">1</field>
             <field path="payment/checkmo/allowspecific" scope="payment" scope_id="1" label="Specific Countries" xsi:type="string">1</field>
             <field path="payment/checkmo/specificcountry" scope="payment" scope_id="1" xsi:type="array">
-                <item label="United Kingdom" xsi:type="string">GB</item>
+                <item name="United Kingdom" xsi:type="string">GB</item>
             </field>
         </dataset>
 
@@ -61,7 +61,7 @@
             <field path="payment/banktransfer/active" scope="payment" scope_id="1" label="Yes" xsi:type="string">1</field>
             <field path="payment/banktransfer/allowspecific" scope="payment" scope_id="1" label="Specific Countries" xsi:type="string">1</field>
             <field path="payment/banktransfer/specificcountry" scope="payment" scope_id="1" xsi:type="array">
-                <item label="United Kingdom" xsi:type="string">GB</item>
+                <item name="United Kingdom" xsi:type="string">GB</item>
             </field>
         </dataset>
 
@@ -82,7 +82,7 @@
             <field path="payment/purchaseorder/active" scope="payment" scope_id="1" label="Yes" xsi:type="string">1</field>
             <field path="payment/purchaseorder/allowspecific" scope="payment" scope_id="1" label="Specific Countries" xsi:type="string">1</field>
             <field path="payment/purchaseorder/specificcountry" scope="payment" scope_id="1" xsi:type="array">
-                <item label="United Kingdom" xsi:type="string">GB</item>
+                <item name="United Kingdom" xsi:type="string">GB</item>
             </field>
         </dataset>
 
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml
index 99e16141dcdfc1ce45c3b9c890d6aac75a1e05ab..d551947d8c420dd84ac3396c240ec9bf0d140a76 100755
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="rating" module="Magento_Review" type="flat" entity_type="rating" collection="Magento\Review\Model\Resource\Rating\Collection" identifier="rating_code" repository_class="Magento\Review\Test\Repository\Rating" handler_interface="Magento\Review\Test\Handler\Rating\RatingInterface" class="Magento\Review\Test\Fixture\Rating">
     <dataset name="default">
         <field name="rating_code" xsi:type="string">Rating %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml
index 50ede32fea8d7b74f06a6395941376ef155ef70f..a118552b4f5c6c97ee8523795f77d6e8b4d79d5b 100755
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="review" module="Magento_Review" type="composite" collection="Magento\Review\Model\Resource\Review\Collection" repository_class="Magento\Review\Test\Repository\Review" handler_interface="Magento\Review\Test\Handler\Review\ReviewInterface" class="Magento\Review\Test\Fixture\Review">
     <dataset name="default">
         <field name="status_id" xsi:type="string">Approved</field>
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Rating/Curl.php b/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Rating/Curl.php
index 58206282eb611641755d1f42f2e8c4667a1e4a97..ea7b1d6bad431f6814c07c6c5d97c553071dfe71 100755
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Rating/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Rating/Curl.php
@@ -9,7 +9,6 @@ namespace Magento\Review\Test\Handler\Rating;
 use Magento\Backend\Test\Handler\Extractor;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Review/Curl.php b/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Review/Curl.php
index df3c3004b7c979c7a2f84efc3588c373ad89038d..986d1f4883123d27e8f743e5473346c9948f9399 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Review/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Handler/Review/Curl.php
@@ -6,7 +6,6 @@
 
 namespace Magento\Review\Test\Handler\Review;
 
-use Magento\Mtf\Config;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml
index dc51c43e5dd1f27e7789fbe1da1972a324120885..6927691a7aa8e27bc0be0ff11dd70d694724a917 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="sitemap" module="Magento_Sitemap" type="flat" entity_type="sitemap" collection="Magento\Sitemap\Model\Resource\Sitemap\Collection" repository_class="Magento\Sitemap\Test\Repository\Sitemap" handler_interface="Magento\Sitemap\Test\Handler\Sitemap\SitemapInterface" class="Magento\Sitemap\Test\Fixture\Sitemap">
     <dataset name="default">
         <field name="sitemap_filename" xsi:type="string">sitemap.xml</field>
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Handler/Sitemap/Curl.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Handler/Sitemap/Curl.php
index c8b09124666bd8ab70c40b40bdf1f93affca8550..e78e858ded474e8669a7dc19f81afd22fe245ee8 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Handler/Sitemap/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Handler/Sitemap/Curl.php
@@ -10,7 +10,6 @@ use Magento\Backend\Test\Handler\Extractor;
 use Magento\Sitemap\Test\Handler\Sitemap;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml
index b9be593561d7c588beb8de9f6aff896b262a5270..3a95b594d8400494d3809ae19d53599b063821f8 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="store" module="Magento_Store" type="flat" entity_type="store" collection="Magento\Store\Model\Resource\Store\Collection" repository_class="Magento\Store\Test\Repository\Store" handler_interface="Magento\Store\Test\Handler\Store\StoreInterface" class="Magento\Store\Test\Fixture\Store">
     <dataset name="default">
         <field name="group_id" xsi:type="array">
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml
index fcd43ace417f90fc83a88a6d89d96a3eb24db03f..7b6a5ad692b1add59ad8803aa85e8832e8b6db9a 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="storeGroup" module="Magento_Store" type="flat" entity_type="store_group" collection="Magento\Store\Model\Resource\Group\Collection" identifier="" repository_class="Magento\Store\Test\Repository\StoreGroup" handler_interface="Magento\Store\Test\Handler\StoreGroup\StoreGroupInterface" class="Magento\Store\Test\Fixture\StoreGroup">
     <dataset name="default">
         <field name="website_id" xsi:type="array">
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml
index 261b506e96a6127b5de859597b3ca13bd6d717ef..0878f90e302a1d1594eac5f1d8af895f8fd4e418 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="website" module="Magento_Store" type="flat" entity_type="store_website" collection="Magento\Store\Model\Resource\Website\Collection" identifier="code" repository_class="Magento\Store\Test\Repository\Website" handler_interface="Magento\Store\Test\Handler\Website\WebsiteInterface" class="Magento\Store\Test\Fixture\Website">
     <dataset name="default">
         <field name="name" xsi:type="string">Main Website</field>
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Store/Curl.php b/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Store/Curl.php
index aaa0e84ce103a1a2813086a88aca122f793eddb1..d6293b08cd50a9f0773b6bf4b9c8680033b36553 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Store/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Store/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Store\Test\Handler\Store;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Handler/StoreGroup/Curl.php b/dev/tests/functional/tests/app/Magento/Store/Test/Handler/StoreGroup/Curl.php
index 9922064088af8416f8e7d3adde471a174448a789..71faf510eed5e5886c59a8a19398f28cad987ed5 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Handler/StoreGroup/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Handler/StoreGroup/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Store\Test\Handler\StoreGroup;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Website/Curl.php b/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Website/Curl.php
index 4de491270189098448ffb31ad31bfb2a87a4485b..bbd183601e4ef3697021b64745bad2b0bdadb64f 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Website/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Handler/Website/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Store\Test\Handler\Website;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml
index 13e6c00c52879193a38fb344bba0ccf716eab9b1..30710bb5b2f81fc5e2f5f53025b9f6d5dc225476 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="taxClass" module="Magento_Tax" type="flat" entity_type="tax_class" collection="Magento\Tax\Model\Resource\TaxClass\Collection" identifier="" repository_class="Magento\Tax\Test\Repository\TaxClass" handler_interface="Magento\Tax\Test\Handler\TaxClass\TaxClassInterface" class="Magento\Tax\Test\Fixture\TaxClass">
     <dataset name="default">
         <field name="class_name" xsi:type="string">Tax Class %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml
index a344ad905106d0f0b6b363d9fc83fabb103d0779..b9a4a30142690008bd8b142c8e8a74692b19307a 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="taxRate" module="Magento_Tax" type="flat" entity_type="tax_calculation_rate" collection="Magento\Tax\Model\Resource\Calculation\Rate\Collection" identifier="code" repository_class="Magento\Tax\Test\Repository\TaxRate" handler_interface="Magento\Tax\Test\Handler\TaxRate\TaxRateInterface" class="Magento\Tax\Test\Fixture\TaxRate">
     <dataset name="default">
         <field name="code" xsi:type="string">Tax Rate %isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml
index 82d0dc07793aeef0b07f4e2186b8bdb19830b146..b53f3f1eba5d9b4c3f29653c282cf1b7af82820a 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="taxRule" module="Magento_Tax" type="flat" entity_type="tax_calculation_rule" collection="Magento\Tax\Model\Resource\Calculation\Rule\Collection" identifier="code" repository_class="Magento\Tax\Test\Repository\TaxRule" handler_interface="Magento\Tax\Test\Handler\TaxRule\TaxRuleInterface" class="Magento\Tax\Test\Fixture\TaxRule">
     <dataset name="default">
         <field name="code" xsi:type="string">TaxIdentifier%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Curl.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Curl.php
index 28e77379db72e1010f28e6bf0212e34ac8a2feea..b6d6072bcb5a13ebcaba872d5465f00ed29681e8 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxClass/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Tax\Test\Handler\TaxClass;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php
index 6cc269c5525d86bd6d4d7b854a4a3231d4dd8fbf..e1b370a6e44f8463404f512142f91449412b9903 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRate/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Tax\Test\Handler\TaxRate;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php
index 2d47e8b3bdb62090385ef7b15d2bbff156bbc80f..872f49ae0387a92bd9bd19ad7a6b0ccbdfe6ee0b 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Handler/TaxRule/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\Tax\Test\Handler\TaxRule;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/Theme/Test/Block/Html/Topmenu.php b/dev/tests/functional/tests/app/Magento/Theme/Test/Block/Html/Topmenu.php
index 3125e6f6f2b6c9775a44d9a286a3dc9a8d8a789f..817fd6e022b9c6390606d9d9e1703f4b72513a22 100644
--- a/dev/tests/functional/tests/app/Magento/Theme/Test/Block/Html/Topmenu.php
+++ b/dev/tests/functional/tests/app/Magento/Theme/Test/Block/Html/Topmenu.php
@@ -60,7 +60,6 @@ class Topmenu extends Block
                 }
             );
         }
-        sleep(1); // TODO: sleep should be removed after fix with category sliding
         $category[0]->click();
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Ups/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Ups/Test/Repository/ConfigData.xml
index a6d197824433ed7cae1e7ede9e230d4b6defe362..6c8afa0db50de401e34b56f1bd04c938e74a9016 100644
--- a/dev/tests/functional/tests/app/Magento/Ups/Test/Repository/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Ups/Test/Repository/ConfigData.xml
@@ -29,17 +29,17 @@
             <field path="carriers/ups/tracking_xml_url" scope="carriers" scope_id="1" label="" xsi:type="string">https://wwwcie.ups.com/ups.app/xml/Track</field>
             <field path="carriers/ups/unit_of_measure" scope="carriers" scope_id="1" label="LBS" xsi:type="string">LBS</field>
             <field path="carriers/ups/allowed_methods" scope="carriers" scope_id="1" xsi:type="array">
-                <item label="UPS Standard" xsi:type="string">11</item>
-                <item label="UPS Three-Day Select" xsi:type="string">12</item>
-                <item label="UPS Next Day Air Early A.M." xsi:type="string">14</item>
-                <item label="UPS Worldwide Express Plus" xsi:type="string">54</item>
-                <item label="UPS Second Day Air A.M." xsi:type="string">59</item>
-                <item label="UPS Worldwide Saver" xsi:type="string">65</item>
-                <item label="UPS Next Day Air" xsi:type="string">01</item>
-                <item label="UPS Second Day Air" xsi:type="string">02</item>
-                <item label="UPS Ground" xsi:type="string">03</item>
-                <item label="UPS Worldwide Express" xsi:type="string">07</item>
-                <item label="UPS Worldwide Expedited" xsi:type="string">08</item>
+                <item name="UPS Standard" xsi:type="string">11</item>
+                <item name="UPS Three-Day Select" xsi:type="string">12</item>
+                <item name="UPS Next Day Air Early A.M." xsi:type="string">14</item>
+                <item name="UPS Worldwide Express Plus" xsi:type="string">54</item>
+                <item name="UPS Second Day Air A.M." xsi:type="string">59</item>
+                <item name="UPS Worldwide Saver" xsi:type="string">65</item>
+                <item name="UPS Next Day Air" xsi:type="string">01</item>
+                <item name="UPS Second Day Air" xsi:type="string">02</item>
+                <item name="UPS Ground" xsi:type="string">03</item>
+                <item name="UPS Worldwide Express" xsi:type="string">07</item>
+                <item name="UPS Worldwide Expedited" xsi:type="string">08</item>
             </field>
             <field path="carriers/ups/sallowspecific" scope="carriers" scope_id="1" label="All Allowed Countries" xsi:type="string">0</field>
             <field path="carriers/ups/showmethod" scope="carriers" scope_id="1" label="No" xsi:type="string">0</field>
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml
index a73037a6417cea31f404c94f66c3f1fd72b0a6af..f0fda4e5442de3338d518ecad3cc758bfa82f5db 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="urlRewrite" module="Magento_UrlRewrite" type="virtual" entity_type="url_rewrite" collection="Magento\UrlRewrite\Model\Resource\UrlRewriteCollection" identifier="request_path" repository_class="Magento\UrlRewrite\Test\Repository\UrlRewrite" handler_interface="Magento\UrlRewrite\Test\Handler\UrlRewrite\UrlRewriteInterface" class="Magento\UrlRewrite\Test\Fixture\UrlRewrite">
     <dataset name="default">
         <field name="store_id" xsi:type="string">Main Website/Main Website Store/Default Store View</field>
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Handler/UrlRewrite/Curl.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Handler/UrlRewrite/Curl.php
index ccc680aab72bdac4600300aaf370b56e22e1bc66..ab9aaa6a50f976b8b03880fb2a6c9bb6d25c4db1 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Handler/UrlRewrite/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Handler/UrlRewrite/Curl.php
@@ -8,7 +8,6 @@ namespace Magento\UrlRewrite\Test\Handler\UrlRewrite;
 
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml
index 671556ced60023e557fce39be0f51dd6fef2d5d9..39ac5778e0cc30e30d6d8edeca2824949954327d 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
     <fixture name="role" module="Magento_User" type="flat" entity_type="authorization_role" collection="Magento\User\Model\Resource\Role\User\Collection" repository_class="Magento\User\Test\Repository\Role" handler_interface="Magento\User\Test\Handler\Role\RoleInterface" class="Magento\User\Test\Fixture\Role">
         <dataset name="default">
             <field name="rolename" xsi:type="string">AdminRole%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml
index 1044838fb45f6ee3a9bb9f0467e8425451130790..80c969cf4bbfe3c393e25e8abae8066e552ec028 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
  -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
   <fixture name="user" module="Magento_User" type="flat" entity_type="admin_user" collection="Magento\User\Model\Resource\User\Collection" repository_class="Magento\User\Test\Repository\User" handler_interface="Magento\User\Test\Handler\User\UserInterface" class="Magento\User\Test\Fixture\User">
     <dataset name="default">
         <field name="username" xsi:type="string">AdminUser%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/CurrentPassword.php b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/CurrentPassword.php
index 31ab14a90355b4a9ed4f4cf01dcc246adc61c417..7c7e8bc1d8a073e2c3c848ab0390e2e97232af14 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/CurrentPassword.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/CurrentPassword.php
@@ -36,10 +36,10 @@ class CurrentPassword implements FixtureInterface
     public function __construct(array $params, $data = '')
     {
         $this->params = $params;
-        /** @var \Magento\Mtf\Config $systemConfig */
+        /** @var \Magento\Mtf\Config\DataInterface $systemConfig */
         if ($data == '%current_password%') {
-            $systemConfig = ObjectManager::getInstance()->create('Magento\Mtf\Config');
-            $data = $systemConfig->getParameter('application/backendPassword');
+            $systemConfig = ObjectManager::getInstance()->create('Magento\Mtf\Config\DataInterface');
+            $data = $systemConfig->get('application/0/backendPassword/0/value');
         }
         $this->data = $data;
     }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Handler/Role/Curl.php b/dev/tests/functional/tests/app/Magento/User/Test/Handler/Role/Curl.php
index 857ae696219497fb2ac8c399047066dfae8e7a40..b5b05e9b9183aba2d472163610318b7cee4d6329 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Handler/Role/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Handler/Role/Curl.php
@@ -9,7 +9,8 @@ namespace Magento\User\Test\Handler\Role;
 use Magento\Backend\Test\Handler\Extractor;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
+use Magento\Mtf\Config\DataInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -28,15 +29,16 @@ class Curl extends AbstractCurl implements RoleInterface
 
     /**
      * @constructor
-     * @param Config $configuration
+     * @param DataInterface $configuration
+     * @param EventManagerInterface $eventManager
      */
-    public function __construct(Config $configuration)
+    public function __construct(DataInterface $configuration, EventManagerInterface $eventManager)
     {
         $this->mappingData = array_merge(
             (null !== $this->mappingData) ? $this->mappingData : [],
             $this->additionalMappingData
         );
-        parent::__construct($configuration);
+        parent::__construct($configuration, $eventManager);
     }
 
     /**
@@ -61,7 +63,7 @@ class Curl extends AbstractCurl implements RoleInterface
         }
 
         $url = 'admin/user_role/roleGrid/sort/role_id/dir/desc/';
-        $regExpPattern = '/col\-role_id[\s\W]*(\d+)\s*<.td>\s*<[^<>]*?>' . $data['rolename'] . '/siu';
+        $regExpPattern = '/col\-role_id[^\>]+\>\s*(\d+)\s*<.td>\s*<[^<>]*?>\s*' . $data['rolename'] . '/siu';
 
         $extractor = new Extractor($url, $regExpPattern);
 
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php b/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php
index 1026e872f89221e111761229063be05f2bf2e24e..115d2c932836012dce9e88dfa8bf0baca774a36d 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php
@@ -9,7 +9,6 @@ namespace Magento\User\Test\Handler\User;
 use Magento\Backend\Test\Handler\Extractor;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\Handler\Curl as AbstractCurl;
-use Magento\Mtf\Config;
 use Magento\Mtf\Util\Protocol\CurlInterface;
 use Magento\Mtf\Util\Protocol\CurlTransport;
 use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
@@ -47,7 +46,7 @@ class Curl extends AbstractCurl implements UserInterface
         }
 
         $url = 'admin/user/roleGrid/sort/user_id/dir/desc';
-        $regExpPattern = '/col-user_id[\s\W]*(\d+)\s*<.td>\s*<[^<>]*?>' . $data['username'] . '/siu';
+        $regExpPattern = '/col-user_id[^\>]+\>\s*(\d+)\s*<.td>\s*<[^<>]*?>\s*' . $data['username'] . '/siu';
         $extractor = new Extractor($url, $regExpPattern);
 
         return ['user_id' => $extractor->getData()[1]];
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php
index 3891bc1870b3f75de6878ee72300cee8d7157163..c46a71474c3f5fb7fc7fe2b938ff306586e177d2 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php
@@ -41,7 +41,7 @@ class AppArea
      *
      * @param array $annotations
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getTestAppArea($annotations)
     {
@@ -56,8 +56,11 @@ class AppArea
         ) : \Magento\TestFramework\Application::DEFAULT_APP_AREA);
 
         if (false == in_array($area, $this->_allowedAreas)) {
-            throw new \Magento\Framework\Exception(
-                'Invalid "@magentoAppArea" annotation, can be "' . implode('", "', $this->_allowedAreas) . '" only.'
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __(
+                    'Invalid "@magentoAppArea" annotation, can be "%1" only.',
+                    implode('", "', $this->_allowedAreas)
+                )
             );
         }
 
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php
index 605010c165afc8b4dbb845dcc24169490e244cf2..19c2cbe3682c206d40f118ea690a5be6f34d3420 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php
@@ -56,7 +56,7 @@ class AppIsolation
      * Handler for 'endTest' event
      *
      * @param \PHPUnit_Framework_TestCase $test
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function endTest(\PHPUnit_Framework_TestCase $test)
     {
@@ -68,8 +68,8 @@ class AppIsolation
         if (isset($annotations['magentoAppIsolation'])) {
             $isolation = $annotations['magentoAppIsolation'];
             if ($isolation !== ['enabled'] && $isolation !== ['disabled']) {
-                throw new \Magento\Framework\Exception(
-                    'Invalid "@magentoAppIsolation" annotation, can be "enabled" or "disabled" only.'
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Invalid "@magentoAppIsolation" annotation, can be "enabled" or "disabled" only.')
                 );
             }
             $isIsolationEnabled = $isolation === ['enabled'];
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Annotation/DataFixture.php b/dev/tests/integration/framework/Magento/TestFramework/Annotation/DataFixture.php
index c4c4f131b497e5be050a736ff52355bcdd3527c6..cf59f4469af36823c7fc5ca558e2fa8028728a09 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Annotation/DataFixture.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Annotation/DataFixture.php
@@ -27,12 +27,14 @@ class DataFixture
      * Constructor
      *
      * @param string $fixtureBaseDir
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct($fixtureBaseDir)
     {
         if (!is_dir($fixtureBaseDir)) {
-            throw new \Magento\Framework\Exception("Fixture base directory '{$fixtureBaseDir}' does not exist.");
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase("Fixture base directory '%1' does not exist.", [$fixtureBaseDir])
+            );
         }
         $this->_fixtureBaseDir = realpath($fixtureBaseDir);
     }
@@ -101,7 +103,7 @@ class DataFixture
      * @param \PHPUnit_Framework_TestCase $test
      * @param string $scope
      * @return array
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getFixtures(\PHPUnit_Framework_TestCase $test, $scope = null)
     {
@@ -115,8 +117,8 @@ class DataFixture
             foreach ($annotations['magentoDataFixture'] as $fixture) {
                 if (strpos($fixture, '\\') !== false) {
                     // usage of a single directory separator symbol streamlines search across the source code
-                    throw new \Magento\Framework\Exception(
-                        'Directory separator "\\" is prohibited in fixture declaration.'
+                    throw new \Magento\Framework\Exception\LocalizedException(
+                        new \Magento\Framework\Phrase('Directory separator "\\" is prohibited in fixture declaration.')
                     );
                 }
                 $fixtureMethod = [get_class($test), $fixture];
@@ -179,7 +181,7 @@ class DataFixture
      * Execute fixture scripts if any
      *
      * @param array $fixtures
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _applyFixtures(array $fixtures)
     {
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Annotation/DbIsolation.php b/dev/tests/integration/framework/Magento/TestFramework/Annotation/DbIsolation.php
index 7ff949fb7a638f43d515b59ab8cd481e47581302..b405c205062a86342defd8a366093b66da79e334 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Annotation/DbIsolation.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Annotation/DbIsolation.php
@@ -80,7 +80,7 @@ class DbIsolation
      *
      * @param \PHPUnit_Framework_TestCase $test
      * @return bool|null Returns NULL, if isolation is not defined for the current scope
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getIsolation(\PHPUnit_Framework_TestCase $test)
     {
@@ -88,8 +88,8 @@ class DbIsolation
         if (isset($annotations[self::MAGENTO_DB_ISOLATION])) {
             $isolation = $annotations[self::MAGENTO_DB_ISOLATION];
             if ($isolation !== ['enabled'] && $isolation !== ['disabled']) {
-                throw new \Magento\Framework\Exception(
-                    'Invalid "@magentoDbIsolation" annotation, can be "enabled" or "disabled" only.'
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Invalid "@magentoDbIsolation" annotation, can be "enabled" or "disabled" only.')
                 );
             }
             return $isolation === ['enabled'];
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php
index f068fe1c067660f12583a0b8e61253ee9fc19f35..84304744306ae28f875af48a02a1af76ea92162c 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Application.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php
@@ -330,7 +330,7 @@ class Application
         \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->configure(
             $objectManager->get('Magento\Framework\ObjectManager\DynamicConfigInterface')->getConfiguration()
         );
-        \Magento\Framework\Phrase::setRenderer($objectManager->get('Magento\Framework\Phrase\RendererInterface'));
+        \Magento\Framework\Phrase::setRenderer($objectManager->get('Magento\Framework\Phrase\Renderer\Placeholder'));
     }
 
     /**
@@ -383,7 +383,7 @@ class Application
      * Install an application
      *
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function install()
     {
@@ -512,7 +512,7 @@ class Application
      *
      * @param string $dir
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _ensureDirExists($dir)
     {
@@ -521,7 +521,7 @@ class Application
             mkdir($dir, 0777);
             umask($old);
         } elseif (!is_dir($dir)) {
-            throw new \Magento\Framework\Exception("'$dir' is not a directory.");
+            throw new \Magento\Framework\Exception\LocalizedException(__("'%1' is not a directory.", $dir));
         }
     }
 
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Bootstrap/Settings.php b/dev/tests/integration/framework/Magento/TestFramework/Bootstrap/Settings.php
index dec3fa8d6d6cf2c7c8cf82f148ff7540ca48dbd1..df65d4dd37d6ad68d66a19d7904cc0ea82ec3852 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Bootstrap/Settings.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Bootstrap/Settings.php
@@ -86,7 +86,7 @@ class Settings
      *
      * @param string $settingName
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getAsConfigFile($settingName)
     {
@@ -99,7 +99,9 @@ class Settings
                 return $result;
             }
         }
-        throw new \Magento\Framework\Exception("Setting '{$settingName}' specifies the non-existing file '{$result}'.");
+        throw new \Magento\Framework\Exception\LocalizedException(
+            __("Setting '%1' specifies the non-existing file '%2'.", $settingName, $result)
+        );
     }
 
     /**
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php b/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php
index 08812d8caf3b5f758a1f447e02dbf602d8a339ad..95d35b39eb61bc186d8a44a9e0647e915d86887c 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php
@@ -37,13 +37,15 @@ class Magento
      * Constructor
      *
      * @param \Magento\TestFramework\EventManager $eventManager
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct($eventManager = null)
     {
         $this->_eventManager = $eventManager ?: self::$_defaultEventManager;
         if (!$this->_eventManager instanceof \Magento\TestFramework\EventManager) {
-            throw new \Magento\Framework\Exception('Instance of the "Magento\TestFramework\EventManager" is expected.');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Instance of the "Magento\TestFramework\EventManager" is expected.')
+            );
         }
     }
 
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php b/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php
index d19fac4a9168a88197f31ad8bbcb76a79585ed7e..6f1413cd62060d25e6f99f3858fae6e010e9dd1d 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Event/PhpUnit.php
@@ -37,13 +37,13 @@ class PhpUnit implements \PHPUnit_Framework_TestListener
      * Constructor
      *
      * @param \Magento\TestFramework\EventManager $eventManager
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct(\Magento\TestFramework\EventManager $eventManager = null)
     {
         $this->_eventManager = $eventManager ?: self::$_defaultEventManager;
         if (!$this->_eventManager) {
-            throw new \Magento\Framework\Exception('Instance of the event manager is required.');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Instance of the event manager is required.'));
         }
     }
 
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php b/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php
index 6385156cea5ac2e2a8054b4170eded82826c7b98..80284facfa2fa2ac84d3e2461fbb6d105d83944e 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php
@@ -121,7 +121,7 @@ class Transaction
      *
      * @param string $connectionName 'read' or 'write'
      * @return \Magento\Framework\DB\Adapter\AdapterInterface|\Magento\TestFramework\Db\Adapter\TransactionInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getAdapter($connectionName = 'core_write')
     {
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php b/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php
index 8af390fa3c700cb195ff156447e6d7ca49977f89..8ca820180227565aa3a97ef105e883a874922ae7 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php
@@ -30,12 +30,12 @@ class Bootstrap
      * Set self instance for static access
      *
      * @param \Magento\TestFramework\Helper\Bootstrap $instance
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public static function setInstance(\Magento\TestFramework\Helper\Bootstrap $instance)
     {
         if (self::$_instance) {
-            throw new \Magento\Framework\Exception('Helper instance cannot be redefined.');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Helper instance cannot be redefined.'));
         }
         self::$_instance = $instance;
     }
@@ -44,12 +44,12 @@ class Bootstrap
      * Self instance getter
      *
      * @return \Magento\TestFramework\Helper\Bootstrap
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public static function getInstance()
     {
         if (!self::$_instance) {
-            throw new \Magento\Framework\Exception('Helper instance is not defined yet.');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Helper instance is not defined yet.'));
         }
         return self::$_instance;
     }
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Helper/Memory.php b/dev/tests/integration/framework/Magento/TestFramework/Helper/Memory.php
index f0cda8af73017be53f971c1bb7fd92f079509034..f4c0b07709a801ecd9b79728bed573cad63d6b26 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Helper/Memory.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Helper/Memory.php
@@ -50,7 +50,7 @@ class Memory
             // try to use the Windows command line
             // some ports of Unix commands on Windows, such as MinGW, have limited capabilities and cannot be used
             $result = $this->_getWinProcessMemoryUsage($pid);
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             // fall back to the Unix command line
             $result = $this->_getUnixProcessMemoryUsage($pid);
         }
diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php
index 9c713e80ac01ded20764f123915ccda3d970ccfa..086b8dd952a1adfd5be6a22f9c05047f9546029b 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php
@@ -100,7 +100,7 @@ abstract class AbstractConfigFiles extends \PHPUnit_Framework_TestCase
         try {
             // this will merge all xml files and validate them
             $this->_reader->read('global');
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->fail($e->getMessage());
         }
     }
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php
index 2692e49779a5a846a7ddc88dcaf5c86c1d68d41f..c95620c61e5943cc5834b62f1f83595fbe6b02b2 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php
@@ -60,7 +60,7 @@ class AppAreaTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testGetTestAppAreaWithInvalidArea()
     {
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppIsolationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppIsolationTest.php
index 2f46aca7a6210017e242876e2d02a13345248d67..118fc8bbe9da39dcb87039d97f8897e32c020c2e 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppIsolationTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppIsolationTest.php
@@ -47,7 +47,7 @@ class AppIsolationTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @magentoAppIsolation invalid
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testEndTestIsolationInvalid()
     {
@@ -57,7 +57,7 @@ class AppIsolationTest extends \PHPUnit_Framework_TestCase
     /**
      * @magentoAppIsolation enabled
      * @magentoAppIsolation disabled
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testEndTestIsolationAmbiguous()
     {
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DataFixtureTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DataFixtureTest.php
index c4324863f14162e56bd06f36119ba888f9df7e31..07cfebfa351e88bb3d4911a5c844a3e9aa99949a 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DataFixtureTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DataFixtureTest.php
@@ -39,7 +39,7 @@ class DataFixtureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testConstructorException()
     {
@@ -98,7 +98,7 @@ class DataFixtureTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @magentoDataFixture fixture\path\must\not\contain\backslash.php
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testStartTestTransactionRequestInvalidPath()
     {
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DbIsolationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DbIsolationTest.php
index 559bd7eba3d08cb1257a26166173d51f2cd95789..5b4314c302f3148cba8184c93cc547b32251af44 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DbIsolationTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/DbIsolationTest.php
@@ -63,7 +63,7 @@ class DbIsolationTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @magentoDbIsolation invalid
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testStartTestTransactionRequestInvalidAnnotation()
     {
@@ -73,7 +73,7 @@ class DbIsolationTest extends \PHPUnit_Framework_TestCase
     /**
      * @magentoDbIsolation enabled
      * @magentoDbIsolation disabled
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testStartTestTransactionRequestAmbiguousAnnotation()
     {
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/DocBlockTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/DocBlockTest.php
index 60d25f5018cb933b288dd4d69e727eaa60225c24..6f7643bf89d26e9dd2b74d4776705cdedf4d9fff 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/DocBlockTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/DocBlockTest.php
@@ -44,7 +44,7 @@ class DocBlockTest extends \PHPUnit_Framework_TestCase
         try {
             new $listenerClass();
             $this->fail("Inability to instantiate the event listener '{$listenerClass}' is expected.");
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->assertEquals($expectedExceptionMsg, $e->getMessage());
         }
     }
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php
index ec8dc75f29b381d5dd78e04347c0e11ba99fb2c5..2dda33120ba57e7c975d30739e6fc7c371472ef4 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php
@@ -199,7 +199,7 @@ class SettingsTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetAsConfigFileException($settingName, $expectedExceptionMsg)
     {
-        $this->setExpectedException('Magento\Framework\Exception', $expectedExceptionMsg);
+        $this->setExpectedException('Magento\Framework\Exception\LocalizedException', $expectedExceptionMsg);
         $this->_object->getAsConfigFile($settingName);
     }
 
@@ -208,11 +208,11 @@ class SettingsTest extends \PHPUnit_Framework_TestCase
         return [
             'non-existing setting' => [
                 'non_existing',
-                "Setting 'non_existing' specifies the non-existing file ''.",
+                __("Setting 'non_existing' specifies the non-existing file ''."),
             ],
             'non-existing file' => [
                 'item_label',
-                "Setting 'item_label' specifies the non-existing file '{$this->_fixtureDir}Item Label.dist'.",
+                __("Setting 'item_label' specifies the non-existing file '%1Item Label.dist'.", $this->_fixtureDir),
             ]
         ];
     }
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/EntityTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/EntityTest.php
index bd4cbab9a0ed6f0c94d0d3c7107fcbb917d03518..3cecd675ddeb9b33c9ab73e4c6b6a44d9a95dbe9 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/EntityTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/EntityTest.php
@@ -34,14 +34,14 @@ class EntityTest extends \PHPUnit_Framework_TestCase
     /**
      * Callback for save method in mocked model
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function saveModelAndFailOnUpdate()
     {
         if (!$this->_model->getId()) {
             $this->saveModelSuccessfully();
         } else {
-            throw new \Magento\Framework\Exception('Synthetic model update failure.');
+            throw new \Magento\Framework\Exception\LocalizedException(__('Synthetic model update failure.'));
         }
     }
 
@@ -66,7 +66,7 @@ class EntityTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'successful CRUD' => ['saveModelSuccessfully'],
-            'cleanup on update error' => ['saveModelAndFailOnUpdate', 'Magento\Framework\Exception']
+            'cleanup on update error' => ['saveModelAndFailOnUpdate', 'Magento\Framework\Exception\LocalizedException']
         ];
     }
 
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php
index 49a3510b412c615fdcfae65e5398047d16ad7a8b..119dc7bed56275c1f396628e89705ed99fb15fc1 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php
@@ -45,7 +45,7 @@ class MagentoTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @dataProvider constructorExceptionDataProvider
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @param mixed $eventManager
      */
     public function testConstructorException($eventManager)
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/PhpUnitTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/PhpUnitTest.php
index 6d10c3f8005fc07fd4d9f0cff71725e88addc5f2..4a01266c9891b6189c85617045dbc4f49d4cdd4c 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/PhpUnitTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/PhpUnitTest.php
@@ -44,7 +44,7 @@ class PhpUnitTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testConstructorException()
     {
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php
index 20accc8da9089dd0ed58bdebd6d7c9edd1bf6b01..d7c9971203206faa040201d3276885150b6e6863 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php
@@ -75,7 +75,7 @@ class BootstrapTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Helper instance is not defined yet.
      */
     public function testGetInstanceEmptyProhibited()
@@ -99,7 +99,7 @@ class BootstrapTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @depends testSetInstanceFirstAllowed
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Helper instance cannot be redefined.
      */
     public function testSetInstanceChangeProhibited()
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/MemoryTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/MemoryTest.php
index ba120cf6b806a39d36bdb094b5341fa38d244305..5234650a1118b33df7a6f2b9d6c258d959b4c309 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/MemoryTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/MemoryTest.php
@@ -27,7 +27,7 @@ class MemoryTest extends \PHPUnit_Framework_TestCase
         )->with(
             $this->stringStartsWith('tasklist.exe ')
         )->will(
-            $this->throwException(new \Magento\Framework\Exception('command not found'))
+            $this->throwException(new \Magento\Framework\Exception\LocalizedException(__('command not found')))
         );
         $this->_shell->expects(
             $this->at(1)
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php
index f8d7b83b9dd7c3bdc59136438d847546a43d5c05..edd2d4e255b92fb7ff4c1fb1ccd4ec40fdb63dd2 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php
@@ -17,19 +17,11 @@ class ControllerAbstractTest extends \Magento\TestFramework\TestCase\AbstractCon
 
     protected function setUp()
     {
-        $this->messageManager = $this->getMock('\Magento\Framework\Message\Manager', [], [], '', false);
-        $request = new \Magento\TestFramework\Request(
-            $this->getMock('Magento\Framework\Stdlib\Cookie\CookieReaderInterface'),
-            $this->getMock('Magento\Framework\App\Route\ConfigInterface\Proxy', [], [], '', false),
-            $this->getMock('Magento\Framework\App\Request\PathInfoProcessorInterface'),
-            $this->getMock('Magento\Framework\ObjectManagerInterface')
-        );
-        $response = new \Magento\TestFramework\Response(
-            $this->getMock('Magento\Framework\Stdlib\CookieManagerInterface'),
-            $this->getMock('Magento\Framework\Stdlib\Cookie\CookieMetadataFactory', [], [], '', false),
-            $this->getMock('Magento\Framework\App\Http\Context', [], [], '', false)
-        );
+        $testObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
+        $this->messageManager = $this->getMock('\Magento\Framework\Message\Manager', [], [], '', false);
+        $request = $testObjectManager->getObject('Magento\TestFramework\Request');
+        $response = $testObjectManager->getObject('Magento\TestFramework\Response');
         $this->_objectManager = $this->getMock(
             'Magento\TestFramework\ObjectManager',
             ['get', 'create'],
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/_files/design/adminhtml/test_default/Magento_Backend/layout_test_grid_handle.xml b/dev/tests/integration/testsuite/Magento/Backend/Block/_files/design/adminhtml/test_default/Magento_Backend/layout_test_grid_handle.xml
index bfc66880afd106048caaa66cb9822118492c0778..aeac3057672ae1af9547fa748fa65cfd0034b0f2 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Block/_files/design/adminhtml/test_default/Magento_Backend/layout_test_grid_handle.xml
+++ b/dev/tests/integration/testsuite/Magento/Backend/Block/_files/design/adminhtml/test_default/Magento_Backend/layout_test_grid_handle.xml
@@ -21,7 +21,7 @@
                 </block>
                 <block class="Magento\Backend\Block\Widget\Grid\Column" as="description" output="1">
                     <arguments>
-                        <header>User description</header>
+                        <header>User Description</header>
                         <index>description</index>
                         <type>text</type>
                     </arguments>
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/AuthTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/AuthTest.php
index 762fcf94aa70576a4cc04f3b6f16b1015885ba69..3f0e20d8a744b52b81313fb8e2a38c57af8d1a0c 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Model/AuthTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Model/AuthTest.php
@@ -30,11 +30,22 @@ class AuthTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
+     * @dataProvider getLoginDataProvider
+     * @param string $userName
+     * @param string $password
      * @expectedException \Magento\Framework\Exception\AuthenticationException
      */
-    public function testLoginFailed()
+    public function testLoginFailed($userName, $password)
     {
-        $this->_model->login('not_exists', 'not_exists');
+        $this->_model->login($userName, $password);
+    }
+
+    public function getLoginDataProvider()
+    {
+        return [
+            'Invalid credentials' => ['not_exists', 'not_exists'],
+            'Empty credentials' => ['', 'not_exists']
+        ];
     }
 
     public function testSetGetAuthStorage()
@@ -77,17 +88,13 @@ class AuthTest extends \PHPUnit_Framework_TestCase
      */
     public function testLogout()
     {
-        $this->markTestIncomplete('MAGETWO-17021');
         $this->_model->login(
             \Magento\TestFramework\Bootstrap::ADMIN_NAME,
             \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD
         );
         $this->assertNotEmpty($this->_model->getAuthStorage()->getData());
-        $cookie = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Stdlib\Cookie');
-        $cookie->set($this->_model->getAuthStorage()->getName(), 'session_id');
         $this->_model->logout();
         $this->assertEmpty($this->_model->getAuthStorage()->getData());
-        $this->assertEmpty($cookie->get($this->_model->getAuthStorage()->getName()));
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/Search/CustomerTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/Search/CustomerTest.php
index fb4b79dfe54a16bcb4738af561ea64ad253c455a..e17b5accf97dd08dc234b90e73192bb51a573bd7 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Model/Search/CustomerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Model/Search/CustomerTest.php
@@ -10,12 +10,12 @@ use Magento\TestFramework\Helper\Bootstrap;
 
 /**
  * @magentoAppArea adminhtml
+ * @magentoDataFixture Magento/Customer/_files/three_customers.php
+ * @magentoDataFixture Magento/Customer/_files/customer_address.php
  */
 class CustomerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @magentoDataFixture Magento/Customer/_files/three_customers.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
      * @dataProvider loadDataProvider
      */
     public function testLoad($query, $limit, $start, $expectedResult)
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/Search/OrderTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/Search/OrderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..759951c785d8590a1e9651a68f7a3ceeffae6371
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Backend/Model/Search/OrderTest.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Model\Search;
+
+use Magento\TestFramework\Helper\Bootstrap;
+
+/**
+ * @magentoAppArea adminhtml
+ * @magentoDataFixture Magento/Sales/_files/order.php
+ * @magentoDataFixture Magento/Sales/_files/order_shipping_address_different_to_billing.php
+ */
+class OrderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider loadDataProvider
+     */
+    public function testLoad($query, $limit, $start, $expectedResult)
+    {
+        /** @var $order \Magento\Sales\Model\Order */
+        $order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order');
+        $orderIdByIncrementId = [];
+        foreach (['100000001', '100000002', '100000003'] as $incrementId) {
+            $orderIdByIncrementId[$incrementId] = $order->loadByIncrementId($incrementId)->getId();
+        }
+
+        /** Preconditions */
+        $objectManager = Bootstrap::getObjectManager();
+        /** @var \Magento\Backend\Model\Search\Order $orderSearch */
+        $orderSearch = $objectManager->create('Magento\Backend\Model\Search\Order');
+        $orderSearch->setQuery($query);
+        $orderSearch->setLimit($limit);
+        $orderSearch->setStart($start);
+        $orderSearch->load();
+
+        /** SUT Execution */
+        $searchResults = $orderSearch->getResults();
+
+        /** Ensure that search results are correct */
+        $this->assertCount(count($expectedResult), $searchResults, 'Quantity of search result items is invalid.');
+        foreach ($expectedResult as $itemIndex => $expectedItem) {
+            /** Validate URL to item */
+            $orderIncrementId = substr($expectedItem['id'], strlen('order/1/#'));
+            $this->assertContains(
+                "order/view/order_id/{$orderIdByIncrementId[$orderIncrementId]}",
+                $searchResults[$itemIndex]['url'],
+                'Item URL is invalid.'
+            );
+            $expectedItem['id'] = 'order/1/' . $orderIdByIncrementId[$orderIncrementId];
+            unset($searchResults[$itemIndex]['url']);
+
+            /** Validate other item data */
+            foreach ($expectedItem as $field => $value) {
+                $this->assertEquals(
+                    $value,
+                    (string)$searchResults[$itemIndex][$field],
+                    "Data of item #$itemIndex is invalid."
+                );
+            }
+        }
+    }
+
+    public static function loadDataProvider()
+    {
+        return [
+            'All items, first page' => [
+                '10000000',
+                2, // Items on page
+                1, // Page number
+                [
+                    [
+                        'id' => 'order/1/#100000001',
+                        'type' => 'Order',
+                        'name' => 'Order #100000001',
+                        'description' => 'firstname lastname',
+                    ],
+                    [
+                        'id' => 'order/1/#100000002',
+                        'type' => 'Order',
+                        'name' => 'Order #100000002',
+                        'description' => 'guest guest'
+                    ]
+                ],
+            ],
+            'All items, second page' => [
+                '10000000',
+                2, // Items on page
+                2, // Page number
+                [
+                    [
+                        'id' => 'order/1/#100000003',
+                        'type' => 'Order',
+                        'name' => 'Order #100000003',
+                        'description' => 'guest guest',
+                    ]
+                ],
+            ],
+            'Search by first name, first item only' => [
+                'First',
+                10, // Items on page
+                1, // Page number
+                [
+                    [
+                        'id' => 'order/1/#100000001',
+                        'type' => 'Order',
+                        'name' => 'Order #100000001',
+                        'description' => 'firstname lastname',
+                    ]
+                ],
+            ],
+            'No results' => [
+                'NotExistingOrder',
+                10, // Items on page
+                1, // Page number
+                [],
+            ],
+            'Search by last name, first item only' => [
+                'last',
+                10, // Items on page
+                1, // Page number
+                [
+                    [
+                        'id' => 'order/1/#100000001',
+                        'type' => 'Order',
+                        'name' => 'Order #100000001',
+                        'description' => 'firstname lastname',
+                    ]
+                ],
+            ],
+        ];
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php
index a954c7c730a1ee571e4122bf880506df6f7f0845..17507214f58ce960622fe170a94e079f0eb1f863 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php
@@ -18,7 +18,7 @@ class ConfigTest extends \Magento\Backend\Utility\Controller
     public function testEditAction()
     {
         $this->dispatch('backend/admin/system_config/edit');
-        $this->assertContains('<ul id="system_config_tabs"', $this->getResponse()->getBody());
+        $this->assertContains('<div id="system_config_tabs"', $this->getResponse()->getBody());
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php
index fce0d8bb3b4b007946be32d1704e67a647625bd7..cef578e0114a33c096cab9fde927099ba7dbfd01 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php
@@ -96,7 +96,7 @@ class ServiceCollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage When passing in a field array there must be a matching condition array.
      */
     public function testAddToFilterException()
diff --git a/dev/tests/integration/testsuite/Magento/Email/Block/Adminhtml/Template/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/Email/Block/Adminhtml/Template/Edit/FormTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..035efbb3bb89879982b67db8f958456ad61b84c2
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Email/Block/Adminhtml/Template/Edit/FormTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Block\Adminhtml\Template\Edit;
+
+/**
+ * Test class for \Magento\Email\Block\Adminhtml\Template\Edit\Form
+ * @magentoAppArea adminhtml
+ * @magentoAppIsolation enabled
+ */
+class FormTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var string[] */
+    protected $expectedFields;
+
+    /** @var Magento\Email\Model\Template */
+    protected $template;
+
+    /** @var Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
+    protected $objectManager;
+
+    /** @var \Magento\Framework\Registry */
+    protected $registry;
+
+    /** @var \Magento\Email\Block\Adminhtml\Template\Edit\Form */
+    protected $block;
+
+    /** @var \ReflectionMethod */
+    protected $prepareFormMethod;
+
+    public function setUp()
+    {
+        $this->expectedFields = [
+            'base_fieldset',
+            'template_code',
+            'template_subject',
+            'orig_template_variables',
+            'variables',
+            'template_variables',
+            'insert_variable',
+            'template_text',
+            'template_styles'
+        ];
+
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+        $this->template = $this->objectManager->get('Magento\Email\Model\Template')
+            ->setId(1)
+            ->setTemplateType(\Magento\Framework\App\TemplateTypesInterface::TYPE_HTML);
+        $this->registry = $this->objectManager->get('Magento\Framework\Registry');
+        if ($this->registry->registry('current_email_template') == null) {
+            $this->registry->register('current_email_template', $this->template);
+        }
+        $this->block = $this->objectManager->create('Magento\Email\Block\Adminhtml\Template\Edit\Form');
+        $this->prepareFormMethod = new \ReflectionMethod(
+            'Magento\Email\Block\Adminhtml\Template\Edit\Form',
+            '_prepareForm'
+        );
+        $this->prepareFormMethod->setAccessible(true);
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Edit\Form::_prepareForm
+     */
+    public function testPrepareFormWithTemplateId()
+    {
+        $this->expectedFields[] = 'used_currently_for';
+        $this->runTest();
+    }
+
+    /**
+     * @covers \Magento\Email\Block\Adminhtml\Template\Edit\Form::_prepareForm
+     */
+    public function testPrepareFormWithoutTemplateId()
+    {
+        $this->template->setId(null);
+        $this->expectedFields[] = 'used_default_for';
+        $this->runTest();
+    }
+
+    protected function runTest()
+    {
+        $this->prepareFormMethod->invoke($this->block);
+        $form = $this->block->getForm();
+        foreach ($this->expectedFields as $key) {
+            $this->assertNotNull($form->getElement($key));
+        }
+        $this->assertGreaterThan(0, strpos($form->getElement('insert_variable')->getData('text'), 'Insert Variable'));
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
old mode 100644
new mode 100755
index 72cbb8f071d6f7b0a8cdd2574bc3ccb6005eabe1..70d92a6e3a017440a5333f356da2216e9d9b9d64
--- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
@@ -181,7 +181,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @dataProvider setDesignConfigExceptionDataProvider
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testSetDesignConfigException($config)
     {
@@ -201,4 +201,104 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             [['store' => $storeId]],
         ];
     }
+
+    public function testSetAndGetId()
+    {
+        $testId = 9999;
+        $this->_model->setId($testId);
+        $this->assertEquals($testId, $this->_model->getId());
+    }
+
+    public function testIsValidForSend()
+    {
+        $this->assertTrue($this->_model->isValidForSend());
+    }
+
+    /**
+     * @expectedException \UnexpectedValueException
+     * @expectedExceptionMessage Email template 'foo' is not defined.
+     */
+    public function testGetTypeNonExistentType()
+    {
+        $this->_model->setId('foo');
+        $this->_model->getType();
+    }
+
+    public function testGetTypeHtml()
+    {
+        $this->_model->setId('customer_create_account_email_template');
+        $this->assertEquals(\Magento\Framework\App\TemplateTypesInterface::TYPE_HTML, $this->_model->getType());
+    }
+
+    public function testGetType()
+    {
+        $templateTypeId = 'test_template';
+        $this->_model->setTemplateType($templateTypeId);
+        $this->assertEquals($templateTypeId, $this->_model->getType());
+    }
+
+    public function testGetPreparedTemplateText()
+    {
+        $this->_model->loadDefault('customer_create_account_email_template');
+        $this->assertContains('<body style', $this->_model->getPreparedTemplateText());
+    }
+
+    public function testGetSendingException()
+    {
+        $this->assertNull($this->_model->getSendingException());
+    }
+
+    public function testGetVariablesOptionArray()
+    {
+        $testTemplateVariables = '{"var data.name":"Sender Name","var data.email":"Sender Email"}';
+        $this->_model->setOrigTemplateVariables($testTemplateVariables);
+        $variablesOptionArray = $this->_model->getVariablesOptionArray();
+        $this->assertEquals('{{var data.name}}', $variablesOptionArray[0]['value']);
+        $this->assertEquals('Sender Name', $variablesOptionArray[0]['label']->getArguments()[0]);
+        $this->assertEquals('{{var data.email}}', $variablesOptionArray[1]['value']);
+        $this->assertEquals('Sender Email', $variablesOptionArray[1]['label']->getArguments()[0]);
+    }
+
+    public function testGetVariablesOptionArrayInGroup()
+    {
+        $testTemplateVariables = '{"var data.name":"Sender Name","var data.email":"Sender Email"}';
+        $this->_model->setOrigTemplateVariables($testTemplateVariables);
+        $variablesOptionArray = $this->_model->getVariablesOptionArray(true);
+        $this->assertEquals('Template Variables', $variablesOptionArray['label']->getText());
+        $this->assertEquals($this->_model->getVariablesOptionArray(), $variablesOptionArray['value']);
+    }
+
+    /**
+     * @expectedException \Magento\Framework\Exception\MailException
+     * @expectedExceptionMessage The template Name must not be empty.
+     */
+    public function testBeforeSaveEmptyTemplateCode()
+    {
+        $this->_model->beforeSave();
+    }
+
+    public function testBeforeSave()
+    {
+        $this->_model->setTemplateCode('test template code');
+        $this->_model->beforeSave();
+    }
+
+    public function testProcessTemplate()
+    {
+        $this->_model->setId('customer_create_account_email_template');
+        $this->assertContains('<body style', $this->_model->processTemplate());
+    }
+
+    public function testGetSubject()
+    {
+        $this->_model->setVars(['foo', 'bar', 'baz']);
+        $this->assertEquals('Subject', $this->_model->getSubject());
+    }
+
+    public function testSetOptions()
+    {
+        $options = ['area' => 'test area', 'store' => 1];
+        $this->_model->setOptions($options);
+        $this->assertEquals($options, $this->_model->getDesignConfig()->getData());
+    }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/FrontControllerTest.php b/dev/tests/integration/testsuite/Magento/Framework/App/FrontControllerTest.php
old mode 100644
new mode 100755
index 3795a48b9f0346a53978eeda461e42cf49d5f10a..5b84fa1bc9742a4822ca31e56c0d21e32e00ebfe
--- a/dev/tests/integration/testsuite/Magento/Framework/App/FrontControllerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/App/FrontControllerTest.php
@@ -37,6 +37,6 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
         $request = $this->_objectManager->create('Magento\Framework\App\Request\Http');
         /* empty action */
         $request->setRequestUri('core/index/index');
-        $this->assertEmpty($this->_model->dispatch($request)->getBody());
+        $this->assertInstanceOf('Magento\Framework\Controller\ResultInterface', $this->_model->dispatch($request));
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php
index bc195e9ac3d37be0b330269697bcdacf4bb6cd51..7dbb721cfc39f815b36c9d2d769e36ef22fbc310 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php
@@ -60,7 +60,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
     /**
      * test exception
      *
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testReadDirectoryRecursivelyFailure()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/ReadTest.php b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/ReadTest.php
index 2ec0af24652246ae64ab535010b616fb851573e6..03d13b9ee8aeb9fa484064433154a6f41a5deb85 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/ReadTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/ReadTest.php
@@ -26,7 +26,7 @@ class ReadTest extends \PHPUnit_Framework_TestCase
      *
      * @dataProvider providerNotValidFiles
      * @param string $path
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testAssertValid($path)
     {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/WriteTest.php b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/WriteTest.php
index fe5bbe9e413983ba25de2f51cfb2b126bee93aea..67c671e2f253f2be930c99fc6a97f5771c046f29 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/WriteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/File/WriteTest.php
@@ -35,7 +35,7 @@ class WriteTest extends \PHPUnit_Framework_TestCase
      * @dataProvider fileExistProvider
      * @param $path
      * @param $mode
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testFileExistException($path, $mode)
     {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Module/Plugin/DbStatusValidatorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Module/Plugin/DbStatusValidatorTest.php
index 4bcae52e7362b5a7a9e95e623ac93103b787f003..e9d78a0385a79b2f798f4fbb21ad8fc7b0881520 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Module/Plugin/DbStatusValidatorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Module/Plugin/DbStatusValidatorTest.php
@@ -14,7 +14,7 @@ class DbStatusValidatorTest extends \Magento\TestFramework\TestCase\AbstractCont
 
     /**
      * @magentoDbIsolation enabled
-     * @expectedException \Magento\Framework\Module\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Please update your database
      */
     public function testValidationOutdatedDb()
diff --git a/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php b/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php
index 214e3f39423b5ef98a51aa387b62a5dc453315d2..f9b9e1c67406066a031364fc81a476731e6655c8 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php
@@ -6,14 +6,33 @@
 namespace Magento\Framework;
 
 use Magento\TestFramework\Helper\Bootstrap;
+use Magento\Framework\Phrase;
 
 class TranslateCachingTest extends \PHPUnit_Framework_TestCase
 {
-    public static function tearDownAfterClass()
+    /**
+     * @var \Magento\Framework\Phrase\RendererInterface
+     */
+    protected $renderer;
+
+    /**
+     * @var \Magento\Framework\ObjectManagerInterface
+     */
+    protected $objectManager;
+
+    protected function setUp()
     {
-        $objectManager = Bootstrap::getObjectManager();
+        $this->objectManager = Bootstrap::getObjectManager();
+        $this->renderer = Phrase::getRenderer();
+        Phrase::setRenderer($this->objectManager->get('\Magento\Framework\Phrase\RendererInterface'));
+    }
+
+    protected function tearDown()
+    {
+        Phrase::setRenderer($this->renderer);
+
         /** @var \Magento\Framework\App\Cache\Type\Translate $cache */
-        $cache = $objectManager->get('Magento\Framework\App\Cache\Type\Translate');
+        $cache = $this->objectManager->get('Magento\Framework\App\Cache\Type\Translate');
         $cache->clean();
     }
 
@@ -22,27 +41,26 @@ class TranslateCachingTest extends \PHPUnit_Framework_TestCase
      */
     public function testLoadDataCaching()
     {
-        $objectManager = Bootstrap::getObjectManager();
         /** @var \Magento\Framework\Translate $model */
-        $model = $objectManager->get('Magento\Framework\Translate');
+        $model = $this->objectManager->get('Magento\Framework\Translate');
 
         $model->loadData(\Magento\Framework\App\Area::AREA_FRONTEND); // this is supposed to cache the fixture
-        $this->assertEquals('Fixture Db Translation', new \Magento\Framework\Phrase('Fixture String'));
+        $this->assertEquals('Fixture Db Translation', new Phrase('Fixture String'));
 
         /** @var \Magento\Translation\Model\Resource\String $translateString */
-        $translateString = $objectManager->create('Magento\Translation\Model\Resource\String');
+        $translateString = $this->objectManager->create('Magento\Translation\Model\Resource\String');
         $translateString->saveTranslate('Fixture String', 'New Db Translation');
 
         $this->assertEquals(
             'Fixture Db Translation',
-            new \Magento\Framework\Phrase('Fixture String'),
+            new Phrase('Fixture String'),
             'Translation is expected to be cached'
         );
 
         $model->loadData(\Magento\Framework\App\Area::AREA_FRONTEND, true);
         $this->assertEquals(
             'New Db Translation',
-            new \Magento\Framework\Phrase('Fixture String'),
+            new Phrase('Fixture String'),
             'Forced load should not use cache'
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php
index cc9e4c4199c3df78a2ef2f613b3acaf9180f091e..da5a86c47a1496652cf53df739c93389f1c1e58c 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php
@@ -58,7 +58,7 @@ class MinifierTest extends \PHPUnit_Framework_TestCase
      * @param string $requestedFilePath
      * @param string $testFile
      * @param callable $assertionCallback
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _testCssMinification($requestedUri, $requestedFilePath, $testFile, $assertionCallback)
     {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/LayoutDirectivesTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/LayoutDirectivesTest.php
index 11c917fba00ba2ee5d7573949f9acfc64f289e2c..31ce3901f6bb41a32093f86c9fb9fcc62d485a67 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/LayoutDirectivesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/LayoutDirectivesTest.php
@@ -208,7 +208,7 @@ class LayoutDirectivesTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testMoveBroken()
     {
@@ -216,7 +216,7 @@ class LayoutDirectivesTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testMoveAliasBroken()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php
index 3e49061e65249d4bdc54546e8de9b58bab3a5221..70406c396b6059e7e75b0dfda708fe62afdae929 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php
@@ -274,7 +274,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase
         $msg = 'Html tag "span" is forbidden for usage in containers. ' .
             'Consider to use one of the allowed: dd, div, dl, fieldset, main, header, ' .
             'footer, ol, p, section, table, tfoot, ul.';
-        $this->setExpectedException('Magento\Framework\Exception', $msg);
+        $this->setExpectedException('Magento\Framework\Exception\LocalizedException', $msg);
         $this->_layout->addContainer('container', 'Container', ['htmlTag' => 'span']);
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/GiftMessage/Model/OrderItemRepositoryTest.php b/dev/tests/integration/testsuite/Magento/GiftMessage/Model/OrderItemRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..18532c48952e48d2f1abd65f62514eeb45c7acbf
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/GiftMessage/Model/OrderItemRepositoryTest.php
@@ -0,0 +1,163 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\GiftMessage\Model;
+
+class OrderItemRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Framework\ObjectManagerInterface */
+    protected $objectManager;
+
+    /** @var \Magento\GiftMessage\Model\Message */
+    protected $message;
+
+    /** @var \Magento\GiftMessage\Model\OrderItemRepository */
+    protected $giftMessageOrderItemRepository;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+        $this->message = $this->objectManager->create('Magento\GiftMessage\Model\Message');
+        $this->message->setSender('Romeo');
+        $this->message->setRecipient('Mercutio');
+        $this->message->setMessage('I thought all for the best.');
+
+        $this->giftMessageOrderItemRepository = $this->objectManager->create(
+            'Magento\GiftMessage\Model\OrderItemRepository'
+        );
+
+    }
+
+    protected function tearDown()
+    {
+        unset($this->objectManager);
+        unset($this->message);
+        unset($this->giftMessageOrderItemRepository);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_items 1
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        $orderItem = $order->getItems();
+        $orderItem = array_shift($orderItem);
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $message = $this->giftMessageOrderItemRepository->get($order->getEntityId(), $orderItem->getItemId());
+        $this->assertEquals('Romeo', $message->getSender());
+        $this->assertEquals('Mercutio', $message->getRecipient());
+        $this->assertEquals('I thought all for the best.', $message->getMessage());
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_items 1
+     * @expectedException \Magento\Framework\Exception\NoSuchEntityException
+     * @expectedExceptionMessage There is no item with provided id in the order
+     */
+    public function testGetNoProvidedItemId()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        $orderItem = $order->getItems();
+        $orderItem = array_shift($orderItem);
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderItemRepository->get($order->getEntityId(), $orderItem->getItemId() * 10);
+    }
+
+    /**
+     * @magentoDataFixture Magento/Sales/_files/order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_items 1
+     */
+    public function testSave()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        $orderItem = $order->getItems();
+        $orderItem = array_shift($orderItem);
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $result = $this->giftMessageOrderItemRepository->save(
+            $order->getEntityId(),
+            $orderItem->getItemId(),
+            $this->message
+        );
+
+        $message = $this->giftMessageOrderItemRepository->get($order->getEntityId(), $orderItem->getItemId());
+
+        $this->assertTrue($result);
+        $this->assertEquals('Romeo', $message->getSender());
+        $this->assertEquals('Mercutio', $message->getRecipient());
+        $this->assertEquals('I thought all for the best.', $message->getMessage());
+    }
+
+
+    /**
+     * @magentoDataFixture Magento/Sales/_files/order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_items 0
+     * @expectedException \Magento\Framework\Exception\CouldNotSaveException
+     * @expectedExceptionMessage Gift Message is not available
+     */
+    public function testSaveMessageIsNotAvailable()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        $orderItem = $order->getItems();
+        $orderItem = array_shift($orderItem);
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderItemRepository->save($order->getEntityId(), $orderItem->getItemId(), $this->message);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/virtual_order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_items 1
+     * @expectedException \Magento\Framework\Exception\State\InvalidTransitionException
+     * @expectedExceptionMessage Gift Messages is not applicable for virtual products
+     */
+    public function testSaveMessageIsVirtual()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        $orderItem = $order->getItems();
+        $orderItem = array_shift($orderItem);
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderItemRepository->save($order->getEntityId(), $orderItem->getItemId(), $this->message);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/empty_order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_items 1
+     * @expectedException  \Magento\Framework\Exception\NoSuchEntityException
+     * @expectedExceptionMessage There is no item with provided id in the order
+     */
+    public function testSaveMessageNoProvidedItemId()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+        /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+        $orderItem = $order->getItems();
+        $orderItem = array_shift($orderItem);
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderItemRepository->save(
+            $order->getEntityId(),
+            $orderItem->getItemId() * 10,
+            $this->message
+        );
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/GiftMessage/Model/OrderRepositoryTest.php b/dev/tests/integration/testsuite/Magento/GiftMessage/Model/OrderRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f47174a49cf265d42dd203ad3d758b605606d552
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/GiftMessage/Model/OrderRepositoryTest.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\GiftMessage\Model;
+
+class OrderRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Framework\ObjectManagerInterface */
+    protected $objectManager;
+
+    /** @var \Magento\GiftMessage\Model\Message */
+    protected $message;
+
+    /** @var \Magento\GiftMessage\Model\OrderRepository */
+    protected $giftMessageOrderRepository;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+        $this->message = $this->objectManager->create('Magento\GiftMessage\Model\Message');
+        $this->message->setSender('Romeo');
+        $this->message->setRecipient('Mercutio');
+        $this->message->setMessage('I thought all for the best.');
+
+        $this->giftMessageOrderRepository = $this->objectManager->create('Magento\GiftMessage\Model\OrderRepository');
+    }
+
+    protected function tearDown()
+    {
+        unset($this->objectManager);
+        unset($this->message);
+        unset($this->giftMessageOrderRepository);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_order 1
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $message = $this->giftMessageOrderRepository->get($order->getEntityId());
+        $this->assertEquals('Romeo', $message->getSender());
+        $this->assertEquals('Mercutio', $message->getRecipient());
+        $this->assertEquals('I thought all for the best.', $message->getMessage());
+    }
+
+    /**
+     * @magentoDataFixture Magento/Sales/_files/order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_order 1
+     */
+    public function testSave()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $result = $this->giftMessageOrderRepository->save($order->getEntityId(), $this->message);
+
+        $message = $this->giftMessageOrderRepository->get($order->getEntityId());
+
+        $this->assertTrue($result);
+        $this->assertEquals('Romeo', $message->getSender());
+        $this->assertEquals('Mercutio', $message->getRecipient());
+        $this->assertEquals('I thought all for the best.', $message->getMessage());
+    }
+
+    /**
+     * @magentoDataFixture Magento/Sales/_files/order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_order 0
+     * @expectedException \Magento\Framework\Exception\CouldNotSaveException
+     * @expectedExceptionMessage Gift Message is not available
+     */
+    public function testSaveMessageIsNotAvailable()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderRepository->save($order->getEntityId(), $this->message);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/virtual_order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_order 1
+     * @expectedException \Magento\Framework\Exception\State\InvalidTransitionException
+     * @expectedExceptionMessage Gift Messages is not applicable for virtual products
+     */
+    public function testSaveMessageIsVirtual()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderRepository->save($order->getEntityId(), $this->message);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/empty_order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_order 1
+     * @expectedException \Magento\Framework\Exception\InputException
+     * @expectedExceptionMessage Gift Messages is not applicable for empty order
+     */
+    public function testSaveMessageIsEmpty()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderRepository->save($order->getEntityId(), $this->message);
+    }
+
+    /**
+     * @magentoDataFixture Magento/GiftMessage/_files/empty_order.php
+     * @magentoConfigFixture default_store sales/gift_options/allow_order 1
+     * @expectedException  \Magento\Framework\Exception\NoSuchEntityException
+     * @expectedExceptionMessage There is no order with provided id
+     */
+    public function testSaveMessageNoProvidedItemId()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+        /** @var \Magento\GiftMessage\Api\Data\MessageInterface $message */
+        $this->giftMessageOrderRepository->save($order->getEntityId() * 10, $this->message);
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/GiftMessage/_files/empty_order.php b/dev/tests/integration/testsuite/Magento/GiftMessage/_files/empty_order.php
new file mode 100644
index 0000000000000000000000000000000000000000..40a28f6d051f7f6b53e491ceaa44a195d15d56f4
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/GiftMessage/_files/empty_order.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+require __DIR__ . '/../../../Magento/Sales/_files/order.php';
+/** @var \Magento\Sales\Model\Order $order */
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$order = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+$order->setItems([])->setTotalItemCount(0)->save();
diff --git a/dev/tests/integration/testsuite/Magento/GiftMessage/_files/order_with_message.php b/dev/tests/integration/testsuite/Magento/GiftMessage/_files/order_with_message.php
new file mode 100644
index 0000000000000000000000000000000000000000..b99eddea282846771d77bfc51cf101789e191b52
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/GiftMessage/_files/order_with_message.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+require __DIR__ . '/../../../Magento/Sales/_files/order.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+/** @var \Magento\GiftMessage\Model\Message $message */
+$message = $objectManager->create('Magento\GiftMessage\Model\Message');
+$message->setSender('Romeo');
+$message->setRecipient('Mercutio');
+$message->setMessage('I thought all for the best.');
+$message->save();
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+
+/** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
+$orderItem = $order->getItems();
+$orderItem = array_shift($orderItem);
+$orderItem->setGiftMessageId($message->getId());
+
+$order->setItems([$orderItem])->setGiftMessageId($message->getId());
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/GiftMessage/_files/virtual_order.php b/dev/tests/integration/testsuite/Magento/GiftMessage/_files/virtual_order.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e33aba1663cb9c01beb1cbf0d53c0cd61e3ca8b
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/GiftMessage/_files/virtual_order.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+require __DIR__ . '/../../../Magento/Sales/_files/order.php';
+/** @var \Magento\Sales\Model\Order $order */
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$order = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
+$order->setIsVirtual(1)->save();
diff --git a/dev/tests/integration/testsuite/Magento/Multishipping/Controller/CheckoutTest.php b/dev/tests/integration/testsuite/Magento/Multishipping/Controller/CheckoutTest.php
index c70148b0ffcdf0a06f2076da845c4d17349ac51f..f4022f124511e6ff7e953af51754645b55399e28 100644
--- a/dev/tests/integration/testsuite/Magento/Multishipping/Controller/CheckoutTest.php
+++ b/dev/tests/integration/testsuite/Magento/Multishipping/Controller/CheckoutTest.php
@@ -5,51 +5,65 @@
  */
 namespace Magento\Multishipping\Controller;
 
-use Magento\TestFramework\Helper\Bootstrap;
+use \Magento\Multishipping\Model\Checkout\Type\Multishipping\State;
 
 /**
  * Test class for \Magento\Multishipping\Controller\Checkout
  *
  * @magentoAppArea frontend
+ * @magentoDataFixture Magento/Sales/_files/quote.php
+ * @magentoDataFixture Magento/Customer/_files/customer.php
  */
 class CheckoutTest extends \Magento\TestFramework\TestCase\AbstractController
 {
     /**
-     * Covers app/code/Magento/Checkout/Block/Multishipping/Payment/Info.php
-     * and app/code/Magento/Checkout/Block/Multishipping/Overview.php
+     * @var \Magento\Quote\Model\Quote
+     */
+    protected $quote;
+
+    /**
+     * @var \Magento\Checkout\Model\Session
+     */
+    protected $checkoutSession;
+
+    /**
+     * @inheritdoc
+     */
+    public function setUp()
+    {
+        parent::setUp();
+        $this->quote = $this->_objectManager->create('Magento\Quote\Model\Quote');
+        $this->checkoutSession = $this->_objectManager->get('Magento\Checkout\Model\Session');
+
+        $this->quote->load('test01', 'reserved_order_id');
+        $this->checkoutSession->setQuoteId($this->quote->getId());
+        $this->checkoutSession->setCartWasUpdated(false);
+    }
+
+    /**
+     * Covers \Magento\Multishipping\Block\Checkout\Payment\Info and \Magento\Multishipping\Block\Checkout\Overview
      *
-     * @magentoDataFixture Magento/Sales/_files/quote.php
-     * @magentoDataFixture Magento/Customer/_files/customer.php
      * @magentoConfigFixture current_store multishipping/options/checkout_multiple 1
      */
     public function testOverviewAction()
     {
-        /** @var $quote \Magento\Quote\Model\Quote */
-        $quote = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Quote\Model\Quote');
-        $quote->load('test01', 'reserved_order_id');
-
-        \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Checkout\Model\Session')
-            ->setQuoteId($quote->getId());
-
+        /** @var \Magento\Framework\Data\Form\FormKey $formKey */
         $formKey = $this->_objectManager->get('Magento\Framework\Data\Form\FormKey');
         $logger = $this->getMock('Psr\Log\LoggerInterface', [], [], '', false);
-
-        /** @var $session \Magento\Customer\Model\Session */
-        $session = Bootstrap::getObjectManager()->create('Magento\Customer\Model\Session', [$logger]);
-
-        /** @var \Magento\Customer\Api\AccountManagementInterface  $service */
-        $service = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Customer\Api\AccountManagementInterface');
+        /** @var \Magento\Customer\Api\AccountManagementInterface $service */
+        $service = $this->_objectManager->create('Magento\Customer\Api\AccountManagementInterface');
         $customer = $service->authenticate('customer@example.com', 'password');
-
-        $session->setCustomerDataAsLoggedIn($customer);
+        /** @var \Magento\Customer\Model\Session $customerSession */
+        $customerSession = $this->_objectManager->create('Magento\Customer\Model\Session', [$logger]);
+        $customerSession->setCustomerDataAsLoggedIn($customer);
+        $this->checkoutSession->setCheckoutState(State::STEP_BILLING);
         $this->getRequest()->setPostValue('payment', ['method' => 'checkmo']);
         $this->dispatch('multishipping/checkout/overview');
         $html = $this->getResponse()->getBody();
         $this->assertContains('<div class="box box-billing-method">', $html);
         $this->assertContains('<div class="box box-shipping-method">', $html);
         $this->assertContains(
-            '<dt class="title">' . $quote->getPayment()->getMethodInstance()->getTitle() . '</dt>',
+            '<dt class="title">' . $this->quote->getPayment()->getMethodInstance()->getTitle() . '</dt>',
             $html
         );
         $this->assertContains('<span class="price">$10.00</span>', $html);
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php
index b02773ae51c9e7eeb348ce8e71ee2c137729d065..f7ebc6d0764a60aa3dd7170843df72acdd97fded 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php
@@ -68,13 +68,9 @@ class QueueTest extends \PHPUnit_Framework_TestCase
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
         $transport = $this->getMock('\Magento\Framework\Mail\TransportInterface');
-        $transport->expects(
-            $this->any()
-        )->method(
-            'sendMessage'
-        )->will(
-            $this->throwException(new \Magento\Framework\Mail\Exception($errorMsg, 99))
-        );
+        $transport->expects($this->any())
+            ->method('sendMessage')
+            ->willThrowException(new \Magento\Framework\Exception\MailException(__($errorMsg)));
 
         $builder = $this->getMock(
             '\Magento\Newsletter\Model\Queue\TransportBuilder',
@@ -100,7 +96,6 @@ class QueueTest extends \PHPUnit_Framework_TestCase
 
         $problem->load($queue->getId(), 'queue_id');
         $this->assertNotEmpty($problem->getId());
-        $this->assertEquals(99, $problem->getProblemErrorCode());
         $this->assertEquals($errorMsg, $problem->getProblemErrorText());
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php
old mode 100644
new mode 100755
index babc5f9d0a5eca28fcf522304d46bb946759ac40..c0dd230f922cd0e9d63111f17d5a3a1fafc92f43
--- a/dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php
@@ -121,7 +121,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ],
             [
                 'period'    => 'month',
-                'table'     => 'report_viewed_product_aggregated_yearly',
+                'table'     => 'report_viewed_product_aggregated_monthly',
                 'date_from' => null,
                 'date_to'   => $dateNow,
             ],
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php
index d53554db1622aaf000606fd11378630584e89d7a..ab65efa40a0ec16a5e87507b90e0cde8139b8377 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php
@@ -83,7 +83,7 @@ class CreateTest extends \PHPUnit_Framework_TestCase
 
         /** @var $order \Magento\Sales\Model\Order */
         $order = $objectManager->create('Magento\Sales\Model\Order');
-        $order->loadByIncrementId('100000001');
+        $order->loadByIncrementId('100000002');
 
         $this->assertNull($order->getShippingAddress()->getSameAsBilling());
 
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_shipping_address_different_to_billing.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_shipping_address_different_to_billing.php
index d46172f603d9538db67d078db203080b47664b6a..9a4f95e5fbf0199ea442e40f1c18152d08cf7d82 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/order_shipping_address_different_to_billing.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_shipping_address_different_to_billing.php
@@ -30,13 +30,21 @@ $shippingAddress->setId(null)->setPostcode('2')->setAddressType('shipping');
 $order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order');
 $order->loadByIncrementId('100000001');
 $clonedOrder = clone $order;
-$order->setIncrementId('100000002');
-$order->save();
 
 /** @var $payment \Magento\Sales\Model\Order\Payment */
 $payment = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order\Payment');
 $payment->setMethod('checkmo');
+$clonedOrder->setIncrementId('100000002')
+    ->setId(null)
+    ->setBillingAddress($billingAddress)
+    ->setShippingAddress($shippingAddress)
+    ->setPayment($payment);
+$clonedOrder->save();
 
-$order = $clonedOrder;
-$order->setId(null)->setBillingAddress($billingAddress)->setShippingAddress($shippingAddress)->setPayment($payment);
-$order->save();
+$secondClonedOrder = clone $order;
+$secondClonedOrder->setIncrementId('100000003')
+    ->setId(null)
+    ->setBillingAddress($billingAddress->setId(null))
+    ->setShippingAddress($shippingAddress->setId(null))
+    ->setPayment($payment->setId(null));
+$secondClonedOrder->save();
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php
index 21c973d53e95c434957940aa38f77167fc4bc996..430cced2f1a2e629d5ff66d25788609a6f851a9b 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php
@@ -25,7 +25,7 @@ class CacheFilesTest extends \PHPUnit_Framework_TestCase
         );
         try {
             $reader->read($area);
-        } catch (\Magento\Framework\Exception $exception) {
+        } catch (\Magento\Framework\Exception\LocalizedException $exception) {
             $this->fail($exception->getMessage());
         }
     }
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php
index 9d0ffa7695a494882eccb442e85078ede892c56e..d224cd6d346e32a7c981b7c1ff1cb0c13fecd732 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php
@@ -44,8 +44,6 @@ class LayoutFilesTest extends \PHPUnit_Framework_TestCase
                     continue;
                 }
                 $this->_argInterpreter->evaluate($argumentData);
-            } catch (\Magento\Framework\Data\Argument\MissingOptionalValueException $e) {
-                // Argument value is missing in the testing environment, but it's optional, so no big deal
             } catch (\Exception $e) {
                 $this->fail($e->getMessage());
             }
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php
index 9f00b3cf290123a90ed81382480e1f9c0daab8ed..b942425f6fd48fe83537eeb5c277fe402aa2135f 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php
@@ -47,7 +47,7 @@ class SystemConfigFilesTest extends \PHPUnit_Framework_TestCase
                 'Magento\Config\Model\Config\Structure\Reader',
                 ['moduleReader' => $configMock, 'runtimeValidation' => true]
             );
-        } catch (\Magento\Framework\Exception $exp) {
+        } catch (\Magento\Framework\Exception\LocalizedException $exp) {
             $this->fail($exp->getMessage());
         }
     }
diff --git a/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php b/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php
index 97d6e3f59cc0809b367e63f2f34eeb8565439c61..c21e6dbc7052c7333d71924fb628f1eb450b686e 100644
--- a/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php
+++ b/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\TestFixture\Controller\Adminhtml;
 
-use Magento\Framework\App\Action;
 use Magento\Framework\App\RequestInterface;
 use Magento\Framework\App\ResponseInterface;
 
@@ -19,7 +18,7 @@ class Noroute implements \Magento\Framework\App\ActionInterface
      *
      * @param RequestInterface $request
      * @return ResponseInterface
-     * @throws Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -35,4 +34,13 @@ class Noroute implements \Magento\Framework\App\ActionInterface
     public function getResponse()
     {
     }
+
+    /**
+     * Get default result object
+     *
+     * @return void
+     */
+    public function getDefaultResult()
+    {
+    }
 }
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php
index 0fa5bfb6712bbf3d47504100f45b355cc980f4da..f7de99380e8423f158736487530959823e2fb917 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php
@@ -95,6 +95,32 @@ class UserTest extends \Magento\Backend\Utility\Controller
         $this->assertRedirect($this->stringContains('backend/admin/user/index/'));
     }
 
+    /**
+     * @magentoDbIsolation enabled
+     * @magentoDataFixture Magento/User/_files/user_with_role.php
+     */
+    public function testSaveActionDuplicateUser()
+    {
+        $this->getRequest()->setPostValue(
+            [
+                'username' => 'adminUser',
+                'email' => 'adminUser@example.com',
+                'firstname' => 'John',
+                'lastname' => 'Doe',
+                'password' => \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD,
+                'password_confirmation' => \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD,
+                \Magento\User\Block\User\Edit\Tab\Main::CURRENT_USER_PASSWORD_FIELD => Bootstrap::ADMIN_PASSWORD,
+            ]
+        );
+        $this->dispatch('backend/admin/user/save/active_tab/main_section');
+        $this->assertSessionMessages(
+            $this->equalTo(['A user with the same user name or email already exists.']),
+            \Magento\Framework\Message\MessageInterface::TYPE_ERROR
+        );
+        $this->assertRedirect($this->stringContains('backend/admin/user/edit/'));
+        $this->assertRedirect($this->matchesRegularExpression('/^((?!active_tab).)*$/'));
+    }
+
     /**
      * @magentoDbIsolation enabled
      * @dataProvider resetPasswordDataProvider
diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Helper/RssTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Helper/RssTest.php
deleted file mode 100644
index 72264a8ccf60d40c0a06515cdfc02b31e26e3297..0000000000000000000000000000000000000000
--- a/dev/tests/integration/testsuite/Magento/Wishlist/Helper/RssTest.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-// @codingStandardsIgnoreFile
-
-namespace Magento\Wishlist\Helper;
-
-class RssTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Customer\Model\Session
-     */
-    protected $_customerSession;
-
-    /**
-     * Core data
-     *
-     * @var \Magento\Framework\Url\EncoderInterface
-     */
-    protected $urlEncoder;
-
-    /**
-     * @var \Magento\Framework\ObjectManagerInterface
-     */
-    protected $_objectManager;
-
-    /**
-     * @var \Magento\Framework\App\Helper\Context
-     */
-    protected $_contextHelper;
-
-    /**
-     * @var \Magento\Wishlist\Helper\Rss
-     */
-    protected $_wishlistHelper;
-
-    /**
-     * @var int
-     */
-    protected $_fixtureCustomerId;
-
-    protected function setUp()
-    {
-        $this->_fixtureCustomerId = 1;
-
-        $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $this->_customerSession = $this->_objectManager->create('Magento\Customer\Model\Session');
-        $this->urlEncoder = $this->_objectManager->create('Magento\Framework\Url\EncoderInterface');
-
-        $this->_contextHelper = $this->_objectManager->create('Magento\Framework\App\Helper\Context');
-        $request = $this->_contextHelper->getRequest();
-        $request->setParam('data', $this->urlEncoder->encode($this->_fixtureCustomerId));
-
-        $this->_wishlistHelper = $this->_objectManager->create('Magento\Wishlist\Helper\Rss',
-            [
-                'context' => $this->_contextHelper,
-                'customerSession' => $this->_customerSession
-            ]
-        );
-
-        $this->_customerSession->loginById($this->_fixtureCustomerId);
-    }
-
-    /**
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoAppArea frontend
-     */
-    public function testGetCustomer()
-    {
-        $expectedCustomer = $this->_customerSession->getCustomerDataObject();
-        $actualCustomer = $this->_wishlistHelper->getCustomer();
-        $this->assertInstanceOf('Magento\Customer\Api\Data\CustomerInterface', $actualCustomer);
-        $this->assertEquals((int)$expectedCustomer->getId(), (int)$actualCustomer->getId());
-        $this->assertEquals((int)$expectedCustomer->getWebsiteId(), (int)$actualCustomer->getWebsiteId());
-        $this->assertEquals((int)$expectedCustomer->getStoreId(), (int)$actualCustomer->getStoreId());
-        $this->assertEquals((int)$expectedCustomer->getGroupId(), (int)$actualCustomer->getGroupId());
-        $this->assertEquals($expectedCustomer->getCustomAttributes(), $actualCustomer->getCustomAttributes());
-        $this->assertEquals($expectedCustomer->getFirstname(), $actualCustomer->getFirstname());
-        $this->assertEquals($expectedCustomer->getLastname(), $actualCustomer->getLastname());
-        $this->assertEquals($expectedCustomer->getEmail(), $actualCustomer->getEmail());
-        $this->assertEquals($expectedCustomer->getEmail(), $actualCustomer->getEmail());
-        $this->assertEquals((int)$expectedCustomer->getDefaultBilling(), (int)$actualCustomer->getDefaultBilling());
-        $this->assertEquals((int)$expectedCustomer->getDefaultShipping(), (int)$actualCustomer->getDefaultShipping());
-    }
-
-    /**
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Wishlist/_files/wishlist_with_product_qty_increments.php
-     * @magentoAppArea frontend
-     */
-    public function testGetWishlistByParam()
-    {
-        /** @var \Magento\Wishlist\Model\Wishlist $wishlist */
-        $wishlist = $this->_objectManager->create('Magento\Wishlist\Model\Wishlist')
-            ->loadByCustomerId($this->_fixtureCustomerId);
-        $wishlist->load($wishlist->getId());
-
-        /** @var \Magento\Framework\App\Request\Http $request */
-        $request = $this->_contextHelper->getRequest();
-        $request->setParam('wishlist_id', $wishlist->getId());
-
-        $this->assertEquals($wishlist, $this->_wishlistHelper->getWishlist());
-    }
-
-    /**
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Wishlist/_files/wishlist_with_product_qty_increments.php
-     * @magentoAppArea frontend
-     */
-    public function testGetWishlistByCustomerId()
-    {
-        /** @var \Magento\Wishlist\Model\Wishlist $wishlist */
-        $wishlist = $this->_objectManager->create('Magento\Wishlist\Model\Wishlist')
-            ->loadByCustomerId($this->_fixtureCustomerId);
-
-        /** @var \Magento\Framework\App\Request\Http $request */
-        $request = $this->_contextHelper->getRequest();
-        $request->setParam('wishlist_id', '');
-
-        $this->assertEquals($wishlist, $this->_wishlistHelper->getWishlist());
-    }
-}
diff --git a/dev/tests/js/.gitignore b/dev/tests/js/JsTestDriver/.gitignore
similarity index 100%
rename from dev/tests/js/.gitignore
rename to dev/tests/js/JsTestDriver/.gitignore
diff --git a/dev/tests/js/framework/qunit/qunit-1.14.0.css b/dev/tests/js/JsTestDriver/framework/qunit/qunit-1.14.0.css
similarity index 100%
rename from dev/tests/js/framework/qunit/qunit-1.14.0.css
rename to dev/tests/js/JsTestDriver/framework/qunit/qunit-1.14.0.css
diff --git a/dev/tests/js/framework/qunit/qunit-1.14.0.js b/dev/tests/js/JsTestDriver/framework/qunit/qunit-1.14.0.js
similarity index 100%
rename from dev/tests/js/framework/qunit/qunit-1.14.0.js
rename to dev/tests/js/JsTestDriver/framework/qunit/qunit-1.14.0.js
diff --git a/dev/tests/js/framework/requirejs-util.js b/dev/tests/js/JsTestDriver/framework/requirejs-util.js
similarity index 100%
rename from dev/tests/js/framework/requirejs-util.js
rename to dev/tests/js/JsTestDriver/framework/requirejs-util.js
diff --git a/dev/tests/js/framework/stub.js b/dev/tests/js/JsTestDriver/framework/stub.js
similarity index 100%
rename from dev/tests/js/framework/stub.js
rename to dev/tests/js/JsTestDriver/framework/stub.js
diff --git a/dev/tests/js/jsTestDriver.php.dist b/dev/tests/js/JsTestDriver/jsTestDriver.php.dist
similarity index 92%
rename from dev/tests/js/jsTestDriver.php.dist
rename to dev/tests/js/JsTestDriver/jsTestDriver.php.dist
index 49d93ba262e50d6a6c5916bbf82ad731d659994d..e3f8985644d0bcfc909b299627cf885f045d6099 100644
--- a/dev/tests/js/jsTestDriver.php.dist
+++ b/dev/tests/js/JsTestDriver/jsTestDriver.php.dist
@@ -11,7 +11,7 @@
 return array(
     'server' => 'http://localhost:9876',
     'load' => array(
-        '/dev/tests/js/framework',
+        '/dev/tests/js/JsTestDriver/framework',
         '/lib/web/mage/webapi.js',
         '/lib/web/mage/validation/validation.js',
         '/app/code/Magento/DesignEditor/view/adminhtml/web/js/infinitescroll.js',
@@ -33,6 +33,6 @@ return array(
         '/lib/web/mage/gallery-fullscreen.js',
         '/lib/web/mage/zoom.js',
     ),
-    'test' => array('/dev/tests/js/testsuite'),
+    'test' => array('/dev/tests/js/JsTestDriver/testsuite'),
     'JsTestDriver' => '{{path_to_jstestdriver_jar}}'
 );
diff --git a/dev/tests/js/jsTestDriverOrder.php b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
similarity index 92%
rename from dev/tests/js/jsTestDriverOrder.php
rename to dev/tests/js/JsTestDriver/jsTestDriverOrder.php
index 763e221c28cde73759221a3980d0e34758b5e303..b12aef10f57a3c4eea9993b1fa2092e7c5848e56 100644
--- a/dev/tests/js/jsTestDriverOrder.php
+++ b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
@@ -14,7 +14,7 @@ return [
     '/lib/web/underscore.js',
     '/lib/web/mage/template.js',
     '/lib/web/jquery/jquery-ui-1.9.2.js',
-    '/dev/tests/js/framework/requirejs-util.js',
+    '/dev/tests/js/JsTestDriver/framework/requirejs-util.js',
     '/lib/web/jquery/jquery.cookie.js',
     '/lib/web/mage/apply/main.js',
     '/lib/web/mage/mage.js',
diff --git a/dev/tests/js/run_js_tests.php b/dev/tests/js/JsTestDriver/run_js_tests.php
similarity index 98%
rename from dev/tests/js/run_js_tests.php
rename to dev/tests/js/JsTestDriver/run_js_tests.php
index 3bafc3318adeb11d0e8a17e33ae776c124901861..846b4681e197d1d524d1eb21a5a03add3b909b13 100644
--- a/dev/tests/js/run_js_tests.php
+++ b/dev/tests/js/JsTestDriver/run_js_tests.php
@@ -6,8 +6,8 @@
  * See COPYING.txt for license details.
  */
 
-define('RELATIVE_APP_ROOT', '../../..');
-require __DIR__ . '/../../../app/autoload.php';
+define('RELATIVE_APP_ROOT', '../../../..');
+require __DIR__ . '/../../../../app/autoload.php';
 
 $userConfig = normalize('jsTestDriver.php');
 $defaultConfig = normalize('jsTestDriver.php.dist');
diff --git a/dev/tests/js/testsuite/lib/ko/datepicker/datepicker.js b/dev/tests/js/JsTestDriver/testsuite/lib/ko/datepicker/datepicker.js
similarity index 100%
rename from dev/tests/js/testsuite/lib/ko/datepicker/datepicker.js
rename to dev/tests/js/JsTestDriver/testsuite/lib/ko/datepicker/datepicker.js
diff --git a/dev/tests/js/testsuite/lib/ko/datepicker/index.html b/dev/tests/js/JsTestDriver/testsuite/lib/ko/datepicker/index.html
similarity index 100%
rename from dev/tests/js/testsuite/lib/ko/datepicker/index.html
rename to dev/tests/js/JsTestDriver/testsuite/lib/ko/datepicker/index.html
diff --git a/dev/tests/js/testsuite/lib/storage/index.html b/dev/tests/js/JsTestDriver/testsuite/lib/storage/index.html
similarity index 100%
rename from dev/tests/js/testsuite/lib/storage/index.html
rename to dev/tests/js/JsTestDriver/testsuite/lib/storage/index.html
diff --git a/dev/tests/js/testsuite/lib/storage/test-storage.js b/dev/tests/js/JsTestDriver/testsuite/lib/storage/test-storage.js
similarity index 100%
rename from dev/tests/js/testsuite/lib/storage/test-storage.js
rename to dev/tests/js/JsTestDriver/testsuite/lib/storage/test-storage.js
diff --git a/dev/tests/js/testsuite/mage/_demo/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/_demo/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/_demo/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/_demo/index.html
diff --git a/dev/tests/js/testsuite/mage/_demo/test.js b/dev/tests/js/JsTestDriver/testsuite/mage/_demo/test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/_demo/test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/_demo/test.js
diff --git a/dev/tests/js/testsuite/mage/accordion/accordion.js b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/accordion/accordion.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js
diff --git a/dev/tests/js/testsuite/mage/accordion/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/accordion/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html
diff --git a/dev/tests/js/testsuite/mage/button/button-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/button/button-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/button/button-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/button/button-test.js
diff --git a/dev/tests/js/testsuite/mage/calendar/calendar-qunit.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/calendar/calendar-qunit.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js
diff --git a/dev/tests/js/testsuite/mage/calendar/calendar-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/calendar/calendar-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js
diff --git a/dev/tests/js/testsuite/mage/calendar/calendar.html b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/calendar/calendar.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html
diff --git a/dev/tests/js/testsuite/mage/calendar/date-range-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/calendar/date-range-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js
diff --git a/dev/tests/js/testsuite/mage/collapsible/content.html b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/collapsible/content.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html
diff --git a/dev/tests/js/testsuite/mage/collapsible/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/collapsible/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html
diff --git a/dev/tests/js/testsuite/mage/collapsible/test-collapsible.js b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/collapsible/test-collapsible.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js
diff --git a/dev/tests/js/testsuite/mage/decorate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/decorate-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js
diff --git a/dev/tests/js/testsuite/mage/design_editor/adminhtml/js/infinitescroll.js b/dev/tests/js/JsTestDriver/testsuite/mage/design_editor/adminhtml/js/infinitescroll.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/design_editor/adminhtml/js/infinitescroll.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/design_editor/adminhtml/js/infinitescroll.js
diff --git a/dev/tests/js/testsuite/mage/dropdown/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/dropdown/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html
diff --git a/dev/tests/js/testsuite/mage/dropdown/test-dropdown.js b/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/dropdown/test-dropdown.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js
diff --git a/dev/tests/js/testsuite/mage/edit_trigger/edit-trigger-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/edit_trigger/edit-trigger-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/edit_trigger/edit-trigger-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/edit_trigger/edit-trigger-test.js
diff --git a/dev/tests/js/testsuite/mage/form/form-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/form/form-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js
diff --git a/dev/tests/js/testsuite/mage/gallery/gallery-fullscreen-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/gallery/gallery-fullscreen-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/gallery/gallery-fullscreen-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/gallery/gallery-fullscreen-test.js
diff --git a/dev/tests/js/testsuite/mage/gallery/gallery-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/gallery/gallery-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/gallery/gallery-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/gallery/gallery-test.js
diff --git a/dev/tests/js/testsuite/mage/list/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/list/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/list/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/list/index.html
diff --git a/dev/tests/js/testsuite/mage/list/jquery-list-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/list/jquery-list-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/list/jquery-list-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/list/jquery-list-test.js
diff --git a/dev/tests/js/testsuite/mage/loader/jquery-loader-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/loader/jquery-loader-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js
diff --git a/dev/tests/js/testsuite/mage/loader/loader-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/loader/loader-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js
diff --git a/dev/tests/js/testsuite/mage/loader/loader.html b/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/loader/loader.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html
diff --git a/dev/tests/js/testsuite/mage/mage-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/mage-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/mage-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/mage-test.js
diff --git a/dev/tests/js/testsuite/mage/menu/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/menu/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html
diff --git a/dev/tests/js/testsuite/mage/menu/test-menu.js b/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/menu/test-menu.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js
diff --git a/dev/tests/js/testsuite/mage/requirejs/plugin/id-normalizer-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/requirejs/plugin/id-normalizer-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
diff --git a/dev/tests/js/testsuite/mage/search/regular-search-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/search/regular-search-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/search/regular-search-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/search/regular-search-test.js
diff --git a/dev/tests/js/testsuite/mage/suggest/suggest-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/suggest/suggest-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js
diff --git a/dev/tests/js/testsuite/mage/suggest/tree-suggest-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/suggest/tree-suggest-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js
diff --git a/dev/tests/js/testsuite/mage/tabs/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/tabs/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html
diff --git a/dev/tests/js/testsuite/mage/tabs/tabs-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js
similarity index 95%
rename from dev/tests/js/testsuite/mage/tabs/tabs-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js
index d1d7e8fa130ccb7498cc9e977c1766c96f5ee270..b2b92381e0bb7a67668662c1fa1ba6312e19fa01 100644
--- a/dev/tests/js/testsuite/mage/tabs/tabs-test.js
+++ b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js
@@ -128,13 +128,13 @@ TabsTest.prototype.testOnContentChange = function() {
         tabs = jQuery('#tabs').tabs();
 
     tabs.data("tabs")._onContentChange(eventMock);
-    assertTrue(jQuery('#tab1').hasClass('changed'));
+    assertTrue(jQuery('#tab1').hasClass('_changed'));
 };
 
 TabsTest.prototype.testOnInvalid = function() {
     /*:DOC += <div id="tabs"><ul>
          <li>
-             <a href="www.site.com" id="tab1">Tab 1<span class="error">&nbsp;</span></a>
+             <a href="www.site.com" id="tab1">Tab 1<span class="_error">&nbsp;</span></a>
              <div id="tab1_content"></div>
          </li>
      </ul></div>
@@ -145,13 +145,13 @@ TabsTest.prototype.testOnInvalid = function() {
             }
         },
         tabs = jQuery('#tabs').tabs(),
-        errorIcon = jQuery('#tab1').find('.error');
+        errorIcon = jQuery('#tab1').find('._error');
 
     errorIcon.hide();
     assertTrue(errorIcon.is(':hidden'));
 
     tabs.data("tabs")._onInvalid(eventMock);
-    assertTrue(jQuery('#tab1').hasClass('error'));
+    assertTrue(jQuery('#tab1').hasClass('_error'));
     assertTrue(errorIcon.is(':visible'));
 };
 
@@ -174,10 +174,10 @@ TabsTest.prototype.testOnFocus = function() {
         },
         tabs = jQuery('#tabs').tabs();
 
-    assertNotEquals(tabs.tabs('option', 'active'), eventMock.data.index);
+    assertNotEquals(tabs.tabs('option', '_active'), eventMock.data.index);
 
     tabs.data("tabs")._onFocus(eventMock);
-    assertEquals(tabs.tabs('option', 'active'), eventMock.data.index);
+    assertEquals(tabs.tabs('option', '_active'), eventMock.data.index);
 };
 
 TabsTest.prototype.testOnBeforeSubmit = function() {
diff --git a/dev/tests/js/testsuite/mage/tabs/tabs.js b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/tabs/tabs.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js
diff --git a/dev/tests/js/testsuite/mage/translate/translate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/translate/translate-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js
diff --git a/dev/tests/js/testsuite/mage/translate_inline/translate-inline-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/translate_inline/translate-inline-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js
diff --git a/dev/tests/js/testsuite/mage/translate_inline_vde/translate-inline-vde-dialog-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline_vde/translate-inline-vde-dialog-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/translate_inline_vde/translate-inline-vde-dialog-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/translate_inline_vde/translate-inline-vde-dialog-test.js
diff --git a/dev/tests/js/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js
diff --git a/dev/tests/js/testsuite/mage/validation/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html
similarity index 100%
rename from dev/tests/js/testsuite/mage/validation/index.html
rename to dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html
diff --git a/dev/tests/js/testsuite/mage/validation/test-validation.js b/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/validation/test-validation.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js
diff --git a/dev/tests/js/testsuite/mage/webapi-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/webapi-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/webapi-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/webapi-test.js
diff --git a/dev/tests/js/testsuite/mage/zoom/zoom-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/zoom/zoom-test.js
similarity index 100%
rename from dev/tests/js/testsuite/mage/zoom/zoom-test.js
rename to dev/tests/js/JsTestDriver/testsuite/mage/zoom/zoom-test.js
diff --git a/dev/tests/js/framework/spec_runner.js b/dev/tests/js/framework/spec_runner.js
deleted file mode 100644
index 733cad2f7c4da5516ad6abd9178787671a5d23e1..0000000000000000000000000000000000000000
--- a/dev/tests/js/framework/spec_runner.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/**
- * Creates jasmine configuration object
- *
- * @param  {String} type - type of tests
- * @param  {String} dir - area dir
- * @param  {Number} port - port to run on
- * @return {Object}
- */
-function buildConfig(type, dir, port) {
-    'use strict';
-
-    var isLib           = dir === 'lib',
-        requireConfigs  = [
-            '<%= path.spec %>/require.config.js',
-            '<%= path.spec %>/' + type + '/config/global.js'
-        ],
-        specsRoot       = '<%= path.spec %>/' + type,
-        specs           =  specsRoot + (isLib ? '/lib/**/*.js' : '/**/' + dir + '/**/*.js');
-    
-    if (!isLib) {
-        requireConfigs.push('<%= path.spec %>/' + type + '/config/' + dir + '.js');
-    }
-
-    return {
-        src: '<%= path.spec %>/shim.js',
-        options: {
-            host: 'http://localhost:' + port,
-            specs: specs,
-            templateOptions: {
-                requireConfigFile: requireConfigs
-            }
-        }
-    };
-}
-
-module.exports = function (grunt) {
-    'use strict';
-
-    var connect     = require('connect'),
-        logger      = require('morgan'),
-        serveStatic = require('serve-static'),
-        fs          = require('fs'),
-        root;
-
-    root = __dirname
-        .replace('/dev/tests/js/framework', '')
-        .replace('\\dev\\tests\\js\\framework', '');
-
-    grunt.registerMultiTask('specRunner', function () {
-        var app = connect(),
-            options,
-            area,
-            theme,
-            share,
-            middlewares;
-
-        options = this.options({
-            port: 3000,
-            theme: null,
-            areaDir: null,
-            shareDir: null,
-            enableLogs: false,
-            middleware: null
-        });
-
-        area    = options.areaDir;
-        share   = options.shareDir;
-        theme   = options.theme;
-
-        if (options.enableLogs) {
-            app.use(logger('dev'));
-        }
-
-        app.use(function (req, res, next) {
-            var url     = req.url,
-                match   = url.match(/^\/([A-Z][^\/]+)_(\w+)\/(.+)$/),
-                vendor,
-                module,
-                path,
-                getModuleUrl,
-                getThemeUrl;
-
-            /**
-             * Returns path to theme root folder
-             *
-             * @return {String}
-             */
-            function themeRoot() {
-                return [
-                    '/app/design',
-                    area,
-                    vendor,
-                    theme
-                ].join('/');
-            }
-
-            /**
-             * Based on 'thematic' parameter, returnes either path to theme's lib,
-             *     or 'lib/web'.
-             *
-             * @param  {Boolean} thematic
-             * @return {String}
-             */
-            function lib(thematic) {
-                return thematic ? themeRoot() + '/web' : '/lib/web';
-            }
-
-            if (match !== null) {
-                vendor  = match[1];
-                module  = match[2];
-                path    = match[3];
-
-                /**
-                 * Assembles modular path. If 'shared' flag provided and is truthy,
-                 *     will use share dir instead of area one.
-                 *
-                 * @param  {Boolean} shared
-                 * @return {String}
-                 */
-                getModuleUrl = function (shared) {
-                    return [
-                        '/app/code',
-                        vendor,
-                        module,
-                        'view',
-                        !!shared ? share : area,
-                        'web',
-                        path
-                    ].join('/');
-                };
-
-                /**
-                 * Assembles theme modular path.
-                 *
-                 * @return {String}
-                 */
-                getThemeUrl = function () {
-                    return [
-                        themeRoot(),
-                        vendor + '_' + module,
-                        'web',
-                        path
-                    ].join('/');
-                };
-
-                url = exists(url = getThemeUrl()) ?
-                    url :
-                    exists(url = getModuleUrl()) ?
-                        url : getModuleUrl(true);
-
-            } else if (canModify(url)) {
-                url = (exists(url = lib(true)) ? url : lib()) + req.url;
-            }
-
-            req.url = url;
-
-            next();
-        });
-
-        if (options.middleware && typeof options.middleware === 'function') {
-            middlewares = options.middleware(connect, options);
-
-            if (Array.isArray(middlewares)) {
-                middlewares.forEach(function (middleware) {
-                    app.use(middleware);
-                });
-            }
-        }
-
-        app.use(serveStatic(root));
-
-        app.listen(options.port);
-    });
-
-    /**
-     * Defines if passed file path exists
-     *
-     * @param  {String} path
-     * @return {Boolean}
-     */
-    function exists(path) {
-        return fs.existsSync(root + path);
-    }
-
-    /**
-     * Restricts url's which lead to '/_SpecRunner.html', '/dev/tests' or '.grunt' folders from being modified
-     *
-     * @param  {String} url
-     * @return {Boolean}
-     */
-    function canModify(url) {
-        return url.match(/^\/(\.grunt)|(dev\/tests)|(dev\\tests)|(_SpecRunner\.html)/) === null;
-    }
-
-    return { configure: buildConfig };
-};
diff --git a/dev/tests/js/spec/assets/apply/components/fn.js b/dev/tests/js/jasmine/assets/apply/components/fn.js
similarity index 100%
rename from dev/tests/js/spec/assets/apply/components/fn.js
rename to dev/tests/js/jasmine/assets/apply/components/fn.js
diff --git a/dev/tests/js/spec/assets/apply/config.json b/dev/tests/js/jasmine/assets/apply/config.json
similarity index 100%
rename from dev/tests/js/spec/assets/apply/config.json
rename to dev/tests/js/jasmine/assets/apply/config.json
diff --git a/dev/tests/js/spec/assets/apply/index.js b/dev/tests/js/jasmine/assets/apply/index.js
similarity index 94%
rename from dev/tests/js/spec/assets/apply/index.js
rename to dev/tests/js/jasmine/assets/apply/index.js
index 31268a6aa773230559203076bff7998a1d91c1ea..7fd9b379e1f24ef6329d9ed5c21ef02c3654c7f5 100644
--- a/dev/tests/js/spec/assets/apply/index.js
+++ b/dev/tests/js/jasmine/assets/apply/index.js
@@ -3,7 +3,7 @@
  * See COPYING.txt for license details.
  */
 define([
-    'tests/tools',
+    'tests/assets/tools',
     'tests/assets/apply/components/fn',
     'text!./config.json',
     'text!./templates/node.html'
diff --git a/dev/tests/js/spec/assets/apply/templates/node.html b/dev/tests/js/jasmine/assets/apply/templates/node.html
similarity index 100%
rename from dev/tests/js/spec/assets/apply/templates/node.html
rename to dev/tests/js/jasmine/assets/apply/templates/node.html
diff --git a/dev/tests/js/spec/assets/jsbuild/config.js b/dev/tests/js/jasmine/assets/jsbuild/config.js
similarity index 100%
rename from dev/tests/js/spec/assets/jsbuild/config.js
rename to dev/tests/js/jasmine/assets/jsbuild/config.js
diff --git a/dev/tests/js/spec/assets/jsbuild/external.js b/dev/tests/js/jasmine/assets/jsbuild/external.js
similarity index 100%
rename from dev/tests/js/spec/assets/jsbuild/external.js
rename to dev/tests/js/jasmine/assets/jsbuild/external.js
diff --git a/dev/tests/js/spec/assets/jsbuild/local.js b/dev/tests/js/jasmine/assets/jsbuild/local.js
similarity index 100%
rename from dev/tests/js/spec/assets/jsbuild/local.js
rename to dev/tests/js/jasmine/assets/jsbuild/local.js
diff --git a/dev/tests/js/spec/assets/script/config.json b/dev/tests/js/jasmine/assets/script/config.json
similarity index 100%
rename from dev/tests/js/spec/assets/script/config.json
rename to dev/tests/js/jasmine/assets/script/config.json
diff --git a/dev/tests/js/spec/assets/script/index.js b/dev/tests/js/jasmine/assets/script/index.js
similarity index 93%
rename from dev/tests/js/spec/assets/script/index.js
rename to dev/tests/js/jasmine/assets/script/index.js
index 031241f4c2d3e8beb24b9d7ee2373daa058a03f7..e9519e7ebe1e6b4e398ef06b68e59facb73850f5 100644
--- a/dev/tests/js/spec/assets/script/index.js
+++ b/dev/tests/js/jasmine/assets/script/index.js
@@ -3,7 +3,7 @@
  * See COPYING.txt for license details.
  */
 define([
-    'tests/tools',
+    'tests/assets/tools',
     'text!./config.json',
     'text!./templates/selector.html',
     'text!./templates/virtual.html'
diff --git a/dev/tests/js/spec/assets/script/templates/selector.html b/dev/tests/js/jasmine/assets/script/templates/selector.html
similarity index 100%
rename from dev/tests/js/spec/assets/script/templates/selector.html
rename to dev/tests/js/jasmine/assets/script/templates/selector.html
diff --git a/dev/tests/js/spec/assets/script/templates/virtual.html b/dev/tests/js/jasmine/assets/script/templates/virtual.html
similarity index 100%
rename from dev/tests/js/spec/assets/script/templates/virtual.html
rename to dev/tests/js/jasmine/assets/script/templates/virtual.html
diff --git a/dev/tests/js/spec/assets/text/config.js b/dev/tests/js/jasmine/assets/text/config.js
similarity index 50%
rename from dev/tests/js/spec/assets/text/config.js
rename to dev/tests/js/jasmine/assets/text/config.js
index fe8bc894e540567eb4948f04a683003932e39bda..0b0faa2d5cdd3eb68a7aeaccb5637f7c3eb97fcc 100644
--- a/dev/tests/js/spec/assets/text/config.js
+++ b/dev/tests/js/jasmine/assets/text/config.js
@@ -8,11 +8,11 @@ define(function () {
     return {
         local: {
             path: 'text!tests/assets/text/local.html',
-            result: '<span>Local Template</span>'
+            result: '<!--\n/**\n * Copyright © 2015 Magento. All rights reserved.\n * See COPYING.txt for license details.\n */\n-->\n<span>Local Template</span>'
         },
         external: {
             path: 'text!tests/assets/text/external.html',
-            result: '<span>External Template</span>'
+            result: '<!--\n/**\n * Copyright © 2015 Magento. All rights reserved.\n * See COPYING.txt for license details.\n */\n-->\n<span>External Template</span>'
         }
     };
 });
diff --git a/dev/tests/js/spec/assets/text/external.html b/dev/tests/js/jasmine/assets/text/external.html
similarity index 100%
rename from dev/tests/js/spec/assets/text/external.html
rename to dev/tests/js/jasmine/assets/text/external.html
diff --git a/dev/tests/js/spec/assets/text/local.html b/dev/tests/js/jasmine/assets/text/local.html
similarity index 100%
rename from dev/tests/js/spec/assets/text/local.html
rename to dev/tests/js/jasmine/assets/text/local.html
diff --git a/dev/tests/js/spec/tools.js b/dev/tests/js/jasmine/assets/tools.js
similarity index 100%
rename from dev/tests/js/spec/tools.js
rename to dev/tests/js/jasmine/assets/tools.js
diff --git a/dev/tests/js/jasmine/require.conf.js b/dev/tests/js/jasmine/require.conf.js
new file mode 100644
index 0000000000000000000000000000000000000000..88a0960aa1876bf8eca5c99e520f23965b83ea50
--- /dev/null
+++ b/dev/tests/js/jasmine/require.conf.js
@@ -0,0 +1,32 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+'use strict';
+
+require.config({
+    baseUrl: './',
+    bundles: {
+        'mage/requirejs/static': [
+            'buildTools',
+            'jsbuild',
+            'statistician',
+            'text'
+        ]
+    },
+    paths: {
+        'tests': 'dev/tests/js/jasmine'
+    },
+    config: {
+        jsbuild: {
+            'dev/tests/js/jasmine/assets/jsbuild/local.js': 'define([], function () {\'use strict\'; return \'internal module\'; });'
+        },
+        text: {
+            'dev/tests/js/jasmine/assets/text/local.html': '<!--\n/**\n * Copyright © 2015 Magento. All rights reserved.\n * See COPYING.txt for license details.\n */\n-->\n<span>Local Template</span>'
+        }
+    },
+    deps: [
+        'mage/requirejs/static'
+    ]
+});
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/spec_runner/index.js b/dev/tests/js/jasmine/spec_runner/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d63429aae1270559b0ef2af345d06d8dde170b8c
--- /dev/null
+++ b/dev/tests/js/jasmine/spec_runner/index.js
@@ -0,0 +1,62 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+'use strict';
+
+var tasks = [],
+    _ = require('underscore');
+
+function init(grunt, options) {
+    var _                   = require('underscore'),
+        stripJsonComments   = require('strip-json-comments'),
+        path                = require('path'),
+        config,
+        themes;
+        
+    config = grunt.file.read(__dirname + '/settings.json');
+    config = stripJsonComments(config);
+    config = JSON.parse(config);
+
+    themes = require(path.resolve(process.cwd(), config.themes));
+
+    if (options.theme) {
+        themes = _.pick(themes, options.theme);
+    }
+
+    tasks = Object.keys(themes);
+
+    config.themes = themes;
+
+    enableTasks(grunt, config);
+}
+
+function enableTasks(grunt, config) {
+    var jasmine = require('./tasks/jasmine'),
+        connect = require('./tasks/connect');
+
+    jasmine.init(config);
+    connect.init(config);
+
+    grunt.initConfig({
+        jasmine: jasmine.getTasks(),
+        connect: connect.getTasks()
+    });
+}
+
+function getTasks() {
+    tasks = tasks.map(function (theme) {
+        return [
+            'connect:' + theme,
+            'jasmine:' + theme
+        ]
+    });
+
+    return _.flatten(tasks);
+}
+
+module.exports = {
+    init: init,
+    getTasks: getTasks
+};
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/spec_runner/settings.json b/dev/tests/js/jasmine/spec_runner/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..109da479146da84882c4a6a68e8778db0b19701d
--- /dev/null
+++ b/dev/tests/js/jasmine/spec_runner/settings.json
@@ -0,0 +1,72 @@
+{
+    "host": "http://localhost:<%= port %>",
+    "port": 8000,
+    "root": "dev/tests/js/jasmine",
+
+    /**
+     * Path to themes configuration module. Relative to Magento root.
+     * This node is replaced by formatted theme configuration by 'dev/tests/jasmine/spec_runner' module
+     */
+    "themes": "dev/tools/grunt/configs/themes",
+    
+    "files": {
+        /**
+         * Path to RequireJS library. Relative to "server.base" config.
+         */
+        "requireJs": "requirejs/require.js",
+
+        /**
+         * Overridden "grunt-contrib-jasmine" SpecRunner template.
+         */
+        "template": "<%= root %>/spec_runner/template.html",
+
+        /**
+         * These files are included to the page in <head> right after "require.js" in declared sequence.
+         */
+        "requirejsConfigs": [
+            "pub/static/_requirejs/<%= area %>/<%= name %>/<%= locale %>/requirejs-config.js",
+            "<%= root %>/require.conf.js",
+            "<%= root %>/tests/lib/**/*.conf.js",
+            "<%= root %>/tests/app/code/**/base/**/*.conf.js",
+            "<%= root %>/tests/app/code/**/<%= area %>/**/*.conf.js",
+            "<%= root %>/tests/app/design/<%= area %>/<%= name %>/**/*.conf.js"
+        ],
+
+        /**
+         * Files that contain tests. These are loaded to the page via RequireJS after all RequireJS configuration files have been loaded to the page.
+         * The sequence is ignored.
+         */
+        "specs": [
+            "<%= root %>/tests/lib/**/*.test.js",
+            "<%= root %>/tests/app/code/**/base/**/*.test.js",
+            "<%= root %>/tests/app/code/**/<%= area %>/**/*.test.js",
+            "<%= root %>/tests/app/design/<%= area %>/<%= name %>/**/*.test.js"
+        ]
+    },
+    "server": {
+        /**
+         * Directory to serve files from
+         */
+        "base": "pub/static/<%= area %>/<%= name %>/<%= locale %>",
+
+        /**
+         * Strings, mentioned here are interpreted as regular expressions. Use this option to override server's
+         *     default behaviour and serve matched urls "as is" from Magento root.
+         */
+        "serveAsIs": [
+            "^\/_SpecRunner.html",
+            "^\/dev\/tests",
+            "^\/.grunt",
+            "^\/pub\/static"
+        ],
+        "options": {
+            /**
+             * All options mentioned here are defaults for "connect" grunt task.
+             * "debug" option enables server logs
+             * "keepalive" makes "connect" task pause with set up spec server, which you can fetch by %host%:%port%/_SpecRunner.html address in browser
+             */
+            "debug": false,
+            "keepalive": false
+        }
+    }
+}
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/spec_runner/tasks/connect.js b/dev/tests/js/jasmine/spec_runner/tasks/connect.js
new file mode 100644
index 0000000000000000000000000000000000000000..d472f210d3d5fe1abd5e0ac3e68336819eb12f42
--- /dev/null
+++ b/dev/tests/js/jasmine/spec_runner/tasks/connect.js
@@ -0,0 +1,64 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+'use strict';
+
+var tasks = {};
+
+function init(config) {
+    var serveStatic = require('serve-static'),
+        grunt       = require('grunt'),
+        _           = require('underscore'),
+        path        = require('path'),
+        ignoredPaths, middleware, themes, files, port;
+
+    port         = config.port;
+    files        = config.files;
+    themes       = config.themes;
+    ignoredPaths = config.server.serveAsIs;
+
+    function serveAsIs(path) {
+        return ignoredPaths.some(function (ignoredPath) {
+            return new RegExp(ignoredPath).test(path);
+        });
+    }
+
+    middleware = function (connect, options, middlewares) {
+        var server = serveStatic(process.cwd());
+
+        middlewares.unshift(function (req, res, next) {
+            var url = req.url;
+                
+            if (serveAsIs(url)) {
+                return server.apply(null, arguments);
+            }
+
+            return next();
+        });
+
+        return middlewares;
+    }
+
+    _.each(themes, function (themeData, themeName) {
+        var options = {
+            base: _.template(config.server.base)(themeData),
+            port: port++,
+            middleware: middleware
+        };
+
+        _.defaults(options, config.server.options);
+
+        tasks[themeName] = { options: options };
+    });
+}
+
+function getTasks() {
+    return tasks;
+}
+
+module.exports = {
+    init: init,
+    getTasks: getTasks
+};
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js b/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c2eaeb23996feb26f2f8f4819056cacdbc47bb0
--- /dev/null
+++ b/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js
@@ -0,0 +1,65 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+'use strict';
+
+var tasks = {},
+    _ = require('underscore');
+
+function init(config) {
+    var grunt  = require('grunt'),
+        expand = grunt.file.expand.bind(grunt.file),
+        themes, root, host, port, files;
+
+    root         = config.root;
+    port         = config.port;
+    files        = config.files;
+    host         = _.template(config.host)({ port: port });
+    themes       = config.themes;
+
+    _.each(themes, function (themeData, themeName) {
+        var specs,
+            configs,
+            render;
+
+        _.extend(themeData, { root: root });
+
+        render  = renderTemplate.bind(null, themeData);
+        specs   = files.specs.map(render);
+        specs   = expand(specs).map(cutJsExtension);
+        configs = files.requirejsConfigs.map(render);
+
+        tasks[themeName] = {
+            src: configs,
+            options: {
+                host: host,
+                template: render(files.template),
+                vendor: files.requireJs,
+
+                /**
+                 * @todo rename "helpers" to "specs" (implies overriding grunt-contrib-jasmine code)
+                 */
+                helpers: specs
+            }
+        }
+    });
+}
+
+function renderTemplate(data, template) {
+    return _.template(template)(data);
+}
+
+function cutJsExtension(path) {
+    return path.replace(/\.js$/, '');
+}
+
+function getTasks() {
+    return tasks;
+}
+
+module.exports = {
+    init: init,
+    getTasks: getTasks
+};
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/spec_runner/template.html b/dev/tests/js/jasmine/spec_runner/template.html
new file mode 100644
index 0000000000000000000000000000000000000000..39c2f843480509bbedaac4a21b11209c8bd45d62
--- /dev/null
+++ b/dev/tests/js/jasmine/spec_runner/template.html
@@ -0,0 +1,30 @@
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <title>Jasmine Spec Runner</title>
+        <link rel="shortcut icon" type="image/png" href="<%= temp %>/jasmine_favicon.png">
+        <% css.forEach(function (style) { %>
+        <link rel="stylesheet" href="<%= style %>">
+        <% }); %>
+        <% with (scripts) { %>
+            <% [].concat(polyfills, jasmine, boot, vendor, src, reporters).forEach(function (script) { %>
+            <script type="text/javascript" src="<%= script %>"></script>
+            <% }); %>
+        <% } %>
+        <script type="text/javascript">
+            var jasmineBoot = window.onload;
+            window.onload = null;
+
+            require(<%= JSON.stringify(scripts.helpers) %>, jasmineBoot);
+        </script>
+    </head>
+    <body></body>
+</html>
\ No newline at end of file
diff --git a/dev/tests/js/spec/integration/Magento/Msrp/frontend/js/msrp.js b/dev/tests/js/jasmine/tests/app/code/Magento/Msrp/frontend/js/msrp.test.js
similarity index 100%
rename from dev/tests/js/spec/integration/Magento/Msrp/frontend/js/msrp.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Msrp/frontend/js/msrp.test.js
diff --git a/dev/tests/js/spec/integration/Magento/PageCache/frontend/js/pageCache.js b/dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js
similarity index 100%
rename from dev/tests/js/spec/integration/Magento/PageCache/frontend/js/pageCache.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js
diff --git a/dev/tests/js/spec/unit/Magento/Ui/adminhtml/events.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
similarity index 99%
rename from dev/tests/js/spec/unit/Magento/Ui/adminhtml/events.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
index c97b375562b05bc3d08dd1f2a2684b86d37b0183..bc2f08748f45e25f476cd2b0494f988b9f2bf41f 100644
--- a/dev/tests/js/spec/unit/Magento/Ui/adminhtml/events.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'Magento_Ui/js/lib/events'
 ], function (EventBus) {
diff --git a/dev/tests/js/spec/integration/Magento/Ui/adminhtml/datepicker.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/datepicker.test.js
similarity index 99%
rename from dev/tests/js/spec/integration/Magento/Ui/adminhtml/datepicker.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/datepicker.test.js
index 48c728fcf2e283474aed3270a522ceee3398d16f..9868699682a9d4d7ff0df2634fb2fc4da1b6c921 100644
--- a/dev/tests/js/spec/integration/Magento/Ui/adminhtml/datepicker.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/datepicker.test.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'ko',
     'jquery',
diff --git a/dev/tests/js/spec/integration/lib/mage/apply.js b/dev/tests/js/jasmine/tests/lib/mage/apply.test.js
similarity index 98%
rename from dev/tests/js/spec/integration/lib/mage/apply.js
rename to dev/tests/js/jasmine/tests/lib/mage/apply.test.js
index 5e3965b5903b76d1089e57cf8d9e783065bfa342..a9d22ac7c67d2f59379da2e8aa67fdc503b8d2ae 100644
--- a/dev/tests/js/spec/integration/lib/mage/apply.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/apply.test.js
@@ -4,7 +4,7 @@
  */
 define([
     'underscore',
-    'tests/tools',
+    'tests/assets/tools',
     'tests/assets/apply/index',
     'mage/apply/main'
 ], function (_, tools, config, mage) {
diff --git a/dev/tests/js/spec/integration/lib/mage/requirejs/static-jsbuild.js b/dev/tests/js/jasmine/tests/lib/mage/requirejs/static-jsbuild.test.js
similarity index 100%
rename from dev/tests/js/spec/integration/lib/mage/requirejs/static-jsbuild.js
rename to dev/tests/js/jasmine/tests/lib/mage/requirejs/static-jsbuild.test.js
diff --git a/dev/tests/js/spec/integration/lib/mage/requirejs/static-text.js b/dev/tests/js/jasmine/tests/lib/mage/requirejs/static-text.test.js
similarity index 100%
rename from dev/tests/js/spec/integration/lib/mage/requirejs/static-text.js
rename to dev/tests/js/jasmine/tests/lib/mage/requirejs/static-text.test.js
diff --git a/dev/tests/js/spec/unit/lib/mage/requirejs/statistician.js b/dev/tests/js/jasmine/tests/lib/mage/requirejs/statistician.test.js
similarity index 100%
rename from dev/tests/js/spec/unit/lib/mage/requirejs/statistician.js
rename to dev/tests/js/jasmine/tests/lib/mage/requirejs/statistician.test.js
diff --git a/dev/tests/js/spec/integration/lib/mage/scripts.js b/dev/tests/js/jasmine/tests/lib/mage/scripts.test.js
similarity index 98%
rename from dev/tests/js/spec/integration/lib/mage/scripts.js
rename to dev/tests/js/jasmine/tests/lib/mage/scripts.test.js
index 05c4c13388919dd9a0ffd482663cf9bb99eda4bc..3bfbd4b637ea97801570ff2a571e8e21c3009d9c 100644
--- a/dev/tests/js/spec/integration/lib/mage/scripts.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/scripts.test.js
@@ -3,7 +3,7 @@
  * See COPYING.txt for license details.
  */
 define([
-    'tests/tools',
+    'tests/assets/tools',
     'tests/assets/script/index',
     'mage/apply/scripts'
 ], function (tools, config, processScripts) {
diff --git a/dev/tests/js/spec/unit/lib/mage/template.js b/dev/tests/js/jasmine/tests/lib/mage/template.test.js
similarity index 100%
rename from dev/tests/js/spec/unit/lib/mage/template.js
rename to dev/tests/js/jasmine/tests/lib/mage/template.test.js
diff --git a/dev/tests/js/spec/integration/config/adminhtml.js b/dev/tests/js/spec/integration/config/adminhtml.js
deleted file mode 100644
index a9a60a43acad7e385f816e2ddce011f2cf682167..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/integration/config/adminhtml.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui-1.9.2'
-    }
-});
diff --git a/dev/tests/js/spec/integration/config/frontend.js b/dev/tests/js/spec/integration/config/frontend.js
deleted file mode 100644
index 8791f57a90cfd289dbad10f5c140a34052b48139..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/integration/config/frontend.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui'    
-    }
-})
\ No newline at end of file
diff --git a/dev/tests/js/spec/integration/config/global.js b/dev/tests/js/spec/integration/config/global.js
deleted file mode 100644
index 0f9ac6f574916eec9b0ee5707333c4461eece39e..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/integration/config/global.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require.config({
-    bundles: {
-        'mage/requirejs/static': [
-            'jsbuild',
-            'text',
-            'buildTools'
-        ]
-    },
-    config: {
-        jsbuild: {
-            'dev/tests/js/spec/assets/jsbuild/local.js': 'define([], function () {\'use strict\'; return \'internal module\'; });'
-        },
-        text: {
-            'dev/tests/js/spec/assets/text/local.html': '<span>Local Template</span>'
-        }
-    },
-    deps: [
-        'mage/requirejs/static'
-    ],
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui'
-    }
-});
diff --git a/dev/tests/js/spec/require.config.js b/dev/tests/js/spec/require.config.js
deleted file mode 100644
index 2df785bb9962a997e3a19e838f834a8b1e984340..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/require.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'ko': 'ko/ko',
-        'domReady': 'requirejs/domReady',
-        'text': 'requirejs/text',
-        'tests': 'dev/tests/js/spec'
-    },
-    shim: {
-        'jquery/ui': ['jquery']
-    }
-});
diff --git a/dev/tests/js/spec/shim.js b/dev/tests/js/spec/shim.js
deleted file mode 100644
index 0cbe7edb109dee558040426db6c8d14678ff7b9c..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/shim.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-(function () {
-    'use strict';
-
-    var Ap = Array.prototype,
-        slice = Ap.slice,
-        Fp = Function.prototype;
-
-    if (!Fp.bind) {
-        /**
-         * PhantomJS doesn't support Function.prototype.bind natively, so
-         * polyfill it whenever this module is required.
-         *
-         * @param  {*} context
-         * @return {Function}
-         */
-        Fp.bind = function (context) {
-            var func = this,
-                args = slice.call(arguments, 1);
-                
-            function bound() {
-                var invokedAsConstructor = func.prototype && (this instanceof func);
-
-                return func.apply(
-                    // Ignore the context parameter when invoking the bound function
-                    // as a constructor. Note that this includes not only constructor
-                    // invocations using the new keyword but also calls to base class
-                    // constructors such as BaseClass.call(this, ...) or super(...).
-                    !invokedAsConstructor && context || this,
-                    args.concat(slice.call(arguments))
-                );
-            }
-
-            // The bound function must share the .prototype of the unbound
-            // function so that any object created by one constructor will count
-            // as an instance of both constructors.
-            bound.prototype = func.prototype;
-
-            return bound;
-        };
-    }
-
-})();
diff --git a/dev/tests/js/spec/unit/config/adminhtml.js b/dev/tests/js/spec/unit/config/adminhtml.js
deleted file mode 100644
index a9a60a43acad7e385f816e2ddce011f2cf682167..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/unit/config/adminhtml.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui-1.9.2'
-    }
-});
diff --git a/dev/tests/js/spec/unit/config/frontend.js b/dev/tests/js/spec/unit/config/frontend.js
deleted file mode 100644
index f6ee8dc73b131128e9cb0709f9765b060cd2e90d..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/unit/config/frontend.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui'
-    }
-});
diff --git a/dev/tests/js/spec/unit/config/global.js b/dev/tests/js/spec/unit/config/global.js
deleted file mode 100644
index c59abab9fc575c4c8b3c99e8ee3422c53523a79a..0000000000000000000000000000000000000000
--- a/dev/tests/js/spec/unit/config/global.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    bundles: {
-        'mage/requirejs/static': [
-            'buildTools'
-        ]
-    },
-    deps: [
-        'mage/requirejs/static'
-    ]
-});
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Application.php b/dev/tests/performance/framework/Magento/TestFramework/Application.php
index d290e94b54ae9ce1f2df0403be8cc578c04b235a..e3a485470a72e599cbd65fcaf23f3522fefb8bd7 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Application.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Application.php
@@ -75,12 +75,12 @@ class Application
      *
      * @param string $path
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     private function _assertPath($path)
     {
         if (!is_file($path)) {
-            throw new \Magento\Framework\Exception("File '{$path}' is not found.");
+            throw new \Magento\Framework\Exception\LocalizedException(__("File '%1' is not found.", $path));
         }
         return realpath($path);
     }
@@ -142,14 +142,16 @@ class Application
      * Install application according to installation options
      *
      * @return \Magento\TestFramework\Application
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _install()
     {
         $installOptions = $this->_config->getInstallOptions();
         $installOptionsNoValue = $this->_config->getInstallOptionsNoValue();
         if (!$installOptions) {
-            throw new \Magento\Framework\Exception('Trying to install Magento, but installation options are not set');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Trying to install Magento, but installation options are not set')
+            );
         }
 
         // Populate install options with global options
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Performance/Bootstrap.php b/dev/tests/performance/framework/Magento/TestFramework/Performance/Bootstrap.php
index 46bd3c4a08bfeb8e184cb808b21c9ab218b62fa5..f13126d189a49038a0263569ec69b6cfb8213242 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Performance/Bootstrap.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Performance/Bootstrap.php
@@ -47,7 +47,7 @@ class Bootstrap
     /**
      * Ensure reports directory exists, empty, and has write permissions
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function cleanupReports()
     {
@@ -57,9 +57,11 @@ class Bootstrap
             if ($filesystemAdapter->isExists($reportDir)) {
                 $filesystemAdapter->deleteDirectory($reportDir);
             }
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             if (file_exists($reportDir)) {
-                throw new \Magento\Framework\Exception("Cannot cleanup reports directory '{$reportDir}'.");
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase("Cannot cleanup reports directory '%1'.", $reportDir)
+                );
             }
         }
         mkdir($reportDir, 0777, true);
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Performance/Config.php b/dev/tests/performance/framework/Magento/TestFramework/Performance/Config.php
index 17ea84fbd902925b120f153b595287b140b43295..bd01b881c6bb9bb427690147be710d7a21a1900f 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Performance/Config.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Performance/Config.php
@@ -58,14 +58,16 @@ class Config
      * @param string $testsBaseDir
      * @param string $appBaseDir
      * @throws \InvalidArgumentException
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct(array $configData, $testsBaseDir, $appBaseDir)
     {
         $this->_validateData($configData);
 
         if (!is_dir($testsBaseDir)) {
-            throw new \Magento\Framework\Exception("Base directory '{$testsBaseDir}' does not exist.");
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __("Base directory '%1' does not exist.", $testsBaseDir)
+            );
         }
         $this->_testsBaseDir = $testsBaseDir;
         $this->_reportDir = $this->_getTestsRelativePath($configData['report_dir']);
@@ -100,7 +102,7 @@ class Config
      * Validate high-level configuration structure
      *
      * @param array $configData
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _validateData(array $configData)
     {
@@ -108,7 +110,9 @@ class Config
         $requiredKeys = ['application', 'scenario', 'report_dir'];
         foreach ($requiredKeys as $requiredKeyName) {
             if (empty($configData[$requiredKeyName])) {
-                throw new \Magento\Framework\Exception("Configuration array must define '{$requiredKeyName}' key.");
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __("Configuration array must define '%1' key.", $requiredKeyName)
+                );
             }
         }
 
@@ -116,8 +120,8 @@ class Config
         $requiredAdminKeys = ['admin_user', 'admin_password', 'backend_frontname'];
         foreach ($requiredAdminKeys as $requiredKeyName) {
             if (empty($configData['application']['installation']['options'][$requiredKeyName])) {
-                throw new \Magento\Framework\Exception(
-                    "Installation options array must define '{$requiredKeyName}' key."
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __("Installation options array must define '%1' key.", $requiredKeyName)
                 );
             }
         }
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/FailureException.php b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/FailureException.php
index 9a1469617c20b20bbaa5d9b16f81822f764548c8..3f027ecf6e253a4581047585a01d26d08eb420f9 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/FailureException.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/FailureException.php
@@ -9,7 +9,9 @@
  */
 namespace Magento\TestFramework\Performance\Scenario;
 
-class FailureException extends \Magento\Framework\Exception
+use Magento\Framework\Phrase;
+
+class FailureException extends \Magento\Framework\Exception\LocalizedException
 {
     /**
      * @var \Magento\TestFramework\Performance\Scenario
@@ -20,11 +22,14 @@ class FailureException extends \Magento\Framework\Exception
      * Constructor
      *
      * @param \Magento\TestFramework\Performance\Scenario $scenario
-     * @param string $message
+     * @param Phrase $phrase
      */
-    public function __construct(\Magento\TestFramework\Performance\Scenario $scenario, $message = '')
+    public function __construct(\Magento\TestFramework\Performance\Scenario $scenario, Phrase $phrase = null)
     {
-        parent::__construct($message);
+        if ($phrase === null) {
+            $phrase = new Phrase('Scenario failure.');
+        }
+        parent::__construct($phrase);
         $this->_scenario = $scenario;
     }
 
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/FileFormat.php b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/FileFormat.php
index 1d426a2133680fd7e9d239357a979164d3b5de97..deaf57b1ee4cfd6fa658205b03c06bf8c0f527c2 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/FileFormat.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/FileFormat.php
@@ -47,7 +47,7 @@ class FileFormat implements \Magento\TestFramework\Performance\Scenario\HandlerI
      *
      * @param \Magento\TestFramework\Performance\Scenario $scenario
      * @param string|null $reportFile Report file to write results to, NULL disables report creation
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function run(\Magento\TestFramework\Performance\Scenario $scenario, $reportFile = null)
     {
@@ -55,8 +55,8 @@ class FileFormat implements \Magento\TestFramework\Performance\Scenario\HandlerI
         /** @var $scenarioHandler \Magento\TestFramework\Performance\Scenario\HandlerInterface */
         $scenarioHandler = $this->getHandler($scenarioExtension);
         if (!$scenarioHandler) {
-            throw new \Magento\Framework\Exception(
-                "Unable to run scenario '{$scenario->getTitle()}', format is not supported."
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __("Unable to run scenario '%1', format is not supported.", $scenario->getTitle())
             );
         }
         $scenarioHandler->run($scenario, $reportFile);
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Jmeter.php b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Jmeter.php
index 2d321e6a30805f89510a2ceb7c132fc196e76f51..a6a6ffeda8fc74edeeb3ba27c644c54fa0cbb382 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Jmeter.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Jmeter.php
@@ -9,6 +9,8 @@
  */
 namespace Magento\TestFramework\Performance\Scenario\Handler;
 
+use Magento\Framework\Phrase;
+
 class Jmeter implements \Magento\TestFramework\Performance\Scenario\HandlerInterface
 {
     /**
@@ -50,7 +52,7 @@ class Jmeter implements \Magento\TestFramework\Performance\Scenario\HandlerInter
      *
      * @param \Magento\TestFramework\Performance\Scenario $scenario
      * @param string|null $reportFile Report file to write results to, NULL disables report creation
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @throws \Magento\TestFramework\Performance\Scenario\FailureException
      */
     public function run(\Magento\TestFramework\Performance\Scenario $scenario, $reportFile = null)
@@ -63,15 +65,15 @@ class Jmeter implements \Magento\TestFramework\Performance\Scenario\HandlerInter
 
         if ($reportFile) {
             if (!file_exists($reportFile)) {
-                throw new \Magento\Framework\Exception(
-                    "Report file '{$reportFile}' for '{$scenario->getTitle()}' has not been created."
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new Phrase("Report file '%1' for '%2' has not been created.", [$reportFile, $scenario->getTitle()])
                 );
             }
             $reportErrors = $this->_getReportErrors($reportFile);
             if ($reportErrors) {
                 throw new \Magento\TestFramework\Performance\Scenario\FailureException(
                     $scenario,
-                    implode(PHP_EOL, $reportErrors)
+                    new Phrase(implode(PHP_EOL, $reportErrors))
                 );
             }
         }
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Php.php b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Php.php
index 791142633cd023fead90e11e8f5b1a9115a1a6db..76ba0bda7b9e9fbc47545c8640fb55aa8306e321 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Php.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Performance/Scenario/Handler/Php.php
@@ -50,7 +50,7 @@ class Php implements \Magento\TestFramework\Performance\Scenario\HandlerInterfac
      *
      * @param \Magento\TestFramework\Performance\Scenario $scenario
      * @param string|null $reportFile Report file to write results to, NULL disables report creation
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @throws \Magento\TestFramework\Performance\Scenario\FailureException
      *
      * @todo Implement execution in concurrent threads defined by the "users" scenario argument
@@ -72,7 +72,7 @@ class Php implements \Magento\TestFramework\Performance\Scenario\HandlerInterfac
         if ($reportErrors) {
             throw new \Magento\TestFramework\Performance\Scenario\FailureException(
                 $scenario,
-                implode(PHP_EOL, $reportErrors)
+                new \Magento\Framework\Phrase(implode(PHP_EOL, $reportErrors))
             );
         }
     }
@@ -97,7 +97,7 @@ class Php implements \Magento\TestFramework\Performance\Scenario\HandlerInterfac
         $executionTime = microtime(true);
         try {
             $result['output'] = $this->_shell->execute($scenarioCmd, $scenarioCmdArgs);
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $result['success'] = false;
             $result['exit_code'] = $e->getPrevious()->getCode();
             $result['output'] = $e->getPrevious()->getMessage();
diff --git a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/ConfigTest.php b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/ConfigTest.php
index 567e0be88d211196c9a926c930fa8406fac00817..39685b58894125220e63fd532b39f5b0f54282ac 100644
--- a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/ConfigTest.php
+++ b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/ConfigTest.php
@@ -70,8 +70,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             'non-existing base dir' => [
                 require __DIR__ . '/_files/config_data.php',
                 'non_existing_dir',
-                'Magento\Framework\Exception',
-                "Base directory 'non_existing_dir' does not exist",
+                'Magento\Framework\Exception\LocalizedException',
+                new \Magento\Framework\Phrase("Base directory 'non_existing_dir' does not exist"),
             ],
             'invalid scenarios format' => [
                 require __DIR__ . '/_files/config_data_invalid_scenarios_format.php',
diff --git a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/FailureExceptionTest.php b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/FailureExceptionTest.php
index 38d371796f4edaf11a5d85aa5125054dc7b2eadd..e9a4f38b97301d66d524ad9d0e7c02f733feed95 100644
--- a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/FailureExceptionTest.php
+++ b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/FailureExceptionTest.php
@@ -22,7 +22,7 @@ class FailureExceptionTest extends \PHPUnit_Framework_TestCase
         $this->_scenario = new \Magento\TestFramework\Performance\Scenario('Title', '', [], [], []);
         $this->_object = new \Magento\TestFramework\Performance\Scenario\FailureException(
             $this->_scenario,
-            'scenario has failed'
+            new \Magento\Framework\Phrase('scenario has failed')
         );
     }
 
diff --git a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/FileFormatTest.php b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/FileFormatTest.php
index a49a8feffe8063be9ececa2779db20856b2f70a5..3cafda18c6ddfc08e7a86ba593f80df5fcbd9f21 100644
--- a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/FileFormatTest.php
+++ b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/FileFormatTest.php
@@ -59,12 +59,12 @@ class FileFormatTest extends \PHPUnit_Framework_TestCase
         $this->_object->run($this->_scenario, $reportFile);
     }
 
-    /**
-     * @expectedException \Magento\Framework\Exception
-     * @expectedExceptionMessage Unable to run scenario 'Scenario', format is not supported.
-     */
     public function testRunUnsupportedFormat()
     {
+        $this->setExpectedException(
+            'Magento\Framework\Exception\LocalizedException',
+            new \Magento\Framework\Phrase("Unable to run scenario '%1', format is not supported", ['Scenario'])
+        );
         $scenario = new \Magento\TestFramework\Performance\Scenario(
             'Scenario',
             'scenario.txt',
diff --git a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/JmeterTest.php b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/JmeterTest.php
index 178a3094ce836575a9d086394a7d6882bff47245..0b6e4882b1acce765a5ad25e8c26d7a10c54e575 100644
--- a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/JmeterTest.php
+++ b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/JmeterTest.php
@@ -132,8 +132,11 @@ class JmeterTest extends \PHPUnit_Framework_TestCase
             'no report created' => [
                 "{$fixtureDir}/scenario_without_report.jmx",
                 "{$fixtureDir}/scenario_without_report.jtl",
-                'Magento\Framework\Exception',
-                "Report file '{$fixtureDir}/scenario_without_report.jtl' for 'Scenario' has not been created.",
+                'Magento\Framework\Exception\LocalizedException',
+                new \Magento\Framework\Phrase(
+                    "Report file '%1/scenario_without_report.jtl' for 'Scenario' has not been created.",
+                    [$fixtureDir]
+                ),
             ],
             'scenario failure in report' => [
                 "{$fixtureDir}/scenario_failure.jmx",
diff --git a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/PhpTest.php b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/PhpTest.php
index fc3774ffdf76a90c2911cf335f792bd880a92265..6ca1dfcfd2f927af014605d1879ba40835b4ba47 100644
--- a/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/PhpTest.php
+++ b/dev/tests/performance/framework/tests/unit/testsuite/Magento/Test/Performance/Scenario/Handler/PhpTest.php
@@ -117,9 +117,8 @@ class PhpTest extends \PHPUnit_Framework_TestCase
      */
     public function testRunException()
     {
-        $failure = new \Magento\Framework\Exception(
-            'Command returned non-zero exit code.',
-            0,
+        $failure = new \Magento\Framework\Exception\LocalizedException(
+            __('Command returned non-zero exit code.'),
             new \Exception('command failure message', 1)
         );
         $this->_shell->expects($this->any())->method('execute')->will($this->throwException($failure));
diff --git a/dev/tests/static/framework/autoload.php b/dev/tests/static/framework/autoload.php
index 17e643a9f9a3b821ae529713ab5bbec84f250fb0..4af5600e9b7a7e0536acfbd3fb5e59bfa2e5bc04 100644
--- a/dev/tests/static/framework/autoload.php
+++ b/dev/tests/static/framework/autoload.php
@@ -9,5 +9,11 @@ require $baseDir . '/app/autoload.php';
 $testsBaseDir = $baseDir . '/dev/tests/static';
 $autoloadWrapper = \Magento\Framework\Autoload\AutoloaderRegistry::getAutoloader();
 $autoloadWrapper->addPsr4('Magento\\', $testsBaseDir . '/testsuite/Magento/');
-$autoloadWrapper->addPsr4('Magento\\TestFramework\\', $testsBaseDir . '/framework/Magento/TestFramework/');
+$autoloadWrapper->addPsr4(
+    'Magento\\TestFramework\\',
+    [
+        $testsBaseDir . '/framework/Magento/TestFramework/',
+        $testsBaseDir . '/../integration/framework/Magento/TestFramework/',
+    ]
+);
 $autoloadWrapper->addPsr4('Magento\\', $baseDir . '/var/generation/Magento/');
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php
index 05d9b8c6b6fca1a96d32b142e3a755dbdd96e461..0d5d3848cfe6a4cc34ec66e67c47b5dbe432755f 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php
@@ -557,7 +557,9 @@ class ClassesTest extends \PHPUnit_Framework_TestCase
             }
         }
         if ($errors) {
-            $this->fail(implode(PHP_EOL, $errors));
+            $this->fail(
+                'Nonexistent classes/methods were found in @covers annotations: ' . PHP_EOL . implode(PHP_EOL, $errors)
+            );
         }
     }
 
@@ -567,8 +569,7 @@ class ClassesTest extends \PHPUnit_Framework_TestCase
      */
     private function isNonexistentEntityCovered($matches)
     {
-        return (!empty($matches[2]) && !class_exists($matches[2])
-            || !empty($matches[4]) && !method_exists($matches[2], $matches[4]))
-            && strpos($matches[2], 'Magento\TestFramework') === false; // not autoloaded currently
+        return !empty($matches[2]) && !class_exists($matches[2])
+            || !empty($matches[4]) && !method_exists($matches[2], $matches[4]);
     }
 }
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
index 828c06aed1710679ceb5d4a5d7e6d001dc4a0e2c..bda8a6cbcf338a36002131366543b8bfc0e337ca 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
@@ -8,7 +8,7 @@ namespace Magento\Test\Integrity;
 use Magento\Framework\Composer\MagentoComponent;
 use Magento\Framework\App\Utility\Files;
 use Magento\Framework\Shell;
-use Magento\Framework\Exception;
+use Magento\Framework\Exception\LocalizedException;
 
 /**
  * A test that enforces validity of composer.json files and any other conventions in Magento components
@@ -365,7 +365,7 @@ class ComposerTest extends \PHPUnit_Framework_TestCase
     {
         try {
             self::$shell->execute(self::$composerPath . ' --version');
-        } catch (Exception $e) {
+        } catch (LocalizedException $e) {
             return false;
         }
         return true;
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php
index 493f1310e380c6e586ca25d5afc032c727cbd891..780e83022c4aa53c7d9bd05fcec9514cd5966448 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php
@@ -282,7 +282,7 @@ class CompilerTest extends \PHPUnit_Framework_TestCase
     {
         try {
             $this->_validator->validate($className);
-        } catch (\Magento\Framework\Code\ValidationException $exceptions) {
+        } catch (\Magento\Framework\Exception\ValidatorException $exceptions) {
             $this->fail($exceptions->getMessage());
         } catch (\ReflectionException $exceptions) {
             $this->fail($exceptions->getMessage());
@@ -366,7 +366,7 @@ class CompilerTest extends \PHPUnit_Framework_TestCase
             if (\Magento\Framework\App\Utility\Files::init()->isModuleExists($module)) {
                 $this->pluginValidator->validate($plugin, $type);
             }
-        } catch (\Magento\Framework\Interception\Code\ValidatorException $exception) {
+        } catch (\Magento\Framework\Exception\ValidatorException $exception) {
             $this->fail($exception->getMessage());
         }
     }
@@ -411,7 +411,7 @@ class CompilerTest extends \PHPUnit_Framework_TestCase
     {
         try {
             $this->_shell->execute($this->_command, [$this->_generationDir, $this->_compilationDir]);
-        } catch (\Magento\Framework\Exception $exception) {
+        } catch (\Magento\Framework\Exception\LocalizedException $exception) {
             $this->fail($exception->getPrevious()->getMessage());
         }
     }
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/HhvmCompatibilityTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/HhvmCompatibilityTest.php
index c3a9fe9933ee4948c40bbd5630eea75f0b46a1e0..b7c342c1fd4ecdc410a7558a1a3131d76193c125 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/HhvmCompatibilityTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/HhvmCompatibilityTest.php
@@ -36,6 +36,7 @@ class HhvmCompatibilityTest extends \PHPUnit_Framework_TestCase
         'mime_magic.magicfile',
         'display_errors',
         'default_socket_timeout',
+        'pcre.recursion_limit',
     ];
 
     public function testAllowedIniGetSetDirectives()
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt
index 2ba58c46a10ad6d2ce222f759e2baa6051c067b0..9210d15d05df6a7a82ce4f6c5f1b312bf54ccf01 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt
@@ -12,8 +12,8 @@ app/code/Magento/Sales/view/adminhtml/web/order/giftoptions_tooltip.js
 app/code/Magento/Shipping/view/adminhtml/web/order/packaging.js
 app/code/Magento/Theme/view/frontend/web/menu.js
 app/code/Magento/Variable/view/adminhtml/web/variables.js
-dev/tests/js/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js
-dev/tests/js/framework/qunit
+dev/tests/js/JsTestDriver/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js
+dev/tests/js/JsTestDriver/framework/qunit
 lib/web/mage/adminhtml
 lib/web/mage/captcha.js
 lib/web/legacy-build.min.js
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
old mode 100644
new mode 100755
index 0c241018faedf5ae094fb8360eac85ce9950fc30..78908c93cd07e9dba7f899e0d59e0e8e52345a50
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -2296,7 +2296,7 @@ return [
     ['Magento\Core\Model\Store', 'Magento\Store\Model\Store'],
     [
         'Magento\Store\Model\Exception',
-        'Magento\Framework\Exception\LocalizedException, Magento\Framework\App\InitException'
+        'Magento\Framework\Exception\LocalizedException, Magento\Framework\Exception\State\InitException'
     ],
     ['Magento\Core\Model\Store\Group', 'Magento\Store\Model\Group'],
     ['Magento\Core\Model\Store\Group\Factory', 'Magento\Store\Model\GroupFactory'],
@@ -2424,7 +2424,8 @@ return [
     ['Magento\Archive', 'Magento\Framework\Archive'],
     ['Magento\Event', 'Magento\Framework\Event'],
     ['Magento\EventFactory', 'Magento\Framework\EventFactory'],
-    ['Magento\Exception', 'Magento\Framework\Exception'],
+    ['Magento\Exception', 'Magento\Framework\Exception\LocalizedException'],
+    ['Magento\Framework\Exception', 'Magento\Framework\Exception\LocalizedException'],
     ['Magento\Filesystem', 'Magento\Framework\Filesystem'],
     ['Magento\ObjectManager', 'Magento\Framework\ObjectManagerInterface'],
     ['Magento\Translate', 'Magento\Framework\Translate'],
@@ -2518,8 +2519,8 @@ return [
     ['Magento\OsInfo', 'Magento\Framework\OsInfo'],
     ['Magento\Registry', 'Magento\Framework\Registry'],
     ['Magento\Util', 'Magento\Framework\Util'],
-    ['Magento\BootstrapException', 'Magento\Framework\App\InitException'],
-    ['Magento\Framework\BootstrapException', 'Magento\Framework\App\InitException'],
+    ['Magento\BootstrapException', 'Magento\Framework\Exception\State\InitException'],
+    ['Magento\Framework\BootstrapException', 'Magento\Framework\Exception\State\InitException'],
     ['Magento\Checkout\Helper\Url'],
     [
         'Magento\Customer\Service\V1\CustomerCurrentService',
@@ -3117,6 +3118,26 @@ return [
     ['Magento\LocaleFactory'],
     ['Magento\Framework\LocaleFactory'],
     ['Magento\Core\Helper\Data', 'Magento\Framework\Json\Helper\Data'],
+    ['Magento\Backup\Exception'],
+    ['Magento\Catalog\Exception'],
+    ['Magento\Reports\Exception'],
+    ['Magento\Sales\Exception'],
+    ['Magento\SalesRule\Exception'],
+    ['Magento\UrlRewrite\Model\EntityNotAssociatedWithWebsiteException'],
+    ['Magento\Framework\App\Action\Exception'],
+    ['Magento\Framework\App\Action\NotFoundException'],
+    ['Magento\Framework\Code\ValidationException'],
+    ['Magento\Framework\Css\PreProcessor\Adapter\AdapterException'],
+    ['Magento\Framework\Mail\Exception'],
+    ['Magento\Framework\Stdlib\DateTime\Timezone\ValidationException'],
+    ['Magento\Framework\Module\Exception'],
+    ['Magento\Framework\Data\Argument\MissingOptionalValueException'],
+    ['Magento\Framework\Session\SaveHandlerException'],
+    ['Magento\Framework\ForeignKey\Exception'],
+    ['Magento\CatalogInventory\Exception'],
+    ['Magento\CatalogRule\CatalogRuleException'],
+    ['Magento\Payment\Exception'],
+    ['Magento\UrlRewrite\Model\Storage\DuplicateEntryException'],
     ['Magento\Framework\App\DeploymentConfig\BackendConfig'],
     ['Magento\Framework\App\DeploymentConfig\DbConfig'],
     ['Magento\Framework\App\DeploymentConfig\InstallConfig'],
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php
index d01d17f39f1250f965c7acca5ddace4ef3d50f62..7baeb9bac60b7ecbb782de7407a87d7033367831 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php
@@ -338,6 +338,11 @@ return [
     ['_getItemPosition', 'Magento\Catalog\Block\Navigation'],
     ['_renderCategoryMenuItemHtml', 'Magento\Catalog\Block\Navigation'],
     ['getCurrentCategoryPath', 'Magento\Catalog\Block\Navigation'],
+    [
+        'getIsMessagesAvailable',
+        'Magento\GiftMessage\Helper\Message',
+        'Magento\GiftMessage\Helper\Message::isMessagesAllowed'
+    ],
     ['drawOpenCategoryItem', 'Magento\Catalog\Block\Navigation'],
     ['renderCategoriesMenuHtml', 'Magento\Catalog\Block\Navigation'],
     ['dropKey', 'Magento\Framework\DB\Adapter\Pdo\Mysql'],
@@ -2149,4 +2154,5 @@ return [
     ['loadCollectionAttributes', 'Magento\Eav\Model\Config'],
     ['_isCacheEnabled', 'Magento\Eav\Model\Config'],
     ['_createCustomerAttribute', '\Magento\Customer\Model\Customer'],
+    ['prepareCatalogProductPriceIndexTable', 'Magento\CatalogRule\Model\Observer'],
 ];
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
index 1d0e66fbbc949a5863f26103bfaa2a877fdbca6d..793473a809aeee2f23582035d0e64f0c3b171d81 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
@@ -20,7 +20,7 @@ return [
     ['Magento\Session', 'Magento\Framework\Session'],
     ['Magento\Cache', 'Magento\Framework\Cache'],
     ['Magento\ObjectManager', 'Magento\Framework\ObjectManager'],
-    ['Magento\Exception', 'Magento\Framework\Exception'],
+    ['Magento\Exception', 'Magento\Framework\Exception\LocalizedException'],
     ['Magento\Autoload', 'Magento\Framework\Autoload'],
     ['Magento\Translate', 'Magento\Framework\Translate'],
     ['Magento\Code', 'Magento\Framework\Code'],
diff --git a/dev/tests/unit/phpunit.xml.dist b/dev/tests/unit/phpunit.xml.dist
index 6d78cca2adb2c3d52978f9cf5a299e0bb9539ed0..5c785e252e48aa8c82aa8bcfe817c761b38ecc23 100644
--- a/dev/tests/unit/phpunit.xml.dist
+++ b/dev/tests/unit/phpunit.xml.dist
@@ -11,21 +11,27 @@
          bootstrap="./framework/bootstrap.php"
         >
     <testsuite name="Magento Unit Tests">
-        <directory suffix="Test.php">../../../setup/src/Magento/Setup/Test/Unit</directory>
         <directory suffix="Test.php">../../../app/code/*/*/Test/Unit</directory>
-        <directory suffix="Test.php">../../../lib/internal/*/*/*/Test/Unit</directory>
-        <directory suffix="Test.php">../../../lib/internal/*/*/Test/Unit</directory>
         <directory suffix="Test.php">../../../dev/tools/*/*/Test/Unit</directory>
         <directory suffix="Test.php">../../../dev/tools/*/*/*/Test/Unit</directory>
+        <directory suffix="Test.php">../../../lib/internal/*/*/Test/Unit</directory>
+        <directory suffix="Test.php">../../../lib/internal/*/*/*/Test/Unit</directory>
+        <directory suffix="Test.php">../../../setup/src/*/*/Test/Unit</directory>
     </testsuite>
     <php>
         <ini name="date.timezone" value="America/Los_Angeles"/>
     </php>
     <filter>
         <whitelist addUncoveredFilesFromWhiteList="true">
-            <directory suffix=".php">../../../app/code/Magento</directory>
+            <directory suffix=".php">../../../app/code/*</directory>
             <directory suffix=".php">../../../lib/internal/Magento</directory>
-            <directory suffix=".php">../../../setup/src/Magento</directory>
+            <directory suffix=".php">../../../setup/src/*</directory>
+            <exclude>
+                <directory>../../../app/code/*/*/Test</directory>
+                <directory>../../../lib/internal/*/*/Test</directory>
+                <directory>../../../lib/internal/*/*/*/Test</directory>
+                <directory>../../../setup/src/*/*/Test</directory>
+            </exclude>
         </whitelist>
     </filter>
     <logging>
@@ -38,5 +44,8 @@
         <!--coverage_clover_placeholder
             <log type="coverage-clover" target="{{coverage_dir}}/test-reports/phpunit.coverage.xml"/>
         coverage_clover_placeholder-->
+        <!--coverage_crap4j_placeholder
+            <log type="coverage-crap4j" target="{{coverage_dir}}/test-reports/phpunit.crap4j.xml"/>
+        coverage_crap4j_placeholder-->
     </logging>
 </phpunit>
diff --git a/dev/tools/Magento/Tools/Di/Code/Generator.php b/dev/tools/Magento/Tools/Di/Code/Generator.php
index 0eaf442daccdd7fd24cdb42882ab6bda68b7cae9..a33d2f74dc024dd0df2fc55f095eb844dcadec58 100644
--- a/dev/tools/Magento/Tools/Di/Code/Generator.php
+++ b/dev/tools/Magento/Tools/Di/Code/Generator.php
@@ -60,7 +60,7 @@ class Generator extends FrameworkGenerator
      * Generates list of classes
      *
      * @param array $classesToGenerate
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     public function generateList($classesToGenerate)
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php b/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php
index f91f9fbc27cd36ebd85eb189245175eb193c82b9..5b0204813ccb1b6c6a94922ea50bbe9b3be59448 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php
+++ b/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Tools\Di\Code\Reader;
 
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 use Zend\Code\Scanner\FileScanner;
 
 class ClassesScanner implements ClassesScannerInterface
@@ -39,13 +39,13 @@ class ClassesScanner implements ClassesScannerInterface
      *
      * @param string $path
      * @return array
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function getList($path)
     {
         $realPath = realpath($path);
         if (!(bool)$realPath) {
-            throw new FilesystemException();
+            throw new FileSystemException(new \Magento\Framework\Phrase('Invalid path: %1', $path));
         }
 
         $recursiveIterator = new \RecursiveIteratorIterator(
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php b/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php
index a70c2291eeb668f2119f95ad4b768486bb195828..5830fc4e79ba8e318f9ccb6c94b6c61279ce9e81 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php
+++ b/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php
@@ -7,7 +7,7 @@ namespace Magento\Tools\Di\Code\Reader\Decorator;
 
 use Magento\Tools\Di\Code\Reader\ClassesScanner;
 use Magento\Tools\Di\Code\Reader\ClassReaderDecorator;
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 /**
  * Class Area
@@ -44,7 +44,7 @@ class Area implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
      * @param string $path path to dir with files
      *
      * @return array
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function getList($path)
     {
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php b/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php
index 83d8e4107856096d3af9204e0affce0ab4cfa27c..430ec71706199009fcbba18fad6f03acbd1c805e 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php
+++ b/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php
@@ -96,7 +96,7 @@ class Directory implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
                     $this->validator->validate($className);
                 }
                 $this->relations[$className] = $this->classReader->getParents($className);
-            } catch (\Magento\Framework\Code\ValidationException $exception) {
+            } catch (\Magento\Framework\Exception\ValidatorException $exception) {
                 $this->log->add(Log::COMPILATION_ERROR, $className, $exception->getMessage());
             } catch (\ReflectionException $e) {
                 $this->log->add(Log::COMPILATION_ERROR, $className, $e->getMessage());
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php b/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php
index 8836c53070b59d164c7d87833ddc7f987f8f290f..84e4ce0038e8c6b300ae0648cc6a16472180bb21 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php
+++ b/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php
@@ -75,7 +75,7 @@ class Interceptions implements \Magento\Tools\Di\Code\Reader\ClassesScannerInter
                     $this->validator->validate($className);
                 }
                 $nameList[] = $className;
-            } catch (\Magento\Framework\Code\ValidationException $exception) {
+            } catch (\Magento\Framework\Exception\ValidatorException $exception) {
                 $this->log->add(Log::COMPILATION_ERROR, $className, $exception->getMessage());
             } catch (\ReflectionException $e) {
                 $this->log->add(Log::COMPILATION_ERROR, $className, $e->getMessage());
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php b/dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php
index bf5fc24e4749a2252511471bf3581476b9153d5e..ee0379367000787eb84f78feb03a03176fa9cc22 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php
+++ b/dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php
@@ -49,7 +49,7 @@ class PhpScanner implements ScannerInterface
                         if (class_exists($missingClassName)) {
                             continue;
                         }
-                    } catch (\Magento\Framework\Exception $e) {
+                    } catch (\Magento\Framework\Exception\LocalizedException $e) {
                     }
                     $sourceClassName = $this->getSourceClassName($missingClassName, $entityType);
                     if (!class_exists($sourceClassName) && !interface_exists($sourceClassName)) {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php b/dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php
index 9f0b2ec3304b621728a6e94efb15f738b96170a9..6ca33d3f08c846116affee7d238d5c60ddc839e3 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php
+++ b/dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php
@@ -68,7 +68,7 @@ class XmlScanner implements ScannerInterface
             $isClassExists = false;
             try {
                 $isClassExists = class_exists($className);
-            } catch (\Magento\Framework\Exception $e) {
+            } catch (\Magento\Framework\Exception\LocalizedException $e) {
             }
             if (false === $isClassExists) {
                 if (class_exists($entityName) || interface_exists($entityName)) {
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php b/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php
index 585d6dadc196f9151db69cea710a322b699ed1d2..aaa02faa6f70e79bfa7793ebfc05903cf3cc2535 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php
+++ b/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php
@@ -189,7 +189,7 @@ class DirectoryTest extends \PHPUnit_Framework_TestCase
     public function getListExceptionDataProvider()
     {
         return [
-            [new \Magento\Framework\Code\ValidationException('Not Valid!')],
+            [new \Magento\Framework\Exception\ValidatorException(new \Magento\Framework\Phrase('Not Valid!'))],
             [new \ReflectionException('Not Valid!')]
         ];
     }
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php b/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php
index 8a161f49a0a54970b649dc578fc078fb887aaaa0..238274ff5f804db60ec726ede11fdba3b0c23936 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php
+++ b/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php
@@ -160,7 +160,7 @@ class InterceptionsTest extends \PHPUnit_Framework_TestCase
     public function getListExceptionDataProvider()
     {
         return [
-            [new \Magento\Framework\Code\ValidationException('Not Valid!')],
+            [new \Magento\Framework\Exception\ValidatorException(new \Magento\Framework\Phrase('Not Valid!'))],
             [new \ReflectionException('Not Valid!')]
         ];
     }
diff --git a/dev/tools/Magento/Tools/Di/compiler.php b/dev/tools/Magento/Tools/Di/compiler.php
index fca4673dd90fdf85f5feb74bfd3257d99a83e78b..ced28772e7c6108f8f1a033617cf4af379687195 100644
--- a/dev/tools/Magento/Tools/Di/compiler.php
+++ b/dev/tools/Magento/Tools/Di/compiler.php
@@ -247,11 +247,6 @@ try {
         . ' in the "var" directory. For instance, if you run the Magento application using Apache,'
         . ' the owner of the files in the "var" directory should be the Apache user (example command:'
         . ' "chown -R www-data:www-data <MAGENTO_ROOT>/var" where MAGENTO_ROOT is the Magento root directory).' . "\n";
-    /** TODO: Temporary solution before having necessary changes on bamboo to overcome issue described above */
-    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootDir . '/var'));
-    foreach ($iterator as $item) {
-        chmod($item, 0777);
-    }
 
 } catch (Zend_Console_Getopt_Exception $e) {
     echo $e->getUsageMessage();
diff --git a/dev/tools/Magento/Tools/Di/entity_generator.php b/dev/tools/Magento/Tools/Di/entity_generator.php
index 4ab81346a4e3b3b555936a9ed1136ea163e28fb8..17592837a0b0c2cd7274975c478a7cd879a94ab4 100644
--- a/dev/tools/Magento/Tools/Di/entity_generator.php
+++ b/dev/tools/Magento/Tools/Di/entity_generator.php
@@ -9,7 +9,7 @@ use Magento\Framework\Api\Code\Generator\SearchResults;
 use Magento\Framework\Autoload\AutoloaderRegistry;
 use Magento\Framework\Code\Generator;
 use Magento\Framework\Code\Generator\Io;
-use Magento\Framework\Exception;
+use Magento\Framework\Exception\LocalizedException;
 use Magento\Framework\Filesystem\Driver\File;
 use Magento\Framework\Interception\Code\Generator\Interceptor;
 use Magento\Framework\ObjectManager\Code\Generator\Converter;
@@ -96,6 +96,6 @@ try {
     } else {
         print "Can't generate class {$className}. This class either not generated entity, or it already exists.\n";
     }
-} catch (Exception $e) {
+} catch (LocalizedException $e) {
     print "Error! {$e->getMessage()}\n";
 }
diff --git a/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Db/LoggerAbstractTest.php b/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Db/LoggerAbstractTest.php
index 536cc07b5478beae3c5a9369e3741437f7c17d4f..fa35157631c5ed6db7d8af63471808c7406f8144 100644
--- a/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Db/LoggerAbstractTest.php
+++ b/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Db/LoggerAbstractTest.php
@@ -26,8 +26,8 @@ class LoggerAbstractTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Tools\Migration\Acl\Db\AbstractLogger::add()
-     * covers \Magento\Tools\Migration\Acl\Db\AbstractLogger::__toString()
+     * @covers \Magento\Tools\Migration\Acl\Db\AbstractLogger::add()
+     * @covers \Magento\Tools\Migration\Acl\Db\AbstractLogger::__toString()
      */
     public function testToString()
     {
diff --git a/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/GeneratorTest.php b/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/GeneratorTest.php
index a7c8aebbffd78c33b0bf1287c755c1e44132173d..a72bead91ea7ce4e6774a1141faa4f003bbe3af2 100644
--- a/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/GeneratorTest.php
+++ b/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/GeneratorTest.php
@@ -187,8 +187,8 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Tools\Migration\Acl\Generator::parseNode
-     * covers \Magento\Tools\Migration\Acl\Generator::generateId
+     * @covers \Magento\Tools\Migration\Acl\Generator::parseNode
+     * @covers \Magento\Tools\Migration\Acl\Generator::generateId
      */
     public function testParseNode()
     {
@@ -233,8 +233,8 @@ TEMPLATE;
     }
 
     /**
-     * covers \Magento\Tools\Migration\Acl\Generator::updateAclResourceIds()
-     * covers \Magento\Tools\Migration\Acl\Generator::updateChildAclNodes() (removing of xpath attribute)
+     * @covers \Magento\Tools\Migration\Acl\Generator::updateAclResourceIds()
+     * @covers \Magento\Tools\Migration\Acl\Generator::updateChildAclNodes() (removing of xpath attribute)
      */
     public function testUpdateAclResourceIds()
     {
diff --git a/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Menu/GeneratorTest.php b/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Menu/GeneratorTest.php
index dc28dac692c0c8a5266e6b65c2522b477d8863ee..25b3a871a862ee2fa86f18fe2dd4ce71abac719d 100644
--- a/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Menu/GeneratorTest.php
+++ b/dev/tools/Magento/Tools/Migration/Test/Unit/Acl/Menu/GeneratorTest.php
@@ -147,8 +147,8 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Tools\Migration\Acl\Menu\Generator::buildMenuItemsXPath
-     * covers \Magento\Tools\Migration\Acl\Menu\Generator::buildXPath
+     * @covers \Magento\Tools\Migration\Acl\Menu\Generator::buildMenuItemsXPath
+     * @covers \Magento\Tools\Migration\Acl\Menu\Generator::buildXPath
      */
     public function testBuildMenuItemsXPath()
     {
diff --git a/dev/tools/Magento/Tools/Migration/Test/Unit/System/Configuration/LoggerAbstractTest.php b/dev/tools/Magento/Tools/Migration/Test/Unit/System/Configuration/LoggerAbstractTest.php
index c6d4bcfb3f36bcb23797e84562374196e32b0431..a4bdcdc5c81ac01ea1cec8a489d294427cc5bcde 100644
--- a/dev/tools/Magento/Tools/Migration/Test/Unit/System/Configuration/LoggerAbstractTest.php
+++ b/dev/tools/Magento/Tools/Migration/Test/Unit/System/Configuration/LoggerAbstractTest.php
@@ -26,8 +26,8 @@ class LoggerAbstractTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Tools\Migration\System\Configuration\AbstractLogger::add()
-     * covers \Magento\Tools\Migration\System\Configuration\AbstractLogger::__toString()
+     * @covers \Magento\Tools\Migration\System\Configuration\AbstractLogger::add()
+     * @covers \Magento\Tools\Migration\System\Configuration\AbstractLogger::__toString()
      */
     public function testToString()
     {
diff --git a/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php b/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php
index fb8529dd7596966ce189816f5276a222fb7bd4fa..0a07540a19c94695f0a9454f0f5f4b3b86c12182 100644
--- a/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php
+++ b/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php
@@ -9,6 +9,7 @@ namespace Magento\Tools\Webdev\App;
 use Magento\Framework\App;
 use Magento\Framework\App\State;
 use Magento\Framework\AppInterface;
+use Magento\Framework\Filesystem;
 use Magento\Tools\Webdev\CliParams;
 use Magento\Tools\View\Deployer\Log;
 use Magento\Framework\View\Asset\Source;
@@ -18,6 +19,7 @@ use Magento\Framework\ObjectManagerInterface;
 use Magento\Framework\App\ObjectManager\ConfigLoader;
 use Magento\Framework\View\Asset\SourceFileGeneratorPool;
 use Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface;
+use Magento\Framework\App\Filesystem\DirectoryList;
 
 /**
  * Class FileAssembler
@@ -60,7 +62,7 @@ class FileAssembler implements AppInterface
     /**
      * @var \Magento\Framework\Less\FileGenerator
      */
-    private $sourceFileGeneratorPoll;
+    private $sourceFileGeneratorPool;
 
     /**
      * @var \Magento\Framework\View\Asset\Source
@@ -77,6 +79,11 @@ class FileAssembler implements AppInterface
      */
     private $chainFactory;
 
+    /**
+     * @var Filesystem
+     */
+    private $filesystem;
+
     /**
      * @param ObjectManagerInterface $objectManager
      * @param Response $response
@@ -88,6 +95,7 @@ class FileAssembler implements AppInterface
      * @param \Magento\Framework\View\Asset\SourceFileGeneratorPool $sourceFileGeneratorPoll
      * @param \Magento\Tools\View\Deployer\Log $logger
      * @param ChainFactoryInterface $chainFactory
+     * @param Filesystem $filesystem
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -101,7 +109,8 @@ class FileAssembler implements AppInterface
         Source $assetSource,
         SourceFileGeneratorPool $sourceFileGeneratorPoll,
         Log $logger,
-        ChainFactoryInterface $chainFactory
+        ChainFactoryInterface $chainFactory,
+        Filesystem $filesystem
     ) {
         $this->response = $response;
         $this->params = $params;
@@ -109,10 +118,11 @@ class FileAssembler implements AppInterface
         $this->objectManager = $objectManager;
         $this->configLoader = $configLoader;
         $this->assetRepo = $assetRepo;
-        $this->sourceFileGeneratorPoll = $sourceFileGeneratorPoll;
+        $this->sourceFileGeneratorPool = $sourceFileGeneratorPoll;
         $this->assetSource = $assetSource;
         $this->logger = $logger;
         $this->chainFactory = $chainFactory;
+        $this->filesystem = $filesystem;
     }
 
     /**
@@ -125,7 +135,7 @@ class FileAssembler implements AppInterface
         $this->state->setAreaCode($this->params->getArea());
         $this->objectManager->configure($this->configLoader->load($this->params->getArea()));
 
-        $sourceFileGenerator = $this->sourceFileGeneratorPoll->create($this->params->getExt());
+        $sourceFileGenerator = $this->sourceFileGeneratorPool->create($this->params->getExt());
 
         foreach ($this->params->getFiles() as $file) {
             $file .= '.' . $this->params->getExt();
@@ -152,7 +162,13 @@ class FileAssembler implements AppInterface
                 ]
             );
 
-            $sourceFileGenerator->generateFileTree($chain);
+            $processedCoreFile = $sourceFileGenerator->generateFileTree($chain);
+
+            $targetDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
+            $rootDir = $this->filesystem->getDirectoryWrite(DirectoryList::ROOT);
+            $source = $rootDir->getRelativePath($processedCoreFile);
+            $destination = $asset->getPath();
+            $rootDir->copyFile($source, $destination, $targetDir);
 
             $this->logger->logMessage("Done");
         }
diff --git a/dev/tools/Magento/Tools/Webdev/file_assembler.php b/dev/tools/Magento/Tools/Webdev/file_assembler.php
index 72ec5b0458fdf12637221079aca0457872a60bb4..669ffa8d535856606b1a86ebbf5d0882aa99f353 100644
--- a/dev/tools/Magento/Tools/Webdev/file_assembler.php
+++ b/dev/tools/Magento/Tools/Webdev/file_assembler.php
@@ -35,15 +35,15 @@ try {
     $logger = new Log($params->getVerbose());
 
 } catch (\Zend_Console_Getopt_Exception $e) {
-    echo $e->getUsageMessage();
-    echo 'Please, use quotes(") for wrapping strings.' . "\n";
+    echo $e->getMessage() . PHP_EOL;
+    echo 'Please, use quotes(") for wrapping strings.' . PHP_EOL;
     exit(1);
 }
 
 $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
 /** @var \Magento\Framework\App\Http $app */
 $app = $bootstrap->createApplication(
-    'Magento\Tools\WebDev\App\FileAssembler',
+    'Magento\Tools\Webdev\App\FileAssembler',
     ['params' => $params, 'logger' => $logger]
 );
 $bootstrap->run($app);
diff --git a/dev/tools/grunt/configs/clean.js b/dev/tools/grunt/configs/clean.js
index 7ac0a11703c34aaf5b2d4d350dfd290b35dd5e5c..df31a4796eca8def768d1693561874ee0fae8cfe 100644
--- a/dev/tools/grunt/configs/clean.js
+++ b/dev/tools/grunt/configs/clean.js
@@ -19,9 +19,9 @@ _.each(themes, function(theme, name) {
                 "dot": true,
                 "src": [
                     "<%= path.tmp %>/cache/**/*",
-                    "<%= combo.autopath(\""+name+"\", \"pub\") %>**/*",
-                    "<%= combo.autopath(\""+name+"\", \"tmpLess\") %>**/*",
-                    "<%= combo.autopath(\""+name+"\", \"tmpSource\") %>**/*"
+                    "<%= combo.autopath(\""+name+"\", path.pub ) %>**/*",
+                    "<%= combo.autopath(\""+name+"\", path.tmpLess) %>**/*",
+                    "<%= combo.autopath(\""+name+"\", path.tmpSource) %>**/*"
                 ]
             }
         ]
@@ -87,6 +87,7 @@ var cleanOptions = {
                 "src": [
                     "<%= path.tmp %>/cache/**/*",
                     "<%= path.tmp %>/generation/**/*",
+                    "<%= path.tmp %>/view_preprocessed/html/**/*",
                     "<%= path.tmp %>/page_cache/**/*"
                 ]
             }
diff --git a/dev/tools/grunt/configs/combo.js b/dev/tools/grunt/configs/combo.js
index 185d8ef931311af1e071786b9cf6521a42ebe51e..1ead93cb6265474399e612d02bad98cfbdaaee5b 100644
--- a/dev/tools/grunt/configs/combo.js
+++ b/dev/tools/grunt/configs/combo.js
@@ -26,8 +26,8 @@ module.exports = {
         return command;
     },
 
-    autopath: function (themeName) {
-        return path.pub +
+    autopath: function (themeName, folder) {
+        return folder +
             theme[themeName].area + '/' +
             theme[themeName].name + '/' +
             theme[themeName].locale + '/';
diff --git a/dev/tools/grunt/configs/jasmine.js b/dev/tools/grunt/configs/jasmine.js
deleted file mode 100644
index 75c33b5d92f98e3df5e7e4d9922a9cb6cc0d59c8..0000000000000000000000000000000000000000
--- a/dev/tools/grunt/configs/jasmine.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-'use strict';
-
-var path = require('path');
-
-module.exports = function (grunt) {
-    var file = path.join(process.cwd(), 'dev/tests/js/framework/spec_runner'),
-        specRunner = require(file)(grunt);
-
-    return {
-        options: {
-            template: require('grunt-template-jasmine-requirejs'),
-            ignoreEmpty: true
-        },
-        'lib-unit':               specRunner.configure('unit', 'lib', 8080),
-        'lib-integration':        specRunner.configure('integration', 'lib', 8080),
-        'backend-unit':           specRunner.configure('unit', 'adminhtml', 8000),
-        'backend-integration':    specRunner.configure('integration', 'adminhtml', 8000),
-        'frontend-unit':          specRunner.configure('unit', 'frontend', 3000),
-        'frontend-integration':   specRunner.configure('integration', 'frontend', 3000)
-    };
-};
diff --git a/dev/tools/grunt/configs/less.js b/dev/tools/grunt/configs/less.js
index 6f3e6186c214c15fc3d8405fb9c76cad9fbb6b06..fe0c284c410838840376c63971ed0e30971a89d3 100644
--- a/dev/tools/grunt/configs/less.js
+++ b/dev/tools/grunt/configs/less.js
@@ -28,11 +28,6 @@ var lessOptions = {
     backend: {
         files: combo.lessFiles('backend')
     },
-    override: {
-        files: {
-            '<%= combo.autopath("backend","pub") %>css/styles-migration.css': '<%= combo.autopath("backend","pub") %>css/styles-migration.less'
-        }
-    },
     blank: {
         files: combo.lessFiles('blank')
     },
diff --git a/dev/tools/grunt/configs/replace.js b/dev/tools/grunt/configs/replace.js
deleted file mode 100644
index 704683f691c36ec8f5189b26feef77009bd0e57e..0000000000000000000000000000000000000000
--- a/dev/tools/grunt/configs/replace.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-'use strict';
-
-/**
- * Replace task for backend migration
- */
-module.exports = {
-    escapeCalc: {
-        src: ['<%= combo.autopath("backend","pub") %>/css/styles.css'], // source files array (supports minimatch)
-        dest: '<%= combo.autopath("backend","pub") %>/css/override.less', // destination directory or file
-        replacements: [{
-            from: /:(.*calc.*);/g, // regex replacement ('Fooo' to 'Mooo')
-            to: ': ~"$1";'
-        }, {
-            from: /\/\*# sourc.*/g, // regex replacement ('Fooo' to 'Mooo')
-            to: ''
-        }]
-    }
-};
diff --git a/dev/tools/grunt/configs/specRunner.json b/dev/tools/grunt/configs/specRunner.json
deleted file mode 100644
index 0d47c57e101a2b121e6ea5f0f67c87ca2191b70e..0000000000000000000000000000000000000000
--- a/dev/tools/grunt/configs/specRunner.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "options": {
-        "shareDir": "base"
-    },
-    "backend": {
-        "options": {
-            "port": 8000,
-            "areaDir": "adminhtml",
-            "theme": "backend"
-        }
-    },
-    "frontend": {
-        "options": {
-            "port": 3000,
-            "areaDir": "frontend",
-            "theme": "blank"
-        }
-    },
-    "lib": {
-        "options": {
-            "port": 8080
-        }
-    }
-}
\ No newline at end of file
diff --git a/dev/tools/grunt/configs/themes.js b/dev/tools/grunt/configs/themes.js
index dd43ca186524d7377334b1d341cc6c5bdc93db35..3f7a1d140afd018b52bb3247d3d5c0d43a6f4050 100644
--- a/dev/tools/grunt/configs/themes.js
+++ b/dev/tools/grunt/configs/themes.js
@@ -45,8 +45,7 @@ module.exports = {
         locale: 'en_US',
         files: [
             'css/styles-old',
-            'css/styles',
-            'css/styles-migration'
+            'css/styles'
         ],
         dsl: 'less'
     }
diff --git a/dev/tools/grunt/configs/watch.js b/dev/tools/grunt/configs/watch.js
index f1a117ac8edb4dc079841f83c74edbb9c03f5b7f..fd7eefdbc30db86dbba7219e996423db4d1ba856 100644
--- a/dev/tools/grunt/configs/watch.js
+++ b/dev/tools/grunt/configs/watch.js
@@ -14,7 +14,7 @@ var themeOptions = {};
 _.each(themes, function(theme, name) {
     themeOptions[name] = {
         "files": [
-            "<%= combo.autopath(\""+name+"\",\"pub\") %>/**/*.less"
+            "<%= combo.autopath(\""+name+"\", path.pub) %>/**/*.less"
         ],
         "tasks": "less:" + name
     };
@@ -25,14 +25,11 @@ var watchOptions = {
         "files": "<%= path.less.setup %>/**/*.less",
         "tasks": "less:setup"
     },
-    "backendMigration": {
-        "files": [
-            "<%= combo.autopath(\"backend\",\"pub\") %>/css/styles.css"
-        ],
-        "tasks": [
-            "replace:escapeCalc",
-            "less:override"
-        ]
+    "reload": {
+        "files": "<%= path.pub %>/**/*.css",
+        "options": {
+            livereload: true
+        }
     }
 };
 
diff --git a/dev/tools/grunt/tasks/deploy.js b/dev/tools/grunt/tasks/deploy.js
new file mode 100644
index 0000000000000000000000000000000000000000..bff8b1fabecaf8d9774a79aa3134c7163847ca30
--- /dev/null
+++ b/dev/tools/grunt/tasks/deploy.js
@@ -0,0 +1,35 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+module.exports = function (grunt) {
+    'use strict';
+
+    var exec    = require('child_process').execSync,
+        spawn   = require('child_process').spawn,
+        log     = grunt.log.write,
+        ok      = grunt.log.ok,
+        error   = grunt.log.error;
+
+    grunt.registerTask('deploy', function () {
+        var deploy,
+            done = this.async();
+
+        log('Cleaning "pub/static"...');
+        exec('rm -rf pub/static/*');
+        ok('"pub/static" is empty.');
+
+        log('Deploying Magento application...');
+        deploy = spawn('php', ['dev/tools/Magento/Tools/View/deploy.php']);
+
+        deploy.stdout.on('data', function (data) {
+            log(data);
+        });
+
+        deploy.stdin.on('data', function (data) {
+            error(data);
+        });
+
+        deploy.on('close', done);
+    });
+};
diff --git a/dev/tools/performance-toolkit/benchmark.jmx b/dev/tools/performance-toolkit/benchmark.jmx
index 1fe4919a59eb43c0f72910d7de13a1448d2b8ab8..7d3d7aef7fa0ab39b7dce61fa73f45e9972e59bd 100644
--- a/dev/tools/performance-toolkit/benchmark.jmx
+++ b/dev/tools/performance-toolkit/benchmark.jmx
@@ -316,7 +316,7 @@ props.put(&quot;category_name&quot;, vars.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol"></stringProp>
           <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/?limit=30&amp;q=Simple</stringProp>
+          <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/index/?limit=30&amp;q=Simple</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -340,7 +340,7 @@ props.put(&quot;category_name&quot;, vars.get(&quot;category_name&quot;));</stri
           <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product url keys" enabled="true">
             <stringProp name="RegexExtractor.useHeaders">false</stringProp>
             <stringProp name="RegexExtractor.refname">simple_products_url_keys</stringProp>
-            <stringProp name="RegexExtractor.regex">${base_path}(index.php/)?(simple.*)${url_suffix}&quot; title=&quot;[Ss]imple.*&quot;</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;a class=&quot;product-item-link&quot; href=&quot;http://${host}${base_path}(index.php/)?([^&apos;&quot;]+)${url_suffix}&quot;&gt;Simple</stringProp>
             <stringProp name="RegexExtractor.template">$2$</stringProp>
             <stringProp name="RegexExtractor.default"></stringProp>
             <stringProp name="RegexExtractor.match_number">-1</stringProp>
@@ -386,7 +386,7 @@ props.put(&quot;category_name&quot;, vars.get(&quot;category_name&quot;));</stri
             <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extarct product title" enabled="true">
               <stringProp name="XPathExtractor.default"></stringProp>
               <stringProp name="XPathExtractor.refname">simple_product_title</stringProp>
-              <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id=&apos;page-title&apos;]/text()</stringProp>
+              <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id=&apos;page-title-wrapper&apos;]/text()</stringProp>
               <boolProp name="XPathExtractor.validate">false</boolProp>
               <boolProp name="XPathExtractor.tolerant">true</boolProp>
               <boolProp name="XPathExtractor.namespace">false</boolProp>
@@ -471,7 +471,7 @@ productList.add(productMap);                        </stringProp>
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol"></stringProp>
           <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/?limit=30&amp;q=Configurable</stringProp>
+          <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/index/?limit=30&amp;q=Configurable</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -495,7 +495,7 @@ productList.add(productMap);                        </stringProp>
           <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product url keys" enabled="true">
             <stringProp name="RegexExtractor.useHeaders">false</stringProp>
             <stringProp name="RegexExtractor.refname">configurable_products_url_keys</stringProp>
-            <stringProp name="RegexExtractor.regex">${base_path}(index.php/)?(configurable.*)${url_suffix}&quot; title=&quot;[Cc]onfigurable.*&quot;</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;a class=&quot;product-item-link&quot; href=&quot;http://${host}${base_path}(index.php/)?([^&apos;&quot;]+)${url_suffix}&quot;&gt;Configurable</stringProp>
             <stringProp name="RegexExtractor.template">$2$</stringProp>
             <stringProp name="RegexExtractor.default"></stringProp>
             <stringProp name="RegexExtractor.match_number">-1</stringProp>
@@ -541,7 +541,7 @@ productList.add(productMap);                        </stringProp>
             <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extarct product title" enabled="true">
               <stringProp name="XPathExtractor.default"></stringProp>
               <stringProp name="XPathExtractor.refname">configurable_product_title</stringProp>
-              <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id=&apos;page-title&apos;]/text()</stringProp>
+              <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id=&apos;page-title-wrapper&apos;]/text()</stringProp>
               <boolProp name="XPathExtractor.validate">false</boolProp>
               <boolProp name="XPathExtractor.tolerant">true</boolProp>
               <boolProp name="XPathExtractor.namespace">false</boolProp>
@@ -550,7 +550,7 @@ productList.add(productMap);                        </stringProp>
             <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extarct product attribute id" enabled="true">
               <stringProp name="RegexExtractor.useHeaders">false</stringProp>
               <stringProp name="RegexExtractor.refname">configurable_product_attribute_id</stringProp>
-              <stringProp name="RegexExtractor.regex">&quot;spConfig&quot;:\{&quot;attributes&quot;:\{&quot;(\d+)&quot;</stringProp>
+              <stringProp name="RegexExtractor.regex">&quot;attributes&quot;:\{&quot;(\d+)&quot;</stringProp>
               <stringProp name="RegexExtractor.template">$1$</stringProp>
               <stringProp name="RegexExtractor.default"></stringProp>
               <stringProp name="RegexExtractor.match_number">1</stringProp>
@@ -1401,6 +1401,26 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_1_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_1_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1431,6 +1451,20 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">qty</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -1439,7 +1473,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${simple_product_1_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -1468,17 +1502,6 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=1</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1516,6 +1539,26 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_2_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_2_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1546,6 +1589,20 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">qty</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -1554,7 +1611,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${simple_product_2_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -1583,17 +1640,6 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=2</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1631,6 +1677,26 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">configurable_product_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1668,6 +1734,20 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -1676,7 +1756,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${configurable_product_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -1705,17 +1785,6 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=3</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
       </hashTree>
       <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Guest Checkout" enabled="true">
@@ -1882,6 +1951,26 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_1_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_1_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1912,6 +2001,20 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">qty</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -1920,7 +2023,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${simple_product_1_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -1949,17 +2052,6 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=1</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -1997,6 +2089,26 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_2_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_2_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -2027,6 +2139,20 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">qty</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -2035,7 +2161,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${simple_product_2_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -2064,17 +2190,6 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=2</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -2112,6 +2227,26 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">configurable_product_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -2149,6 +2284,20 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -2157,7 +2306,7 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${configurable_product_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -2186,17 +2335,6 @@ vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stri
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=3</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -2932,6 +3070,26 @@ if (emailsCount &lt; 1) {
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_1_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_1_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -2962,6 +3120,20 @@ if (emailsCount &lt; 1) {
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">qty</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -2970,7 +3142,7 @@ if (emailsCount &lt; 1) {
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${simple_product_1_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -2999,17 +3171,6 @@ if (emailsCount &lt; 1) {
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=1</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -3047,6 +3208,26 @@ if (emailsCount &lt; 1) {
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_2_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_2_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -3077,6 +3258,20 @@ if (emailsCount &lt; 1) {
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">qty</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -3085,7 +3280,7 @@ if (emailsCount &lt; 1) {
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${simple_product_2_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -3114,17 +3309,6 @@ if (emailsCount &lt; 1) {
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=2</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -3162,6 +3346,26 @@ if (emailsCount &lt; 1) {
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">configurable_product_form_action</stringProp>
+            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot; method=&quot;post&quot; id=&quot;product_addtocart_form&quot;&gt;</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"></stringProp>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="2845929">^.+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_form_action</stringProp>
+          </ResponseAssertion>
+          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
@@ -3199,6 +3403,20 @@ if (emailsCount &lt; 1) {
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
               </elementProp>
+              <elementProp name="isAjax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">isAjax</stringProp>
+              </elementProp>
+              <elementProp name="ajax" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">true</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">ajax</stringProp>
+              </elementProp>
             </collectionProp>
           </elementProp>
           <stringProp name="HTTPSampler.domain"></stringProp>
@@ -3207,7 +3425,7 @@ if (emailsCount &lt; 1) {
           <stringProp name="HTTPSampler.response_timeout"></stringProp>
           <stringProp name="HTTPSampler.protocol">http</stringProp>
           <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+          <stringProp name="HTTPSampler.path">${configurable_product_form_action}</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
@@ -3236,17 +3454,6 @@ if (emailsCount &lt; 1) {
             <intProp name="Assertion.test_type">6</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">count(//*[@class=&apos;cart item&apos;])=3</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
-          <hashTree/>
         </hashTree>
         <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
           <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
diff --git a/dev/tools/performance-toolkit/generate.php b/dev/tools/performance-toolkit/generate.php
index 43a4d61cc09621160a16435766c723f5fbabb5b2..861abee07ef81a10ceee9e80fc2aa9ef91ccb20d 100644
--- a/dev/tools/performance-toolkit/generate.php
+++ b/dev/tools/performance-toolkit/generate.php
@@ -41,6 +41,18 @@ try {
         echo ' |- ' . $label . ': ' . $config->getValue($configKey) . PHP_EOL;
     }
 
+    /** @var $config \Magento\Indexer\Model\Config */
+    $config = $application->getObjectManager()->get('Magento\Indexer\Model\Config');
+    $indexerListIds = $config->getIndexers();
+    /** @var $indexerRegistry \Magento\Indexer\Model\IndexerRegistry */
+    $indexerRegistry = $application->getObjectManager()->create('Magento\Indexer\Model\IndexerRegistry');
+    $indexersState = [];
+    foreach ($indexerListIds as $key => $indexerId) {
+        $indexer = $indexerRegistry->get($indexerId['indexer_id']);
+        $indexersState[$indexerId['indexer_id']] = $indexer->isScheduled();
+        $indexer->setScheduled(true);
+    }
+
     foreach ($application->getFixtures() as $fixture) {
         echo $fixture->getActionTitle() . '... ';
         $startTime = microtime(true);
@@ -50,6 +62,12 @@ try {
         echo ' done in ' . gmdate('H:i:s', $resultTime) . PHP_EOL;
     }
 
+    foreach ($indexerListIds as $indexerId) {
+        /** @var $indexer \Magento\Indexer\Model\Indexer */
+        $indexer = $indexerRegistry->get($indexerId['indexer_id']);
+        $indexer->setScheduled($indexersState[$indexerId['indexer_id']]);
+    }
+
     $application->reindex();
     $totalEndTime = microtime(true);
     $totalResultTime = $totalEndTime - $totalStartTime;
diff --git a/lib/internal/Magento/Framework/Api/AbstractServiceCollection.php b/lib/internal/Magento/Framework/Api/AbstractServiceCollection.php
index 1f261b1401f547b6712b0991b39a44b39f13c69a..08c81040594f58882c620f252e50e6d5224148da 100644
--- a/lib/internal/Magento/Framework/Api/AbstractServiceCollection.php
+++ b/lib/internal/Magento/Framework/Api/AbstractServiceCollection.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Api;
 
 use Magento\Framework\Data\Collection\EntityFactoryInterface;
-use Magento\Framework\Exception;
+use Magento\Framework\Exception\LocalizedException;
 
 /**
  * Base for service collections
@@ -101,13 +101,15 @@ abstract class AbstractServiceCollection extends \Magento\Framework\Data\Collect
      *
      * @param string|array $field
      * @param string|int|array $condition
-     * @throws Exception if some error in the input could be detected.
+     * @throws LocalizedException if some error in the input could be detected.
      * @return $this
      */
     public function addFieldToFilter($field, $condition)
     {
         if (is_array($field) && count($field) != count($condition)) {
-            throw new Exception('When passing in a field array there must be a matching condition array.');
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase('When passing in a field array there must be a matching condition array.')
+            );
         }
         $this->fieldFilters[] = ['field' => $field, 'condition' => $condition];
         return $this;
diff --git a/lib/internal/Magento/Framework/Api/CriteriaInterface.php b/lib/internal/Magento/Framework/Api/CriteriaInterface.php
index 76e4a4c6ec6e101b10b0d40ab1772ded2d635a57..e0bc18f381af7152f6b0020ae789e8832441557d 100644
--- a/lib/internal/Magento/Framework/Api/CriteriaInterface.php
+++ b/lib/internal/Magento/Framework/Api/CriteriaInterface.php
@@ -73,7 +73,7 @@ interface CriteriaInterface
      * @param string|array $field
      * @param string|int|array $condition
      * @param string $type
-     * @throws \Magento\Framework\Exception if some error in the input could be detected.
+     * @throws \Magento\Framework\Exception\LocalizedException if some error in the input could be detected.
      * @return void
      */
     public function addFilter($name, $field, $condition = null, $type = 'and');
diff --git a/lib/internal/Magento/Framework/Api/SearchCriteria.php b/lib/internal/Magento/Framework/Api/SearchCriteria.php
index 727be2cac88b47b98e73fc919a2cb47057997433..b98908fcb85d6756df137cb48d526fed1b3ce184 100644
--- a/lib/internal/Magento/Framework/Api/SearchCriteria.php
+++ b/lib/internal/Magento/Framework/Api/SearchCriteria.php
@@ -15,7 +15,7 @@ class SearchCriteria extends AbstractSimpleObject implements SearchCriteriaInter
     /**#@+
      * Constants for Data Object keys
      */
-    const FILTER_GROUPS = 'filterGroups';
+    const FILTER_GROUPS = 'filter_groups';
     const SORT_ORDERS = 'sort_orders';
     const PAGE_SIZE = 'page_size';
     const CURRENT_PAGE = 'current_page';
diff --git a/lib/internal/Magento/Framework/App/Action/AbstractAction.php b/lib/internal/Magento/Framework/App/Action/AbstractAction.php
index 50316c770caf622e4b3eb3c2158c78d900377380..b0027ca824ec085480664fcbfe0ce6d36e0c60bd 100644
--- a/lib/internal/Magento/Framework/App/Action/AbstractAction.php
+++ b/lib/internal/Magento/Framework/App/Action/AbstractAction.php
@@ -20,15 +20,19 @@ abstract class AbstractAction implements \Magento\Framework\App\ActionInterface
     protected $_response;
 
     /**
-     * @param \Magento\Framework\App\RequestInterface $request
-     * @param \Magento\Framework\App\ResponseInterface $response
+     * @var \Magento\Framework\Controller\Result\RedirectFactory
+     */
+    protected $resultRedirectFactory;
+
+    /**
+     * @param \Magento\Framework\App\Action\Context $context
      */
     public function __construct(
-        \Magento\Framework\App\RequestInterface $request,
-        \Magento\Framework\App\ResponseInterface $response
+        \Magento\Framework\App\Action\Context $context
     ) {
-        $this->_request = $request;
-        $this->_response = $response;
+        $this->_request = $context->getRequest();
+        $this->_response = $context->getResponse();
+        $this->resultRedirectFactory = $context->getResultRedirectFactory();
     }
 
     /**
@@ -50,4 +54,15 @@ abstract class AbstractAction implements \Magento\Framework\App\ActionInterface
     {
         return $this->_response;
     }
+
+    /**
+     * Create redirect object, which can be used to redirect user to previous or main page
+     *
+     * @return \Magento\Framework\Controller\ResultInterface
+     */
+    public function getDefaultResult()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setRefererOrBaseUrl();
+    }
 }
diff --git a/lib/internal/Magento/Framework/App/Action/Action.php b/lib/internal/Magento/Framework/App/Action/Action.php
index 38e64f43b23e06331703729e065501a48a2628c7..3334b9c810db4de3933b93d4a6adb8ae1cd4eafa 100644
--- a/lib/internal/Magento/Framework/App/Action/Action.php
+++ b/lib/internal/Magento/Framework/App/Action/Action.php
@@ -7,6 +7,7 @@ namespace Magento\Framework\App\Action;
 
 use Magento\Framework\App\RequestInterface;
 use Magento\Framework\App\ResponseInterface;
+use Magento\Framework\Exception\NotFoundException;
 
 /**
  * Default implementation of application action controller
@@ -65,7 +66,7 @@ class Action extends AbstractAction
      */
     public function __construct(Context $context)
     {
-        parent::__construct($context->getRequest(), $context->getResponse());
+        parent::__construct($context);
         $this->_objectManager = $context->getObjectManager();
         $this->_eventManager = $context->getEventManager();
         $this->_url = $context->getUrl();
diff --git a/lib/internal/Magento/Framework/App/Action/Context.php b/lib/internal/Magento/Framework/App/Action/Context.php
index a27f3862ecb23375bd0c984f053ce043347a6ca2..22aef5cc083c9dd8278100b6afcd6fffc6858884 100644
--- a/lib/internal/Magento/Framework/App/Action/Context.php
+++ b/lib/internal/Magento/Framework/App/Action/Context.php
@@ -52,6 +52,11 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
      */
     protected $messageManager;
 
+    /**
+     * @var \Magento\Framework\Controller\Result\RedirectFactory
+     */
+    protected $resultRedirectFactory;
+
     /**
      * @param \Magento\Framework\App\RequestInterface $request
      * @param \Magento\Framework\App\ResponseInterface $response
@@ -62,6 +67,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
      * @param \Magento\Framework\App\ActionFlag $actionFlag
      * @param \Magento\Framework\App\ViewInterface $view
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
+     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -74,7 +80,8 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
         \Magento\Framework\App\Response\RedirectInterface $redirect,
         \Magento\Framework\App\ActionFlag $actionFlag,
         \Magento\Framework\App\ViewInterface $view,
-        \Magento\Framework\Message\ManagerInterface $messageManager
+        \Magento\Framework\Message\ManagerInterface $messageManager,
+        \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
     ) {
         $this->_request = $request;
         $this->_response = $response;
@@ -85,6 +92,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
         $this->_actionFlag = $actionFlag;
         $this->_view = $view;
         $this->messageManager = $messageManager;
+        $this->resultRedirectFactory = $resultRedirectFactory;
     }
 
     /**
@@ -158,4 +166,12 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     {
         return $this->messageManager;
     }
+
+    /**
+     * @return \Magento\Framework\Controller\Result\RedirectFactory
+     */
+    public function getResultRedirectFactory()
+    {
+        return $this->resultRedirectFactory;
+    }
 }
diff --git a/lib/internal/Magento/Framework/App/Action/Exception.php b/lib/internal/Magento/Framework/App/Action/Exception.php
deleted file mode 100644
index 12389da51db102683520c8dcdff6698f59dd6579..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/App/Action/Exception.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/**
- * Generic application action exception
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\App\Action;
-
-class Exception extends \Exception
-{
-}
diff --git a/lib/internal/Magento/Framework/App/ActionInterface.php b/lib/internal/Magento/Framework/App/ActionInterface.php
index b26a3f898f68f382c36786314b7f3c67c0b0764a..7e30034efded484f62bdb75b54e909db99adaba5 100644
--- a/lib/internal/Magento/Framework/App/ActionInterface.php
+++ b/lib/internal/Magento/Framework/App/ActionInterface.php
@@ -24,7 +24,7 @@ interface ActionInterface
      *
      * @param RequestInterface $request
      * @return \Magento\Framework\Controller\ResultInterface|ResponseInterface
-     * @throws Action\NotFoundException
+     * @throws \Magento\Framework\Exception\NotFoundException
      */
     public function dispatch(RequestInterface $request);
 
@@ -34,4 +34,14 @@ interface ActionInterface
      * @return ResponseInterface
      */
     public function getResponse();
+
+    /**
+     * Get default result object
+     *
+     * Method is invoked to return default result of action execution within controllers.
+     * Can be used to generate 'execute' method result in action controllers.
+     *
+     * @return \Magento\Framework\Controller\ResultInterface
+     */
+    public function getDefaultResult();
 }
diff --git a/lib/internal/Magento/Framework/App/Arguments/ArgumentInterpreter.php b/lib/internal/Magento/Framework/App/Arguments/ArgumentInterpreter.php
index 572da3906610af05e902e3137ab424018a9a229c..269c5b860c0b4369c3ebd680570ec1b31a24a9b2 100644
--- a/lib/internal/Magento/Framework/App/Arguments/ArgumentInterpreter.php
+++ b/lib/internal/Magento/Framework/App/Arguments/ArgumentInterpreter.php
@@ -7,7 +7,6 @@ namespace Magento\Framework\App\Arguments;
 
 use Magento\Framework\Data\Argument\Interpreter\Constant;
 use Magento\Framework\Data\Argument\InterpreterInterface;
-use Magento\Framework\Data\Argument\MissingOptionalValueException;
 
 /**
  * Interpreter that returns value of an application argument, retrieving its name from a constant
@@ -30,7 +29,6 @@ class ArgumentInterpreter implements InterpreterInterface
     /**
      * {@inheritdoc}
      * @return mixed
-     * @throws MissingOptionalValueException
      */
     public function evaluate(array $data)
     {
diff --git a/lib/internal/Magento/Framework/App/Config/Initial/Reader.php b/lib/internal/Magento/Framework/App/Config/Initial/Reader.php
index f92e4da1d99d69ee2eb19763329e0a8c71abb12a..d907d22223e42370c3c1881b04f6fa21b472073e 100644
--- a/lib/internal/Magento/Framework/App/Config/Initial/Reader.php
+++ b/lib/internal/Magento/Framework/App/Config/Initial/Reader.php
@@ -79,7 +79,7 @@ class Reader
      *
      * @return array
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function read()
     {
@@ -106,7 +106,9 @@ class Reader
                     $domDocument->merge($file);
                 }
             } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
-                throw new \Magento\Framework\Exception("Invalid XML in file " . $file . ":\n" . $e->getMessage());
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase("Invalid XML in file %1:\n%2", [$file, $e->getMessage()])
+                );
             }
         }
 
diff --git a/lib/internal/Magento/Framework/App/FrontController.php b/lib/internal/Magento/Framework/App/FrontController.php
old mode 100644
new mode 100755
index 91984933ca4e10f79ffa3b3a05ba7d06595e1cb5..d8d85460a66efb86f05264f879de30724a395d27
--- a/lib/internal/Magento/Framework/App/FrontController.php
+++ b/lib/internal/Magento/Framework/App/FrontController.php
@@ -7,6 +7,9 @@
  */
 namespace Magento\Framework\App;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class FrontController implements FrontControllerInterface
 {
     /**
@@ -14,12 +17,41 @@ class FrontController implements FrontControllerInterface
      */
     protected $_routerList;
 
+    /**
+     * Application state
+     *
+     * @var State
+     */
+    protected $appState;
+
+    /**
+     * Message manager
+     *
+     * @var \Magento\Framework\Message\ManagerInterface
+     */
+    protected $messageManager;
+
+    /**
+     * @var \Psr\Log\LoggerInterface
+     */
+    protected $logger;
+
     /**
      * @param RouterList $routerList
+     * @param State $appState
+     * @param \Magento\Framework\Message\ManagerInterface $messageManager
+     * @param \Psr\Log\LoggerInterface $logger
      */
-    public function __construct(RouterList $routerList)
-    {
+    public function __construct(
+        RouterList $routerList,
+        State $appState,
+        \Magento\Framework\Message\ManagerInterface $messageManager,
+        \Psr\Log\LoggerInterface $logger
+    ) {
         $this->_routerList = $routerList;
+        $this->appState = $appState;
+        $this->messageManager = $messageManager;
+        $this->logger = $logger;
     }
 
     /**
@@ -35,28 +67,65 @@ class FrontController implements FrontControllerInterface
         $routingCycleCounter = 0;
         $result = null;
         while (!$request->isDispatched() && $routingCycleCounter++ < 100) {
-            /** @var \Magento\Framework\App\RouterInterface $router */
-            foreach ($this->_routerList as $router) {
-                try {
-                    $actionInstance = $router->match($request);
-                    if ($actionInstance) {
-                        $request->setDispatched(true);
-                        $actionInstance->getResponse()->setNoCacheHeaders();
+            $result = $this->processRequest($request);
+        }
+        \Magento\Framework\Profiler::stop('routers_match');
+        if ($routingCycleCounter > 100) {
+            throw new \LogicException('Front controller reached 100 router match iterations');
+        }
+        return $result;
+    }
+
+    /**
+     * Handle exception
+     *
+     * @param \Exception $e
+     * @return void
+     */
+    protected function handleException($e)
+    {
+        $needToMaskDisplayMessage = !($e instanceof \Magento\Framework\Exception\LocalizedException)
+            && ($this->appState->getMode() != State::MODE_DEVELOPER);
+        $displayMessage = $needToMaskDisplayMessage
+            ? (string)new \Magento\Framework\Phrase('An error occurred while processing your request')
+            : $e->getMessage();
+        $this->messageManager->addError($displayMessage);
+        $this->logger->critical($e->getMessage());
+    }
+
+    /**
+     * Route request and dispatch it
+     *
+     * @param RequestInterface $request
+     * @return ResponseInterface|\Magento\Framework\Controller\ResultInterface|null
+     */
+    protected function processRequest(RequestInterface $request)
+    {
+        $result = null;
+        /** @var \Magento\Framework\App\RouterInterface $router */
+        foreach ($this->_routerList as $router) {
+            try {
+                $actionInstance = $router->match($request);
+                if ($actionInstance) {
+                    $request->setDispatched(true);
+                    $actionInstance->getResponse()->setNoCacheHeaders();
+                    try {
                         $result = $actionInstance->dispatch($request);
-                        break;
+                    } catch (\Magento\Framework\Exception\NotFoundException $e) {
+                        throw $e;
+                    } catch (\Exception $e) {
+                        $this->handleException($e);
+                        $result = $actionInstance->getDefaultResult();
                     }
-                } catch (Action\NotFoundException $e) {
-                    $request->initForward();
-                    $request->setActionName('noroute');
-                    $request->setDispatched(false);
                     break;
                 }
+            } catch (\Magento\Framework\Exception\NotFoundException $e) {
+                $request->initForward();
+                $request->setActionName('noroute');
+                $request->setDispatched(false);
+                break;
             }
         }
-        \Magento\Framework\Profiler::stop('routers_match');
-        if ($routingCycleCounter > 100) {
-            throw new \LogicException('Front controller reached 100 router match iterations');
-        }
         return $result;
     }
 }
diff --git a/lib/internal/Magento/Framework/App/Http.php b/lib/internal/Magento/Framework/App/Http.php
index 54a71efa0c038bf015b91fa505fc73dd37cad368..755131e2309d36bd3af5c3cd9dbeb52e6a1d9468 100644
--- a/lib/internal/Magento/Framework/App/Http.php
+++ b/lib/internal/Magento/Framework/App/Http.php
@@ -224,7 +224,7 @@ class Http implements \Magento\Framework\AppInterface
      */
     private function handleSessionException(\Exception $exception)
     {
-        if ($exception instanceof \Magento\Framework\Session\Exception) {
+        if ($exception instanceof \Magento\Framework\Exception\SessionException) {
             $this->_response->setRedirect($this->_request->getDistroBaseUrl());
             $this->_response->sendHeaders();
             return true;
@@ -240,7 +240,7 @@ class Http implements \Magento\Framework\AppInterface
      */
     private function handleInitException(\Exception $exception)
     {
-        if ($exception instanceof \Magento\Framework\App\InitException) {
+        if ($exception instanceof \Magento\Framework\Exception\State\InitException) {
             require $this->_filesystem->getDirectoryRead(DirectoryList::PUB)->getAbsolutePath('errors/404.php');
             return true;
         }
diff --git a/lib/internal/Magento/Framework/App/Language/Config.php b/lib/internal/Magento/Framework/App/Language/Config.php
index 880121b1647cbf02c747e2679ba7247556250c33..62c29d8f23b4c85635200af4ba67d6d5028ad579 100644
--- a/lib/internal/Magento/Framework/App/Language/Config.php
+++ b/lib/internal/Magento/Framework/App/Language/Config.php
@@ -24,7 +24,7 @@ class Config
      * Constructor
      *
      * @param string $source
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct($source)
     {
@@ -32,7 +32,9 @@ class Config
         $config->loadXML($source);
         $errors = Dom::validateDomDocument($config, $this->getSchemaFile());
         if (!empty($errors)) {
-            throw new \Magento\Framework\Exception("Invalid Document: \n" . implode("\n", $errors));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase("Invalid Document: \n%1", [implode("\n", $errors)])
+            );
         }
         $this->_data = $this->_extractData($config);
     }
diff --git a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php
index 661f5033dd3398af31db576478b12a4b2f4811b7..cadb92355d1657c6a5b0961dffb09c2aab091b9e 100644
--- a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php
+++ b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php
@@ -229,7 +229,7 @@ class ObjectManagerFactory
      * @param mixed $argumentMapper
      * @param string $appMode
      * @return array
-     * @throws \Magento\Framework\App\InitException
+     * @throws \Magento\Framework\Exception\State\InitException
      */
     protected function _loadPrimaryConfig(DirectoryList $directoryList, $driverPool, $argumentMapper, $appMode)
     {
@@ -254,7 +254,10 @@ class ObjectManagerFactory
             );
             $configData = $reader->read('primary');
         } catch (\Exception $e) {
-            throw new \Magento\Framework\App\InitException($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\State\InitException(
+                new \Magento\Framework\Phrase($e->getMessage()),
+                $e
+            );
         }
         return $configData;
     }
diff --git a/lib/internal/Magento/Framework/App/Response/Http.php b/lib/internal/Magento/Framework/App/Response/Http.php
index 63da363b6dacb2fb0632d4b3f082f23981a35a4f..6b510679daadc5b371fcf9c67f36ddfa7487ea1f 100644
--- a/lib/internal/Magento/Framework/App/Response/Http.php
+++ b/lib/internal/Magento/Framework/App/Response/Http.php
@@ -11,42 +11,44 @@ use Magento\Framework\App\Http\Context;
 use Magento\Framework\App\ObjectManager;
 use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
 use Magento\Framework\Stdlib\CookieManagerInterface;
+use Magento\Framework\Stdlib\DateTime;
 
 class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
 {
-    /**
-     * Cookie to store page vary string
-     */
+    /** Cookie to store page vary string */
     const COOKIE_VARY_STRING = 'X-Magento-Vary';
 
-    /**
-     * @var \Magento\Framework\Stdlib\CookieManagerInterface
-     */
+    /** Format for expiration timestamp headers */
+    const EXPIRATION_TIMESTAMP_FORMAT = 'D, d M Y H:i:s T';
+
+    /** @var \Magento\Framework\Stdlib\CookieManagerInterface */
     protected $cookieManager;
 
-    /**
-     * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
-     */
+    /** @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory */
     protected $cookieMetadataFactory;
 
-    /**
-     * @var \Magento\Framework\App\Http\Context
-     */
+    /** @var \Magento\Framework\App\Http\Context */
     protected $context;
 
+    /** @var DateTime */
+    protected $dateTime;
+
     /**
      * @param CookieManagerInterface $cookieManager
      * @param CookieMetadataFactory $cookieMetadataFactory
      * @param Context $context
+     * @param DateTime $dateTime
      */
     public function __construct(
         CookieManagerInterface $cookieManager,
         CookieMetadataFactory $cookieMetadataFactory,
-        Context $context
+        Context $context,
+        DateTime $dateTime
     ) {
         $this->cookieManager = $cookieManager;
         $this->cookieMetadataFactory = $cookieMetadataFactory;
         $this->context = $context;
+        $this->dateTime = $dateTime;
     }
 
     /**
@@ -97,7 +99,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
         }
         $this->setHeader('pragma', 'cache', true);
         $this->setHeader('cache-control', 'public, max-age=' . $ttl . ', s-maxage=' . $ttl, true);
-        $this->setHeader('expires', gmdate('D, d M Y H:i:s T', strtotime('+' . $ttl . ' seconds')), true);
+        $this->setHeader('expires', $this->getExpirationHeader('+' . $ttl . ' seconds'), true);
     }
 
     /**
@@ -114,7 +116,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
         }
         $this->setHeader('pragma', 'cache', true);
         $this->setHeader('cache-control', 'private, max-age=' . $ttl, true);
-        $this->setHeader('expires', gmdate('D, d M Y H:i:s T', strtotime('+' . $ttl . ' seconds')), true);
+        $this->setHeader('expires', $this->getExpirationHeader('+' . $ttl . ' seconds'), true);
     }
 
     /**
@@ -126,7 +128,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
     {
         $this->setHeader('pragma', 'no-cache', true);
         $this->setHeader('cache-control', 'no-store, no-cache, must-revalidate, max-age=0', true);
-        $this->setHeader('expires', gmdate('D, d M Y H:i:s T', strtotime('-1 year')), true);
+        $this->setHeader('expires', $this->getExpirationHeader('-1 year'), true);
     }
 
     /**
@@ -160,4 +162,15 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
         $this->cookieManager = $objectManager->create('Magento\Framework\Stdlib\CookieManagerInterface');
         $this->cookieMetadataFactory = $objectManager->get('Magento\Framework\Stdlib\Cookie\CookieMetadataFactory');
     }
+
+    /**
+     * Given a time input, returns the formatted header
+     *
+     * @param string $time
+     * @return string
+     */
+    protected function getExpirationHeader($time)
+    {
+        return $this->dateTime->gmDate(self::EXPIRATION_TIMESTAMP_FORMAT, $this->dateTime->strToTime($time));
+    }
 }
diff --git a/lib/internal/Magento/Framework/App/State.php b/lib/internal/Magento/Framework/App/State.php
index 6fcd7348336433cddb967ae824612a2b57437f95..727b30c68245e7bd24d7c046b18fb4a20398ce73 100644
--- a/lib/internal/Magento/Framework/App/State.php
+++ b/lib/internal/Magento/Framework/App/State.php
@@ -129,12 +129,14 @@ class State
      *
      * @param string $code
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function setAreaCode($code)
     {
         if (isset($this->_areaCode)) {
-            throw new \Magento\Framework\Exception('Area code is already set');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Area code is already set')
+            );
         }
         $this->_configScope->setCurrentScope($code);
         $this->_areaCode = $code;
@@ -144,12 +146,14 @@ class State
      * Get area code
      *
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getAreaCode()
     {
         if (!isset($this->_areaCode)) {
-            throw new \Magento\Framework\Exception('Area code is not set');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Area code is not set')
+            );
         }
         return $this->_areaCode;
     }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Action/AbstractActionTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Action/AbstractActionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..94b705692c7ccf4e39764dcc1c6a6a8d455a8f56
--- /dev/null
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Action/AbstractActionTest.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\Test\Unit\Action;
+
+class AbstractActionTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Framework\App\Action\AbstractAction|\PHPUnit_Framework_MockObject_MockObject */
+    protected $action;
+
+    /** @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $request;
+
+    /** @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $response;
+
+    /** @var \Magento\Framework\App\Response\RedirectInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $redirectFactory;
+
+    /** @var \Magento\Framework\Controller\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject */
+    protected $redirect;
+
+    /** @var \Magento\Framework\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject */
+    protected $context;
+
+    public function setUp()
+    {
+        $this->request = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->disableOriginalConstructor()->getMock();
+        $this->response = $this->getMock('Magento\Framework\App\ResponseInterface', [], [], '', false);
+
+        $this->redirect = $this->getMockBuilder('Magento\Framework\Controller\Result\Redirect')
+            ->setMethods(['setRefererOrBaseUrl'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->redirectFactory = $this->getMockBuilder('Magento\Backend\Model\View\Result\RedirectFactory')
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->redirectFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->redirect);
+
+        $this->context = $this->getMockBuilder('Magento\Framework\App\Action\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->willReturn($this->redirectFactory);
+
+        $this->action = $this->getMockForAbstractClass('Magento\Framework\App\Action\AbstractAction', [$this->context]);
+    }
+
+    public function testGetDefaultRedirect()
+    {
+        $expectedResult = '/index';
+
+        $this->redirect->expects($this->once())
+            ->method('setRefererOrBaseUrl')
+            ->willReturn('/index');
+
+        $result = $this->action->getDefaultResult();
+        $this->assertSame($expectedResult, $result);
+    }
+}
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php
index 4edbfaa6d8f0d87e0bb3469a16fe1fd98997133e..2d15e0a290b338531cb4ff742fe18453df84f940 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php
@@ -69,7 +69,7 @@ class ForwardTest extends \PHPUnit_Framework_TestCase
      * Test for getRequest method
      *
      * @test
-     * covers \Magento\Framework\App\Action\AbstractAction::getRequest
+     * @covers \Magento\Framework\App\Action\AbstractAction::getRequest
      */
     public function testGetRequest()
     {
@@ -80,7 +80,7 @@ class ForwardTest extends \PHPUnit_Framework_TestCase
      * Test for getResponse method
      *
      * @test
-     * covers \Magento\Framework\App\Action\AbstractAction::getResponse
+     * @covers \Magento\Framework\App\Action\AbstractAction::getResponse
      */
     public function testGetResponse()
     {
@@ -91,7 +91,7 @@ class ForwardTest extends \PHPUnit_Framework_TestCase
      * Test for getResponse med. Checks that response headers are set correctly
      *
      * @test
-     * covers \Magento\Framework\App\Action\AbstractAction::getResponse
+     * @covers \Magento\Framework\App\Action\AbstractAction::getResponse
      */
     public function testResponseHeaders()
     {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Config/Data/ProcessorFactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Config/Data/ProcessorFactoryTest.php
index 57fd0ee41591c4434e98315b5d4ce20ba57b3de6..ad6a1d918ab8eb4edaff2a113950e4b3130ab68c 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Config/Data/ProcessorFactoryTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Config/Data/ProcessorFactoryTest.php
@@ -30,7 +30,7 @@ class ProcessorFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\App\Config\Data\ProcessorFactory::get
+     * @covers \Magento\Framework\App\Config\Data\ProcessorFactory::get
      */
     public function testGetModelWithCorrectInterface()
     {
@@ -51,7 +51,7 @@ class ProcessorFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\App\Config\Data\ProcessorFactory::get
+     * @covers \Magento\Framework\App\Config\Data\ProcessorFactory::get
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessageRegExp /\w+\\WrongBackendModel is not instance of \w+\\ProcessorInterface/
      */
@@ -73,7 +73,7 @@ class ProcessorFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\App\Config\Data\ProcessorFactory::get
+     * @covers \Magento\Framework\App\Config\Data\ProcessorFactory::get
      */
     public function testGetMemoryCache()
     {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php
index 3a9f2ac7cb7f9c3244ec29578d07d005d89e4c38..4c1fde2796bf5ab0b2ba6f64875c808055f18255 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php
@@ -66,7 +66,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\App\Config\Initial\Reader::read
+     * @covers \Magento\Framework\App\Config\Initial\Reader::read
      */
     public function testReadNoFiles()
     {
@@ -80,7 +80,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\App\Config\Initial\Reader::read
+     * @covers \Magento\Framework\App\Config\Initial\Reader::read
      */
     public function testReadValidConfig()
     {
@@ -106,7 +106,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @covers \Magento\Framework\App\Config\Initial\Reader::read
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessageRegExp /Invalid XML in file \w+/
      */
     public function testReadInvalidConfig()
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Filesystem/DirectoryListTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Filesystem/DirectoryListTest.php
index 767595240e133484df05f6522850758f770b8e0f..d426fa8b1867537d99a59b1f535447a4f7439616 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Filesystem/DirectoryListTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Filesystem/DirectoryListTest.php
@@ -24,7 +24,7 @@ class DirectoryListTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('/root/dir/foo', $object->getPath(DirectoryList::APP));
         $this->assertEquals('bar', $object->getUrlPath(DirectoryList::APP));
         $this->setExpectedException(
-            '\Magento\Framework\Filesystem\FilesystemException',
+            '\Magento\Framework\Exception\FileSystemException',
             "Unknown directory type: 'unknown'"
         );
         $object->getPath('unknown');
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php b/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php
old mode 100644
new mode 100755
index e2ebe0d3bc3897a5f0d7e6b55b6fbd11140d6a99..160256bf81e3e753fda23d01c360e0360009757c
--- a/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php
@@ -5,7 +5,8 @@
  */
 namespace Magento\Framework\App\Test\Unit;
 
-use Magento\Framework\App\Action\NotFoundException;
+use Magento\Framework\Exception\NotFoundException;
+use Magento\Framework\App\State;
 
 class FrontControllerTest extends \PHPUnit_Framework_TestCase
 {
@@ -29,6 +30,26 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
      */
     protected $router;
 
+    /**
+     * @var \Magento\Framework\Controller\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirect;
+
+    /**
+     * @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $messageManager;
+
+    /**
+     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $logger;
+
+    /**
+     * @var State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $appState;
+
     protected function setUp()
     {
         $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
@@ -38,7 +59,19 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
 
         $this->router = $this->getMock('Magento\Framework\App\RouterInterface');
         $this->routerList = $this->getMock('Magento\Framework\App\RouterList', [], [], '', false);
-        $this->model = new \Magento\Framework\App\FrontController($this->routerList);
+        $this->messageManager = $this->getMock('Magento\Framework\Message\ManagerInterface', [], [], '', false);
+        $this->logger = $this->getMock('Psr\Log\LoggerInterface', [], [], '', false);
+        $this->appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
+        $this->model = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))
+            ->getObject(
+                'Magento\Framework\App\FrontController',
+                [
+                    'routerList' => $this->routerList,
+                    'messageManager' => $this->messageManager,
+                    'logger' => $this->logger,
+                    'appState' => $this->appState
+                ]
+            );
     }
 
     /**
@@ -120,7 +153,7 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
         $this->router->expects($this->at(0))
             ->method('match')
             ->with($this->request)
-            ->will($this->throwException(new NotFoundException()));
+            ->willThrowException(new NotFoundException(new \Magento\Framework\Phrase('Page not found.')));
         $this->router->expects($this->at(1))
             ->method('match')
             ->with($this->request)
@@ -140,4 +173,103 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($response, $this->model->dispatch($this->request));
     }
+
+    public function testDispatchedLocalizedException()
+    {
+        $message = 'Test';
+        $this->routerList->expects($this->any())
+            ->method('valid')
+            ->willReturn(true);
+
+        $this->resultRedirect = $this->getMock('Magento\Framework\Controller\Result\Redirect', [], [], '', false);
+
+        $response = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
+        $controllerInstance = $this->getMock('Magento\Framework\App\ActionInterface');
+        $controllerInstance->expects($this->any())
+            ->method('getResponse')
+            ->willReturn($response);
+        $controllerInstance->expects($this->any())
+            ->method('dispatch')
+            ->with($this->request)
+            ->willThrowException(
+                new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase($message))
+            );
+        $controllerInstance->expects($this->once())->method('getDefaultResult')->willReturn($this->resultRedirect);
+
+        $this->router->expects($this->once())
+            ->method('match')
+            ->with($this->request)
+            ->willReturn($controllerInstance);
+
+        $this->routerList->expects($this->any())
+            ->method('current')
+            ->willReturn($this->router);
+
+        $this->request->expects($this->at(0))->method('isDispatched')->willReturn(false);
+        $this->request->expects($this->once())->method('setDispatched')->with(true);
+        $this->request->expects($this->at(2))->method('isDispatched')->willReturn(true);
+
+        $this->messageManager->expects($this->once())->method('addError')->with($message);
+        $this->logger->expects($this->once())->method('critical')->with($message);
+
+        $this->assertEquals($this->resultRedirect, $this->model->dispatch($this->request));
+    }
+
+    /**
+     * @param string $mode
+     * @param string $exceptionMessage
+     * @param string $sessionMessage
+     * @dataProvider dispatchedWithPhpExceptionDataProvider
+     */
+    public function testDispatchedPhpException($mode, $exceptionMessage, $sessionMessage)
+    {
+        $this->routerList->expects($this->any())
+            ->method('valid')
+            ->willReturn(true);
+
+        $this->resultRedirect = $this->getMock('Magento\Framework\Controller\Result\Redirect', [], [], '', false);
+
+        $response = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
+        $controllerInstance = $this->getMock('Magento\Framework\App\ActionInterface');
+        $controllerInstance->expects($this->any())
+            ->method('getResponse')
+            ->willReturn($response);
+        $controllerInstance->expects($this->any())
+            ->method('dispatch')
+            ->with($this->request)
+            ->willThrowException(new \Exception(new \Magento\Framework\Phrase($exceptionMessage)));
+        $controllerInstance->expects($this->once())->method('getDefaultResult')->willReturn($this->resultRedirect);
+
+        $this->router->expects($this->once())
+            ->method('match')
+            ->with($this->request)
+            ->willReturn($controllerInstance);
+
+        $this->routerList->expects($this->any())
+            ->method('current')
+            ->willReturn($this->router);
+
+        $this->request->expects($this->at(0))->method('isDispatched')->willReturn(false);
+        $this->request->expects($this->once())->method('setDispatched')->with(true);
+        $this->request->expects($this->at(2))->method('isDispatched')->willReturn(true);
+
+        $this->appState->expects($this->once())->method('getMode')->willReturn($mode);
+
+        $this->messageManager->expects($this->once())->method('addError')->with($sessionMessage);
+        $this->logger->expects($this->once())->method('critical')->with($exceptionMessage);
+
+        $this->assertEquals($this->resultRedirect, $this->model->dispatch($this->request));
+    }
+
+    /**
+     * @return array
+     */
+    public function dispatchedWithPhpExceptionDataProvider()
+    {
+        return [
+            [State::MODE_DEVELOPER, 'Test', 'Test'],
+            [State::MODE_DEFAULT, 'Test', 'An error occurred while processing your request'],
+            [State::MODE_PRODUCTION, 'Test', 'An error occurred while processing your request'],
+        ];
+    }
 }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/HttpTest.php b/lib/internal/Magento/Framework/App/Test/Unit/HttpTest.php
index 2d071943fbd8e52d2c5dff474d926490a62c942d..202cc71761b318a577e6b50b38722ba68fc13a3e 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/HttpTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/HttpTest.php
@@ -199,7 +199,10 @@ class HttpTest extends \PHPUnit_Framework_TestCase
         $this->responseMock->expects($this->once())->method('sendHeaders');
         $bootstrap = $this->getMock('Magento\Framework\App\Bootstrap', [], [], '', false);
         $bootstrap->expects($this->once())->method('isDeveloperMode')->willReturn(false);
-        $this->assertTrue($this->http->catchException($bootstrap, new \Magento\Framework\Session\Exception('Test')));
+        $this->assertTrue($this->http->catchException(
+            $bootstrap,
+            new \Magento\Framework\Exception\SessionException(new \Magento\Framework\Phrase('Test'))
+        ));
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ObjectManagerFactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ObjectManagerFactoryTest.php
index cf75953d4e19b00374317c73c5001089858a1b0f..c40dd4a1c0502eb7dc323f9a303f5cef1b3ee3ab 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/ObjectManagerFactoryTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ObjectManagerFactoryTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\App\Test\Unit;
 use Magento\Framework\App\Bootstrap;
 
 /**
- * covers \Magento\Framework\App\ObjectManagerFactory
+ * @covers \Magento\Framework\App\ObjectManagerFactory
  */
 class ObjectManagerFactoryTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/RequestFactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/RequestFactoryTest.php
index 580d803d52b6e7ffdba9f7bed22abef16ec31e4f..b1c7db53cb92a122492239cbf9ad4bc7a5671d1d 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/RequestFactoryTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/RequestFactoryTest.php
@@ -26,8 +26,8 @@ class RequestFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\App\RequestFactory::__construct
-     * covers \Magento\Framework\App\RequestFactory::create
+     * @covers \Magento\Framework\App\RequestFactory::__construct
+     * @covers \Magento\Framework\App\RequestFactory::create
      */
     public function testCreate()
     {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php
index 26d126e7b5692febfe28dcad162c56fabd99d20b..3fb38007f0a56a0152d2caabd4e0f3109551e0dd 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php
@@ -13,7 +13,7 @@ use \Magento\Framework\App\Response\Http;
 class HttpTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Response\Http
+     * @var Http
      */
     protected $model;
 
@@ -32,6 +32,9 @@ class HttpTest extends \PHPUnit_Framework_TestCase
      */
     protected $contextMock;
 
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Http\Context */
+    protected $dateTimeMock;
+
     protected function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -41,12 +44,18 @@ class HttpTest extends \PHPUnit_Framework_TestCase
         $this->cookieManagerMock = $this->getMock('Magento\Framework\Stdlib\CookieManagerInterface');
         $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Http\Context')->disableOriginalConstructor()
             ->getMock();
+
+        $this->dateTimeMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime')
+            ->disableOriginalConstructor()
+            ->getMock();
+
         $this->model = $objectManager->getObject(
             'Magento\Framework\App\Response\Http',
             [
                 'cookieManager' => $this->cookieManagerMock,
                 'cookieMetadataFactory' => $this->cookieMetadataFactoryMock,
-                'context' => $this->contextMock
+                'context' => $this->contextMock,
+                'dateTime' => $this->dateTimeMock
             ]
         );
         $this->model->headersSentThrowsException = false;
@@ -118,14 +127,24 @@ class HttpTest extends \PHPUnit_Framework_TestCase
     public function testSetPublicHeaders()
     {
         $ttl = 120;
+        $timestamp = 1000000;
         $pragma = 'cache';
         $cacheControl = 'max-age=' . $ttl . ', public, s-maxage=' . $ttl;
-        $expiresResult = gmdate('D, d M Y H:i:s T', time() + $ttl);
+        $expiresResult ='Thu, 01 Jan 1970 00:00:00 GMT';
+
+        $this->dateTimeMock->expects($this->once())
+            ->method('strToTime')
+            ->with('+' . $ttl . ' seconds')
+            ->willReturn($timestamp);
+        $this->dateTimeMock->expects($this->once())
+            ->method('gmDate')
+            ->with(Http::EXPIRATION_TIMESTAMP_FORMAT, $timestamp)
+            ->willReturn($expiresResult);
 
         $this->model->setPublicHeaders($ttl);
         $this->assertEquals($pragma, $this->model->getHeader('Pragma')->getFieldValue());
         $this->assertEquals($cacheControl, $this->model->getHeader('Cache-Control')->getFieldValue());
-        $this->assertLessThanOrEqual($expiresResult, $this->model->getHeader('Expires')->getFieldValue());
+        $this->assertSame($expiresResult, $this->model->getHeader('Expires')->getFieldValue());
     }
 
     /**
@@ -146,14 +165,24 @@ class HttpTest extends \PHPUnit_Framework_TestCase
     public function testSetPrivateHeaders()
     {
         $ttl = 120;
+        $timestamp = 1000000;
         $pragma = 'cache';
         $cacheControl = 'max-age=' . $ttl . ', private';
-        $expires = gmdate('D, d M Y H:i:s T', strtotime('+' . $ttl . ' seconds'));
+        $expiresResult ='Thu, 01 Jan 1970 00:00:00 GMT';
+
+        $this->dateTimeMock->expects($this->once())
+            ->method('strToTime')
+            ->with('+' . $ttl . ' seconds')
+            ->willReturn($timestamp);
+        $this->dateTimeMock->expects($this->once())
+            ->method('gmDate')
+            ->with(Http::EXPIRATION_TIMESTAMP_FORMAT, $timestamp)
+            ->willReturn($expiresResult);
 
         $this->model->setPrivateHeaders($ttl);
         $this->assertEquals($pragma, $this->model->getHeader('Pragma')->getFieldValue());
         $this->assertEquals($cacheControl, $this->model->getHeader('Cache-Control')->getFieldValue());
-        $this->assertEquals($expires, $this->model->getHeader('Expires')->getFieldValue());
+        $this->assertEquals($expiresResult, $this->model->getHeader('Expires')->getFieldValue());
     }
 
     /**
@@ -173,14 +202,24 @@ class HttpTest extends \PHPUnit_Framework_TestCase
      */
     public function testSetNoCacheHeaders()
     {
+        $timestamp = 1000000;
         $pragma = 'no-cache';
         $cacheControl = 'max-age=0, must-revalidate, no-cache, no-store';
-        $expires = gmdate('D, d M Y H:i:s T', strtotime('-1 year'));
+        $expiresResult ='Thu, 01 Jan 1970 00:00:00 GMT';
+
+        $this->dateTimeMock->expects($this->once())
+            ->method('strToTime')
+            ->with('-1 year')
+            ->willReturn($timestamp);
+        $this->dateTimeMock->expects($this->once())
+            ->method('gmDate')
+            ->with(Http::EXPIRATION_TIMESTAMP_FORMAT, $timestamp)
+            ->willReturn($expiresResult);
 
         $this->model->setNoCacheHeaders();
         $this->assertEquals($pragma, $this->model->getHeader('Pragma')->getFieldValue());
         $this->assertEquals($cacheControl, $this->model->getHeader('Cache-Control')->getFieldValue());
-        $this->assertEquals($expires, $this->model->getHeader('Expires')->getFieldValue());
+        $this->assertEquals($expiresResult, $this->model->getHeader('Expires')->getFieldValue());
     }
 
     /**
@@ -215,7 +254,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase
     /**
      * Test for the magic method __wakeup
      *
-     * covers \Magento\Framework\App\Response\Http::__wakeup
+     * @covers \Magento\Framework\App\Response\Http::__wakeup
      */
     public function testWakeUpWith()
     {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php
old mode 100644
new mode 100755
index 187192828067e85d8e61020659aa0aee11f347fa..dcb70fc401949e9240de847aad4b2ba7412258b0
--- a/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php
@@ -112,7 +112,7 @@ class ActionListTest extends \PHPUnit_Framework_TestCase
         $mockClassName = 'Mock_Action_Class';
         $actionClass = $this->getMockClass(
             'Magento\Framework\App\ActionInterface',
-            ['dispatch', 'getResponse'],
+            ['dispatch', 'getResponse', 'getDefaultResult'],
             [],
             $mockClassName
         );
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ScopeResolverPoolTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ScopeResolverPoolTest.php
index d2a4bb622cece795f9f7dd5b06ab793ab517df3b..91e1ebbd3fc0bfe2c37fe2ecd12f7858f9023e77 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/ScopeResolverPoolTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ScopeResolverPoolTest.php
@@ -32,7 +32,7 @@ class ScopeResolverPoolTest extends \PHPUnit_Framework_TestCase
     /**
      * @param string $scope
      *
-     * covers \Magento\Framework\App\ScopeResolverPool::get()
+     * @covers \Magento\Framework\App\ScopeResolverPool::get()
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage Invalid scope type
      * @dataProvider testGetExceptionDataProvider
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/StateTest.php b/lib/internal/Magento/Framework/App/Test/Unit/StateTest.php
index e8066f086c37b02ba2a8c15caaedfb323d891c7c..4bc544940975d7043a8683587af2e8ea10efdc31 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/StateTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/StateTest.php
@@ -43,14 +43,14 @@ class StateTest extends \PHPUnit_Framework_TestCase
         $areaCode = 'some code';
         $this->scopeMock->expects($this->once())->method('setCurrentScope')->with($areaCode);
         $this->model->setAreaCode($areaCode);
-        $this->setExpectedException('Magento\Framework\Exception');
+        $this->setExpectedException('Magento\Framework\Exception\LocalizedException');
         $this->model->setAreaCode('any code');
     }
 
     public function testGetAreaCodeException()
     {
         $this->scopeMock->expects($this->never())->method('setCurrentScope');
-        $this->setExpectedException('Magento\Framework\Exception');
+        $this->setExpectedException('Magento\Framework\Exception\LocalizedException');
         $this->model->getAreaCode();
     }
 
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/Version/Storage/FileTest.php b/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/Version/Storage/FileTest.php
index 05a69a46d6d64021f6b4b0f49a7cef3356368c86..4683b8012302edfeb92644d357ca4956e1e6a494 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/Version/Storage/FileTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/Version/Storage/FileTest.php
@@ -62,7 +62,9 @@ class FileTest extends \PHPUnit_Framework_TestCase
      */
     public function testLoadExceptionWrapping()
     {
-        $filesystemException = new \Magento\Framework\Filesystem\FilesystemException('File does not exist');
+        $filesystemException = new \Magento\Framework\Exception\FileSystemException(
+            new \Magento\Framework\Phrase('File does not exist')
+        );
         $this->directory
             ->expects($this->once())
             ->method('readFile')
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/VersionTest.php b/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/VersionTest.php
old mode 100644
new mode 100755
index 94a8dcbcb22a93738bba019ae1e4c9d4e168cbe6..65e059a58a3158ec6e5a627ad6ed85923a0317ac
--- a/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/VersionTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/View/Deployment/VersionTest.php
@@ -8,7 +8,6 @@ namespace Magento\Framework\App\Test\Unit\View\Deployment;
 
 use \Magento\Framework\App\View\Deployment\Version;
 
-
 class VersionTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -40,7 +39,7 @@ class VersionTest extends \PHPUnit_Framework_TestCase
             ->method('getMode')
             ->will($this->returnValue(\Magento\Framework\App\State::MODE_DEVELOPER));
         $this->versionStorage->expects($this->never())->method($this->anything());
-        $this->assertEquals(time(), $this->object->getValue());
+        $this->assertInternalType('integer', $this->object->getValue());
         $this->object->getValue(); // Ensure computation occurs only once and result is cached in memory
     }
 
@@ -71,6 +70,7 @@ class VersionTest extends \PHPUnit_Framework_TestCase
 
     public function testGetValueDefaultModeSaving()
     {
+        $versionType = 'integer';
         $this->appState
             ->expects($this->once())
             ->method('getMode')
@@ -80,8 +80,8 @@ class VersionTest extends \PHPUnit_Framework_TestCase
             ->expects($this->once())
             ->method('load')
             ->will($this->throwException($storageException));
-        $this->versionStorage->expects($this->once())->method('save')->with(time());
-        $this->assertEquals(time(), $this->object->getValue());
+        $this->versionStorage->expects($this->once())->method('save')->with($this->isType($versionType));
+        $this->assertInternalType($versionType, $this->object->getValue());
         $this->object->getValue(); // Ensure caching in memory
     }
 }
diff --git a/lib/internal/Magento/Framework/App/View/Deployment/Version.php b/lib/internal/Magento/Framework/App/View/Deployment/Version.php
old mode 100644
new mode 100755
diff --git a/lib/internal/Magento/Framework/App/View/Deployment/Version/Storage/File.php b/lib/internal/Magento/Framework/App/View/Deployment/Version/Storage/File.php
index bf04e81dbc254027f258544ae958480ddd58510f..818eecb0040f5bec161b9b6c0bcb0b2b0f56c3d9 100644
--- a/lib/internal/Magento/Framework/App/View/Deployment/Version/Storage/File.php
+++ b/lib/internal/Magento/Framework/App/View/Deployment/Version/Storage/File.php
@@ -42,7 +42,7 @@ class File implements \Magento\Framework\App\View\Deployment\Version\StorageInte
     {
         try {
             return $this->directory->readFile($this->fileName);
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             throw new \UnexpectedValueException(
                 'Unable to retrieve deployment version of static files from the file system.',
                 0,
diff --git a/lib/internal/Magento/Framework/AppInterface.php b/lib/internal/Magento/Framework/AppInterface.php
index 7a6b7208d18d10202aaf90b210f7342466cc0111..8d7f705d6661566cdaef4c424cdb9a8a351dea29 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.42.0-beta11';
+    const VERSION = '0.74.0-beta2';
 
     /**
      * Launch application
diff --git a/lib/internal/Magento/Framework/Archive/AbstractArchive.php b/lib/internal/Magento/Framework/Archive/AbstractArchive.php
index 8ead7fd47b1172464ae4688179cedb58639c8476..9c8eed675fd1c2dfae7ff031c9301efbfaa30a6d 100644
--- a/lib/internal/Magento/Framework/Archive/AbstractArchive.php
+++ b/lib/internal/Magento/Framework/Archive/AbstractArchive.php
@@ -35,7 +35,7 @@ class AbstractArchive
      *
      * @param string $source
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _readFile($source)
     {
@@ -43,7 +43,9 @@ class AbstractArchive
         if (is_file($source) && is_readable($source)) {
             $data = @file_get_contents($source);
             if ($data === false) {
-                throw new \Magento\Framework\Exception("Can't get contents from: " . $source);
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase("Can't get contents from: %1", [$source])
+                );
             }
         }
         return $data;
diff --git a/lib/internal/Magento/Framework/Archive/Helper/File.php b/lib/internal/Magento/Framework/Archive/Helper/File.php
index f824c06a7b0410d0c13a9ea5aadd4b7c10143c27..549c3b8849fe73ba906f1fe643e8f45d2fae37bd 100644
--- a/lib/internal/Magento/Framework/Archive/Helper/File.php
+++ b/lib/internal/Magento/Framework/Archive/Helper/File.php
@@ -11,7 +11,7 @@
 */
 namespace Magento\Framework\Archive\Helper;
 
-use Magento\Framework\Exception as MagentoException;
+use Magento\Framework\Exception\LocalizedException as MagentoException;
 
 class File
 {
@@ -96,23 +96,32 @@ class File
 
         if ($this->_isInWriteMode) {
             if (!is_writable($this->_fileLocation)) {
-                throw new MagentoException('Permission denied to write to ' . $this->_fileLocation);
+                throw new MagentoException(
+                    new \Magento\Framework\Phrase('Permission denied to write to %1', [$this->_fileLocation])
+                );
             }
 
             if (is_file($this->_filePath) && !is_writable($this->_filePath)) {
                 throw new MagentoException(
-                    "Can't open file " . $this->_fileName . " for writing. Permission denied."
+                    new \Magento\Framework\Phrase(
+                        "Can't open file %1 for writing. Permission denied.",
+                        [$this->_fileName]
+                    )
                 );
             }
         }
 
         if ($this->_isReadableMode($mode) && (!is_file($this->_filePath) || !is_readable($this->_filePath))) {
             if (!is_file($this->_filePath)) {
-                throw new MagentoException('File ' . $this->_filePath . ' does not exist');
+                throw new MagentoException(
+                    new \Magento\Framework\Phrase('File %1 does not exist', [$this->_filePath])
+                );
             }
 
             if (!is_readable($this->_filePath)) {
-                throw new MagentoException('Permission denied to read file ' . $this->_filePath);
+                throw new MagentoException(
+                    new \Magento\Framework\Phrase('Permission denied to read file %1', [$this->_filePath])
+                );
             }
         }
 
@@ -189,7 +198,7 @@ class File
         $this->_fileHandler = @fopen($this->_filePath, $mode);
 
         if (false === $this->_fileHandler) {
-            throw new MagentoException('Failed to open file ' . $this->_filePath);
+            throw new MagentoException(new \Magento\Framework\Phrase('Failed to open file %1', [$this->_filePath]));
         }
     }
 
@@ -205,7 +214,7 @@ class File
         $result = @fwrite($this->_fileHandler, $data);
 
         if (false === $result) {
-            throw new MagentoException('Failed to write data to ' . $this->_filePath);
+            throw new MagentoException(new \Magento\Framework\Phrase('Failed to write data to %1', [$this->_filePath]));
         }
     }
 
@@ -221,7 +230,9 @@ class File
         $result = fread($this->_fileHandler, $length);
 
         if (false === $result) {
-            throw new MagentoException('Failed to read data from ' . $this->_filePath);
+            throw new MagentoException(
+                new \Magento\Framework\Phrase('Failed to read data from %1', [$this->_filePath])
+            );
         }
 
         return $result;
@@ -278,7 +289,7 @@ class File
     protected function _checkFileOpened()
     {
         if (!$this->_fileHandler) {
-            throw new MagentoException('File not opened');
+            throw new MagentoException(new \Magento\Framework\Phrase('File not opened'));
         }
     }
 }
diff --git a/lib/internal/Magento/Framework/Archive/Helper/File/Bz.php b/lib/internal/Magento/Framework/Archive/Helper/File/Bz.php
index 46452bfa6e49d91b84271c7dadff8ee4c05ffc74..ada3317e13918a89775f19a5cfd479277ab90ee1 100644
--- a/lib/internal/Magento/Framework/Archive/Helper/File/Bz.php
+++ b/lib/internal/Magento/Framework/Archive/Helper/File/Bz.php
@@ -23,7 +23,9 @@ class Bz extends \Magento\Framework\Archive\Helper\File
         $this->_fileHandler = bzopen($this->_filePath, $mode);
 
         if (false === $this->_fileHandler) {
-            throw new \Magento\Framework\Exception('Failed to open file ' . $this->_filePath);
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to open file ', [$this->_filePath])
+            );
         }
     }
 
@@ -35,7 +37,9 @@ class Bz extends \Magento\Framework\Archive\Helper\File
         $result = bzwrite($this->_fileHandler, $data);
 
         if (false === $result) {
-            throw new \Magento\Framework\Exception('Failed to write data to ' . $this->_filePath);
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to write data to ', [$this->_filePath])
+            );
         }
     }
 
@@ -47,7 +51,9 @@ class Bz extends \Magento\Framework\Archive\Helper\File
         $data = bzread($this->_fileHandler, $length);
 
         if (false === $data) {
-            throw new \Magento\Framework\Exception('Failed to read data from ' . $this->_filePath);
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to read data from ', [$this->_filePath])
+            );
         }
 
         return $data;
diff --git a/lib/internal/Magento/Framework/Archive/Helper/File/Gz.php b/lib/internal/Magento/Framework/Archive/Helper/File/Gz.php
index 52d18ed04f0430aa6206d48273fb01cd3ed6d4f7..dc5204d294785b0da90d778c72bfa703003957a6 100644
--- a/lib/internal/Magento/Framework/Archive/Helper/File/Gz.php
+++ b/lib/internal/Magento/Framework/Archive/Helper/File/Gz.php
@@ -25,7 +25,9 @@ class Gz extends \Magento\Framework\Archive\Helper\File
         $this->_fileHandler = gzopen($this->_filePath, $mode);
 
         if (false === $this->_fileHandler) {
-            throw new \Magento\Framework\Exception('Failed to open file ' . $this->_filePath);
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to open file ', [$this->_filePath])
+            );
         }
     }
 
@@ -37,7 +39,9 @@ class Gz extends \Magento\Framework\Archive\Helper\File
         $result = gzwrite($this->_fileHandler, $data);
 
         if (empty($result) && !empty($data)) {
-            throw new \Magento\Framework\Exception('Failed to write data to ' . $this->_filePath);
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to write data to ', [$this->_filePath])
+            );
         }
     }
 
diff --git a/lib/internal/Magento/Framework/Archive/Tar.php b/lib/internal/Magento/Framework/Archive/Tar.php
index d8a532e0cc25ac4213c2eaaf3ffe239f8ca8a707..0b69b98930cd7aea95415e29615e8fe6655152e6 100644
--- a/lib/internal/Magento/Framework/Archive/Tar.php
+++ b/lib/internal/Magento/Framework/Archive/Tar.php
@@ -240,7 +240,7 @@ class Tar extends \Magento\Framework\Archive\AbstractArchive implements \Magento
      * @param bool $skipRoot
      * @param bool $finalize
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _createTar($skipRoot = false, $finalize = false)
     {
@@ -254,7 +254,9 @@ class Tar extends \Magento\Framework\Archive\AbstractArchive implements \Magento
             $dirFiles = scandir($file);
 
             if (false === $dirFiles) {
-                throw new \Magento\Framework\Exception('Can\'t scan dir: ' . $file);
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase('Can\'t scan dir: %1', [$file])
+                );
             }
 
             array_shift($dirFiles);
@@ -381,7 +383,7 @@ class Tar extends \Magento\Framework\Archive\AbstractArchive implements \Magento
      *
      * @param string $destination path to file is unpacked
      * @return string[] list of files
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     protected function _unpackCurrentTar($destination)
@@ -404,7 +406,9 @@ class Tar extends \Magento\Framework\Archive\AbstractArchive implements \Magento
                     $mkdirResult = @mkdir($dirname, 0777, true);
 
                     if (false === $mkdirResult) {
-                        throw new \Magento\Framework\Exception('Failed to create directory ' . $dirname);
+                        throw new \Magento\Framework\Exception\LocalizedException(
+                            new \Magento\Framework\Phrase('Failed to create directory %1', [$dirname])
+                        );
                     }
                 }
 
@@ -415,7 +419,9 @@ class Tar extends \Magento\Framework\Archive\AbstractArchive implements \Magento
                     $mkdirResult = @mkdir($currentFile, $header['mode'], true);
 
                     if (false === $mkdirResult) {
-                        throw new \Magento\Framework\Exception('Failed to create directory ' . $currentFile);
+                        throw new \Magento\Framework\Exception\LocalizedException(
+                            new \Magento\Framework\Phrase('Failed to create directory %1', [$currentFile])
+                        );
                     }
                 }
                 $list[] = $currentFile . '/';
diff --git a/lib/internal/Magento/Framework/Backup/AbstractBackup.php b/lib/internal/Magento/Framework/Backup/AbstractBackup.php
index f980455dd5a6afd73d54141f63cf5cbff7d6778b..8c5020946fcd3b14b1ae1c12f9576c9981597f24 100644
--- a/lib/internal/Magento/Framework/Backup/AbstractBackup.php
+++ b/lib/internal/Magento/Framework/Backup/AbstractBackup.php
@@ -138,13 +138,15 @@ abstract class AbstractBackup implements BackupInterface
      * Set root directory of Magento installation
      *
      * @param string $rootDir
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return $this
      */
     public function setRootDir($rootDir)
     {
         if (!is_dir($rootDir)) {
-            throw new \Magento\Framework\Exception('Bad root directory');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Bad root directory')
+            );
         }
 
         $this->_rootDir = $rootDir;
diff --git a/lib/internal/Magento/Framework/Backup/BackupException.php b/lib/internal/Magento/Framework/Backup/BackupException.php
index 4efd0c3600ba06352d32d4e89e073c2afe6576c4..273fe476f67d0a357467012912a2b5b9e58b6ea9 100644
--- a/lib/internal/Magento/Framework/Backup/BackupException.php
+++ b/lib/internal/Magento/Framework/Backup/BackupException.php
@@ -11,6 +11,6 @@
  */
 namespace Magento\Framework\Backup;
 
-class BackupException extends \Magento\Framework\Exception
+class BackupException extends \Magento\Framework\Exception\LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/Backup/Factory.php b/lib/internal/Magento/Framework/Backup/Factory.php
index ba120c45615844b441b490d86e5bd9ba8e3be44b..d7827cea421f2da6ab22c92897492c9a798d5a3f 100644
--- a/lib/internal/Magento/Framework/Backup/Factory.php
+++ b/lib/internal/Magento/Framework/Backup/Factory.php
@@ -71,12 +71,17 @@ class Factory
      *
      * @param string $type
      * @return BackupInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create($type)
     {
         if (!in_array($type, $this->_allowedTypes)) {
-            throw new \Magento\Framework\Exception('Current implementation not supported this type (' . $type . ') of backup.');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    'Current implementation not supported this type (%1) of backup.',
+                    [$type]
+                )
+            );
         }
         $class = 'Magento\Framework\Backup\\' . ucfirst($type);
         return $this->_objectManager->create($class);
diff --git a/lib/internal/Magento/Framework/Backup/Filesystem.php b/lib/internal/Magento/Framework/Backup/Filesystem.php
index 24ffe43be56c49f15cdc8fcdf4f85b45bbc50e04..2a36caf8e5522a427cbe787ed45ecff42561eb15 100644
--- a/lib/internal/Magento/Framework/Backup/Filesystem.php
+++ b/lib/internal/Magento/Framework/Backup/Filesystem.php
@@ -60,7 +60,7 @@ class Filesystem extends AbstractBackup
     /**
      * Implementation Rollback functionality for Filesystem
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return bool
      */
     public function rollback()
@@ -84,7 +84,7 @@ class Filesystem extends AbstractBackup
     /**
      * Implementation Create Backup functionality for Filesystem
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return boolean
      */
     public function create()
@@ -106,14 +106,16 @@ class Filesystem extends AbstractBackup
 
         if (!$filesInfo['readable']) {
             throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
-                'Not enough permissions to read files for backup'
+                new \Magento\Framework\Phrase('Not enough permissions to read files for backup')
             );
         }
 
         $freeSpace = disk_free_space($this->getBackupsDir());
 
         if (2 * $filesInfo['size'] > $freeSpace) {
-            throw new \Magento\Framework\Backup\Exception\NotEnoughFreeSpace('Not enough free space to create backup');
+            throw new \Magento\Framework\Backup\Exception\NotEnoughFreeSpace(
+                new \Magento\Framework\Phrase('Not enough free space to create backup')
+            );
         }
 
         $tarTmpPath = $this->_getTarTmpPath();
@@ -122,7 +124,9 @@ class Filesystem extends AbstractBackup
         $tarPacker->setSkipFiles($this->getIgnorePaths())->pack($this->getRootDir(), $tarTmpPath, true);
 
         if (!is_file($tarTmpPath) || filesize($tarTmpPath) == 0) {
-            throw new \Magento\Framework\Exception('Failed to create backup');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to create backup')
+            );
         }
 
         $backupPath = $this->getBackupPath();
@@ -131,7 +135,9 @@ class Filesystem extends AbstractBackup
         $gzPacker->pack($tarTmpPath, $backupPath);
 
         if (!is_file($backupPath) || filesize($backupPath) == 0) {
-            throw new \Magento\Framework\Exception('Failed to create backup');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Failed to create backup')
+            );
         }
 
         @unlink($tarTmpPath);
@@ -241,7 +247,7 @@ class Filesystem extends AbstractBackup
      * Check backups directory existence and whether it's writeable
      *
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _checkBackupsDir()
     {
@@ -251,7 +257,9 @@ class Filesystem extends AbstractBackup
             $backupsDirParentDirectory = basename($backupsDir);
 
             if (!is_writeable($backupsDirParentDirectory)) {
-                throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions('Cant create backups directory');
+                throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
+                    new \Magento\Framework\Phrase('Cant create backups directory')
+                );
             }
 
             mkdir($backupsDir);
@@ -259,7 +267,9 @@ class Filesystem extends AbstractBackup
         }
 
         if (!is_writable($backupsDir)) {
-            throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions('Backups directory is not writeable');
+            throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
+                new \Magento\Framework\Phrase('Backups directory is not writeable')
+            );
         }
     }
 
diff --git a/lib/internal/Magento/Framework/Backup/Filesystem/Helper.php b/lib/internal/Magento/Framework/Backup/Filesystem/Helper.php
index 5a2df37545d25b7ad98a628dedab4d505d86b63b..7e48f22c9e5006ee1d3e7204c7dd4ef7c144ac83 100644
--- a/lib/internal/Magento/Framework/Backup/Filesystem/Helper.php
+++ b/lib/internal/Magento/Framework/Backup/Filesystem/Helper.php
@@ -51,7 +51,7 @@ class Helper
      * @param array $skipPaths
      * @param bool $removeRoot
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @SuppressWarnings(PHPMD.ShortMethodName)
      */
     public function rm($path, $skipPaths = [], $removeRoot = false)
diff --git a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php
index 999302f8438a7a1d7cdb069c4b3be295f7b61d39..ff750d3c8b1e49e89659822ddc944c73995ca815 100644
--- a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php
+++ b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php
@@ -16,7 +16,7 @@ class Fs extends AbstractRollback
      * Files rollback implementation via local filesystem
      *
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @see AbstractRollback::run()
      */
@@ -25,7 +25,9 @@ class Fs extends AbstractRollback
         $snapshotPath = $this->_snapshot->getBackupPath();
 
         if (!is_file($snapshotPath) || !is_readable($snapshotPath)) {
-            throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot('Cant load snapshot archive');
+            throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot(
+                new \Magento\Framework\Phrase('Can\'t load snapshot archive')
+            );
         }
 
         $fsHelper = new \Magento\Framework\Backup\Filesystem\Helper();
@@ -38,7 +40,7 @@ class Fs extends AbstractRollback
 
         if (!$filesInfo['writable']) {
             throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
-                'Unable to make rollback because not all files are writable'
+                new \Magento\Framework\Phrase('Unable to make rollback because not all files are writable')
             );
         }
 
diff --git a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Ftp.php b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Ftp.php
index b9c0a9c6270db7bfac6e92fa5fad3df7211a69cf..395700ab0bb4e0f579d37adff29c4f95963a3d72 100644
--- a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Ftp.php
+++ b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Ftp.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Backup\Filesystem\Rollback;
 /**
  * Rollback worker for rolling back via ftp
  *
- * @author      Magento Core Team <core@magentocommerce.com>
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Ftp extends AbstractRollback
 {
@@ -23,7 +23,7 @@ class Ftp extends AbstractRollback
      * Files rollback implementation via ftp
      *
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      *
      * @see AbstractRollback::run()
      */
@@ -32,7 +32,9 @@ class Ftp extends AbstractRollback
         $snapshotPath = $this->_snapshot->getBackupPath();
 
         if (!is_file($snapshotPath) || !is_readable($snapshotPath)) {
-            throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot('Cant load snapshot archive');
+            throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot(
+                new \Magento\Framework\Phrase('Can\'t load snapshot archive')
+            );
         }
 
         $this->_initFtpClient();
@@ -61,7 +63,9 @@ class Ftp extends AbstractRollback
             $this->_ftpClient = new \Magento\Framework\System\Ftp();
             $this->_ftpClient->connect($this->_snapshot->getFtpConnectString());
         } catch (\Exception $e) {
-            throw new \Magento\Framework\Backup\Exception\FtpConnectionFailed($e->getMessage());
+            throw new \Magento\Framework\Backup\Exception\FtpConnectionFailed(
+                new \Magento\Framework\Phrase($e->getMessage())
+            );
         }
     }
 
@@ -69,7 +73,7 @@ class Ftp extends AbstractRollback
      * Perform ftp validation. Check whether ftp account provided points to current magento installation
      *
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _validateFtp()
     {
@@ -80,7 +84,9 @@ class Ftp extends AbstractRollback
         @fclose($fh);
 
         if (!is_file($validationFilePath)) {
-            throw new \Magento\Framework\Exception('Unable to validate ftp account');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Unable to validate ftp account')
+            );
         }
 
         $rootDir = $this->_snapshot->getRootDir();
@@ -90,7 +96,9 @@ class Ftp extends AbstractRollback
         @unlink($validationFilePath);
 
         if (!$fileExistsOnFtp) {
-            throw new \Magento\Framework\Backup\Exception\FtpValidationFailed('Failed to validate ftp account');
+            throw new \Magento\Framework\Backup\Exception\FtpValidationFailed(
+                new \Magento\Framework\Phrase('Failed to validate ftp account')
+            );
         }
     }
 
@@ -110,7 +118,7 @@ class Ftp extends AbstractRollback
 
     /**
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _createTmpDir()
     {
@@ -119,7 +127,9 @@ class Ftp extends AbstractRollback
         $result = @mkdir($tmpDir);
 
         if (false === $result) {
-            throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions('Failed to create directory ' . $tmpDir);
+            throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
+                new \Magento\Framework\Phrase('Failed to create directory %1', [$tmpDir])
+            );
         }
 
         return $tmpDir;
@@ -157,7 +167,7 @@ class Ftp extends AbstractRollback
      *
      * @param string $tmpDir
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      */
     protected function _uploadBackupToFtp($tmpDir)
@@ -186,7 +196,7 @@ class Ftp extends AbstractRollback
                 $result = $this->_ftpClient->put($ftpPath, $item->__toString());
                 if (false === $result) {
                     throw new \Magento\Framework\Backup\Exception\NotEnoughPermissions(
-                        'Failed to upload file ' . $item->__toString() . ' to ftp'
+                        new \Magento\Framework\Phrase('Failed to upload file %1 to ftp', [$item->__toString()])
                     );
                 }
             }
diff --git a/lib/internal/Magento/Framework/Backup/Media.php b/lib/internal/Magento/Framework/Backup/Media.php
index 452e8a1e8f3256bc8960bc9996594aa375028115..5ae5b404d292c3fe9379d125296881ef89d1ec67 100644
--- a/lib/internal/Magento/Framework/Backup/Media.php
+++ b/lib/internal/Magento/Framework/Backup/Media.php
@@ -16,7 +16,7 @@ class Media extends Snapshot
     /**
      * Implementation Rollback functionality for Media
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return bool
      */
     public function rollback()
@@ -28,7 +28,7 @@ class Media extends Snapshot
     /**
      * Implementation Create Backup functionality for Media
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return bool
      */
     public function create()
diff --git a/lib/internal/Magento/Framework/Backup/Test/Unit/FactoryTest.php b/lib/internal/Magento/Framework/Backup/Test/Unit/FactoryTest.php
index 7f4871f3f937ec6490b2821367efa703a3b7443f..b2c611c2cf991e964d067bd4d5acd7f8eaecfd64 100644
--- a/lib/internal/Magento/Framework/Backup/Test/Unit/FactoryTest.php
+++ b/lib/internal/Magento/Framework/Backup/Test/Unit/FactoryTest.php
@@ -24,7 +24,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testCreateWrongType()
     {
diff --git a/lib/internal/Magento/Framework/Cache/Backend/Memcached.php b/lib/internal/Magento/Framework/Cache/Backend/Memcached.php
index 7d938dbe455f36ac9d7c69127aad0c29a5b62f38..9efb46607ff0a94dd5353b51fc82cc3869b82f56 100644
--- a/lib/internal/Magento/Framework/Cache/Backend/Memcached.php
+++ b/lib/internal/Magento/Framework/Cache/Backend/Memcached.php
@@ -21,7 +21,7 @@ class Memcached extends \Zend_Cache_Backend_Memcached implements \Zend_Cache_Bac
      * Constructor
      *
      * @param array $options @see \Zend_Cache_Backend_Memcached::__construct()
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct(array $options = [])
     {
@@ -29,8 +29,10 @@ class Memcached extends \Zend_Cache_Backend_Memcached implements \Zend_Cache_Bac
 
         if (!isset($options['slab_size']) || !is_numeric($options['slab_size'])) {
             if (isset($options['slab_size'])) {
-                throw new \Magento\Framework\Exception(
-                    "Invalid value for the node <slab_size>. Expected to be positive integer."
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        "Invalid value for the node <slab_size>. Expected to be positive integer."
+                    )
                 );
             }
 
diff --git a/lib/internal/Magento/Framework/Cache/Test/Unit/Backend/MongoDbTest.php b/lib/internal/Magento/Framework/Cache/Test/Unit/Backend/MongoDbTest.php
index e26002e8029a0e6be56d668c0e1bfa7257a5a8c8..411a94edb0b1b4a8eca4a12767d18ea47ea36d35 100644
--- a/lib/internal/Magento/Framework/Cache/Test/Unit/Backend/MongoDbTest.php
+++ b/lib/internal/Magento/Framework/Cache/Test/Unit/Backend/MongoDbTest.php
@@ -80,9 +80,9 @@ class MongoDbTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingTags
-     * covers \Magento\Framework\Cache\Backend\MongoDb::getIdsNotMatchingTags
-     * covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingAnyTags
+     * @covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingTags
+     * @covers \Magento\Framework\Cache\Backend\MongoDb::getIdsNotMatchingTags
+     * @covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingAnyTags
      * @dataProvider getIdsMatchingTagsDataProvider
      */
     public function testGetIdsMatchingTags($method, $tags, $expectedInput)
@@ -139,9 +139,9 @@ class MongoDbTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingTags
-     * covers \Magento\Framework\Cache\Backend\MongoDb::getIdsNotMatchingTags
-     * covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingAnyTags
+     * @covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingTags
+     * @covers \Magento\Framework\Cache\Backend\MongoDb::getIdsNotMatchingTags
+     * @covers \Magento\Framework\Cache\Backend\MongoDb::getIdsMatchingAnyTags
      */
     public function testGetIdsMatchingTagsNoInputTags()
     {
diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 35026a88b69d1d66c4e10d913ea5b5fa35e2d155..03ac500f47daccb01521a26559f1b6b3669f8494 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -69,7 +69,7 @@ class Generator
      *
      * @param string $className
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @throws \InvalidArgumentException
      */
     public function generateClass($className)
@@ -102,7 +102,9 @@ class Generator
         $this->tryToLoadSourceClass($className, $generator);
         if (!($file = $generator->generate())) {
             $errors = $generator->getErrors();
-            throw new \Magento\Framework\Exception(implode(' ', $errors));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(implode(' ', $errors))
+            );
         }
         $this->includeFile($file);
         return self::GENERATION_SUCCESS;
@@ -167,15 +169,18 @@ class Generator
      * @param string $className
      * @param \Magento\Framework\Code\Generator\EntityAbstract $generator
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function tryToLoadSourceClass($className, $generator)
     {
         $sourceClassName = $generator->getSourceClassName();
         if (!$this->definedClasses->classLoadable($sourceClassName)) {
             if ($this->generateClass($sourceClassName) !== self::GENERATION_SUCCESS) {
-                throw new \Magento\Framework\Exception(
-                    sprintf('Source class "%s" for "%s" generation does not exist.', $sourceClassName, $className)
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        'Source class "%1" for "%2" generation does not exist.',
+                        [$sourceClassName, $className]
+                    )
                 );
             }
         }
diff --git a/lib/internal/Magento/Framework/Code/Generator/Io.php b/lib/internal/Magento/Framework/Code/Generator/Io.php
index 90898124ced2ad71b258cc48b5b98b79340615f5..945f1879afc3be38240514bf53246387b64df140 100644
--- a/lib/internal/Magento/Framework/Code/Generator/Io.php
+++ b/lib/internal/Magento/Framework/Code/Generator/Io.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Code\Generator;
 
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class Io
 {
@@ -84,7 +84,7 @@ class Io
     /**
      * @param string $fileName
      * @param string $content
-     * @throws FilesystemException
+     * @throws FileSystemException
      * @return bool
      */
     public function writeResultFile($fileName, $content)
@@ -101,7 +101,7 @@ class Io
 
         try {
             $success = $this->filesystemDriver->rename($tmpFile, $fileName);
-        } catch (FilesystemException $e) {
+        } catch (FileSystemException $e) {
             if (!file_exists($fileName)) {
                 throw $e;
             } else {
@@ -164,7 +164,7 @@ class Io
                 $this->filesystemDriver->createDirectory($directory, self::DIRECTORY_PERMISSION);
             }
             return true;
-        } catch (FilesystemException $e) {
+        } catch (FileSystemException $e) {
             return false;
         }
     }
diff --git a/lib/internal/Magento/Framework/Code/Minifier/Adapter/Css/CssMinifier.php b/lib/internal/Magento/Framework/Code/Minifier/Adapter/Css/CssMinifier.php
index dddf0a6e4c00605e256cb9e1f349ea9c050df343..e1d4d01942333670ac1799df0820c589520b8118 100644
--- a/lib/internal/Magento/Framework/Code/Minifier/Adapter/Css/CssMinifier.php
+++ b/lib/internal/Magento/Framework/Code/Minifier/Adapter/Css/CssMinifier.php
@@ -11,6 +11,11 @@ use Magento\Framework\Code\Minifier\AdapterInterface;
 
 class CssMinifier implements AdapterInterface
 {
+    /**
+     * 'pcre.recursion_limit' value for CSSMin minification
+     */
+    const PCRE_RECURSION_LIMIT = 1000;
+
     /**
      * @var CSSmin
      */
@@ -32,6 +37,10 @@ class CssMinifier implements AdapterInterface
      */
     public function minify($content)
     {
-        return $this->cssMinifier->run($content);
+        $pcreRecursionLimit = ini_get('pcre.recursion_limit');
+        ini_set('pcre.recursion_limit', self::PCRE_RECURSION_LIMIT);
+        $result = $this->cssMinifier->run($content);
+        ini_set('pcre.recursion_limit', $pcreRecursionLimit);
+        return $result;
     }
 }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index 642387cdfa0888e973850bfadaab57f0a7f53e89..8b11e9bc25eb556be344c223799b536e7efea49d 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -151,17 +151,17 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
      * @param bool $willWriteCode
      *
      * @dataProvider generateDataProvider
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::generate
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::getErrors
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_getSourceClassName
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_getResultClassName
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_getDefaultResultClassName
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_generateCode
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_addError
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_validateData
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_getClassDocBlock
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_getGeneratedCode
-     * covers \Magento\Framework\Code\Generator\EntityAbstract::_fixCodeStyle
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::generate
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::getErrors
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::getSourceClassName
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_getResultClassName
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_getDefaultResultClassName
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_generateCode
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_addError
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_validateData
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_getClassDocBlock
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_getGeneratedCode
+     * @covers \Magento\Framework\Code\Generator\EntityAbstract::_fixCodeStyle
      */
     public function testGenerate(
         $errors = [],
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index efa21cde844f603a7e347bf46002d9b77312e529..e01f4c529c8274aaa48bc8b37b409da7037a4191 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -60,7 +60,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @dataProvider generateValidClassDataProvider
      */
     public function testGenerateClass($className, $entityType)
@@ -117,7 +117,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testGenerateClassWithError()
     {
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php
index 054cee5cdb830eb3101a82d805176d3d0b34d7b0..2244c9f5d4a182b6bf200fa34c84b4bde73495ee 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php
@@ -51,7 +51,7 @@ class ArgumentSequenceTest extends \PHPUnit_Framework_TestCase
             'Actual  : %s' .
             PHP_EOL;
         $message = sprintf($message, '\ArgumentSequence\InvalidChildClass', $expectedSequence, $actualSequence);
-        $this->setExpectedException('\Magento\Framework\Code\ValidationException', $message);
+        $this->setExpectedException('Magento\Framework\Exception\ValidatorException', $message);
         $this->_validator->validate('\ArgumentSequence\InvalidChildClass');
     }
 }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorArgumentTypesTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorArgumentTypesTest.php
index 74fa005dae7a4b3f789e5ccb604936246b7f1810..da7d3a62f2705b09822d9179f2684b78cf3dfdc9 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorArgumentTypesTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorArgumentTypesTest.php
@@ -60,7 +60,7 @@ class ConstructorArgumentTypesTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Code\ValidationException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Invalid constructor argument(s) in \stdClass
      */
     public function testValidateWithException()
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorIntegrityTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorIntegrityTest.php
index b278d42c55637cf9513f5bac7c6042276237582a..8fffbc9c2706369a40f23df7a7a27e8f7f23c7b0 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorIntegrityTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ConstructorIntegrityTest.php
@@ -44,7 +44,7 @@ class ConstructorIntegrityTest extends \PHPUnit_Framework_TestCase
         $fileName = realpath(__DIR__ . '/../_files/app/code/Magento/SomeModule/Model/Four/Test.php');
         $fileName = str_replace('\\', '/', $fileName);
         $this->setExpectedException(
-            '\Magento\Framework\Code\ValidationException',
+            '\Magento\Framework\Exception\ValidatorException',
             'Extra parameters passed to parent construct: $factory. File: ' . $fileName
         );
         $this->_model->validate('Magento\SomeModule\Model\Four\Test');
@@ -55,7 +55,7 @@ class ConstructorIntegrityTest extends \PHPUnit_Framework_TestCase
         $fileName = realpath(__DIR__ . '/../_files/app/code/Magento/SomeModule/Model/Five/Test.php');
         $fileName = str_replace('\\', '/', $fileName);
         $this->setExpectedException(
-            '\Magento\Framework\Code\ValidationException',
+            '\Magento\Framework\Exception\ValidatorException',
             'Missed required argument factory in parent::__construct call. File: ' . $fileName
         );
         $this->_model->validate('Magento\SomeModule\Model\Five\Test');
@@ -66,7 +66,7 @@ class ConstructorIntegrityTest extends \PHPUnit_Framework_TestCase
         $fileName = realpath(__DIR__ . '/../_files/app/code/Magento/SomeModule/Model/Six/Test.php');
         $fileName = str_replace('\\', '/', $fileName);
         $this->setExpectedException(
-            '\Magento\Framework\Code\ValidationException',
+            '\Magento\Framework\Exception\ValidatorException',
             'Incompatible argument type: Required type: \Magento\SomeModule\Model\Proxy. ' .
             'Actual type: \Magento\SomeModule\Model\ElementFactory; File: ' .
             PHP_EOL .
@@ -80,7 +80,7 @@ class ConstructorIntegrityTest extends \PHPUnit_Framework_TestCase
         $fileName = realpath(__DIR__) . '/_files/ClassesForConstructorIntegrity.php';
         $fileName = str_replace('\\', '/', $fileName);
         $this->setExpectedException(
-            '\Magento\Framework\Code\ValidationException',
+            '\Magento\Framework\Exception\ValidatorException',
             'Incompatible argument type: Required type: \Context. ' .
             'Actual type: \ClassA; File: ' .
             PHP_EOL .
@@ -94,7 +94,7 @@ class ConstructorIntegrityTest extends \PHPUnit_Framework_TestCase
         $fileName = realpath(__DIR__) . '/_files/ClassesForConstructorIntegrity.php';
         $fileName = str_replace('\\', '/', $fileName);
         $this->setExpectedException(
-            '\Magento\Framework\Code\ValidationException',
+            '\Magento\Framework\Exception\ValidatorException',
             'Incompatible argument type: Required type: array. ' . 'Actual type: \ClassB; File: ' . PHP_EOL . $fileName
         );
         $this->_model->validate('ClassArgumentWithWrongParentArgumentsType');
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ContextAggregationTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ContextAggregationTest.php
index 30667c6727828227b99c205d5bb9c119b8ef930d..b40b91bb42e0183a216769397fc78e5f98140ca3 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ContextAggregationTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ContextAggregationTest.php
@@ -32,7 +32,7 @@ class ContextAggregationTest extends \PHPUnit_Framework_TestCase
             PHP_EOL .
             '\ClassFirst already exists in context object';
 
-        $this->setExpectedException('\Magento\Framework\Code\ValidationException', $message);
+        $this->setExpectedException('\Magento\Framework\Exception\ValidatorException', $message);
         $this->_model->validate('ClassArgumentAlreadyInjectedInContext');
     }
 
@@ -53,7 +53,7 @@ class ContextAggregationTest extends \PHPUnit_Framework_TestCase
             PHP_EOL .
             '\\InterfaceFirst already exists in context object';
 
-        $this->setExpectedException('\Magento\Framework\Code\ValidationException', $message);
+        $this->setExpectedException('\Magento\Framework\Exception\ValidatorException', $message);
         $this->_model->validate('ClassArgumentWithAlreadyInjectedInterface');
     }
 }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php
index acaeaa41033ed043f9d3584c246c4e67bcc4240a..0b0c00c72dc8797a736bd0ac4887a1764b3e262a 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php
@@ -49,7 +49,7 @@ class TypeDuplicationTest extends \PHPUnit_Framework_TestCase
             $this->_fixturePath .
             PHP_EOL .
             'Multiple type injection [\TypeDuplication\ArgumentBaseClass]';
-        $this->setExpectedException('\Magento\Framework\Code\ValidationException', $message);
+        $this->setExpectedException('Magento\Framework\Exception\ValidatorException', $message);
         $this->_validator->validate('\TypeDuplication\InvalidClassWithDuplicatedTypes');
     }
 }
diff --git a/lib/internal/Magento/Framework/Code/ValidationException.php b/lib/internal/Magento/Framework/Code/ValidationException.php
deleted file mode 100644
index b3831d4c930a108a397bccb69431ef54c01e4e0a..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Code/ValidationException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\Code;
-
-class ValidationException extends \Exception
-{
-}
diff --git a/lib/internal/Magento/Framework/Code/Validator.php b/lib/internal/Magento/Framework/Code/Validator.php
index 5f371f781c0cc9c08a09f92e9b76673382de5c52..c20388fe944d0337ddba4a0018777c2bff94fac2 100644
--- a/lib/internal/Magento/Framework/Code/Validator.php
+++ b/lib/internal/Magento/Framework/Code/Validator.php
@@ -28,7 +28,7 @@ class Validator implements ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws \Magento\Framework\Code\ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      */
     public function validate($className)
     {
diff --git a/lib/internal/Magento/Framework/Code/Validator/ArgumentSequence.php b/lib/internal/Magento/Framework/Code/Validator/ArgumentSequence.php
index 382983e35db84b77357773a611b84258a81ef57a..1c9e663a3bc7cded2024da27b252ac17ba91a8bf 100644
--- a/lib/internal/Magento/Framework/Code/Validator/ArgumentSequence.php
+++ b/lib/internal/Magento/Framework/Code/Validator/ArgumentSequence.php
@@ -7,7 +7,6 @@
  */
 namespace Magento\Framework\Code\Validator;
 
-use Magento\Framework\Code\ValidationException;
 use Magento\Framework\Code\ValidatorInterface;
 
 class ArgumentSequence implements ValidatorInterface
@@ -39,7 +38,7 @@ class ArgumentSequence implements ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     public function validate($className)
@@ -78,20 +77,19 @@ class ArgumentSequence implements ValidatorInterface
 
         if (false == $this->_checkArgumentSequence($classArguments, $requiredSequence)) {
             $classPath = str_replace('\\', '/', $class->getFileName());
-            throw new ValidationException(
-                'Incorrect argument sequence in class ' .
-                $className .
-                ' in ' .
-                $classPath .
-                PHP_EOL .
-                'Required: $' .
-                implode(
-                    ', $',
-                    array_keys($requiredSequence)
-                ) . PHP_EOL . 'Actual  : $' . implode(
-                    ', $',
-                    array_keys($classArguments)
-                ) . PHP_EOL
+            throw new \Magento\Framework\Exception\ValidatorException(
+                new \Magento\Framework\Phrase(
+                    'Incorrect argument sequence in class %1 in %2%3Required: $%4%5Actual  : $%6%7',
+                    [
+                        $className,
+                        $classPath,
+                        PHP_EOL,
+                        implode(', $', array_keys($requiredSequence)),
+                        PHP_EOL,
+                        implode(', $', array_keys($classArguments)),
+                        PHP_EOL
+                    ]
+                )
             );
         }
 
diff --git a/lib/internal/Magento/Framework/Code/Validator/ConstructorArgumentTypes.php b/lib/internal/Magento/Framework/Code/Validator/ConstructorArgumentTypes.php
index 6fdfe35b430e59fce6838d9b68864e42ae91328f..644d863313a806e5d05377ab5ae127dfa87f5c80 100644
--- a/lib/internal/Magento/Framework/Code/Validator/ConstructorArgumentTypes.php
+++ b/lib/internal/Magento/Framework/Code/Validator/ConstructorArgumentTypes.php
@@ -37,7 +37,7 @@ class ConstructorArgumentTypes implements ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws \Magento\Framework\Code\ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      */
     public function validate($className)
     {
@@ -49,8 +49,11 @@ class ConstructorArgumentTypes implements ValidatorInterface
         }, $expectedArguments);
         $result = array_diff($expectedArguments, $actualArguments);
         if (!empty($result)) {
-            throw new \Magento\Framework\Code\ValidationException(
-                'Invalid constructor argument(s) in ' . $className
+            throw new \Magento\Framework\Exception\ValidatorException(
+                new \Magento\Framework\Phrase(
+                    'Invalid constructor argument(s) in %1',
+                    [$className]
+                )
             );
         }
         return true;
diff --git a/lib/internal/Magento/Framework/Code/Validator/ConstructorIntegrity.php b/lib/internal/Magento/Framework/Code/Validator/ConstructorIntegrity.php
index 63929f4a08ad7e24c1ff2ef93d3949fff6c7e7c9..62cd9b7675e48c38adcc0e0cafed8513b85bde27 100644
--- a/lib/internal/Magento/Framework/Code/Validator/ConstructorIntegrity.php
+++ b/lib/internal/Magento/Framework/Code/Validator/ConstructorIntegrity.php
@@ -8,6 +8,7 @@
 namespace Magento\Framework\Code\Validator;
 
 use Magento\Framework\Code\ValidatorInterface;
+use Magento\Framework\Phrase;
 
 class ConstructorIntegrity implements ValidatorInterface
 {
@@ -29,7 +30,7 @@ class ConstructorIntegrity implements ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws \Magento\Framework\Code\ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
@@ -73,11 +74,11 @@ class ConstructorIntegrity implements ValidatorInterface
                 }
 
                 $classPath = str_replace('\\', '/', $class->getFileName());
-                throw new \Magento\Framework\Code\ValidationException(
-                    'Missed required argument ' .
-                    $requiredArgument['name'] .
-                    ' in parent::__construct call. File: ' .
-                    $classPath
+                throw new \Magento\Framework\Exception\ValidatorException(
+                    new Phrase(
+                        'Missed required argument %1 in parent::__construct call. File: %2',
+                        [$requiredArgument['name'], $classPath]
+                    )
                 );
             }
 
@@ -87,15 +88,11 @@ class ConstructorIntegrity implements ValidatorInterface
             );
             if (false == $isCompatibleTypes) {
                 $classPath = str_replace('\\', '/', $class->getFileName());
-                throw new \Magento\Framework\Code\ValidationException(
-                    'Incompatible argument type: Required type: ' .
-                    $requiredArgument['type'] .
-                    '. Actual type: ' .
-                    $actualArgument['type'] .
-                    '; File: ' .
-                    PHP_EOL .
-                    $classPath .
-                    PHP_EOL
+                throw new \Magento\Framework\Exception\ValidatorException(
+                    new Phrase(
+                        'Incompatible argument type: Required type: %1. Actual type: %2; File: %3%4%5',
+                        [$requiredArgument['type'], $actualArgument['type'], PHP_EOL, $classPath, PHP_EOL]
+                    )
                 );
             }
         }
@@ -112,8 +109,11 @@ class ConstructorIntegrity implements ValidatorInterface
             }
 
             $classPath = str_replace('\\', '/', $class->getFileName());
-            throw new \Magento\Framework\Code\ValidationException(
-                'Extra parameters passed to parent construct: ' . implode(', ', $names) . '. File: ' . $classPath
+            throw new \Magento\Framework\Exception\ValidatorException(
+                new Phrase(
+                    'Extra parameters passed to parent construct: %1. File: %2',
+                    [implode(', ', $names), $classPath]
+                )
             );
         }
         return true;
diff --git a/lib/internal/Magento/Framework/Code/Validator/ContextAggregation.php b/lib/internal/Magento/Framework/Code/Validator/ContextAggregation.php
index eec24881210defa1dc4afe1c7d0c44cd75017608..18ebce1fbad128d35f7d6a33520889d7aaba53eb 100644
--- a/lib/internal/Magento/Framework/Code/Validator/ContextAggregation.php
+++ b/lib/internal/Magento/Framework/Code/Validator/ContextAggregation.php
@@ -7,7 +7,6 @@
  */
 namespace Magento\Framework\Code\Validator;
 
-use Magento\Framework\Code\ValidationException;
 use Magento\Framework\Code\ValidatorInterface;
 
 class ContextAggregation implements ValidatorInterface
@@ -30,7 +29,7 @@ class ContextAggregation implements ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      */
     public function validate($className)
     {
@@ -62,10 +61,15 @@ class ContextAggregation implements ValidatorInterface
 
         if (false == empty($errors)) {
             $classPath = str_replace('\\', '/', $class->getFileName());
-            throw new ValidationException(
-                'Incorrect dependency in class ' . $className . ' in ' . $classPath . PHP_EOL . implode(
-                    PHP_EOL,
-                    $errors
+            throw new \Magento\Framework\Exception\ValidatorException(
+                new \Magento\Framework\Phrase(
+                    'Incorrect dependency in class %1 in %2%3%4',
+                    [
+                        $className,
+                        $classPath,
+                        PHP_EOL,
+                        implode(PHP_EOL, $errors)
+                    ]
                 )
             );
         }
diff --git a/lib/internal/Magento/Framework/Code/Validator/TypeDuplication.php b/lib/internal/Magento/Framework/Code/Validator/TypeDuplication.php
index ff78fc59a5acf19a5a1b19056f2a2a8eeab3d6ca..45d50b84a3b66fa1b77477ec3e5ce38503aad420 100644
--- a/lib/internal/Magento/Framework/Code/Validator/TypeDuplication.php
+++ b/lib/internal/Magento/Framework/Code/Validator/TypeDuplication.php
@@ -7,7 +7,6 @@
  */
 namespace Magento\Framework\Code\Validator;
 
-use Magento\Framework\Code\ValidationException;
 use Magento\Framework\Code\ValidatorInterface;
 
 class TypeDuplication implements ValidatorInterface
@@ -37,7 +36,7 @@ class TypeDuplication implements ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      */
     public function validate($className)
     {
@@ -62,15 +61,15 @@ class TypeDuplication implements ValidatorInterface
         if (!empty($errors)) {
             if (false == $this->_ignoreWarning($class)) {
                 $classPath = str_replace('\\', '/', $class->getFileName());
-                throw new ValidationException(
-                    'Argument type duplication in class ' .
-                    $class->getName() .
-                    ' in ' .
-                    $classPath .
-                    PHP_EOL .
-                    implode(
-                        PHP_EOL,
-                        $errors
+                throw new \Magento\Framework\Exception\ValidatorException(
+                    new \Magento\Framework\Phrase(
+                        'Argument type duplication in class %1 in %2%3%4',
+                        [
+                            $class->getName(),
+                            $classPath,
+                            PHP_EOL,
+                            implode(PHP_EOL, $errors)
+                        ]
                     )
                 );
             }
diff --git a/lib/internal/Magento/Framework/Code/ValidatorInterface.php b/lib/internal/Magento/Framework/Code/ValidatorInterface.php
index df90607007d7659319498c0de99e4fdf9e05e940..9a55182aa375acf155e9c76f5be8c024e97ded9c 100644
--- a/lib/internal/Magento/Framework/Code/ValidatorInterface.php
+++ b/lib/internal/Magento/Framework/Code/ValidatorInterface.php
@@ -12,7 +12,7 @@ interface ValidatorInterface
      *
      * @param string $className
      * @return bool
-     * @throws \Magento\Framework\Code\ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      */
     public function validate($className);
 }
diff --git a/lib/internal/Magento/Framework/Config/AbstractXml.php b/lib/internal/Magento/Framework/Config/AbstractXml.php
index 323069c5488d5d2ee511192907d1736a8eeeb934..acdd49eeee201a5dc0bbb336f67255b7f8efad37 100644
--- a/lib/internal/Magento/Framework/Config/AbstractXml.php
+++ b/lib/internal/Magento/Framework/Config/AbstractXml.php
@@ -68,7 +68,7 @@ abstract class AbstractXml
      *
      * @param array $configFiles
      * @return \DOMDocument
-     * @throws \Magento\Framework\Exception If a non-existing or invalid XML-file passed
+     * @throws \Magento\Framework\Exception\LocalizedException If a non-existing or invalid XML-file passed
      */
     protected function _merge($configFiles)
     {
@@ -76,7 +76,9 @@ abstract class AbstractXml
             try {
                 $this->_getDomConfigModel()->merge($content);
             } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
-                throw new \Magento\Framework\Exception("Invalid XML in file " . $key . ":\n" . $e->getMessage());
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase("Invalid XML in file %1:\n%2", [$key, $e->getMessage()])
+                );
             }
         }
         if ($this->_isRuntimeValidated()) {
@@ -90,13 +92,16 @@ abstract class AbstractXml
      *
      * @param string $file
      * @return $this
-     * @throws \Magento\Framework\Exception If invalid XML-file passed
+     * @throws \Magento\Framework\Exception\LocalizedException If invalid XML-file passed
      */
     protected function _performValidate($file = null)
     {
         if (!$this->_getDomConfigModel()->validate($this->getSchemaFile(), $errors)) {
-            $message = is_null($file) ? "Invalid Document \n" : "Invalid XML-file: {$file}\n";
-            throw new \Magento\Framework\Exception($message . implode("\n", $errors));
+            $phrase = (null === $file)
+                ? new \Magento\Framework\Phrase('Invalid Document %1%2', [PHP_EOL, implode("\n", $errors)])
+                : new \Magento\Framework\Phrase('Invalid XML-file: %1%2%3', [$file, PHP_EOL, implode("\n", $errors)]);
+
+            throw new \Magento\Framework\Exception\LocalizedException($phrase);
         }
         return $this;
     }
@@ -119,7 +124,7 @@ abstract class AbstractXml
      */
     protected function _getDomConfigModel()
     {
-        if (is_null($this->_domConfig)) {
+        if (null === $this->_domConfig) {
             $schemaFile = $this->getPerFileSchemaFile() &&
                 $this->_isRuntimeValidated() ? $this->getPerFileSchemaFile() : null;
             $this->_domConfig = new \Magento\Framework\Config\Dom(
diff --git a/lib/internal/Magento/Framework/Config/Dom.php b/lib/internal/Magento/Framework/Config/Dom.php
index 57c18e8e6eb021cde44233bfaa54e6d2cc06ef46..1dbae5f157562717e939f98e2a45515dda13543f 100644
--- a/lib/internal/Magento/Framework/Config/Dom.php
+++ b/lib/internal/Magento/Framework/Config/Dom.php
@@ -13,6 +13,8 @@ namespace Magento\Framework\Config;
 
 /**
  * Class Dom
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Dom
 {
@@ -223,7 +225,7 @@ class Dom
      * Getter for node by path
      *
      * @param string $nodePath
-     * @throws \Magento\Framework\Exception An exception is possible if original document contains multiple nodes for identifier
+     * @throws \Magento\Framework\Exception\LocalizedException An exception is possible if original document contains multiple nodes for identifier
      * @return \DOMElement|null
      */
     protected function _getMatchedNode($nodePath)
@@ -235,7 +237,9 @@ class Dom
         $matchedNodes = $xPath->query($nodePath);
         $node = null;
         if ($matchedNodes->length > 1) {
-            throw new \Magento\Framework\Exception("More than one node matching the query: {$nodePath}");
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase("More than one node matching the query: %1", [$nodePath])
+            );
         } elseif ($matchedNodes->length == 1) {
             $node = $matchedNodes->item(0);
         }
diff --git a/lib/internal/Magento/Framework/Config/Reader/Filesystem.php b/lib/internal/Magento/Framework/Config/Reader/Filesystem.php
index fad1d245cfd9bec1f0f3fe05ad5440ebdc8e2f4c..992158c6edf6341e55f4b7d1a9d2f61589b7122e 100644
--- a/lib/internal/Magento/Framework/Config/Reader/Filesystem.php
+++ b/lib/internal/Magento/Framework/Config/Reader/Filesystem.php
@@ -126,7 +126,7 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
      *
      * @param array $fileList
      * @return array
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _readFiles($fileList)
     {
@@ -140,14 +140,18 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
                     $configMerger->merge($content);
                 }
             } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
-                throw new \Magento\Framework\Exception("Invalid XML in file " . $key . ":\n" . $e->getMessage());
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase("Invalid XML in file %1:\n%2", [$key, $e->getMessage()])
+                );
             }
         }
         if ($this->_isValidated) {
             $errors = [];
             if ($configMerger && !$configMerger->validate($this->_schemaFile, $errors)) {
                 $message = "Invalid Document \n";
-                throw new \Magento\Framework\Exception($message . implode("\n", $errors));
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase($message . implode("\n", $errors))
+                );
             }
         }
 
diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php
index 228d2bfd555616849ad22810dfe8845b134028fa..d759359f4ef03a1b6e8e044cd4350a39636d4d52 100644
--- a/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php
+++ b/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php
@@ -80,7 +80,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage More than one node matching the query: /root/node/subnode
      */
     public function testMergeException()
diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php
index 99b86f3505dbc97bee0f0a9631016a7ef62f9a1a..bef2654e8c296a9f60e15ebbdde140aaa9d96d89 100644
--- a/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php
+++ b/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php
@@ -84,7 +84,7 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Invalid Document
      */
     public function testReadWithInvalidDom()
@@ -111,7 +111,7 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Invalid XML in file
      */
     public function testReadWithInvalidXml()
diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/ViewTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/ViewTest.php
index 5628898c95b4b0f88477898d05c5fd4e24d35de7..008d5ecfc3627b209d2a226faa5deb93441ccc54 100644
--- a/lib/internal/Magento/Framework/Config/Test/Unit/ViewTest.php
+++ b/lib/internal/Magento/Framework/Config/Test/Unit/ViewTest.php
@@ -49,7 +49,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testInvalidXml()
     {
diff --git a/lib/internal/Magento/Framework/Controller/Test/Unit/Result/JsonTest.php b/lib/internal/Magento/Framework/Controller/Test/Unit/Result/JsonTest.php
index d92164f181e41db5370575589aa4c8b28057da02..769a61c21ab09b87c6b22cf72f73e54c1e7a1e27 100644
--- a/lib/internal/Magento/Framework/Controller/Test/Unit/Result/JsonTest.php
+++ b/lib/internal/Magento/Framework/Controller/Test/Unit/Result/JsonTest.php
@@ -9,7 +9,7 @@ namespace Magento\Framework\Controller\Test\Unit\Result;
 /**
  * Class JsonTest
  *
- * covers Magento\Framework\Controller\Result\Json
+ * @covers \Magento\Framework\Controller\Result\Json
  */
 class JsonTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/Convert/ConvertArray.php b/lib/internal/Magento/Framework/Convert/ConvertArray.php
index 902c7c99dee79309cb3af33e4c03fbcdbd130d73..a37021e1fbc830e1cc35e325dadcf2e74faa8010 100644
--- a/lib/internal/Magento/Framework/Convert/ConvertArray.php
+++ b/lib/internal/Magento/Framework/Convert/ConvertArray.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Convert;
 
-use Magento\Framework\Exception;
+use Magento\Framework\Exception\LocalizedException;
 
 /**
  * Convert the array data to SimpleXMLElement object
@@ -19,12 +19,12 @@ class ConvertArray
      * @param array $array
      * @param string $rootName
      * @return \SimpleXMLElement
-     * @throws Exception
+     * @throws LocalizedException
      */
     public function assocToXml(array $array, $rootName = '_')
     {
         if (empty($rootName) || is_numeric($rootName)) {
-            throw new Exception('Root element must not be empty or numeric');
+            throw new LocalizedException(new \Magento\Framework\Phrase('Root element must not be empty or numeric'));
         }
 
         $xmlStr = <<<XML
@@ -34,7 +34,7 @@ XML;
         $xml = new \SimpleXMLElement($xmlStr);
         foreach (array_keys($array) as $key) {
             if (is_numeric($key)) {
-                throw new Exception('Array root keys must not be numeric.');
+                throw new LocalizedException(new \Magento\Framework\Phrase('Array root keys must not be numeric.'));
             }
         }
         return self::_assocToXml($array, $rootName, $xml);
@@ -65,7 +65,7 @@ XML;
      * @param string $rootName
      * @param \SimpleXMLElement $xml
      * @return \SimpleXMLElement
-     * @throws Exception
+     * @throws LocalizedException
      */
     private function _assocToXml(array $array, $rootName, \SimpleXMLElement $xml)
     {
@@ -75,7 +75,11 @@ XML;
             if (!is_array($value)) {
                 if (is_string($key)) {
                     if ($key === $rootName) {
-                        throw new Exception('Associative key must not be the same as its parent associative key.');
+                        throw new LocalizedException(
+                            new \Magento\Framework\Phrase(
+                                'Associative key must not be the same as its parent associative key.'
+                            )
+                        );
                     }
                     $hasStringKey = true;
                     $xml->addChild($key, $value);
@@ -89,7 +93,9 @@ XML;
             }
         }
         if ($hasNumericKey && $hasStringKey) {
-            throw new Exception('Associative and numeric keys must not be mixed at one level.');
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase('Associative and numeric keys must not be mixed at one level.')
+            );
         }
         return $xml;
     }
diff --git a/lib/internal/Magento/Framework/Convert/Test/Unit/ConvertArrayTest.php b/lib/internal/Magento/Framework/Convert/Test/Unit/ConvertArrayTest.php
index 056b58b3541e1dbafb8973143cc63c5d5898a789..f7c6a18bba13605858120553d891d4b82b1b3f85 100644
--- a/lib/internal/Magento/Framework/Convert/Test/Unit/ConvertArrayTest.php
+++ b/lib/internal/Magento/Framework/Convert/Test/Unit/ConvertArrayTest.php
@@ -50,7 +50,7 @@ XML;
     /**
      * @param array $array
      * @param string $rootName
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @dataProvider assocToXmlExceptionDataProvider
      */
     public function testAssocToXmlException($array, $rootName = '_')
diff --git a/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/AdapterException.php b/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/AdapterException.php
deleted file mode 100644
index 9aec56e0970fdbd8fe03fc4b0864daa7820b35a1..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/AdapterException.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\Css\PreProcessor\Adapter;
-
-/**
- * LESS adapter exception
- */
-class AdapterException extends \Exception
-{
-}
diff --git a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
index 64f38d98cfcaca8932ee42ebb185448812f0026d..c46f71cf9ebe447a028d6ce512819631ebd463e9 100644
--- a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
+++ b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
@@ -2215,7 +2215,7 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
      *
      * @param array $options
      * @param string $ddlType Table DDL Column type constant
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return string
      * @throws \Zend_Db_Exception
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
@@ -3343,7 +3343,9 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
     {
         $fromSelect = $select->getPart(\Magento\Framework\DB\Select::FROM);
         if (empty($fromSelect)) {
-            throw new \Magento\Framework\DB\DBException('Select object must have correct "FROM" part');
+            throw new \Magento\Framework\DB\DBException(
+                new \Magento\Framework\Phrase('Select object must have correct "FROM" part')
+            );
         }
 
         $tableName = [];
@@ -3451,7 +3453,9 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
         }
 
         if (!$columns) {
-            throw new \Magento\Framework\DB\DBException('The columns for UPDATE statement are not defined');
+            throw new \Magento\Framework\DB\DBException(
+                new \Magento\Framework\Phrase('The columns for UPDATE statement are not defined')
+            );
         }
 
         $query = sprintf("%s\nSET %s", $query, implode(', ', $columns));
diff --git a/lib/internal/Magento/Framework/DB/DBException.php b/lib/internal/Magento/Framework/DB/DBException.php
index df6bf9d109dc241d3bc6ebbda6dd05a9ead7fd11..6af4e98427bbf852c39c0b4494e4a5bba23339b1 100644
--- a/lib/internal/Magento/Framework/DB/DBException.php
+++ b/lib/internal/Magento/Framework/DB/DBException.php
@@ -10,6 +10,6 @@ namespace Magento\Framework\DB;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class DBException extends \Magento\Framework\Exception
+class DBException extends \Magento\Framework\Exception\LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/DB/MapperFactory.php b/lib/internal/Magento/Framework/DB/MapperFactory.php
index 0c701803e9b30b750174c7020d1d6bbaf164f9c0..5f125b76935edc5219a254db3dff8c8d62b311b3 100644
--- a/lib/internal/Magento/Framework/DB/MapperFactory.php
+++ b/lib/internal/Magento/Framework/DB/MapperFactory.php
@@ -33,13 +33,18 @@ class MapperFactory
      * @param string $className
      * @param array $arguments
      * @return MapperInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create($className, array $arguments = [])
     {
         $mapper = $this->objectManager->create($className, $arguments);
         if (!$mapper instanceof MapperInterface) {
-            throw new \Magento\Framework\Exception($className . ' doesn\'t implement \Magento\Framework\DB\MapperInterface');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    '%1 doesn\'t implement \Magento\Framework\DB\MapperInterface',
+                    [$className]
+                )
+            );
         }
         return $mapper;
     }
diff --git a/lib/internal/Magento/Framework/DB/MapperInterface.php b/lib/internal/Magento/Framework/DB/MapperInterface.php
index 74e3d926c5681ea311f48dd81f219bcb4850eb2c..67cb7d0ac6be3b48e0cae440485ff238aef29ea3 100644
--- a/lib/internal/Magento/Framework/DB/MapperInterface.php
+++ b/lib/internal/Magento/Framework/DB/MapperInterface.php
@@ -77,7 +77,7 @@ interface MapperInterface
      *
      * @param string|array $field
      * @param string|int|array $condition
-     * @throws \Magento\Framework\Exception if some error in the input could be detected.
+     * @throws \Magento\Framework\Exception\LocalizedException if some error in the input could be detected.
      * @return void
      */
     public function addFieldToFilter($field, $condition = null);
diff --git a/lib/internal/Magento/Framework/DB/QueryBuilder.php b/lib/internal/Magento/Framework/DB/QueryBuilder.php
index 68b24e06b5c905294a5ffb0e3ec34aa0637a3b5a..c764157be4ca43481b7ace33312b5580ed147496 100644
--- a/lib/internal/Magento/Framework/DB/QueryBuilder.php
+++ b/lib/internal/Magento/Framework/DB/QueryBuilder.php
@@ -75,7 +75,7 @@ class QueryBuilder
 
     /**
      * @return \Magento\Framework\DB\QueryInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create()
     {
diff --git a/lib/internal/Magento/Framework/DB/QueryFactory.php b/lib/internal/Magento/Framework/DB/QueryFactory.php
index a78004fb03e48c4565b28379e825ebdbf3ad91d0..dea7d2da39a06697c26059c76453c6b9bacc5c5a 100644
--- a/lib/internal/Magento/Framework/DB/QueryFactory.php
+++ b/lib/internal/Magento/Framework/DB/QueryFactory.php
@@ -32,13 +32,18 @@ class QueryFactory
      * @param string $className
      * @param array $arguments
      * @return QueryInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create($className, array $arguments = [])
     {
         $query = $this->objectManager->create($className, $arguments);
         if (!$query instanceof QueryInterface) {
-            throw new \Magento\Framework\Exception($className . ' doesn\'t implement \Magento\Framework\DB\QueryInterface');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    '%1 doesn\'t implement \Magento\Framework\DB\QueryInterface',
+                    [$className]
+                )
+            );
         }
         return $query;
     }
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php
index 607ff484331048e54d48e054575b7b5a9e37cb3f..9297ffad51e384ca70c200d1b42648125bd7555e 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php
@@ -499,8 +499,8 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
      * @param string $expectedQuery
      *
      * @dataProvider addColumnDataProvider
-     * covers \Magento\Framework\DB\Adapter\Pdo\Mysql::addColumn
-     * covers \Magento\Framework\DB\Adapter\Pdo\Mysql::_getColumnDefinition
+     * @covers \Magento\Framework\DB\Adapter\Pdo\Mysql::addColumn
+     * @covers \Magento\Framework\DB\Adapter\Pdo\Mysql::_getColumnDefinition
      */
     public function testAddColumn($options, $expectedQuery)
     {
diff --git a/lib/internal/Magento/Framework/DB/Tree.php b/lib/internal/Magento/Framework/DB/Tree.php
index e0a7b800b5df3925c8478680a09e815487a620f8..e2449c2bc8498fcd4758cc194862d3f78ee9742f 100644
--- a/lib/internal/Magento/Framework/DB/Tree.php
+++ b/lib/internal/Magento/Framework/DB/Tree.php
@@ -97,7 +97,9 @@ class Tree
 
             // make sure it's a \Zend_Db_Adapter
             if (!$connection instanceof \Zend_Db_Adapter_Abstract) {
-                throw new TreeException('db object does not implement \Zend_Db_Adapter_Abstract');
+                throw new TreeException(
+                    new \Magento\Framework\Phrase('db object does not implement \Zend_Db_Adapter_Abstract')
+                );
             }
 
             // save the connection
@@ -107,7 +109,7 @@ class Tree
                 $conn->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true);
             }
         } else {
-            throw new TreeException('db object is not set in config');
+            throw new TreeException(new \Magento\Framework\Phrase('db object is not set in config'));
         }
 
         if (!empty($config['table'])) {
diff --git a/lib/internal/Magento/Framework/DB/Tree/Node.php b/lib/internal/Magento/Framework/DB/Tree/Node.php
index 80aa840e9de0563351cfc43171d2e0ab75e5f8c5..e9ea215876818ab635f24972875564cc4dd82ef7 100644
--- a/lib/internal/Magento/Framework/DB/Tree/Node.php
+++ b/lib/internal/Magento/Framework/DB/Tree/Node.php
@@ -65,10 +65,10 @@ class Node
     public function __construct($nodeData, $keys)
     {
         if (empty($nodeData)) {
-            throw new NodeException('Empty array of node information');
+            throw new NodeException(new \Magento\Framework\Phrase('Empty array of node information'));
         }
         if (empty($keys)) {
-            throw new NodeException('Empty keys array');
+            throw new NodeException(new \Magento\Framework\Phrase('Empty keys array'));
         }
 
         $this->id = $nodeData[$keys['id']];
diff --git a/lib/internal/Magento/Framework/Data/Argument/InterpreterInterface.php b/lib/internal/Magento/Framework/Data/Argument/InterpreterInterface.php
index 0768805c048cdc592ad283a715df9688a58715ad..7dcffa444c719669b549f46d64c9cb11147a1e12 100644
--- a/lib/internal/Magento/Framework/Data/Argument/InterpreterInterface.php
+++ b/lib/internal/Magento/Framework/Data/Argument/InterpreterInterface.php
@@ -17,7 +17,6 @@ interface InterpreterInterface
      * @return mixed
      * @throws \InvalidArgumentException
      * @throws \UnexpectedValueException
-     * @throws MissingOptionalValueException
      */
     public function evaluate(array $data);
 }
diff --git a/lib/internal/Magento/Framework/Data/Argument/MissingOptionalValueException.php b/lib/internal/Magento/Framework/Data/Argument/MissingOptionalValueException.php
deleted file mode 100644
index 4fa01c23167398539ab82c0d4aee18b819d0fb6e..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Data/Argument/MissingOptionalValueException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\Data\Argument;
-
-/**
- * Recoverable situation of a missing argument value, presence of which is optional according to the business logic.
- * Possible resolution is to use a default argument value, if there is one.
- */
-class MissingOptionalValueException extends \RuntimeException
-{
-}
diff --git a/lib/internal/Magento/Framework/Data/Collection.php b/lib/internal/Magento/Framework/Data/Collection.php
index 90e15d734012e950092d07ecc26c04a30e5e4206..91a3dfd10c9416cac9a0ba55f13679ed846f6f36 100644
--- a/lib/internal/Magento/Framework/Data/Collection.php
+++ b/lib/internal/Magento/Framework/Data/Collection.php
@@ -164,13 +164,13 @@ class Collection implements \IteratorAggregate, \Countable, ArrayInterface, Coll
      *
      * @param string|array $field
      * @param string|int|array $condition
-     * @throws \Magento\Framework\Exception if some error in the input could be detected.
+     * @throws \Magento\Framework\Exception\LocalizedException if some error in the input could be detected.
      * @return $this
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function addFieldToFilter($field, $condition)
     {
-        throw new \Magento\Framework\Exception('Not implemented');
+        throw new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase('Not implemented'));
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Data/Collection/Db.php b/lib/internal/Magento/Framework/Data/Collection/Db.php
old mode 100644
new mode 100755
index d1a1dfb924e6311cc34ba53592bca23c10e433cd..563a654811edc9222580dfd46caa0c229cab96a0
--- a/lib/internal/Magento/Framework/Data/Collection/Db.php
+++ b/lib/internal/Magento/Framework/Data/Collection/Db.php
@@ -159,12 +159,14 @@ class Db extends \Magento\Framework\Data\Collection
      *
      * @param \Zend_Db_Adapter_Abstract $conn
      * @return $this
-     * @throws \Zend_Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function setConnection($conn)
     {
         if (!$conn instanceof \Zend_Db_Adapter_Abstract) {
-            throw new \Zend_Exception('dbModel read resource does not implement \Zend_Db_Adapter_Abstract');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('dbModel read resource does not implement \Zend_Db_Adapter_Abstract')
+            );
         }
 
         $this->_conn = $conn;
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Textarea.php b/lib/internal/Magento/Framework/Data/Form/Element/Textarea.php
index 724a609189ba9022ed27595273eb7999dd21f0af..26826e2515fc1386ff4fdf7e29d3243a4b0620c6 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Textarea.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Textarea.php
@@ -15,6 +15,16 @@ use Magento\Framework\Escaper;
 
 class Textarea extends AbstractElement
 {
+    /**
+     * Default number of rows
+     */
+    const DEFAULT_ROWS = 2;
+
+    /**
+     * Default number of columns
+     */
+    const DEFAULT_COLS = 15;
+
     /**
      * @param Factory $factoryElement
      * @param CollectionFactory $factoryCollection
@@ -30,8 +40,12 @@ class Textarea extends AbstractElement
         parent::__construct($factoryElement, $factoryCollection, $escaper, $data);
         $this->setType('textarea');
         $this->setExtType('textarea');
-        $this->setRows(2);
-        $this->setCols(15);
+        if (!$this->getRows()) {
+            $this->setRows(self::DEFAULT_ROWS);
+        }
+        if (!$this->getCols()) {
+            $this->setCols(self::DEFAULT_COLS);
+        }
     }
 
     /**
@@ -65,9 +79,8 @@ class Textarea extends AbstractElement
     public function getElementHtml()
     {
         $this->addClass('textarea');
-        $html = '<textarea id="' . $this->getHtmlId() . '" name="' . $this->getName() . '" ' . $this->serialize(
-            $this->getHtmlAttributes()
-        ) . $this->_getUiId() . ' >';
+        $html = '<textarea id="' . $this->getHtmlId() . '" name="' . $this->getName() . '" '
+            . $this->serialize($this->getHtmlAttributes()) . $this->_getUiId() . ' >';
         $html .= $this->getEscapedValue();
         $html .= "</textarea>";
         $html .= $this->getAfterElementHtml();
diff --git a/lib/internal/Magento/Framework/Data/FormFactory.php b/lib/internal/Magento/Framework/Data/FormFactory.php
index cd35382e2644672c17e2d5cbe458835172fde526..57267e2413b6377219d204fa248316c0f1ff3bf9 100644
--- a/lib/internal/Magento/Framework/Data/FormFactory.php
+++ b/lib/internal/Magento/Framework/Data/FormFactory.php
@@ -33,8 +33,10 @@ class FormFactory
      * @param \Magento\Framework\ObjectManagerInterface $objectManager
      * @param string $instanceName
      */
-    public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = 'Magento\Framework\Data\Form')
-    {
+    public function __construct(
+        \Magento\Framework\ObjectManagerInterface $objectManager,
+        $instanceName = 'Magento\Framework\Data\Form'
+    ) {
         $this->_objectManager = $objectManager;
         $this->_instanceName = $instanceName;
     }
@@ -44,14 +46,16 @@ class FormFactory
      *
      * @param array $data
      * @return \Magento\Framework\Data\Form
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create(array $data = [])
     {
         /** @var $form \Magento\Framework\Data\Form */
         $form = $this->_objectManager->create($this->_instanceName, $data);
         if (!$form instanceof \Magento\Framework\Data\Form) {
-            throw new \Magento\Framework\Exception($this->_instanceName . ' doesn\'t extend \Magento\Framework\Data\Form');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('%1 doesn\'t extend \Magento\Framework\Data\Form', [$this->_instanceName])
+            );
         }
         return $form;
     }
diff --git a/lib/internal/Magento/Framework/Data/SearchResultIteratorFactory.php b/lib/internal/Magento/Framework/Data/SearchResultIteratorFactory.php
index 6fc4110a9e59e1bd0fb3180a21a4b62c99896616..f6efdfefcd5419d60e72d811ec76d4a6429dea0c 100644
--- a/lib/internal/Magento/Framework/Data/SearchResultIteratorFactory.php
+++ b/lib/internal/Magento/Framework/Data/SearchResultIteratorFactory.php
@@ -29,14 +29,14 @@ class SearchResultIteratorFactory
      * @param string $className
      * @param array $arguments
      * @return SearchResultIterator
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create($className, array $arguments = [])
     {
         $resultIterator = $this->objectManager->create($className, $arguments);
         if (!$resultIterator instanceof \Traversable) {
-            throw new \Magento\Framework\Exception(
-                $className . ' should be an iterator'
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('%1 should be an iterator', [$className])
             );
         }
         return $resultIterator;
diff --git a/lib/internal/Magento/Framework/Data/Structure.php b/lib/internal/Magento/Framework/Data/Structure.php
index a5d09d08ca9a1e99799f7423cacd4159abd1338a..3e8b81ea66770f46c329d40f0c736741f24aef42 100644
--- a/lib/internal/Magento/Framework/Data/Structure.php
+++ b/lib/internal/Magento/Framework/Data/Structure.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Data;
 
-use Magento\Framework\Exception;
+use Magento\Framework\Exception\LocalizedException;
 
 /**
  * An associative data structure, that features "nested set" parent-child relations
@@ -43,14 +43,16 @@ class Structure
      *
      * @param array $elements
      * @return void
-     * @throws Exception if any format issues identified
+     * @throws LocalizedException if any format issues identified
      */
     public function importElements(array $elements)
     {
         $this->_elements = $elements;
         foreach ($elements as $elementId => $element) {
             if (is_numeric($elementId)) {
-                throw new Exception("Element ID must not be numeric: '{$elementId}'.");
+                throw new LocalizedException(
+                    new \Magento\Framework\Phrase("Element ID must not be numeric: '%1'.", [$elementId])
+                );
             }
             $this->_assertParentRelation($elementId);
             if (isset($element[self::GROUPS])) {
@@ -59,7 +61,12 @@ class Structure
                 foreach ($groups as $groupName => $group) {
                     $this->_assertArray($group);
                     if ($group !== array_flip($group)) {
-                        throw new Exception("Invalid format of group '{$groupName}': " . var_export($group, 1));
+                        throw new LocalizedException(
+                            new \Magento\Framework\Phrase(
+                                "Invalid format of group '%1': %2",
+                                [$groupName, var_export($group, 1)]
+                            )
+                        );
                     }
                     foreach ($group as $groupElementId) {
                         $this->_assertElementExists($groupElementId);
@@ -74,7 +81,7 @@ class Structure
      *
      * @param string $elementId
      * @return void
-     * @throws Exception
+     * @throws LocalizedException
      */
     protected function _assertParentRelation($elementId)
     {
@@ -85,8 +92,11 @@ class Structure
             $parentId = $element[self::PARENT];
             $this->_assertElementExists($parentId);
             if (empty($this->_elements[$parentId][self::CHILDREN][$elementId])) {
-                throw new Exception(
-                    "Broken parent-child relation: the '{$elementId}' is not in the nested set of '{$parentId}'."
+                throw new LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        "Broken parent-child relation: the '%1' is not in the nested set of '%2'.",
+                        [$elementId, $parentId]
+                    )
                 );
             }
         }
@@ -96,7 +106,9 @@ class Structure
             $children = $element[self::CHILDREN];
             $this->_assertArray($children);
             if ($children !== array_flip(array_flip($children))) {
-                throw new Exception('Invalid format of children: ' . var_export($children, 1));
+                throw new LocalizedException(
+                    new \Magento\Framework\Phrase('Invalid format of children: %1', [var_export($children, 1)])
+                );
             }
             foreach (array_keys($children) as $childId) {
                 $this->_assertElementExists($childId);
@@ -104,8 +116,11 @@ class Structure
                     $this->_elements[$childId][self::PARENT]
                 ) || $elementId !== $this->_elements[$childId][self::PARENT]
                 ) {
-                    throw new Exception(
-                        "Broken parent-child relation: the '{$childId}' is supposed to have '{$elementId}' as parent."
+                    throw new LocalizedException(
+                        new \Magento\Framework\Phrase(
+                            "Broken parent-child relation: the '%1' is supposed to have '%2' as parent.",
+                            [$childId, $elementId]
+                        )
                     );
                 }
             }
@@ -128,12 +143,14 @@ class Structure
      * @param string $elementId
      * @param array $data
      * @return void
-     * @throws Exception if an element with this id already exists
+     * @throws LocalizedException if an element with this id already exists
      */
     public function createElement($elementId, array $data)
     {
         if (isset($this->_elements[$elementId])) {
-            throw new Exception("Element with ID '{$elementId}' already exists.");
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase("Element with ID '%1' already exists.", [$elementId])
+            );
         }
         $this->_elements[$elementId] = [];
         foreach ($data as $key => $value) {
@@ -237,13 +254,15 @@ class Structure
      * @param string $oldId
      * @param string $newId
      * @return $this
-     * @throws Exception if trying to overwrite another element
+     * @throws LocalizedException if trying to overwrite another element
      */
     public function renameElement($oldId, $newId)
     {
         $this->_assertElementExists($oldId);
         if (!$newId || isset($this->_elements[$newId])) {
-            throw new Exception("Element with ID '{$newId}' is already defined.");
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase("Element with ID '%1' is already defined.", [$newId])
+            );
         }
 
         // rename in registry
@@ -278,17 +297,21 @@ class Structure
      * @param int|null $position
      * @see _insertChild() for position explanation
      * @return void
-     * @throws Exception if attempting to set parent as child to its child (recursively)
+     * @throws LocalizedException if attempting to set parent as child to its child (recursively)
      */
     public function setAsChild($elementId, $parentId, $alias = '', $position = null)
     {
         if ($elementId == $parentId) {
-            throw new Exception("The '{$elementId}' cannot be set as child to itself.");
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase("The '%1' cannot be set as child to itself.", [$elementId])
+            );
         }
         if ($this->_isParentRecursively($elementId, $parentId)) {
-            throw new Exception(
-                "The '{$elementId}' is a parent of '{$parentId}' recursively, " .
-                "therefore '{$elementId}' cannot be set as child to it."
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase(
+                    "The '%1' is a parent of '%2' recursively, therefore '%3' cannot be set as child to it.",
+                    [$elementId, $parentId, $elementId]
+                )
             );
         }
         $this->unsetChild($elementId);
@@ -512,13 +535,15 @@ class Structure
      * @param string $parentId
      * @param string $childId
      * @return int
-     * @throws Exception if specified elements have no parent-child relation
+     * @throws LocalizedException if specified elements have no parent-child relation
      */
     protected function _getChildOffset($parentId, $childId)
     {
         $index = array_search($childId, array_keys($this->getChildren($parentId)));
         if (false === $index) {
-            throw new Exception("The '{$childId}' is not a child of '{$parentId}'.");
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase("The '%1' is not a child of '%2'.", [$childId, $parentId])
+            );
         }
         return $index;
     }
@@ -559,7 +584,7 @@ class Structure
      * @param int|null $offset
      * @param string $alias
      * @return void
-     * @throws Exception
+     * @throws LocalizedException
      */
     protected function _insertChild($targetParentId, $elementId, $offset, $alias)
     {
@@ -568,17 +593,27 @@ class Structure
         // validate
         $this->_assertElementExists($elementId);
         if (!empty($this->_elements[$elementId][self::PARENT])) {
-            throw new Exception(
-                "The element '{$elementId}' already has a parent: '{$this->_elements[$elementId][self::PARENT]}'"
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase(
+                    "The element '%1' already has a parent: '%2'",
+                    [$elementId, $this->_elements[$elementId][self::PARENT]]
+                )
             );
         }
         $this->_assertElementExists($targetParentId);
         $children = $this->getChildren($targetParentId);
         if (isset($children[$elementId])) {
-            throw new Exception("The element '{$elementId}' already a child of '{$targetParentId}'");
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase("The element '%1' already a child of '%2'", [$elementId, $targetParentId])
+            );
         }
         if (false !== array_search($alias, $children)) {
-            throw new Exception("The element '{$targetParentId}' already has a child with alias '{$alias}'");
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase(
+                    "The element '%1' already has a child with alias '%2'",
+                    [$targetParentId, $alias]
+                )
+            );
         }
 
         // insert
@@ -598,7 +633,7 @@ class Structure
      *
      * @param string $elementId
      * @return void
-     * @throws Exception if doesn't exist
+     * @throws LocalizedException if doesn't exist
      */
     private function _assertElementExists($elementId)
     {
@@ -612,12 +647,14 @@ class Structure
      *
      * @param array $value
      * @return void
-     * @throws Exception
+     * @throws LocalizedException
      */
     private function _assertArray($value)
     {
         if (!is_array($value)) {
-            throw new Exception("An array expected: " . var_export($value, 1));
+            throw new LocalizedException(
+                new \Magento\Framework\Phrase("An array expected: %1", [var_export($value, 1)])
+            );
         }
     }
 }
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbTest.php
old mode 100644
new mode 100755
index 2217a390d6a7eb3f6f8b7358ad289150b2d98456..666655aefd385fe6cddaff1f7c172e69c042a9d5
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbTest.php
@@ -258,7 +258,7 @@ class DbTest extends \PHPUnit_Framework_TestCase
      * Test that after cloning collection $this->_select in initial and cloned collections
      * do not reference the same object
      *
-     * covers \Magento\Framework\Data\Collection\Db::__clone
+     * @covers \Magento\Framework\Data\Collection\Db::__clone
      */
     public function testClone()
     {
@@ -324,7 +324,7 @@ class DbTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Zend_Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage dbModel read resource does not implement \Zend_Db_Adapter_Abstract
      */
     public function testSetConnectionException()
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/AbstractElementTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/AbstractElementTest.php
index 8ab511594eb446d52e3a6fef00f64f77d46fe6a1..15f30f19b442c0d93a7a6c5e23bf0e338cf11e5d 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/AbstractElementTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/AbstractElementTest.php
@@ -51,7 +51,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::addElement()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::addElement()
      */
     public function testAddElement()
     {
@@ -88,7 +88,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlId()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlId()
      */
     public function testGetHtmlId()
     {
@@ -112,7 +112,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getName()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getName()
      */
     public function testGetNameWithoutSuffix()
     {
@@ -134,7 +134,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getName()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getName()
      */
     public function testGetNameWithSuffix()
     {
@@ -160,7 +160,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::removeField()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::removeField()
      */
     public function testRemoveField()
     {
@@ -189,7 +189,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlAttributes()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlAttributes()
      */
     public function testGetHtmlAttributes()
     {
@@ -210,7 +210,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::addClass()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::addClass()
      */
     public function testAddClass()
     {
@@ -223,7 +223,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::removeClass()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::removeClass()
      */
     public function testRemoveClass()
     {
@@ -240,7 +240,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getEscapedValue()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getEscapedValue()
      */
     public function testGetEscapedValueWithoutFilter()
     {
@@ -251,7 +251,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getEscapedValue()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getEscapedValue()
      */
     public function testGetEscapedValueWithFilter()
     {
@@ -273,7 +273,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      * @param array $initialData
      * @param string $expectedValue
      * @dataProvider getElementHtmlDataProvider
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getElementHtml()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getElementHtml()
      */
     public function testGetElementHtml(array $initialData, $expectedValue)
     {
@@ -289,7 +289,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      * @param array $initialData
      * @param string $expectedValue
      * @dataProvider getLabelHtmlDataProvider
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getLabelHtml()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getLabelHtml()
      */
     public function testGetLabelHtml(array $initialData, $expectedValue)
     {
@@ -305,7 +305,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      * @param array $initialData
      * @param string $expectedValue
      * @dataProvider testGetDefaultHtmlDataProvider
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getDefaultHtml()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getDefaultHtml()
      */
     public function testGetDefaultHtml(array $initialData, $expectedValue)
     {
@@ -317,7 +317,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml()
      */
     public function testGetHtmlWithoutRenderer()
     {
@@ -333,7 +333,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml()
      */
     public function testGetHtmlWithRenderer()
     {
@@ -358,7 +358,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      * @param array $initialData
      * @param string $expectedValue
      * @dataProvider serializeDataProvider
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::serialize()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::serialize()
      */
     public function testSerialize(array $initialData, $expectedValue)
     {
@@ -372,7 +372,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId()
      */
     public function testGetHtmlContainerIdWithoutId()
     {
@@ -383,7 +383,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId()
      */
     public function testGetHtmlContainerIdWithContainerId()
     {
@@ -396,7 +396,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtmlContainerId()
      */
     public function testGetHtmlContainerIdWithFieldContainerIdPrefix()
     {
@@ -418,7 +418,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      * @param array $initialData
      * @param string $expectedValue
      * @dataProvider addElementValuesDataProvider
-     * covers \Magento\Framework\Data\Form\Element\AbstractElement::addElementValues()
+     * @covers \Magento\Framework\Data\Form\Element\AbstractElement::addElementValues()
      */
     public function testAddElementValues(array $initialData, $expectedValue)
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ButtonTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ButtonTest.php
index b32e997f224e2fba03e49369259bbd8fd1ab1993..bcb5135b047e8b7ecf8a83a4a0629be66ec9094c 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ButtonTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ButtonTest.php
@@ -44,7 +44,7 @@ class ButtonTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Button::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Button::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class ButtonTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Button::getHtmlAttributes
+     * @covers \Magento\Framework\Data\Form\Element\Button::getHtmlAttributes
      */
     public function testGetHtmlAttributes()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CheckboxTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CheckboxTest.php
index 44d1141c88da08da561beabdc66608ef8aa69d0d..5f0fd55c03512c033cb1ee5f2a8ef9899331d81c 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CheckboxTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CheckboxTest.php
@@ -44,7 +44,7 @@ class CheckboxTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Checkbox::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Checkbox::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class CheckboxTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Checkbox::getHtmlAttributes
+     * @covers \Magento\Framework\Data\Form\Element\Checkbox::getHtmlAttributes
      */
     public function testGetHtmlAttributes()
     {
@@ -66,7 +66,7 @@ class CheckboxTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Checkbox::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Checkbox::getElementHtml
      */
     public function testGetElementHtml()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CollectionFactoryTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CollectionFactoryTest.php
index 36c6d59d79b3cffc4ee106cda01e94ffbbbee72e..bdd29b4a70530dd14a74a70fac87e4fbb60bc710 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CollectionFactoryTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/CollectionFactoryTest.php
@@ -36,7 +36,7 @@ class CollectionFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\CollectionFactory::create
+     * @covers \Magento\Framework\Data\Form\Element\CollectionFactory::create
      */
     public function testCreate()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ColumnTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ColumnTest.php
index 2dc7218c9ab65c00215025a378ecf7c05f8f5c7a..e559055322cf6de1421cc3e1491ef097d99ebd14 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ColumnTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ColumnTest.php
@@ -44,7 +44,7 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Column::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Column::__construct
      */
     public function testConstruct()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/FileTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/FileTest.php
index 77786e075ff25ef7805b79f3fe800c6ddd4e252b..19165e58bff0099c9b1647cc11ce0823b8e0b0b9 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/FileTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/FileTest.php
@@ -44,7 +44,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\File::__construct
+     * @covers \Magento\Framework\Data\Form\Element\File::__construct
      */
     public function testConstruct()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/HiddenTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/HiddenTest.php
index 1da08b0d511b1109f1fd9dfc627f1b1c6cc37e73..3b8211610698644c719d5030e53b1c9da71811be 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/HiddenTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/HiddenTest.php
@@ -44,7 +44,7 @@ class HiddenTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Hidden::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Hidden::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class HiddenTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Hidden::getDefaultHtml
+     * @covers \Magento\Framework\Data\Form\Element\Hidden::getDefaultHtml
      */
     public function testGetDefaultHtml()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImageTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImageTest.php
index 86bf7cfa0cb379b840996818d29305b1db4b6c0a..db253018181384923b79efc04d311171055c466a 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImageTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImageTest.php
@@ -53,7 +53,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Image::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Image::__construct
      */
     public function testConstruct()
     {
@@ -61,7 +61,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Image::getName
+     * @covers \Magento\Framework\Data\Form\Element\Image::getName
      */
     public function testGetName()
     {
@@ -70,7 +70,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Image::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Image::getElementHtml
      */
     public function testGetElementHtmlWithoutValue()
     {
@@ -83,7 +83,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Image::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Image::getElementHtml
      */
     public function testGetElementHtmlWithValue()
     {
@@ -97,7 +97,10 @@ class ImageTest extends \PHPUnit_Framework_TestCase
         $this->assertContains('<input', $html);
         $this->assertContains('type="file"', $html);
         $this->assertContains('value="test_value"', $html);
-        $this->assertContains('<a href="http://localhost/media/test_value" onclick="imagePreview(\'_image\'); return false;"', $html);
+        $this->assertContains(
+            '<a href="http://localhost/media/test_value" onclick="imagePreview(\'_image\'); return false;"',
+            $html
+        );
         $this->assertContains('<input type="checkbox"', $html);
     }
 }
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImagefileTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImagefileTest.php
index 6dd63e09e8c0ded1af3f5d8bf94f65a810dcc3b3..2ba27897cac7b7148b7a08c572b527d445f496f6 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImagefileTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ImagefileTest.php
@@ -40,7 +40,7 @@ class ImagefileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Imagefile::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Imagefile::__construct
      */
     public function testConstruct()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LabelTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LabelTest.php
index 48a59757eb56324a86b57bf3f0f78f1ff2efba05..2e0f8aa103910217f86d791be8ada9609f74caee 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LabelTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LabelTest.php
@@ -40,7 +40,7 @@ class LabelTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Label::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Label::__construct
      */
     public function testConstruct()
     {
@@ -48,7 +48,7 @@ class LabelTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Label::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Label::getElementHtml
      */
     public function testGetElementHtml()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LinkTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LinkTest.php
index c4894f86c82d042012490bbbd455da7eac2ebf66..b1146e86bdeff3cd006b9ba9c5e3ce5341000f31 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LinkTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/LinkTest.php
@@ -44,7 +44,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Link::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Link::__construct
      */
     public function testConstruct()
     {
@@ -52,7 +52,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Link::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Link::getElementHtml
      */
     public function testGetElementHtml()
     {
@@ -69,7 +69,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Link::getHtmlAttributes
+     * @covers \Magento\Framework\Data\Form\Element\Link::getHtmlAttributes
      */
     public function testGetHtmlAttributes()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/MultiselectTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/MultiselectTest.php
index 75e52b1ad44c260ecfaab408dd6db8ff786fc7ba..e24ab55c5f1214f7019ae62c07efe2dff394290d 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/MultiselectTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/MultiselectTest.php
@@ -22,7 +22,7 @@ class MultiselectTest extends \PHPUnit_Framework_TestCase
     /**
      * Verify that hidden input is present in multiselect
      *
-     * covers \Magento\Framework\Data\Form\Element\Multiselect::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Multiselect::getElementHtml
      */
     public function testHiddenFieldPresentInMultiSelect()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
index 5f0d420d6c0c0feb944b7bef7713b70b6e323d92..8fcf5673702db099494e2dc504619f3ec40dbff9 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
@@ -44,7 +44,7 @@ class NoteTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Note::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Note::__construct
      */
     public function testConstruct()
     {
@@ -52,7 +52,7 @@ class NoteTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Note::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Note::getElementHtml
      */
     public function testGetElementHtml()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ObscureTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ObscureTest.php
index 24960126c0a6d57b207380035b91997e5f50dd93..640aebb71a46a795aae4022daba66c037521efed 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ObscureTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ObscureTest.php
@@ -44,7 +44,7 @@ class ObscureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Obscure::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Obscure::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class ObscureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Obscure::getEscapedValue
+     * @covers \Magento\Framework\Data\Form\Element\Obscure::getEscapedValue
      */
     public function testGetEscapedValue()
     {
@@ -64,7 +64,7 @@ class ObscureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Obscure::getHtmlAttributes
+     * @covers \Magento\Framework\Data\Form\Element\Obscure::getHtmlAttributes
      */
     public function testGetHtmlAttributes()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/PasswordTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/PasswordTest.php
index 9e2e70369d3690b11399480cb0fe74a3229e33a5..0fd77983e5255d5a2db39f440f164a71fd627d15 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/PasswordTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/PasswordTest.php
@@ -44,7 +44,7 @@ class PasswordTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Password::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Password::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class PasswordTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Password::getHtml
+     * @covers \Magento\Framework\Data\Form\Element\Password::getHtml
      */
     public function testGetHtml()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/RadioTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/RadioTest.php
index 2cfdb1886390b7542e76a74aa295debe63b91b95..b8340600e63ab1bb41ceaa9d470aa9c2bf1245f8 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/RadioTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/RadioTest.php
@@ -44,7 +44,7 @@ class RadioTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Radio::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Radio::__construct
      */
     public function testConstruct()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ResetTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ResetTest.php
index 5237122b215435bc8a69ee43317fbd9a1f2acc42..427b0391a8dd962914773b26ad9b3e555bbb307a 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ResetTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/ResetTest.php
@@ -44,7 +44,7 @@ class ResetTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Reset::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Reset::__construct
      */
     public function testConstruct()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/SubmitTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/SubmitTest.php
index 1d2444cb599f390b95408fcd34beeb6729f88703..7d93c9009de5a12e99e1bc2f7b6ff458f32e8144 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/SubmitTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/SubmitTest.php
@@ -44,7 +44,7 @@ class SubmitTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Submit::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Submit::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class SubmitTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Submit::getHtml
+     * @covers \Magento\Framework\Data\Form\Element\Submit::getHtml
      */
     public function testGetHtml()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextTest.php
index 3d0822f60bd455fa2323b4caf649fc3afa8bf25c..85d93de729a2f23ef01d99174c7298b9ff2aa45e 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextTest.php
@@ -44,7 +44,7 @@ class TextTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Text::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Text::__construct
      */
     public function testConstruct()
     {
@@ -53,7 +53,7 @@ class TextTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Text::getHtml
+     * @covers \Magento\Framework\Data\Form\Element\Text::getHtml
      */
     public function testGetHtml()
     {
@@ -63,7 +63,7 @@ class TextTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Text::getHtmlAttributes
+     * @covers \Magento\Framework\Data\Form\Element\Text::getHtmlAttributes
      */
     public function testGetHtmlAttributes()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextareaTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextareaTest.php
index 51eb3c0ef09251cf1552f772621deac48b04185f..926de7ebb9776ed1af6fdca59fe3c0fee08a9801 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextareaTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/TextareaTest.php
@@ -44,7 +44,7 @@ class TextareaTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Textarea::__construct
+     * @covers \Magento\Framework\Data\Form\Element\Textarea::__construct
      */
     public function testConstruct()
     {
@@ -55,7 +55,7 @@ class TextareaTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Textarea::getElementHtml
+     * @covers \Magento\Framework\Data\Form\Element\Textarea::getElementHtml
      */
     public function testGetElementHtml()
     {
@@ -67,7 +67,7 @@ class TextareaTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Data\Form\Element\Textarea::getHtmlAttributes
+     * @covers \Magento\Framework\Data\Form\Element\Textarea::getHtmlAttributes
      */
     public function testGetHtmlAttributes()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/FormFactoryTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/FormFactoryTest.php
index 9ebd3bc85e148af18ce49953ce37166cba52f63d..cf9ef32ca805c5a4bd5968349c6ee199f4665ecd 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/FormFactoryTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/FormFactoryTest.php
@@ -29,7 +29,7 @@ class FormFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage WrongClass doesn't extend \Magento\Framework\Data\Form
      */
     public function testWrongTypeException()
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/StructureTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/StructureTest.php
index 860338dce31c9c2334a77b4281d48429f5cce1dd..87dfd68d30a0fbe3f57f7609c76401857c364117 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/StructureTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/StructureTest.php
@@ -69,7 +69,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase
      * @param array $elements
      * @return void
      * @dataProvider importExceptionDataProvider
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testImportException($elements)
     {
@@ -184,7 +184,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @return void
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testCreateElementException()
     {
@@ -365,7 +365,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase
      * @param string $elementId
      * @param string $parentId
      * @return void
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @dataProvider setAsChildExceptionDataProvider
      */
     public function testSetAsChildException($elementId, $parentId)
@@ -459,7 +459,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @return void
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testReorderChildException()
     {
@@ -516,7 +516,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @return void
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testReorderToSiblingException()
     {
@@ -566,8 +566,8 @@ class StructureTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @return void
-     * covers \Magento\Framework\Data\Structure::addToParentGroup
-     * covers \Magento\Framework\Data\Structure::getGroupChildNames
+     * @covers \Magento\Framework\Data\Structure::addToParentGroup
+     * @covers \Magento\Framework\Data\Structure::getGroupChildNames
      */
     public function testGroups()
     {
diff --git a/lib/internal/Magento/Framework/Data/Tree/NodeFactory.php b/lib/internal/Magento/Framework/Data/Tree/NodeFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..0fa561adbd7aa9f6f0bf7fe1720d47f85b9a5c40
--- /dev/null
+++ b/lib/internal/Magento/Framework/Data/Tree/NodeFactory.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\Data\Tree;
+
+use Magento\Framework\ObjectManagerInterface;
+
+/**
+ * Factory class for @see \Magento\Framework\Data\Tree\Node
+ */
+class NodeFactory
+{
+    /**
+     * Object Manager instance
+     *
+     * @var ObjectManagerInterface
+     */
+    protected $objectManager;
+
+    /**
+     * Instance name to create
+     *
+     * @var string
+     */
+    protected $instanceName;
+
+    /**
+     * Factory constructor
+     *
+     * @param ObjectManagerInterface $objectManager
+     * @param string $instanceName
+     */
+    public function __construct(
+        ObjectManagerInterface $objectManager,
+        $instanceName = '\Magento\Framework\Data\Tree\Node'
+    ) {
+        $this->objectManager = $objectManager;
+        $this->instanceName = $instanceName;
+    }
+
+    /**
+     * Create class instance with specified parameters
+     *
+     * @param array $data
+     * @return \Magento\Framework\Data\Tree\Node
+     */
+    public function create(array $data = [])
+    {
+        return $this->objectManager->create($this->instanceName, $data);
+    }
+}
diff --git a/lib/internal/Magento/Framework/Data/TreeFactory.php b/lib/internal/Magento/Framework/Data/TreeFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad3a41304b09fd8472a590d639df80984188807e
--- /dev/null
+++ b/lib/internal/Magento/Framework/Data/TreeFactory.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\Data;
+
+use Magento\Framework\ObjectManagerInterface;
+
+/**
+ * Factory class for @see \Magento\Framework\Data\Tree
+ */
+class TreeFactory
+{
+    /**
+     * Object Manager instance
+     *
+     * @var ObjectManagerInterface
+     */
+    protected $objectManager = null;
+
+    /**
+     * Instance name to create
+     *
+     * @var string
+     */
+    protected $instanceName = null;
+
+    /**
+     * Factory constructor
+     *
+     * @param ObjectManagerInterface $objectManager
+     * @param string $instanceName
+     */
+    public function __construct(
+        ObjectManagerInterface $objectManager,
+        $instanceName = '\Magento\Framework\Data\Tree'
+    ) {
+        $this->objectManager = $objectManager;
+        $this->instanceName = $instanceName;
+    }
+
+    /**
+     * Create class instance with specified parameters
+     *
+     * @param array $data
+     * @return \Magento\Framework\Data\Tree
+     */
+    public function create(array $data = [])
+    {
+        return $this->objectManager->create($this->instanceName, $data);
+    }
+}
diff --git a/lib/internal/Magento/Framework/Encryption/Crypt.php b/lib/internal/Magento/Framework/Encryption/Crypt.php
index 9185fc38c03fa08e8a0d49d643cf49f267c3adfe..76ee991295b0eac5b35c10e45161248e134cdbdb 100644
--- a/lib/internal/Magento/Framework/Encryption/Crypt.php
+++ b/lib/internal/Magento/Framework/Encryption/Crypt.php
@@ -55,7 +55,9 @@ class Crypt
         try {
             $maxKeySize = mcrypt_enc_get_key_size($this->_handle);
             if (strlen($key) > $maxKeySize) {
-                throw new \Magento\Framework\Exception('Key must not exceed ' . $maxKeySize . ' bytes.');
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase('Key must not exceed %1 bytes.', [$maxKeySize])
+                );
             }
             $initVectorSize = mcrypt_enc_get_iv_size($this->_handle);
             if (true === $initVector) {
@@ -69,7 +71,9 @@ class Crypt
                 /* Set vector to zero bytes to not use it */
                 $initVector = str_repeat("\0", $initVectorSize);
             } elseif (!is_string($initVector) || strlen($initVector) != $initVectorSize) {
-                throw new \Magento\Framework\Exception('Init vector must be a string of ' . $initVectorSize . ' bytes.');
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase('Init vector must be a string of %1 bytes.', [$initVectorSize])
+                );
             }
             $this->_initVector = $initVector;
         } catch (\Exception $e) {
diff --git a/lib/internal/Magento/Framework/Encryption/Test/Unit/CryptTest.php b/lib/internal/Magento/Framework/Encryption/Test/Unit/CryptTest.php
index 6b003e09e285fb79a5a029aca076dcf160f1f259..4c430da55d5131a44bb191d82682fae3c09fa7e8 100644
--- a/lib/internal/Magento/Framework/Encryption/Test/Unit/CryptTest.php
+++ b/lib/internal/Magento/Framework/Encryption/Test/Unit/CryptTest.php
@@ -120,7 +120,7 @@ class CryptTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @dataProvider getConstructorExceptionData
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testConstructorException($key, $cipher, $mode, $initVector)
     {
diff --git a/lib/internal/Magento/Framework/Exception.php b/lib/internal/Magento/Framework/Exception.php
deleted file mode 100644
index 2c7320a4e010647ae5577dc2b1c95b6ea1238e17..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Exception.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework;
-
-class Exception extends \Exception
-{
-    /**
-     * Check PCRE PREG error and throw exception
-     *
-     * @return void
-     * @throws \Magento\Framework\Exception
-     */
-    public static function processPcreError()
-    {
-        if (preg_last_error() != PREG_NO_ERROR) {
-            switch (preg_last_error()) {
-                case PREG_INTERNAL_ERROR:
-                    throw new \Magento\Framework\Exception('PCRE PREG internal error');
-                case PREG_BACKTRACK_LIMIT_ERROR:
-                    throw new \Magento\Framework\Exception('PCRE PREG Backtrack limit error');
-                case PREG_RECURSION_LIMIT_ERROR:
-                    throw new \Magento\Framework\Exception('PCRE PREG Recursion limit error');
-                case PREG_BAD_UTF8_ERROR:
-                    throw new \Magento\Framework\Exception('PCRE PREG Bad UTF-8 error');
-                case PREG_BAD_UTF8_OFFSET_ERROR:
-                    throw new \Magento\Framework\Exception('PCRE PREG Bad UTF-8 offset error');
-            }
-        }
-    }
-}
diff --git a/lib/internal/Magento/Framework/Filesystem/FilesystemException.php b/lib/internal/Magento/Framework/Exception/FileSystemException.php
similarity index 58%
rename from lib/internal/Magento/Framework/Filesystem/FilesystemException.php
rename to lib/internal/Magento/Framework/Exception/FileSystemException.php
index 4f46cc8d7b1c8e31bd3260d57c8a29033731fa2d..4363e98eeca759027d3488b2838cef89927d9605 100644
--- a/lib/internal/Magento/Framework/Filesystem/FilesystemException.php
+++ b/lib/internal/Magento/Framework/Exception/FileSystemException.php
@@ -1,12 +1,13 @@
 <?php
 /**
- * Magento filesystem exception
- *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Filesystem;
+namespace Magento\Framework\Exception;
 
-class FilesystemException extends \Exception
+/**
+ * Magento filesystem exception
+ */
+class FileSystemException extends LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/Session/SaveHandlerException.php b/lib/internal/Magento/Framework/Exception/MailException.php
similarity index 51%
rename from lib/internal/Magento/Framework/Session/SaveHandlerException.php
rename to lib/internal/Magento/Framework/Exception/MailException.php
index 02cfc44d280cbd7251c718a7d75b44adabca2085..9f6fc0489e3d161a682828c190e63de9376d3141 100644
--- a/lib/internal/Magento/Framework/Session/SaveHandlerException.php
+++ b/lib/internal/Magento/Framework/Exception/MailException.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Session;
+namespace Magento\Framework\Exception;
 
 /**
- * Save handler exception
+ * Magento mail exception
  */
-class SaveHandlerException extends \Exception
+class MailException extends LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/App/Action/NotFoundException.php b/lib/internal/Magento/Framework/Exception/NotFoundException.php
similarity index 55%
rename from lib/internal/Magento/Framework/App/Action/NotFoundException.php
rename to lib/internal/Magento/Framework/Exception/NotFoundException.php
index 8b97313de8963987cca201e67d0c904beccd9905..e2aa845315fd6940c20ab4fa4125a6666458f5a8 100644
--- a/lib/internal/Magento/Framework/App/Action/NotFoundException.php
+++ b/lib/internal/Magento/Framework/Exception/NotFoundException.php
@@ -1,11 +1,10 @@
 <?php
 /**
- *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Action;
+namespace Magento\Framework\Exception;
 
-class NotFoundException extends \Exception
+class NotFoundException extends LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/Session/Exception.php b/lib/internal/Magento/Framework/Exception/SessionException.php
similarity index 60%
rename from lib/internal/Magento/Framework/Session/Exception.php
rename to lib/internal/Magento/Framework/Exception/SessionException.php
index 260f375253b435d9d0410a655e2ffee07828130e..0addcc69cb6f4eb3a9d7b799e1f372f9326aa7b1 100644
--- a/lib/internal/Magento/Framework/Session/Exception.php
+++ b/lib/internal/Magento/Framework/Exception/SessionException.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Session;
+namespace Magento\Framework\Exception;
 
 /**
  * Session exception
  */
-class Exception extends \Exception
+class SessionException extends LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/App/InitException.php b/lib/internal/Magento/Framework/Exception/State/InitException.php
similarity index 55%
rename from lib/internal/Magento/Framework/App/InitException.php
rename to lib/internal/Magento/Framework/Exception/State/InitException.php
index ae298122381c1bcd50c1bea1e64b4129248b09aa..d5e35f0cbafb36754f630b2fddc66b1e46653bd8 100644
--- a/lib/internal/Magento/Framework/App/InitException.php
+++ b/lib/internal/Magento/Framework/Exception/State/InitException.php
@@ -3,12 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+namespace Magento\Framework\Exception\State;
 
-namespace Magento\Framework\App;
+use Magento\Framework\Exception\LocalizedException;
 
 /**
  * An exception that indicates application initialization error
  */
-class InitException extends \Exception
+class InitException extends LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/Interception/Code/ValidatorException.php b/lib/internal/Magento/Framework/Exception/ValidatorException.php
similarity index 54%
rename from lib/internal/Magento/Framework/Interception/Code/ValidatorException.php
rename to lib/internal/Magento/Framework/Exception/ValidatorException.php
index c0734c9f31a2af1742f6d777b751ce25788e1f6b..5c37418d513aeb4dcc15d400ff355e2b6db3750d 100644
--- a/lib/internal/Magento/Framework/Interception/Code/ValidatorException.php
+++ b/lib/internal/Magento/Framework/Exception/ValidatorException.php
@@ -3,8 +3,8 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Interception\Code;
+namespace Magento\Framework\Exception;
 
-class ValidatorException extends \Exception
+class ValidatorException extends LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/Filesystem.php b/lib/internal/Magento/Framework/Filesystem.php
index 6c4e7de35c2833b927ae99aecc83801bdff82ec3..9c21dbcc2e76c29432a45e7265310152c5fc069d 100644
--- a/lib/internal/Magento/Framework/Filesystem.php
+++ b/lib/internal/Magento/Framework/Filesystem.php
@@ -73,7 +73,7 @@ class Filesystem
      * @param string $directoryCode
      * @param string $driverCode
      * @return \Magento\Framework\Filesystem\Directory\WriteInterface
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function getDirectoryWrite($directoryCode, $driverCode = DriverPool::FILE)
     {
diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/Read.php b/lib/internal/Magento/Framework/Filesystem/Directory/Read.php
index 189a0c8b24644260bf9a633c5ce40f98e14fada8..94b74e657920a3581a2924b72414e28df6dd62ef 100644
--- a/lib/internal/Magento/Framework/Filesystem/Directory/Read.php
+++ b/lib/internal/Magento/Framework/Filesystem/Directory/Read.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Filesystem\Directory;
 
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class Read implements ReadInterface
 {
@@ -146,7 +146,7 @@ class Read implements ReadInterface
      *
      * @param string $path [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function isExist($path = null)
     {
@@ -158,7 +158,7 @@ class Read implements ReadInterface
      *
      * @param string $path
      * @return array
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function stat($path)
     {
@@ -170,7 +170,7 @@ class Read implements ReadInterface
      *
      * @param string $path [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function isReadable($path = null)
     {
@@ -199,7 +199,7 @@ class Read implements ReadInterface
      * @param string|null $flag
      * @param resource|null $context
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function readFile($path, $flag = null, $context = null)
     {
diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/ReadInterface.php b/lib/internal/Magento/Framework/Filesystem/Directory/ReadInterface.php
index d91ec52ed6c7efb69c58ec18bf3a25e6ffb0918e..4d142da833f6484399e1a9ad8610231117fc4f2b 100644
--- a/lib/internal/Magento/Framework/Filesystem/Directory/ReadInterface.php
+++ b/lib/internal/Magento/Framework/Filesystem/Directory/ReadInterface.php
@@ -95,7 +95,7 @@ interface ReadInterface
      * @param string|null $flag
      * @param resource|null $context
      * @return string
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function readFile($path, $flag = null, $context = null);
 }
diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/Write.php b/lib/internal/Magento/Framework/Filesystem/Directory/Write.php
index 1f76bf8c6d61fdc7333adb7532cf3cb61600ebb1..2cd338bbb2aa5810988c5d9160ab059bddac86e9 100644
--- a/lib/internal/Magento/Framework/Filesystem/Directory/Write.php
+++ b/lib/internal/Magento/Framework/Filesystem/Directory/Write.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Filesystem\Directory;
 
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class Write extends Read implements WriteInterface
 {
@@ -43,13 +43,13 @@ class Write extends Read implements WriteInterface
      *
      * @param string $path
      * @return void
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     protected function assertWritable($path)
     {
         if ($this->isWritable($path) === false) {
             $path = $this->getAbsolutePath($this->path, $path);
-            throw new FilesystemException(sprintf('The path "%s" is not writable', $path));
+            throw new FileSystemException(new \Magento\Framework\Phrase('The path "%1" is not writable', [$path]));
         }
     }
 
@@ -58,14 +58,16 @@ class Write extends Read implements WriteInterface
      *
      * @param string $path
      * @return void
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     protected function assertIsFile($path)
     {
         clearstatcache();
         $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
         if (!$this->driver->isFile($absolutePath)) {
-            throw new FilesystemException(sprintf('The "%s" file doesn\'t exist or not a file', $absolutePath));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('The "%1" file doesn\'t exist or not a file', [$absolutePath])
+            );
         }
     }
 
@@ -74,7 +76,7 @@ class Write extends Read implements WriteInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function create($path = null)
     {
@@ -92,7 +94,7 @@ class Write extends Read implements WriteInterface
      * @param string $newPath
      * @param WriteInterface $targetDirectory
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function renameFile($path, $newPath, WriteInterface $targetDirectory = null)
     {
@@ -113,7 +115,7 @@ class Write extends Read implements WriteInterface
      * @param string $destination
      * @param WriteInterface $targetDirectory
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function copyFile($path, $destination, WriteInterface $targetDirectory = null)
     {
@@ -136,7 +138,7 @@ class Write extends Read implements WriteInterface
      * @param string $destination
      * @param WriteInterface $targetDirectory [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function createSymlink($path, $destination, WriteInterface $targetDirectory = null)
     {
@@ -158,7 +160,7 @@ class Write extends Read implements WriteInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function delete($path = null)
     {
@@ -180,7 +182,7 @@ class Write extends Read implements WriteInterface
      * @param string $path
      * @param int $permissions
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function changePermissions($path, $permissions)
     {
@@ -194,7 +196,7 @@ class Write extends Read implements WriteInterface
      * @param string $path
      * @param int|null $modificationTime
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function touch($path, $modificationTime = null)
     {
@@ -209,7 +211,7 @@ class Write extends Read implements WriteInterface
      *
      * @param null $path
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function isWritable($path = null)
     {
@@ -239,7 +241,7 @@ class Write extends Read implements WriteInterface
      * @param string $content
      * @param string|null $mode
      * @return int The number of bytes that were written.
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function writeFile($path, $content, $mode = 'w+')
     {
diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php b/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php
index 65c0de80d1f76bbe077995df6eadd59232485baa..71ac8bcba0a2899dffc30b591e18732a5a9a8215 100644
--- a/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php
+++ b/lib/internal/Magento/Framework/Filesystem/Directory/WriteInterface.php
@@ -12,7 +12,7 @@ interface WriteInterface extends ReadInterface
      *
      * @param string $path [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function create($path = null);
 
@@ -21,7 +21,7 @@ interface WriteInterface extends ReadInterface
      *
      * @param string $path [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function delete($path = null);
 
@@ -32,7 +32,7 @@ interface WriteInterface extends ReadInterface
      * @param string $newPath
      * @param WriteInterface $targetDirectory [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function renameFile($path, $newPath, WriteInterface $targetDirectory = null);
 
@@ -43,7 +43,7 @@ interface WriteInterface extends ReadInterface
      * @param string $destination
      * @param WriteInterface $targetDirectory [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function copyFile($path, $destination, WriteInterface $targetDirectory = null);
 
@@ -54,7 +54,7 @@ interface WriteInterface extends ReadInterface
      * @param string $destination
      * @param WriteInterface $targetDirectory [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function createSymlink($path, $destination, WriteInterface $targetDirectory = null);
 
@@ -64,7 +64,7 @@ interface WriteInterface extends ReadInterface
      * @param string $path
      * @param int $permissions
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function changePermissions($path, $permissions);
 
@@ -74,7 +74,7 @@ interface WriteInterface extends ReadInterface
      * @param string $path
      * @param int $modificationTime [optional]
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function touch($path, $modificationTime = null);
 
@@ -102,7 +102,7 @@ interface WriteInterface extends ReadInterface
      * @param string $content
      * @param string $mode [optional]
      * @return int The number of bytes that were written.
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function writeFile($path, $content, $mode = null);
 
diff --git a/lib/internal/Magento/Framework/Filesystem/DirectoryList.php b/lib/internal/Magento/Framework/Filesystem/DirectoryList.php
index 438ce7202543f5e3170329548106278016036533..2174a010a6c19a268ae6f0569c4e026d12f2ef98 100644
--- a/lib/internal/Magento/Framework/Filesystem/DirectoryList.php
+++ b/lib/internal/Magento/Framework/Filesystem/DirectoryList.php
@@ -228,13 +228,15 @@ class DirectoryList
      * Asserts that specified directory code is in the registry
      *
      * @param string $code
-     * @throws FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      * @return void
      */
     private function assertCode($code)
     {
         if (!isset($this->directories[$code])) {
-            throw new FilesystemException("Unknown directory type: '$code'");
+            throw new \Magento\Framework\Exception\FileSystemException(
+                new \Magento\Framework\Phrase('Unknown directory type: \'%1\'', [$code])
+            );
         }
     }
 }
diff --git a/lib/internal/Magento/Framework/Filesystem/Driver/File.php b/lib/internal/Magento/Framework/Filesystem/Driver/File.php
index e053ca69564b780066f0d08a358a1d911f253cf8..67320447f54701e037679b3f20667606c1c367b2 100644
--- a/lib/internal/Magento/Framework/Filesystem/Driver/File.php
+++ b/lib/internal/Magento/Framework/Filesystem/Driver/File.php
@@ -8,7 +8,7 @@
 namespace Magento\Framework\Filesystem\Driver;
 
 use Magento\Framework\Filesystem\DriverInterface;
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class File implements DriverInterface
 {
@@ -36,14 +36,16 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isExists($path)
     {
         clearstatcache();
         $result = @file_exists($this->getScheme() . $path);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Error occurred during execution %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Error occurred during execution %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -53,14 +55,16 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return array
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function stat($path)
     {
         clearstatcache();
         $result = @stat($this->getScheme() . $path);
         if (!$result) {
-            throw new FilesystemException(sprintf('Cannot gather stats! %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Cannot gather stats! %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -70,14 +74,16 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isReadable($path)
     {
         clearstatcache();
         $result = @is_readable($this->getScheme() . $path);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Error occurred during execution %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Error occurred during execution %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -87,14 +93,16 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isFile($path)
     {
         clearstatcache();
         $result = @is_file($this->getScheme() . $path);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Error occurred during execution %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Error occurred during execution %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -104,14 +112,16 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isDirectory($path)
     {
         clearstatcache();
         $result = @is_dir($this->getScheme() . $path);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Error occurred during execution %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Error occurred during execution %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -123,15 +133,18 @@ class File implements DriverInterface
      * @param string|null $flag
      * @param resource|null $context
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileGetContents($path, $flag = null, $context = null)
     {
         clearstatcache();
         $result = @file_get_contents($this->getScheme() . $path, $flag, $context);
         if (false === $result) {
-            throw new FilesystemException(
-                sprintf('Cannot read contents from file "%s" %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Cannot read contents from file "%1" %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -142,14 +155,16 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isWritable($path)
     {
         clearstatcache();
         $result = @is_writable($this->getScheme() . $path);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Error occurred during execution %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Error occurred during execution %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -171,14 +186,17 @@ class File implements DriverInterface
      * @param string $path
      * @param int $permissions
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function createDirectory($path, $permissions)
     {
         $result = @mkdir($this->getScheme() . $path, $permissions, true);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Directory "%s" cannot be created %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Directory "%1" cannot be created %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -189,7 +207,7 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return string[]
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function readDirectory($path)
     {
@@ -204,7 +222,7 @@ class File implements DriverInterface
             sort($result);
             return $result;
         } catch (\Exception $e) {
-            throw new FilesystemException($e->getMessage(), $e->getCode(), $e);
+            throw new FileSystemException(new \Magento\Framework\Phrase($e->getMessage()), $e);
         }
     }
 
@@ -214,7 +232,7 @@ class File implements DriverInterface
      * @param string $pattern
      * @param string $path
      * @return string[]
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function search($pattern, $path)
     {
@@ -231,7 +249,7 @@ class File implements DriverInterface
      * @param string $newPath
      * @param DriverInterface|null $targetDriver
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function rename($oldPath, $newPath, DriverInterface $targetDriver = null)
     {
@@ -246,8 +264,11 @@ class File implements DriverInterface
             }
         }
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('The "%s" path cannot be renamed into "%s" %s', $oldPath, $newPath, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'The "%1" path cannot be renamed into "%2" %3',
+                    [$oldPath, $newPath, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -260,7 +281,7 @@ class File implements DriverInterface
      * @param string $destination
      * @param DriverInterface|null $targetDriver
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function copy($source, $destination, DriverInterface $targetDriver = null)
     {
@@ -272,12 +293,14 @@ class File implements DriverInterface
             $result = $targetDriver->filePutContents($destination, $content);
         }
         if (!$result) {
-            throw new FilesystemException(
-                sprintf(
-                    'The file or directory "%s" cannot be copied to "%s" %s',
-                    $source,
-                    $destination,
-                    $this->getWarningMessage()
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'The file or directory "%1" cannot be copied to "%2" %3',
+                    [
+                        $source,
+                        $destination,
+                        $this->getWarningMessage()
+                    ]
                 )
             );
         }
@@ -291,7 +314,7 @@ class File implements DriverInterface
      * @param string $destination
      * @param DriverInterface|null $targetDriver
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function symlink($source, $destination, DriverInterface $targetDriver = null)
     {
@@ -300,12 +323,14 @@ class File implements DriverInterface
             $result = @symlink($this->getScheme() . $source, $destination);
         }
         if (!$result) {
-            throw new FilesystemException(
-                sprintf(
-                    'Cannot create a symlink for "%s" and place it to "%s" %s',
-                    $source,
-                    $destination,
-                    $this->getWarningMessage()
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Cannot create a symlink for "%1" and place it to "%2" %3',
+                    [
+                        $source,
+                        $destination,
+                        $this->getWarningMessage()
+                    ]
                 )
             );
         }
@@ -317,14 +342,14 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function deleteFile($path)
     {
         $result = @unlink($this->getScheme() . $path);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('The file "%s" cannot be deleted %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('The file "%1" cannot be deleted %2', [$path, $this->getWarningMessage()])
             );
         }
         return $result;
@@ -335,7 +360,7 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function deleteDirectory($path)
     {
@@ -351,8 +376,11 @@ class File implements DriverInterface
         }
         $result = @rmdir($this->getScheme() . $path);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('The directory "%s" cannot be deleted %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'The directory "%1" cannot be deleted %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -364,14 +392,17 @@ class File implements DriverInterface
      * @param string $path
      * @param int $permissions
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function changePermissions($path, $permissions)
     {
         $result = @chmod($this->getScheme() . $path, $permissions);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Cannot change permissions for path "%s" %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Cannot change permissions for path "%1" %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -383,7 +414,7 @@ class File implements DriverInterface
      * @param string $path
      * @param int|null $modificationTime
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function touch($path, $modificationTime = null)
     {
@@ -393,8 +424,11 @@ class File implements DriverInterface
             $result = @touch($this->getScheme() . $path, $modificationTime);
         }
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('The file or directory "%s" cannot be touched %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'The file or directory "%1" cannot be touched %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -407,14 +441,17 @@ class File implements DriverInterface
      * @param string $content
      * @param string|null $mode
      * @return int The number of bytes that were written.
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function filePutContents($path, $content, $mode = null)
     {
         $result = @file_put_contents($this->getScheme() . $path, $content, $mode);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('The specified "%s" file could not be written %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'The specified "%1" file could not be written %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -426,13 +463,15 @@ class File implements DriverInterface
      * @param string $path
      * @param string $mode
      * @return resource file
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileOpen($path, $mode)
     {
         $result = @fopen($this->getScheme() . $path, $mode);
         if (!$result) {
-            throw new FilesystemException(sprintf('File "%s" cannot be opened %s', $path, $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('File "%1" cannot be opened %2', [$path, $this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -444,13 +483,15 @@ class File implements DriverInterface
      * @param int $length
      * @param string $ending [optional]
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileReadLine($resource, $length, $ending = null)
     {
         $result = @stream_get_line($resource, $length, $ending);
         if (false === $result) {
-            throw new FilesystemException(sprintf('File cannot be read %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('File cannot be read %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -461,13 +502,15 @@ class File implements DriverInterface
      * @param resource $resource
      * @param int $length
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileRead($resource, $length)
     {
         $result = @fread($resource, $length);
         if ($result === false) {
-            throw new FilesystemException(sprintf('File cannot be read %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('File cannot be read %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -481,13 +524,15 @@ class File implements DriverInterface
      * @param string $enclosure [optional]
      * @param string $escape [optional]
      * @return array|bool|null
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileGetCsv($resource, $length = 0, $delimiter = ',', $enclosure = '"', $escape = '\\')
     {
         $result = @fgetcsv($resource, $length, $delimiter, $enclosure, $escape);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Wrong CSV handle %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Wrong CSV handle %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -497,13 +542,15 @@ class File implements DriverInterface
      *
      * @param resource $resource
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileTell($resource)
     {
         $result = @ftell($resource);
         if ($result === null) {
-            throw new FilesystemException(sprintf('Error occurred during execution %s', $this->getWarningMessage()));
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Error occurred during execution %1', [$this->getWarningMessage()])
+            );
         }
         return $result;
     }
@@ -515,14 +562,17 @@ class File implements DriverInterface
      * @param int $offset
      * @param int $whence
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileSeek($resource, $offset, $whence = SEEK_SET)
     {
         $result = @fseek($resource, $offset, $whence);
         if ($result === -1) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of fileSeek %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of fileSeek %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -544,14 +594,17 @@ class File implements DriverInterface
      *
      * @param resource $resource
      * @return boolean
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileClose($resource)
     {
         $result = @fclose($resource);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of fileClose %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of fileClose %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -563,14 +616,17 @@ class File implements DriverInterface
      * @param resource $resource
      * @param string $data
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileWrite($resource, $data)
     {
         $result = @fwrite($resource, $data);
         if (false === $result) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of fileWrite %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of fileWrite %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -584,14 +640,17 @@ class File implements DriverInterface
      * @param string $delimiter
      * @param string $enclosure
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function filePutCsv($resource, array $data, $delimiter = ',', $enclosure = '"')
     {
         $result = @fputcsv($resource, $data, $delimiter, $enclosure);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of filePutCsv %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of filePutCsv %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -602,14 +661,17 @@ class File implements DriverInterface
      *
      * @param resource $resource
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileFlush($resource)
     {
         $result = @fflush($resource);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of fileFlush %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of fileFlush %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -621,14 +683,17 @@ class File implements DriverInterface
      * @param resource $resource
      * @param int $lockMode
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileLock($resource, $lockMode = LOCK_EX)
     {
         $result = @flock($resource, $lockMode);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of fileLock %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of fileLock %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -639,14 +704,17 @@ class File implements DriverInterface
      *
      * @param resource $resource
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileUnlock($resource)
     {
         $result = @flock($resource, LOCK_UN);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('Error occurred during execution of fileUnlock %s', $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Error occurred during execution of fileUnlock %1',
+                    [$this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -709,7 +777,7 @@ class File implements DriverInterface
      *
      * @param string $path
      * @return string[]
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function readDirectoryRecursively($path = null)
     {
@@ -725,7 +793,7 @@ class File implements DriverInterface
                 $result[] = $file->getPathname();
             }
         } catch (\Exception $e) {
-            throw new FilesystemException($e->getMessage(), $e->getCode(), $e);
+            throw new FileSystemException(new \Magento\Framework\Phrase($e->getMessage()), $e);
         }
         return $result;
     }
diff --git a/lib/internal/Magento/Framework/Filesystem/Driver/Http.php b/lib/internal/Magento/Framework/Filesystem/Driver/Http.php
index 0c760c1daa45bfbfe3aae196df184ea92b2bf693..2e60f74c6f15f0ae865fbcd809ae82c336f0cf2b 100644
--- a/lib/internal/Magento/Framework/Filesystem/Driver/Http.php
+++ b/lib/internal/Magento/Framework/Filesystem/Driver/Http.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\Framework\Filesystem\Driver;
 
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 /**
  * Class Http
@@ -27,7 +27,7 @@ class Http extends File
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isExists($path)
     {
@@ -82,15 +82,18 @@ class Http extends File
      * @param string|null $flags
      * @param resource|null $context
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileGetContents($path, $flags = null, $context = null)
     {
         clearstatcache();
         $result = @file_get_contents($this->getScheme() . $path, $flags, $context);
         if (false === $result) {
-            throw new FilesystemException(
-                sprintf('Cannot read contents from file "%s" %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'Cannot read contents from file "%1" %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -104,14 +107,17 @@ class Http extends File
      * @param string|null $mode
      * @param resource|null $context
      * @return int The number of bytes that were written
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function filePutContents($path, $content, $mode = null, $context = null)
     {
         $result = @file_put_contents($this->getScheme() . $path, $content, $mode, $context);
         if (!$result) {
-            throw new FilesystemException(
-                sprintf('The specified "%s" file could not be written %s', $path, $this->getWarningMessage())
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
+                    'The specified "%1" file could not be written %2',
+                    [$path, $this->getWarningMessage()]
+                )
             );
         }
         return $result;
@@ -123,7 +129,7 @@ class Http extends File
      * @param string $path
      * @param string $mode
      * @return resource file
-     * @throws FilesystemException
+     * @throws FileSystemException
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function fileOpen($path, $mode)
@@ -131,7 +137,7 @@ class Http extends File
         $urlProp = $this->parseUrl($this->getScheme() . $path);
 
         if (false === $urlProp) {
-            throw new FilesystemException((string)new \Magento\Framework\Phrase('Please correct the download URL.'));
+            throw new FileSystemException(new \Magento\Framework\Phrase('Please correct the download URL.'));
         }
 
         $hostname = $urlProp['host'];
@@ -188,7 +194,7 @@ class Http extends File
      * @param int $length
      * @param string $ending [optional]
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileReadLine($resource, $length, $ending = null)
     {
@@ -228,15 +234,15 @@ class Http extends File
      *
      * @param string $hostname
      * @param int $port
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      * @return array
      */
     protected function open($hostname, $port)
     {
         $result = @fsockopen($hostname, $port, $errorNumber, $errorMessage);
         if ($result === false) {
-            throw new FilesystemException(
-                (string)new \Magento\Framework\Phrase(
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase(
                     'Something went wrong connecting to the host. Error#%1 - %2.',
                     [$errorNumber, $errorMessage]
                 )
diff --git a/lib/internal/Magento/Framework/Filesystem/DriverInterface.php b/lib/internal/Magento/Framework/Filesystem/DriverInterface.php
index c02447ee8c48f1ff0a0c8a065a023a28b535c79f..66e544311a8c4aeffea9cdeb1cb4b4b6dc4185c4 100644
--- a/lib/internal/Magento/Framework/Filesystem/DriverInterface.php
+++ b/lib/internal/Magento/Framework/Filesystem/DriverInterface.php
@@ -7,6 +7,8 @@
  */
 namespace Magento\Framework\Filesystem;
 
+use Magento\Framework\Exception\FileSystemException;
+
 /**
  * Class Driver
  */
@@ -16,7 +18,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function isExists($path);
 
@@ -25,7 +27,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return array
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws FileSystemException
      */
     public function stat($path);
 
@@ -34,7 +36,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws FileSystemException
      */
     public function isReadable($path);
 
@@ -43,7 +45,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws FileSystemException
      */
     public function isFile($path);
 
@@ -52,7 +54,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws FileSystemException
      */
     public function isDirectory($path);
 
@@ -63,7 +65,7 @@ interface DriverInterface
      * @param string|null $flag
      * @param resource|null $context
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileGetContents($path, $flag = null, $context = null);
 
@@ -72,7 +74,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws FileSystemException
      */
     public function isWritable($path);
 
@@ -90,7 +92,7 @@ interface DriverInterface
      * @param string $path
      * @param int $permissions
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function createDirectory($path, $permissions);
 
@@ -99,7 +101,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return array
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function readDirectory($path);
 
@@ -108,7 +110,7 @@ interface DriverInterface
      *
      * @param string|null $path
      * @return array
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws FileSystemException
      */
     public function readDirectoryRecursively($path = null);
 
@@ -118,7 +120,7 @@ interface DriverInterface
      * @param string $pattern
      * @param string $path
      * @return array
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function search($pattern, $path);
 
@@ -129,7 +131,7 @@ interface DriverInterface
      * @param string $newPath
      * @param DriverInterface|null $targetDriver
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function rename($oldPath, $newPath, DriverInterface $targetDriver = null);
 
@@ -140,7 +142,7 @@ interface DriverInterface
      * @param string $destination
      * @param DriverInterface|null $targetDriver
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function copy($source, $destination, DriverInterface $targetDriver = null);
 
@@ -151,7 +153,7 @@ interface DriverInterface
      * @param string $destination
      * @param DriverInterface|null $targetDriver
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function symlink($source, $destination, DriverInterface $targetDriver = null);
 
@@ -160,7 +162,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function deleteFile($path);
 
@@ -169,7 +171,7 @@ interface DriverInterface
      *
      * @param string $path
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function deleteDirectory($path);
 
@@ -179,7 +181,7 @@ interface DriverInterface
      * @param string $path
      * @param int $permissions
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function changePermissions($path, $permissions);
 
@@ -189,7 +191,7 @@ interface DriverInterface
      * @param string $path
      * @param int|null $modificationTime
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function touch($path, $modificationTime = null);
 
@@ -200,7 +202,7 @@ interface DriverInterface
      * @param string $content
      * @param string|null $mode
      * @return int The number of bytes that were written.
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function filePutContents($path, $content, $mode = null);
 
@@ -210,7 +212,7 @@ interface DriverInterface
      * @param string $path
      * @param string $mode
      * @return resource
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileOpen($path, $mode);
 
@@ -221,7 +223,7 @@ interface DriverInterface
      * @param int $length
      * @param string $ending [optional]
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileReadLine($resource, $length, $ending = null);
 
@@ -231,7 +233,7 @@ interface DriverInterface
      * @param resource $resource
      * @param int $length
      * @return string
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileRead($resource, $length);
 
@@ -244,7 +246,7 @@ interface DriverInterface
      * @param string $enclosure [optional]
      * @param string $escape [optional]
      * @return array|bool|null
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileGetCsv($resource, $length = 0, $delimiter = ',', $enclosure = '"', $escape = '\\');
 
@@ -253,7 +255,7 @@ interface DriverInterface
      *
      * @param resource $resource
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileTell($resource);
 
@@ -264,7 +266,7 @@ interface DriverInterface
      * @param int $offset
      * @param int $whence
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileSeek($resource, $offset, $whence = SEEK_SET);
 
@@ -281,7 +283,7 @@ interface DriverInterface
      *
      * @param resource $resource
      * @return boolean
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileClose($resource);
 
@@ -291,7 +293,7 @@ interface DriverInterface
      * @param resource $resource
      * @param string $data
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileWrite($resource, $data);
 
@@ -303,7 +305,7 @@ interface DriverInterface
      * @param string $delimiter
      * @param string $enclosure
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function filePutCsv($resource, array $data, $delimiter = ',', $enclosure = '"');
 
@@ -312,7 +314,7 @@ interface DriverInterface
      *
      * @param resource $resource
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileFlush($resource);
 
@@ -322,7 +324,7 @@ interface DriverInterface
      * @param resource $resource
      * @param int $lockMode
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileLock($resource, $lockMode = LOCK_EX);
 
@@ -331,7 +333,7 @@ interface DriverInterface
      *
      * @param resource $resource
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function fileUnlock($resource);
 
diff --git a/lib/internal/Magento/Framework/Filesystem/File/Read.php b/lib/internal/Magento/Framework/Filesystem/File/Read.php
index a62e34d9321725667905db0f7b9aac0e950c1fd0..06964e61aa9f0ef4737556d3fe2d80ea08f3a755 100644
--- a/lib/internal/Magento/Framework/Filesystem/File/Read.php
+++ b/lib/internal/Magento/Framework/Filesystem/File/Read.php
@@ -6,7 +6,7 @@
 namespace Magento\Framework\Filesystem\File;
 
 use Magento\Framework\Filesystem\DriverInterface;
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class Read implements ReadInterface
 {
@@ -67,12 +67,12 @@ class Read implements ReadInterface
      * Assert file existence
      *
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     protected function assertValid()
     {
         if (!$this->driver->isExists($this->path)) {
-            throw new FilesystemException(sprintf('The file "%s" doesn\'t exist', $this->path));
+            throw new FileSystemException(new \Magento\Framework\Phrase('The file "%1" doesn\'t exist', [$this->path]));
         }
         return true;
     }
diff --git a/lib/internal/Magento/Framework/Filesystem/File/Write.php b/lib/internal/Magento/Framework/Filesystem/File/Write.php
index a2f0995c2938c501a83fef851d385c068f0199e6..fc5efbb17710ec909dea031b30f2e77ca42a4758 100644
--- a/lib/internal/Magento/Framework/Filesystem/File/Write.php
+++ b/lib/internal/Magento/Framework/Filesystem/File/Write.php
@@ -6,7 +6,7 @@
 namespace Magento\Framework\Filesystem\File;
 
 use Magento\Framework\Filesystem\DriverInterface;
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 
 class Write extends Read implements WriteInterface
 {
@@ -27,15 +27,15 @@ class Write extends Read implements WriteInterface
      * Assert file existence for proper mode
      *
      * @return void
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     protected function assertValid()
     {
         $fileExists = $this->driver->isExists($this->path);
         if (!$fileExists && preg_match('/r/', $this->mode)) {
-            throw new FilesystemException(sprintf('The file "%s" doesn\'t exist', $this->path));
+            throw new FileSystemException(new \Magento\Framework\Phrase('The file "%1" doesn\'t exist', [$this->path]));
         } elseif ($fileExists && preg_match('/x/', $this->mode)) {
-            throw new FilesystemException(sprintf('The file "%s" already exists', $this->path));
+            throw new FileSystemException(new \Magento\Framework\Phrase('The file "%1" already exists', [$this->path]));
         }
     }
 
@@ -44,14 +44,16 @@ class Write extends Read implements WriteInterface
      *
      * @param string $data
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function write($data)
     {
         try {
             return $this->driver->fileWrite($this->resource, $data);
-        } catch (FilesystemException $e) {
-            throw new FilesystemException(sprintf('Cannot write to the "%s" file. %s', $this->path, $e->getMessage()));
+        } catch (FileSystemException $e) {
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Cannot write to the "%1" file. %2', [$this->path, $e->getMessage()])
+            );
         }
     }
 
@@ -62,14 +64,16 @@ class Write extends Read implements WriteInterface
      * @param string $delimiter
      * @param string $enclosure
      * @return int
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function writeCsv(array $data, $delimiter = ',', $enclosure = '"')
     {
         try {
             return $this->driver->filePutCsv($this->resource, $data, $delimiter, $enclosure);
-        } catch (FilesystemException $e) {
-            throw new FilesystemException(sprintf('Cannot write to the "%s" file. %s', $this->path, $e->getMessage()));
+        } catch (FileSystemException $e) {
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Cannot write to the "%1" file. %2', [$this->path, $e->getMessage()])
+            );
         }
     }
 
@@ -77,14 +81,16 @@ class Write extends Read implements WriteInterface
      * Flushes the output.
      *
      * @return bool
-     * @throws FilesystemException
+     * @throws FileSystemException
      */
     public function flush()
     {
         try {
             return $this->driver->fileFlush($this->resource);
-        } catch (FilesystemException $e) {
-            throw new FilesystemException(sprintf('Cannot flush the "%s" file. %s', $this->path, $e->getMessage()));
+        } catch (FileSystemException $e) {
+            throw new FileSystemException(
+                new \Magento\Framework\Phrase('Cannot flush the "%1" file. %2', [$this->path, $e->getMessage()])
+            );
         }
     }
 
diff --git a/lib/internal/Magento/Framework/Filesystem/File/WriteInterface.php b/lib/internal/Magento/Framework/Filesystem/File/WriteInterface.php
index d83d89d83a1ff289bd84982f4a7f48517cb5cb18..cf36ee69758f9d3a545bdae8ba954554b7db32f1 100644
--- a/lib/internal/Magento/Framework/Filesystem/File/WriteInterface.php
+++ b/lib/internal/Magento/Framework/Filesystem/File/WriteInterface.php
@@ -12,7 +12,7 @@ interface WriteInterface extends ReadInterface
      *
      * @param string $data
      * @return int
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function write($data);
 
@@ -23,7 +23,7 @@ interface WriteInterface extends ReadInterface
      * @param string $delimiter
      * @param string $enclosure
      * @return int
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function writeCsv(array $data, $delimiter = ',', $enclosure = '"');
 
@@ -31,7 +31,7 @@ interface WriteInterface extends ReadInterface
      * Flushes the output.
      *
      * @return bool
-     * @throws \Magento\Framework\Filesystem\FilesystemException
+     * @throws \Magento\Framework\Exception\FileSystemException
      */
     public function flush();
 
diff --git a/lib/internal/Magento/Framework/Filesystem/Io/Ftp.php b/lib/internal/Magento/Framework/Filesystem/Io/Ftp.php
index 1624a74b5754192f4f5277c06aeb795cab60163a..ed850baec96a9bb36bea2aaaa294ec3073394519 100644
--- a/lib/internal/Magento/Framework/Filesystem/Io/Ftp.php
+++ b/lib/internal/Magento/Framework/Filesystem/Io/Ftp.php
@@ -74,7 +74,7 @@ class Ftp extends AbstractIo
     {
         if (empty($args['host'])) {
             $this->_error = self::ERROR_EMPTY_HOST;
-            throw new IoException('Empty host specified');
+            throw new IoException(new \Magento\Framework\Phrase('Empty host specified'));
         }
 
         if (empty($args['port'])) {
@@ -107,20 +107,22 @@ class Ftp extends AbstractIo
         }
         if (!$this->_conn) {
             $this->_error = self::ERROR_INVALID_CONNECTION;
-            throw new IoException('Could not establish FTP connection, invalid host or port');
+            throw new IoException(
+                new \Magento\Framework\Phrase('Could not establish FTP connection, invalid host or port')
+            );
         }
 
         if (!@ftp_login($this->_conn, $this->_config['user'], $this->_config['password'])) {
             $this->_error = self::ERROR_INVALID_LOGIN;
             $this->close();
-            throw new IoException('Invalid user name or password');
+            throw new IoException(new \Magento\Framework\Phrase('Invalid user name or password'));
         }
 
         if (!empty($this->_config['path'])) {
             if (!@ftp_chdir($this->_conn, $this->_config['path'])) {
                 $this->_error = self::ERROR_INVALID_PATH;
                 $this->close();
-                throw new IoException('Invalid path');
+                throw new IoException(new \Magento\Framework\Phrase('Invalid path'));
             }
         }
 
@@ -128,7 +130,7 @@ class Ftp extends AbstractIo
             if (!@ftp_pasv($this->_conn, true)) {
                 $this->_error = self::ERROR_INVALID_MODE;
                 $this->close();
-                throw new IoException('Invalid file transfer mode');
+                throw new IoException(new \Magento\Framework\Phrase('Invalid file transfer mode'));
             }
         }
 
diff --git a/lib/internal/Magento/Framework/Filesystem/Io/IoException.php b/lib/internal/Magento/Framework/Filesystem/Io/IoException.php
index dffe2d6695e5b5f9788f33654433de2ccf8323c1..3d94334dcae56b811afb12cc45fbe2deec95296f 100644
--- a/lib/internal/Magento/Framework/Filesystem/Io/IoException.php
+++ b/lib/internal/Magento/Framework/Filesystem/Io/IoException.php
@@ -9,6 +9,6 @@ namespace Magento\Framework\Filesystem\Io;
 /**
  * Io exception
  */
-class IoException extends \Magento\Framework\Exception
+class IoException extends \Magento\Framework\Exception\LocalizedException
 {
 }
diff --git a/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php b/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php
index 20b847670670c6bfadb4b5b9e00345a185c98da1..d749a5dd5d4bfff87e725f79a9e9a7a14e2bd34d 100644
--- a/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php
+++ b/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php
@@ -59,7 +59,7 @@ class DirectoryListTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param string $method
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      * @expectedExceptionMessage Unknown directory type: 'foo'
      * @dataProvider assertCodeDataProvider
      */
diff --git a/lib/internal/Magento/Framework/Filesystem/Test/Unit/Driver/HttpTest.php b/lib/internal/Magento/Framework/Filesystem/Test/Unit/Driver/HttpTest.php
index bcd02a4d3a76d04a0a4b4e0e1d2659115fa336dd..6d28b1f25034cc5f5bdfe84fcbc3eb5fac1b0a9c 100644
--- a/lib/internal/Magento/Framework/Filesystem/Test/Unit/Driver/HttpTest.php
+++ b/lib/internal/Magento/Framework/Filesystem/Test/Unit/Driver/HttpTest.php
@@ -120,7 +120,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testFilePutContentsFail()
     {
@@ -129,7 +129,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      * @expectedExceptionMessage Please correct the download URL.
      */
     public function testFileOpenInvalidUrl()
diff --git a/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/ReadTest.php b/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/ReadTest.php
index 26e6cb01ba5eaf93d85041d347ae7bb93c58c048..016fb70e27d377973f8ad22dac323c04d87e38aa 100644
--- a/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/ReadTest.php
+++ b/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/ReadTest.php
@@ -59,7 +59,7 @@ class ReadTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testInstanceFileNotExists()
     {
diff --git a/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/WriteTest.php b/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/WriteTest.php
index af2a4f64459570ad41dcfe9b51998c12c85fd7f6..4216bf42b2e1957c97e5212a56225905d8e518a9 100644
--- a/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/WriteTest.php
+++ b/lib/internal/Magento/Framework/Filesystem/Test/Unit/File/WriteTest.php
@@ -59,7 +59,7 @@ class WriteTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testInstanceFileNotExists()
     {
@@ -73,7 +73,7 @@ class WriteTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testInstanceFileAlreadyExists()
     {
@@ -121,7 +121,7 @@ class WriteTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testWriteException()
     {
@@ -129,12 +129,14 @@ class WriteTest extends \PHPUnit_Framework_TestCase
         $this->driver->expects($this->once())
             ->method('fileWrite')
             ->with($this->resource, $data)
-            ->will($this->throwException(new \Magento\Framework\Filesystem\FilesystemException()));
+            ->willThrowException(
+                new \Magento\Framework\Exception\FileSystemException(new \Magento\Framework\Phrase(''))
+            );
         $this->file->write($data);
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testWriteCsvException()
     {
@@ -144,19 +146,23 @@ class WriteTest extends \PHPUnit_Framework_TestCase
         $this->driver->expects($this->once())
             ->method('filePutCsv')
             ->with($this->resource, $data, $delimiter, $enclosure)
-            ->will($this->throwException(new \Magento\Framework\Filesystem\FilesystemException()));
+            ->willThrowException(
+                new \Magento\Framework\Exception\FileSystemException(new \Magento\Framework\Phrase(''))
+            );
         $this->file->writeCsv($data, $delimiter, $enclosure);
     }
 
     /**
-     * @expectedException \Magento\Framework\Filesystem\FilesystemException
+     * @expectedException \Magento\Framework\Exception\FileSystemException
      */
     public function testFlushException()
     {
         $this->driver->expects($this->once())
             ->method('fileFlush')
             ->with($this->resource)
-            ->will($this->throwException(new \Magento\Framework\Filesystem\FilesystemException()));
+            ->willThrowException(
+                new \Magento\Framework\Exception\FileSystemException(new \Magento\Framework\Phrase(''))
+            );
         $this->file->flush();
     }
 
diff --git a/lib/internal/Magento/Framework/Filter/Test/Unit/RemoveTagsTest.php b/lib/internal/Magento/Framework/Filter/Test/Unit/RemoveTagsTest.php
index 8cd04c545936e8591c2f28bb03ebfba1d57f68a6..13025a0bf1952033448643de65fa89439c62523f 100644
--- a/lib/internal/Magento/Framework/Filter/Test/Unit/RemoveTagsTest.php
+++ b/lib/internal/Magento/Framework/Filter/Test/Unit/RemoveTagsTest.php
@@ -8,8 +8,8 @@ namespace Magento\Framework\Filter\Test\Unit;
 class RemoveTagsTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Framework\Filter\RemoveTags::filter
-     * covers \Magento\Framework\Filter\RemoveTags::_convertEntities
+     * @covers \Magento\Framework\Filter\RemoveTags::filter
+     * @covers \Magento\Framework\Filter\RemoveTags::_convertEntities
      */
     public function testRemoveTags()
     {
diff --git a/lib/internal/Magento/Framework/Filter/Test/Unit/StripTagsTest.php b/lib/internal/Magento/Framework/Filter/Test/Unit/StripTagsTest.php
index b81c35e60f78dd2ad920decf6fc1b9f6622a14b4..40efc83e4f356d8251db7a8edbd89e8375fd72c9 100644
--- a/lib/internal/Magento/Framework/Filter/Test/Unit/StripTagsTest.php
+++ b/lib/internal/Magento/Framework/Filter/Test/Unit/StripTagsTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Filter\Test\Unit;
 class StripTagsTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Framework\Filter\StripTags::filter
+     * @covers \Magento\Framework\Filter\StripTags::filter
      */
     public function testStripTags()
     {
diff --git a/lib/internal/Magento/Framework/HTTP/Test/Unit/HeaderTest.php b/lib/internal/Magento/Framework/HTTP/Test/Unit/HeaderTest.php
index 099e2cb48ed9d5b41e0fcfd7545b3b2337dcb9f1..24bd8ff4e21a51727d0785e6825c77b5cf17cb6c 100644
--- a/lib/internal/Magento/Framework/HTTP/Test/Unit/HeaderTest.php
+++ b/lib/internal/Magento/Framework/HTTP/Test/Unit/HeaderTest.php
@@ -44,11 +44,11 @@ class HeaderTest extends \PHPUnit_Framework_TestCase
      *
      * @dataProvider methodsDataProvider
      *
-     * covers \Magento\Framework\HTTP\Header::getHttpHost
-     * covers \Magento\Framework\HTTP\Header::getHttpUserAgent
-     * covers \Magento\Framework\HTTP\Header::getHttpAcceptLanguage
-     * covers \Magento\Framework\HTTP\Header::getHttpAcceptCharset
-     * covers \Magento\Framework\HTTP\Header::getHttpReferer
+     * @covers \Magento\Framework\HTTP\Header::getHttpHost
+     * @covers \Magento\Framework\HTTP\Header::getHttpUserAgent
+     * @covers \Magento\Framework\HTTP\Header::getHttpAcceptLanguage
+     * @covers \Magento\Framework\HTTP\Header::getHttpAcceptCharset
+     * @covers \Magento\Framework\HTTP\Header::getHttpReferer
      */
     public function testHttpMethods($method, $clean, $expectedValue)
     {
diff --git a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php
index 3a7742a7efb1faa0afd922c5f4d0a7188537effe..35f2ee5a1b5f2b9dd34669493436f67cadffd83c 100644
--- a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php
+++ b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php
@@ -682,7 +682,7 @@ abstract class AbstractAdapter implements AdapterInterface
         if (!is_writable($destination)) {
             try {
                 $this->directoryWrite->create($this->directoryWrite->getRelativePath($destination));
-            } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+            } catch (\Magento\Framework\Exception\FileSystemException $e) {
                 $this->logger->critical($e);
                 throw new \Exception('Unable to write file into directory ' . $destination . '. Access forbidden.');
             }
diff --git a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php
index 02a15478b09c36dd4021825d85825df694f1c69b..8b6040295019264e3cc6c77fe38a851638e2f391 100644
--- a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php
+++ b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Image\Test\Unit\Adapter;
 
-use Magento\Framework\Filesystem\FilesystemException;
+use Magento\Framework\Exception\FileSystemException;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class ImageMagickTest extends \PHPUnit_Framework_TestCase
@@ -32,8 +32,8 @@ class ImageMagickTest extends \PHPUnit_Framework_TestCase
     public function setup()
     {
         $objectManager = new ObjectManager($this);
-        $this->loggerMock = $this->getMockBuilder( 'Psr\Log\LoggerInterface')->getMock();
-        $this->writeMock =  $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')->getMock();
+        $this->loggerMock = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
+        $this->writeMock = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')->getMock();
         $this->filesystemMock = $this->getMock(
             'Magento\Framework\Filesystem',
             ['getDirectoryWrite'],
@@ -44,7 +44,7 @@ class ImageMagickTest extends \PHPUnit_Framework_TestCase
         $this->filesystemMock
             ->expects($this->once())
             ->method('getDirectoryWrite')
-            ->will($this->returnValue(  $this->writeMock));
+            ->willReturn($this->writeMock);
 
         $this->imageMagic = $objectManager
             ->getObject(
@@ -85,7 +85,7 @@ class ImageMagickTest extends \PHPUnit_Framework_TestCase
      */
     public function testSaveWithException()
     {
-        $exception = new FilesystemException();
+        $exception = new FileSystemException(new \Magento\Framework\Phrase(''));
         $this->writeMock->method('create')->will($this->throwException($exception));
         $this->loggerMock->expects($this->once())->method('critical')->with($exception);
         $this->imageMagic->save('product/cache', 'sample.jpg');
diff --git a/lib/internal/Magento/Framework/Image/Test/Unit/AdapterFactoryTest.php b/lib/internal/Magento/Framework/Image/Test/Unit/AdapterFactoryTest.php
index ffac4f0eb5a9341d19029c812561fd68fbe29447..ff3bbceba5d1effa55af841f61dbcfe0ed4786b2 100644
--- a/lib/internal/Magento/Framework/Image/Test/Unit/AdapterFactoryTest.php
+++ b/lib/internal/Magento/Framework/Image/Test/Unit/AdapterFactoryTest.php
@@ -85,7 +85,7 @@ class AdapterFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Image\AdapterFactory::create
+     * @covers \Magento\Framework\Image\AdapterFactory::create
      */
     public function testCreateWithoutName()
     {
@@ -120,7 +120,7 @@ class AdapterFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Image\AdapterFactory::create
+     * @covers \Magento\Framework\Image\AdapterFactory::create
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage Image adapter is not selected.
      */
@@ -139,7 +139,7 @@ class AdapterFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Image\AdapterFactory::create
+     * @covers \Magento\Framework\Image\AdapterFactory::create
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage Image adapter for 'test' is not setup.
      */
@@ -159,7 +159,7 @@ class AdapterFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Image\AdapterFactory::create
+     * @covers \Magento\Framework\Image\AdapterFactory::create
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage stdClass is not instance of \Magento\Framework\Image\Adapter\AdapterInterface
      */
diff --git a/lib/internal/Magento/Framework/Interception/Code/InterfaceValidator.php b/lib/internal/Magento/Framework/Interception/Code/InterfaceValidator.php
index d8582f819bf4f94ad4722246455f517e0f1eb730..c945033d93316f9cfc93aa93944b6f9a68a157cc 100644
--- a/lib/internal/Magento/Framework/Interception/Code/InterfaceValidator.php
+++ b/lib/internal/Magento/Framework/Interception/Code/InterfaceValidator.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Framework\Interception\Code;
 
+use Magento\Framework\Exception\ValidatorException;
+use Magento\Framework\Phrase;
+
 class InterfaceValidator
 {
     const METHOD_BEFORE = 'before';
@@ -55,13 +58,10 @@ class InterfaceValidator
             }
             if (!$type->hasMethod($originMethodName)) {
                 throw new ValidatorException(
-                    'Incorrect interface in ' .
-                    $pluginClass .
-                    '. There is no method [ ' .
-                    $originMethodName .
-                    ' ] in ' .
-                    $interceptedType .
-                    ' interface'
+                    new Phrase(
+                        'Incorrect interface in %1. There is no method [ %2 ] in %3 interface',
+                        [$pluginClass, $originMethodName, $interceptedType]
+                    )
                 );
             }
             $originMethod = $type->getMethod($originMethodName);
@@ -78,16 +78,10 @@ class InterfaceValidator
             ) || $subject['type'] === null
             ) {
                 throw new ValidatorException(
-                    'Invalid [' .
-                    $subject['type'] .
-                    '] $' .
-                    $subject['name'] .
-                    ' type in ' .
-                    $pluginClass .
-                    '::' .
-                    $pluginMethod->getName() .
-                    '. It must be compatible with ' .
-                    $interceptedType
+                    new Phrase(
+                        'Invalid [%1] $%2 type in %3::%4. It must be compatible with %5',
+                        [$subject['type'], $subject['name'], $pluginClass, $pluginMethod->getName(), $interceptedType]
+                    )
                 );
             }
 
@@ -104,15 +98,10 @@ class InterfaceValidator
                     $proceed = array_shift($pluginMethodParameters);
                     if (!$this->_argumentsReader->isCompatibleType($proceed['type'], '\\Closure')) {
                         throw new ValidatorException(
-                            'Invalid [' .
-                            $proceed['type'] .
-                            '] $' .
-                            $proceed['name'] .
-                            ' type in ' .
-                            $pluginClass .
-                            '::' .
-                            $pluginMethod->getName() .
-                            '. It must be compatible with \\Closure'
+                            new Phrase(
+                                'Invalid [%1] $%2 type in %3::%4. It must be compatible with \\Closure',
+                                [$proceed['type'], $proceed['name'], $pluginClass, $pluginMethod->getName()]
+                            )
                         );
                     }
                     $this->validateMethodsParameters(
@@ -125,11 +114,10 @@ class InterfaceValidator
                 case self::METHOD_AFTER:
                     if (count($pluginMethodParameters) > 1) {
                         throw new ValidatorException(
-                            'Invalid method signature. Detected extra parameters' .
-                            ' in ' .
-                            $pluginClass .
-                            '::' .
-                            $pluginMethod->getName()
+                            new Phrase(
+                                'Invalid method signature. Detected extra parameters in %1::%2',
+                                [$pluginClass, $pluginMethod->getName()]
+                            )
                         );
                     }
                     break;
@@ -152,23 +140,19 @@ class InterfaceValidator
     {
         if (count($pluginParameters) != count($originParameters)) {
             throw new ValidatorException(
-                'Invalid method signature. Invalid method parameters count' . ' in ' . $class . '::' . $method
+                new Phrase(
+                    'Invalid method signature. Invalid method parameters count in %1::%2',
+                    [$class, $method]
+                )
             );
         }
         foreach ($pluginParameters as $position => $data) {
             if (!$this->_argumentsReader->isCompatibleType($data['type'], $originParameters[$position]['type'])) {
                 throw new ValidatorException(
-                    'Incompatible parameter type [' .
-                    $data['type'] .
-                    ' $' .
-                    $data['name'] .
-                    ']' .
-                    ' in ' .
-                    $class .
-                    '::' .
-                    $method .
-                    '. It must be compatible with ' .
-                    $originParameters[$position]['type']
+                    new Phrase(
+                        'Incompatible parameter type [%1 $%2] in %3::%4. It must be compatible with %5',
+                        [$data['type'], $data['name'], $class, $method, $originParameters[$position]['type']]
+                    )
                 );
             }
         }
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/Chain/ChainTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/Chain/ChainTest.php
index 07761697a150a3e0a06316437403616674f1c4a7..11451bb0b805488dfb7557cfd7fe8d66f0c748c9 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/Chain/ChainTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/Chain/ChainTest.php
@@ -25,8 +25,8 @@ class ChainTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers  \Magento\Framework\Interception\Chain\Chain::invokeNext
-     * covers  \Magento\Framework\Interception\Chain\Chain::__construct
+     * @covers \Magento\Framework\Interception\Chain\Chain::invokeNext
+     * @covers \Magento\Framework\Interception\Chain\Chain::__construct
      */
     public function testInvokeNextBeforePlugin()
     {
@@ -64,7 +64,7 @@ class ChainTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers  \Magento\Framework\Interception\Chain\Chain::invokeNext
+     * @covers \Magento\Framework\Interception\Chain\Chain::invokeNext
      */
     public function testInvokeNextAroundPlugin()
     {
@@ -95,7 +95,7 @@ class ChainTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers  \Magento\Framework\Interception\Chain\Chain::invokeNext
+     * @covers \Magento\Framework\Interception\Chain\Chain::invokeNext
      */
     public function testInvokeNextAfterPlugin()
     {
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/Code/InterfaceValidatorTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/Code/InterfaceValidatorTest.php
index 2ca3f6d1b77b1ee831c57e4dee33bc4189a2f878..6b1f1bbef4ebfe7e05a63289abe73ce61a33f5e2 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/Code/InterfaceValidatorTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/Code/InterfaceValidatorTest.php
@@ -37,12 +37,12 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::getMethodParameters
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::getMethodType
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::getOriginMethodName
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::getParametersType
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::__construct
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::getMethodParameters
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::getMethodType
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::getOriginMethodName
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::getParametersType
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::__construct
      */
     public function testValidate()
     {
@@ -53,9 +53,9 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Interception\Code\ValidatorException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Incorrect interface in
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
      */
     public function testValidateIncorrectInterface()
     {
@@ -66,9 +66,9 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Interception\Code\ValidatorException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Invalid [\Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item] $subject type
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
      */
     public function testValidateIncorrectSubjectType()
     {
@@ -79,10 +79,10 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Interception\Code\ValidatorException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Invalid method signature. Invalid method parameters count
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validateMethodsParameters
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validateMethodsParameters
      */
     public function testValidateIncompatibleMethodArgumentsCount()
     {
@@ -94,10 +94,10 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Interception\Code\ValidatorException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Incompatible parameter type
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validateMethodsParameters
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validateMethodsParameters
      */
     public function testValidateIncompatibleMethodArgumentsType()
     {
@@ -109,9 +109,9 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Interception\Code\ValidatorException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Invalid method signature. Detected extra parameters
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
      */
     public function testValidateExtraParameters()
     {
@@ -122,9 +122,9 @@ class InterfaceValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Interception\Code\ValidatorException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Invalid [] $name type in
-     * covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
+     * @covers \Magento\Framework\Interception\Code\InterfaceValidator::validate
      */
     public function testValidateInvalidProceed()
     {
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/Definition/CompiledTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/Definition/CompiledTest.php
index 800438a656e777a87bfe8c3a5b76d00a09955e82..2818515a626e7bdaae7813e2cd0e34c0fa47164f 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/Definition/CompiledTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/Definition/CompiledTest.php
@@ -13,8 +13,8 @@ class CompiledTest extends \PHPUnit_Framework_TestCase
     protected $_definitions = ['type' => 'definitions'];
 
     /**
-     * covers \Magento\Framework\Interception\Definition\Compiled::getMethodList
-     * covers \Magento\Framework\Interception\Definition\Compiled::__construct
+     * @covers \Magento\Framework\Interception\Definition\Compiled::getMethodList
+     * @covers \Magento\Framework\Interception\Definition\Compiled::__construct
      */
     public function testGetMethodList()
     {
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/PluginList/PluginListTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/PluginList/PluginListTest.php
index c9a116432eee4ea57fec33d65324c62ec2fd9b60..9aa337afc3f726933c6371a9ea802b02c2259ba7 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/PluginList/PluginListTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/PluginList/PluginListTest.php
@@ -78,15 +78,24 @@ class PluginListTest extends \PHPUnit_Framework_TestCase
         $this->_configScopeMock->expects($this->any())->method('getCurrentScope')->will($this->returnValue('backend'));
         $this->_model->getNext('Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item', 'getName');
         $this->_model->getNext('Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer', 'getName');
-        $this->_model->getNext('Magento\Framework\Interception\Test\Unit\Custom\Module\Model\StartingBackslash', 'getName');
+        $this->_model->getNext(
+            'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\StartingBackslash',
+            'getName'
+        );
 
         $this->assertEquals(
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemPlugin\Simple',
-            $this->_model->getPlugin('Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item', 'simple_plugin')
+            $this->_model->getPlugin(
+                'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item',
+                'simple_plugin'
+            )
         );
         $this->assertEquals(
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemPlugin\Advanced',
-            $this->_model->getPlugin('Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item', 'advanced_plugin')
+            $this->_model->getPlugin(
+                'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item',
+                'advanced_plugin'
+            )
         );
         $this->assertEquals(
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainerPlugin\Simple',
@@ -180,8 +189,8 @@ class PluginListTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @expectedException \InvalidArgumentException
-     * covers \Magento\Framework\Interception\PluginList\PluginList::getNext
-     * covers \Magento\Framework\Interception\PluginList\PluginList::_inheritPlugins
+     * @covers \Magento\Framework\Interception\PluginList\PluginList::getNext
+     * @covers \Magento\Framework\Interception\PluginList\PluginList::_inheritPlugins
      */
     public function testInheritPluginsWithNonExistingClass()
     {
@@ -193,8 +202,8 @@ class PluginListTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Interception\PluginList\PluginList::getNext
-     * covers \Magento\Framework\Interception\PluginList\PluginList::_loadScopedData
+     * @covers \Magento\Framework\Interception\PluginList\PluginList::getNext
+     * @covers \Magento\Framework\Interception\PluginList\PluginList::_loadScopedData
      */
     public function testLoadScopedDataCached()
     {
diff --git a/lib/internal/Magento/Framework/Less/Config.php b/lib/internal/Magento/Framework/Less/Config.php
new file mode 100644
index 0000000000000000000000000000000000000000..88f6c27e9ee412d67f4c414f5165e449ed42fa14
--- /dev/null
+++ b/lib/internal/Magento/Framework/Less/Config.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Less;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+class Config
+{
+    /**
+     * Temporary directory prefix
+     */
+    const TMP_LESS_DIR = 'less';
+
+    /**
+     * Returns relative path to less materialization directory
+     *
+     * @return string
+     */
+    public function getLessMaterializationRelativePath()
+    {
+        return DirectoryList::TMP_MATERIALIZATION_DIR . '/' . self::TMP_LESS_DIR;
+    }
+}
diff --git a/lib/internal/Magento/Framework/Less/File/Temporary.php b/lib/internal/Magento/Framework/Less/File/Temporary.php
new file mode 100644
index 0000000000000000000000000000000000000000..8da016ecde585d76b509d3e4f74e3ca9069de16a
--- /dev/null
+++ b/lib/internal/Magento/Framework/Less/File/Temporary.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Less\File;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Filesystem;
+use Magento\Framework\Less\Config;
+
+class Temporary
+{
+    /**
+     * @var Config
+     */
+    private $config;
+
+    /**
+     * @var Filesystem\Directory\WriteInterface
+     */
+    private $tmpDirectory;
+
+    /**
+     * @param Filesystem $filesystem
+     * @param Config $config
+     */
+    public function __construct(
+        Filesystem $filesystem,
+        Config $config
+    ) {
+        $this->tmpDirectory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
+        $this->config = $config;
+    }
+
+    /**
+     * Write down contents to a temporary file and return its absolute path
+     *
+     * @param string $relativePath
+     * @param string $contents
+     * @return string
+     */
+    public function createFile($relativePath, $contents)
+    {
+        $filePath =  $this->config->getLessMaterializationRelativePath() . '/' . $relativePath;
+
+        if (!$this->tmpDirectory->isExist($filePath)) {
+            $this->tmpDirectory->writeFile($filePath, $contents);
+        }
+        return $this->tmpDirectory->getAbsolutePath($filePath);
+    }
+}
diff --git a/lib/internal/Magento/Framework/Less/FileGenerator.php b/lib/internal/Magento/Framework/Less/FileGenerator.php
index f45d462e7eaaeeff23b95633c658bf40d526f650..ab7141d29dcc196d32324778d6e8df1b114fc747 100644
--- a/lib/internal/Magento/Framework/Less/FileGenerator.php
+++ b/lib/internal/Magento/Framework/Less/FileGenerator.php
@@ -7,17 +7,16 @@
 namespace Magento\Framework\Less;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\View\Asset\LocalInterface;
 use Magento\Framework\View\Asset\PreProcessor\Chain;
 use Magento\Framework\View\Asset\SourceFileGeneratorInterface;
 
+/**
+ * Class FileGenerator
+ * @package Magento\Framework\Less
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class FileGenerator implements SourceFileGeneratorInterface
 {
-    /**
-     * Temporary directory prefix
-     */
-    const TMP_LESS_DIR = 'less';
-
     /**
      * Max execution (locking) time for generation process (in seconds)
      */
@@ -28,11 +27,6 @@ class FileGenerator implements SourceFileGeneratorInterface
      */
     const LOCK_FILE = 'less.lock';
 
-    /**
-     * @var string
-     */
-    protected $lessDirectory;
-
     /**
      * @var \Magento\Framework\Filesystem\Directory\WriteInterface
      */
@@ -59,17 +53,29 @@ class FileGenerator implements SourceFileGeneratorInterface
     private $importProcessor;
 
     /**
-     * @var \Magento\Framework\App\View\Asset\Publisher
+     * @var FileGenerator\RelatedGenerator
+     */
+    private $relatedGenerator;
+
+    /**
+     * @var Config
      */
-    private $publisher;
+    private $config;
+
+    /**
+     * @var File\Temporary
+     */
+    private $temporaryFile;
 
     /**
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\View\Asset\Repository $assetRepo
-     * @param \Magento\Framework\Less\PreProcessor\Instruction\MagentoImport $magentoImportProcessor
-     * @param \Magento\Framework\Less\PreProcessor\Instruction\Import $importProcessor
+     * @param PreProcessor\Instruction\MagentoImport $magentoImportProcessor
+     * @param PreProcessor\Instruction\Import $importProcessor
      * @param \Magento\Framework\View\Asset\Source $assetSource
-     * @param \Magento\Framework\App\View\Asset\Publisher $publisher
+     * @param FileGenerator\RelatedGenerator $relatedGenerator
+     * @param Config $config
+     * @param File\Temporary $temporaryFile
      */
     public function __construct(
         \Magento\Framework\Filesystem $filesystem,
@@ -77,17 +83,19 @@ class FileGenerator implements SourceFileGeneratorInterface
         \Magento\Framework\Less\PreProcessor\Instruction\MagentoImport $magentoImportProcessor,
         \Magento\Framework\Less\PreProcessor\Instruction\Import $importProcessor,
         \Magento\Framework\View\Asset\Source $assetSource,
-        \Magento\Framework\App\View\Asset\Publisher $publisher
+        \Magento\Framework\Less\FileGenerator\RelatedGenerator $relatedGenerator,
+        Config $config,
+        File\Temporary $temporaryFile
     ) {
         $this->tmpDirectory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
-        $this->pubDirectory = $filesystem->getDirectoryWrite(DirectoryList::PUB);
-        $this->lessDirectory = DirectoryList::TMP_MATERIALIZATION_DIR . '/' . self::TMP_LESS_DIR;
         $this->assetRepo = $assetRepo;
         $this->assetSource = $assetSource;
 
         $this->magentoImportProcessor = $magentoImportProcessor;
         $this->importProcessor = $importProcessor;
-        $this->publisher = $publisher;
+        $this->relatedGenerator = $relatedGenerator;
+        $this->config = $config;
+        $this->temporaryFile = $temporaryFile;
     }
 
     /**
@@ -109,16 +117,14 @@ class FileGenerator implements SourceFileGeneratorInterface
         while ($this->isProcessLocked()) {
             sleep(1);
         }
-        $lockFilePath = $this->lessDirectory . '/' . self::LOCK_FILE;
+        $lockFilePath = $this->config->getLessMaterializationRelativePath() . '/' . self::LOCK_FILE;
         $this->tmpDirectory->writeFile($lockFilePath, time());
 
         $this->magentoImportProcessor->process($chain);
         $this->importProcessor->process($chain);
-        $this->generateRelatedFiles();
+        $this->relatedGenerator->generate($this->importProcessor);
         $lessRelativePath = preg_replace('#\.css$#', '.less', $chain->getAsset()->getPath());
-        $tmpFilePath = $this->createFile($lessRelativePath, $chain->getContent());
-
-        $this->createFileMain($lessRelativePath, $chain->getContent());
+        $tmpFilePath = $this->temporaryFile->createFile($lessRelativePath, $chain->getContent());
 
         $this->tmpDirectory->delete($lockFilePath);
         return $tmpFilePath;
@@ -131,7 +137,7 @@ class FileGenerator implements SourceFileGeneratorInterface
      */
     protected function isProcessLocked()
     {
-        $lockFilePath = $this->lessDirectory . '/' . self::LOCK_FILE;
+        $lockFilePath = $this->config->getLessMaterializationRelativePath() . '/' . self::LOCK_FILE;
         if ($this->tmpDirectory->isExist($lockFilePath)) {
             $lockTime = time() - (int)$this->tmpDirectory->readFile($lockFilePath);
             if ($lockTime >= self::MAX_LOCK_TIME) {
@@ -142,69 +148,4 @@ class FileGenerator implements SourceFileGeneratorInterface
         }
         return false;
     }
-
-    /**
-     * Create all asset files, referenced from already processed ones
-     *
-     * @return void
-     */
-    protected function generateRelatedFiles()
-    {
-        do {
-            $relatedFiles = $this->importProcessor->getRelatedFiles();
-            $this->importProcessor->resetRelatedFiles();
-            foreach ($relatedFiles as $relatedFileInfo) {
-                list($relatedFileId, $asset) = $relatedFileInfo;
-                $this->generateRelatedFile($relatedFileId, $asset);
-            }
-        } while ($relatedFiles);
-    }
-
-    /**
-     * Create file, referenced relatively to an asset
-     *
-     * @param string $relatedFileId
-     * @param LocalInterface $asset
-     * @return void
-     */
-    protected function generateRelatedFile($relatedFileId, LocalInterface $asset)
-    {
-        $relatedAsset = $this->assetRepo->createRelated($relatedFileId, $asset);
-        $relatedAsset->getFilePath();
-
-        $this->createFile($relatedAsset->getPath(), $relatedAsset->getContent());
-        $relatedAsset->getSourceFile();
-        $this->publisher->publish($relatedAsset);
-    }
-
-    /**
-     * Write down contents to a temporary file and return its absolute path
-     *
-     * @param string $relativePath
-     * @param string $contents
-     * @return string
-     */
-    private function createFile($relativePath, $contents)
-    {
-        $filePath = $this->lessDirectory . '/' . $relativePath;
-
-        if (!$this->tmpDirectory->isExist($filePath)) {
-            $this->tmpDirectory->writeFile($filePath, $contents);
-        }
-        return $this->tmpDirectory->getAbsolutePath($filePath);
-    }
-
-    /**
-     * @param string $relativePath
-     * @param string $contents
-     *
-     * @return void
-     */
-    private function createFileMain($relativePath, $contents)
-    {
-        $filePath = '/static/' . $relativePath;
-        $contents .= '@urls-resolved: true;' . PHP_EOL . PHP_EOL;
-        $this->pubDirectory->writeFile($filePath, $contents);
-        return;
-    }
 }
diff --git a/lib/internal/Magento/Framework/Less/FileGenerator/RelatedGenerator.php b/lib/internal/Magento/Framework/Less/FileGenerator/RelatedGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..64564ce4c0e9f3221710fe44a40bb316db4d7cf1
--- /dev/null
+++ b/lib/internal/Magento/Framework/Less/FileGenerator/RelatedGenerator.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Less\FileGenerator;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Less\PreProcessor\Instruction\Import;
+use Magento\Framework\View\Asset\LocalInterface;
+
+class RelatedGenerator
+{
+    /**
+     * @var \Magento\Framework\Filesystem\Directory\WriteInterface
+     */
+    protected $tmpDirectory;
+
+    /**
+     * @var \Magento\Framework\View\Asset\Repository
+     */
+    private $assetRepo;
+
+    /**
+     * @var \Magento\Framework\Less\File\Temporary
+     */
+    private $temporaryFile;
+
+    /**
+     * @param \Magento\Framework\Filesystem $filesystem
+     * @param \Magento\Framework\View\Asset\Repository $assetRepo
+     * @param \Magento\Framework\Less\File\Temporary $temporaryFile
+     */
+    public function __construct(
+        \Magento\Framework\Filesystem $filesystem,
+        \Magento\Framework\View\Asset\Repository $assetRepo,
+        \Magento\Framework\Less\File\Temporary $temporaryFile
+    ) {
+        $this->tmpDirectory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
+        $this->assetRepo = $assetRepo;
+
+        $this->temporaryFile = $temporaryFile;
+    }
+
+    /**
+     * Create all asset files, referenced from already processed ones
+     *
+     * @param Import $importGenerator
+     *
+     * @return void
+     */
+    public function generate(Import $importGenerator)
+    {
+        do {
+            $relatedFiles = $importGenerator->getRelatedFiles();
+            $importGenerator->resetRelatedFiles();
+            foreach ($relatedFiles as $relatedFileInfo) {
+                list($relatedFileId, $asset) = $relatedFileInfo;
+
+                $this->generateRelatedFile($relatedFileId, $asset);
+            }
+        } while ($relatedFiles);
+    }
+
+    /**
+     * Create file, referenced relatively to an asset
+     *
+     * @param string $relatedFileId
+     * @param LocalInterface $asset
+     * @return \Magento\Framework\View\Asset\File
+     */
+    protected function generateRelatedFile($relatedFileId, LocalInterface $asset)
+    {
+        $relatedAsset = $this->assetRepo->createRelated($relatedFileId, $asset);
+        $this->temporaryFile->createFile($relatedAsset->getPath(), $relatedAsset->getContent());
+
+        return $relatedAsset;
+    }
+}
diff --git a/lib/internal/Magento/Framework/Less/Test/Unit/FileGeneratorTest.php b/lib/internal/Magento/Framework/Less/Test/Unit/FileGeneratorTest.php
index 60293981b8f761c070b06930b9461640e90b450b..f5985fbd30f6042f10cc4bed359f95453521d678 100644
--- a/lib/internal/Magento/Framework/Less/Test/Unit/FileGeneratorTest.php
+++ b/lib/internal/Magento/Framework/Less/Test/Unit/FileGeneratorTest.php
@@ -4,8 +4,6 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 namespace Magento\Framework\Less\Test\Unit;
 
 class FileGeneratorTest extends \PHPUnit_Framework_TestCase
@@ -41,58 +39,105 @@ class FileGeneratorTest extends \PHPUnit_Framework_TestCase
     private $object;
 
     /**
-     * @var \Magento\Framework\App\View\Asset\Publisher|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Less\FileGenerator\RelatedGenerator|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $relatedGenerator;
+
+    /**
+     * @var \Magento\Framework\Less\Config|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $publisher;
+    private $config;
+
+    /**
+     * @var \Magento\Framework\Less\File\Temporary|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $temporaryFile;
 
     protected function setUp()
     {
-        $this->tmpDirectory = $this->getMockForAbstractClass('\Magento\Framework\Filesystem\Directory\WriteInterface');
-        $this->rootDirectory = $this->getMockForAbstractClass('\Magento\Framework\Filesystem\Directory\ReadInterface');
+        $this->tmpDirectory = $this->getMockForAbstractClass('Magento\Framework\Filesystem\Directory\WriteInterface');
+        $this->rootDirectory = $this->getMockForAbstractClass('Magento\Framework\Filesystem\Directory\ReadInterface');
         $this->rootDirectory->expects($this->any())
             ->method('getRelativePath')
             ->will($this->returnArgument(0));
         $this->rootDirectory->expects($this->any())
             ->method('readFile')
-            ->will($this->returnCallback(function ($file) {
-                return "content of '$file'";
-            }));
+            ->will(
+                $this->returnCallback(
+                    function ($file) {
+                        return "content of '$file'";
+                    }
+                )
+            );
         $filesystem = $this->getMock('\Magento\Framework\Filesystem', [], [], '', false);
-        $filesystem->expects($this->exactly(2))
+        $filesystem->expects($this->once())
             ->method('getDirectoryWrite')
-            //->with(DirectoryList::VAR_DIR)
             ->will($this->returnValue($this->tmpDirectory));
         $this->assetRepo = $this->getMock('\Magento\Framework\View\Asset\Repository', [], [], '', false);
         $this->magentoImport = $this->getMock(
-            '\Magento\Framework\Less\PreProcessor\Instruction\MagentoImport', [], [], '', false
+            'Magento\Framework\Less\PreProcessor\Instruction\MagentoImport',
+            [],
+            [],
+            '',
+            false
         );
         $this->import = $this->getMock(
-            '\Magento\Framework\Less\PreProcessor\Instruction\Import', [], [], '', false
+            'Magento\Framework\Less\PreProcessor\Instruction\Import',
+            [],
+            [],
+            '',
+            false
         );
 
         $assetSource = $this->getMock(
-            'Magento\Framework\View\Asset\Source', [], [], '', false
+            'Magento\Framework\View\Asset\Source',
+            [],
+            [],
+            '',
+            false
         );
 
-        $this->publisher = $this->getMock('Magento\Framework\App\View\Asset\Publisher', [], [], '', false);
-
+        $this->relatedGenerator = $this->getMockBuilder('Magento\Framework\Less\FileGenerator\RelatedGenerator')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+        $this->config = $this->getMockBuilder('Magento\Framework\Less\Config')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+        $this->temporaryFile = $this->getMockBuilder('Magento\Framework\Less\File\Temporary')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
         $this->object = new \Magento\Framework\Less\FileGenerator(
-            $filesystem, $this->assetRepo, $this->magentoImport, $this->import, $assetSource, $this->publisher
+            $filesystem,
+            $this->assetRepo,
+            $this->magentoImport,
+            $this->import,
+            $assetSource,
+            $this->relatedGenerator,
+            $this->config,
+            $this->temporaryFile
         );
     }
 
     public function testGenerateLessFileTree()
     {
-        $originalContent = 'original content';
+        $lessDirectory = 'path/to/less';
         $expectedContent = 'updated content';
-        $expectedRelativePath = 'view_preprocessed/less/some/file.less';
-        $expectedPath = '/var/view_preprocessed/less/some/file.less';
+        $expectedRelativePath = 'some/file.less';
+        $expectedPath = $lessDirectory . '/some/file.less';
 
-        $asset = $this->getMock('\Magento\Framework\View\Asset\File', [], [], '', false);
-        $asset->expects($this->exactly(2))
-            ->method('getPath')
-            ->will($this->returnValue('some/file.css'));
-        $chain = new \Magento\Framework\View\Asset\PreProcessor\Chain($asset, $originalContent, 'less');
+
+        $asset = $this->getMock('Magento\Framework\View\Asset\File', [], [], '', false);
+        $chain = $this->getMock('Magento\Framework\View\Asset\PreProcessor\Chain', [], [], '', false);
+
+        $this->config->expects($this->any())
+            ->method('getLessDirectory')
+            ->willReturn($lessDirectory);
+        $this->tmpDirectory->expects($this->once())
+            ->method('isExist')
+            ->willReturn(true);
 
         $this->magentoImport->expects($this->once())
             ->method('process')
@@ -100,59 +145,28 @@ class FileGeneratorTest extends \PHPUnit_Framework_TestCase
         $this->import->expects($this->once())
             ->method('process')
             ->with($chain);
+        $this->relatedGenerator->expects($this->once())
+            ->method('generate')
+            ->with($this->import);
 
-        $relatedAssetOne = $this->getMock('\Magento\Framework\View\Asset\File', [], [], '', false);
-        $relatedAssetOne->expects($this->any())
+        $asset->expects($this->once())
             ->method('getPath')
-            ->will($this->returnValue('related/file_one.css'));
-        $relatedAssetOne->expects($this->any())
-            ->method('getContent')
-            ->will($this->returnValue("content of 'related/file_one.css'"));
-        $relatedAssetTwo = $this->getMock('\Magento\Framework\View\Asset\File', [], [], '', false);
-        $relatedAssetTwo->expects($this->any())
-            ->method('getPath')
-            ->will($this->returnValue('related/file_two.css'));
-        $relatedAssetTwo->expects($this->any())
+            ->will($this->returnValue('some/file.css'));
+        $chain->expects($this->once())
             ->method('getContent')
-            ->will($this->returnValue("content of 'related/file_two.css'"));
-        $assetsMap = [
-            ['related/file_one.css', $asset, $relatedAssetOne],
-            ['related/file_two.css', $asset, $relatedAssetTwo],
-        ];
-        $this->assetRepo->expects($this->any())
-            ->method('createRelated')
-            ->will($this->returnValueMap($assetsMap));
-
-        $relatedFilesOne = [['related/file_one.css', $asset]];
-        $this->import->expects($this->at(1))
-            ->method('getRelatedFiles')
-            ->will($this->returnValue($relatedFilesOne));
-        $relatedFilesTwo = [['related/file_two.css', $asset]];
-        $this->import->expects($this->at(3))
-            ->method('getRelatedFiles')
-            ->will($this->returnValue($relatedFilesTwo));
-        $this->import->expects($this->at(5))
-            ->method('getRelatedFiles')
-            ->will($this->returnValue([]));
-
-        $writeMap = [
-            [$expectedRelativePath, $expectedContent],
-            ['related/file_one.css', "content of 'related/file_one.css'"],
-            ['related/file_two.css', "content of 'related/file_two.css'"],
-        ];
-        $pathsMap = [
-            [$expectedRelativePath, $expectedPath],
-            ['related/file_one.css', '/var/view_preprocessed/less/related/file_one.css'],
-            ['related/file_two.css', '/var/view_preprocessed/less/related/file_two.css'],
-        ];
-        $this->tmpDirectory->expects($this->any())
-            ->method('writeFile')
-            ->will($this->returnValueMap($writeMap));
-        $this->tmpDirectory->expects($this->any())
-            ->method('getAbsolutePath')
-            ->will($this->returnValueMap($pathsMap));
-
-        $actual = $this->object->generateFileTree($chain);
-        $this->assertSame($expectedPath, $actual);
+            ->willReturn($expectedContent);
+        $chain->expects($this->once())
+            ->method('getAsset')
+            ->willReturn($asset);
+
+        $this->temporaryFile->expects($this->once())
+            ->method('createFile')
+            ->with(
+                $expectedRelativePath,
+                $expectedContent
+            )
+            ->willReturn($expectedPath);
+
+        $this->assertSame($expectedPath, $this->object->generateFileTree($chain));
     }
 }
diff --git a/lib/internal/Magento/Framework/Less/Test/Unit/PreProcessor/Instruction/ImportTest.php b/lib/internal/Magento/Framework/Less/Test/Unit/PreProcessor/Instruction/ImportTest.php
index 91de6ddafa2cc4f599d5755266cdc13155e9c4a8..133ac7db0dbcec683fb42775f7a40ebe74c32bc5 100644
--- a/lib/internal/Magento/Framework/Less/Test/Unit/PreProcessor/Instruction/ImportTest.php
+++ b/lib/internal/Magento/Framework/Less/Test/Unit/PreProcessor/Instruction/ImportTest.php
@@ -108,7 +108,7 @@ class ImportTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Less\PreProcessor\Instruction\Import::resetRelatedFiles
+     * @covers \Magento\Framework\Less\PreProcessor\Instruction\Import::resetRelatedFiles
      */
     public function testGetRelatedFiles()
     {
diff --git a/lib/internal/Magento/Framework/Locale/Format.php b/lib/internal/Magento/Framework/Locale/Format.php
index 35dec7421cd6a203d533be951be990b301b3ff61..7cec1393dbba424d625c0ca37efe4e1230bc1e50 100644
--- a/lib/internal/Magento/Framework/Locale/Format.php
+++ b/lib/internal/Magento/Framework/Locale/Format.php
@@ -82,12 +82,17 @@ class Format implements \Magento\Framework\Locale\FormatInterface
      * Functions returns array with price formatting info
      *
      * @return array
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     public function getPriceFormat()
     {
-        $numberElements = (new DataBundle())->get($this->_localeResolver->getLocale())['NumberElements'];
-        $format = $numberElements['latn']['patterns']['currencyFormat'];
-        $symbols = $numberElements['latn']['symbols'];
+        $localeData = (new DataBundle())->get($this->_localeResolver->getLocale());
+        $format = $localeData['NumberElements']['latn']['patterns']['currencyFormat']
+            ?: explode(';', $localeData['NumberPatterns'][1])[0];
+        $decimalSymbol = $localeData['NumberElements']['latn']['symbols']['decimal']
+            ?: $localeData['NumberElements'][0];
+        $groupSymbol = $localeData['NumberElements']['latn']['symbols']['group']
+            ?: $localeData['NumberElements'][1];
 
         $pos = strpos($format, ';');
         if ($pos !== false) {
@@ -120,8 +125,8 @@ class Format implements \Magento\Framework\Locale\FormatInterface
             'pattern' => $this->_scopeResolver->getScope()->getCurrentCurrency()->getOutputFormat(),
             'precision' => $totalPrecision,
             'requiredPrecision' => $requiredPrecision,
-            'decimalSymbol' => $symbols['decimal'],
-            'groupSymbol' => $symbols['group'],
+            'decimalSymbol' => $decimalSymbol,
+            'groupSymbol' => $groupSymbol,
             'groupLength' => $group,
             'integerRequired' => $integerRequired,
         ];
diff --git a/lib/internal/Magento/Framework/Locale/Test/Unit/ValidatorTest.php b/lib/internal/Magento/Framework/Locale/Test/Unit/ValidatorTest.php
index 62634c5c1d10bea2b5a0b8337c199f3e0e8be61c..b786006cd46c7b21cd88d76a5e3c8c65f1338063 100644
--- a/lib/internal/Magento/Framework/Locale/Test/Unit/ValidatorTest.php
+++ b/lib/internal/Magento/Framework/Locale/Test/Unit/ValidatorTest.php
@@ -41,7 +41,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
      * @dataProvider testIsValidDataProvider
      * @param string $locale
      * @param boolean $valid
-     * covers \Magento\Framework\Locale\Validator::isValid
+     * @covers \Magento\Framework\Locale\Validator::isValid
      */
     public function testIsValid($locale, $valid)
     {
diff --git a/lib/internal/Magento/Framework/Mail/Exception.php b/lib/internal/Magento/Framework/Mail/Exception.php
deleted file mode 100644
index ffa3d56d90cfb43b0e68dfc5e39fcf0c2d16543f..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Mail/Exception.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\Mail;
-
-class Exception extends \Exception
-{
-}
diff --git a/lib/internal/Magento/Framework/Mail/Template/SenderResolverInterface.php b/lib/internal/Magento/Framework/Mail/Template/SenderResolverInterface.php
index 53a68730acb0513264f97046f263b712ce0e38b7..a440f983a47f10fb2148300d2e1bb340cb276928 100644
--- a/lib/internal/Magento/Framework/Mail/Template/SenderResolverInterface.php
+++ b/lib/internal/Magento/Framework/Mail/Template/SenderResolverInterface.php
@@ -11,7 +11,7 @@ interface SenderResolverInterface
 {
     /**
      * Resolve sender data
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      * @param string|array $sender
      * @param int|null $scopeId
      * @return array
diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/MessageTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/MessageTest.php
index da6ddb497a78e9d61ba226221fb324b290ceeaf9..3ed9c781a76c51575fccea7f9a3b94123cecd508 100644
--- a/lib/internal/Magento/Framework/Mail/Test/Unit/MessageTest.php
+++ b/lib/internal/Magento/Framework/Mail/Test/Unit/MessageTest.php
@@ -24,8 +24,8 @@ class MessageTest extends \PHPUnit_Framework_TestCase
      * @param string $messageType
      * @param string $method
      *
-     * covers \Magento\Framework\Mail\Message::setBody
-     * covers \Magento\Framework\Mail\Message::setMessageType
+     * @covers \Magento\Framework\Mail\Message::setBody
+     * @covers \Magento\Framework\Mail\Message::setMessageType
      * @dataProvider setBodyDataProvider
      */
     public function testSetBody($messageType, $method)
@@ -60,8 +60,8 @@ class MessageTest extends \PHPUnit_Framework_TestCase
      * @param string $messageType
      * @param string $method
      *
-     * covers \Magento\Framework\Mail\Message::getBody
-     * covers \Magento\Framework\Mail\Message::setMessageType
+     * @covers \Magento\Framework\Mail\Message::getBody
+     * @covers \Magento\Framework\Mail\Message::setMessageType
      * @dataProvider getBodyDataProvider
      */
     public function testGetBody($messageType, $method)
diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/FactoryTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/FactoryTest.php
index 88ca16f01bce2bbb9a3210f430469f953d9f5415..eb9f08e6701181b5c9f433c71b39b5ff97a5fc20 100644
--- a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/FactoryTest.php
+++ b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/FactoryTest.php
@@ -24,8 +24,8 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Mail\Template\Factory::get
-     * covers \Magento\Framework\Mail\Template\Factory::__construct
+     * @covers \Magento\Framework\Mail\Template\Factory::get
+     * @covers \Magento\Framework\Mail\Template\Factory::__construct
      */
     public function testGet()
     {
diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php
index d6c81a75c8aa7c1614b0f349dc3d42ba24caec2e..0a93ee2ca9ee23c07807d905230cbb3e9cefb549 100644
--- a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php
+++ b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php
@@ -206,7 +206,7 @@ class TransportBuilderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Mail\Template\TransportBuilder::addTo
+     * @covers \Magento\Framework\Mail\Template\TransportBuilder::addTo
      */
     public function testAddTo()
     {
@@ -219,7 +219,7 @@ class TransportBuilderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Mail\Template\TransportBuilder::addBcc
+     * @covers \Magento\Framework\Mail\Template\TransportBuilder::addBcc
      */
     public function testAddBcc()
     {
@@ -232,7 +232,7 @@ class TransportBuilderTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Mail\Template\TransportBuilder::setReplyTo
+     * @covers \Magento\Framework\Mail\Template\TransportBuilder::setReplyTo
      */
     public function testSetReplyTo()
     {
diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php
index 8e58b1d7efac174943d1c9b7321f1c2187f20ee8..ac9afb81f3b5c8a2541fb3a76415dd9018322025 100644
--- a/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php
+++ b/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php
@@ -34,8 +34,8 @@ class TransportTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Mail\Transport::sendMessage
-     * @expectedException \Magento\Framework\Mail\Exception
+     * @covers \Magento\Framework\Mail\Transport::sendMessage
+     * @expectedException \Magento\Framework\Exception\MailException
      * @expectedExceptionMessage No body specified
      */
     public function testSendMessageBrokenMessage()
diff --git a/lib/internal/Magento/Framework/Mail/Transport.php b/lib/internal/Magento/Framework/Mail/Transport.php
index 8a7a9c2f43329d1de8df3c5d456a364bdb087715..89efe6b006e3f94a9c58858d0a857758d26ed726 100644
--- a/lib/internal/Magento/Framework/Mail/Transport.php
+++ b/lib/internal/Magento/Framework/Mail/Transport.php
@@ -31,14 +31,14 @@ class Transport extends \Zend_Mail_Transport_Sendmail implements \Magento\Framew
      * Send a mail using this transport
      *
      * @return void
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      */
     public function sendMessage()
     {
         try {
             parent::send($this->_message);
         } catch (\Exception $e) {
-            throw new \Magento\Framework\Mail\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
         }
     }
 }
diff --git a/lib/internal/Magento/Framework/Mail/TransportInterface.php b/lib/internal/Magento/Framework/Mail/TransportInterface.php
index 554daa553e1371b317b3e49926aea2b97e2667b2..53d1bd04e0720db87e615317c4fe9549957fdaf1 100644
--- a/lib/internal/Magento/Framework/Mail/TransportInterface.php
+++ b/lib/internal/Magento/Framework/Mail/TransportInterface.php
@@ -13,7 +13,7 @@ interface TransportInterface
      * Send a mail using this transport
      *
      * @return void
-     * @throws \Magento\Framework\Mail\Exception
+     * @throws \Magento\Framework\Exception\MailException
      */
     public function sendMessage();
 }
diff --git a/lib/internal/Magento/Framework/Math/Test/Unit/CalculatorTest.php b/lib/internal/Magento/Framework/Math/Test/Unit/CalculatorTest.php
index 5b6b1cf1791a534809e5fb12211f0d0b7a090483..8d2fa4c25a776cd524d430b06ff47bcb26a07d3f 100644
--- a/lib/internal/Magento/Framework/Math/Test/Unit/CalculatorTest.php
+++ b/lib/internal/Magento/Framework/Math/Test/Unit/CalculatorTest.php
@@ -34,8 +34,8 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
      * @param bool $negative
      * @param float $expected
      * @dataProvider deltaRoundDataProvider
-     * covers \Magento\Framework\Math\Calculator::deltaRound
-     * covers \Magento\Framework\Math\Calculator::__construct
+     * @covers \Magento\Framework\Math\Calculator::deltaRound
+     * @covers \Magento\Framework\Math\Calculator::__construct
      */
     public function testDeltaRound($price, $negative, $expected)
     {
diff --git a/lib/internal/Magento/Framework/Message/AbstractMessage.php b/lib/internal/Magento/Framework/Message/AbstractMessage.php
index b0a096bf8040ad50ffe49846ec55bd840f0994f9..b8efb73551a72af67160e6c3d646ae166b758cd5 100644
--- a/lib/internal/Magento/Framework/Message/AbstractMessage.php
+++ b/lib/internal/Magento/Framework/Message/AbstractMessage.php
@@ -47,7 +47,7 @@ abstract class AbstractMessage implements MessageInterface
      */
     public function getText()
     {
-        return $this->text;
+        return (string)$this->text;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Message/Test/Unit/AbstractMessageTest.php b/lib/internal/Magento/Framework/Message/Test/Unit/AbstractMessageTest.php
index e5d8f3b30585ac7972800d6d8031cb99c69b1845..0e2db724f0d5a29e369a26aa8c7346677ca92c6a 100644
--- a/lib/internal/Magento/Framework/Message/Test/Unit/AbstractMessageTest.php
+++ b/lib/internal/Magento/Framework/Message/Test/Unit/AbstractMessageTest.php
@@ -27,14 +27,14 @@ class AbstractMessageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\AbstractMessage::getText
-     * covers \Magento\Framework\Message\AbstractMessage::setText
+     * @covers \Magento\Framework\Message\AbstractMessage::getText
+     * @covers \Magento\Framework\Message\AbstractMessage::setText
      * @dataProvider setTextGetTextProvider
      */
-    public function testSetTextGetText($text)
+    public function testSetTextGetText($text, $resultText)
     {
         $this->model->setText($text);
-        $this->assertEquals($text, $this->model->getText());
+        $this->assertEquals($resultText, $this->model->getText());
     }
 
     /**
@@ -42,12 +42,12 @@ class AbstractMessageTest extends \PHPUnit_Framework_TestCase
      */
     public function setTextGetTextProvider()
     {
-        return [[''], ['some text']];
+        return [['', ''], ['some text', 'some text'], [new \Magento\Framework\Phrase('some text'), 'some text']];
     }
 
     /**
-     * covers \Magento\Framework\Message\AbstractMessage::getIdentifier
-     * covers \Magento\Framework\Message\AbstractMessage::setIdentifier
+     * @covers \Magento\Framework\Message\AbstractMessage::getIdentifier
+     * @covers \Magento\Framework\Message\AbstractMessage::setIdentifier
      * @dataProvider setIdentifierGetIdentifierProvider
      */
     public function testSetIdentifierGetIdentifier($identifier)
@@ -65,8 +65,8 @@ class AbstractMessageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\AbstractMessage::getIsSticky
-     * covers \Magento\Framework\Message\AbstractMessage::setIsSticky
+     * @covers \Magento\Framework\Message\AbstractMessage::getIsSticky
+     * @covers \Magento\Framework\Message\AbstractMessage::setIsSticky
      */
     public function testSetIsStickyGetIsSticky()
     {
@@ -76,7 +76,7 @@ class AbstractMessageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\AbstractMessage::toString
+     * @covers \Magento\Framework\Message\AbstractMessage::toString
      */
     public function testToString()
     {
diff --git a/lib/internal/Magento/Framework/Message/Test/Unit/CollectionTest.php b/lib/internal/Magento/Framework/Message/Test/Unit/CollectionTest.php
index 0ce4feb7c14a96d2db21db5d4f36d4eac9c26fc7..f97367965a4d8dc817c0ef34cdd5bfc98482f309 100644
--- a/lib/internal/Magento/Framework/Message/Test/Unit/CollectionTest.php
+++ b/lib/internal/Magento/Framework/Message/Test/Unit/CollectionTest.php
@@ -29,8 +29,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::addMessage
-     * covers \Magento\Framework\Message\Collection::getItemsByType
+     * @covers \Magento\Framework\Message\Collection::addMessage
+     * @covers \Magento\Framework\Message\Collection::getItemsByType
      */
     public function testAddMessage()
     {
@@ -51,9 +51,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::addMessage
-     * covers \Magento\Framework\Message\Collection::getItems
-     * covers \Magento\Framework\Message\Collection::getLastAddedMessage
+     * @covers \Magento\Framework\Message\Collection::addMessage
+     * @covers \Magento\Framework\Message\Collection::getItems
+     * @covers \Magento\Framework\Message\Collection::getLastAddedMessage
      */
     public function testGetItems()
     {
@@ -75,10 +75,10 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::addMessage
-     * covers \Magento\Framework\Message\Collection::getItemsByType
-     * covers \Magento\Framework\Message\Collection::getCount
-     * covers \Magento\Framework\Message\Collection::getCountByType
+     * @covers \Magento\Framework\Message\Collection::addMessage
+     * @covers \Magento\Framework\Message\Collection::getItemsByType
+     * @covers \Magento\Framework\Message\Collection::getCount
+     * @covers \Magento\Framework\Message\Collection::getCountByType
      */
     public function testGetItemsByType()
     {
@@ -118,8 +118,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::addMessage
-     * covers \Magento\Framework\Message\Collection::getErrors
+     * @covers \Magento\Framework\Message\Collection::addMessage
+     * @covers \Magento\Framework\Message\Collection::getErrors
      */
     public function testGetErrors()
     {
@@ -141,8 +141,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::getMessageByIdentifier
-     * covers \Magento\Framework\Message\Collection::deleteMessageByIdentifier
+     * @covers \Magento\Framework\Message\Collection::getMessageByIdentifier
+     * @covers \Magento\Framework\Message\Collection::deleteMessageByIdentifier
      */
     public function testGetMessageByIdentifier()
     {
@@ -168,7 +168,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::clear
+     * @covers \Magento\Framework\Message\Collection::clear
      */
     public function testClear()
     {
@@ -189,7 +189,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Message\Collection::clear
+     * @covers \Magento\Framework\Message\Collection::clear
      */
     public function testClearWithSticky()
     {
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ActionValidator/RemoveActionTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ActionValidator/RemoveActionTest.php
index e7364f106035484c3f54636c2b1ad60757fcb410..c7bcdb23df30365afaa3f3c83938b8fdbde344d6 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/ActionValidator/RemoveActionTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ActionValidator/RemoveActionTest.php
@@ -14,8 +14,8 @@ class RemoveActionTest extends \PHPUnit_Framework_TestCase
      * @param bool $expectedResult
      *
      * @dataProvider isAllowedDataProvider
-     * covers \Magento\Framework\Model\ActionValidator\RemoveAction::isAllowed
-     * covers \Magento\Framework\Model\ActionValidator\RemoveAction::getBaseClassName
+     * @covers \Magento\Framework\Model\ActionValidator\RemoveAction::isAllowed
+     * @covers \Magento\Framework\Model\ActionValidator\RemoveAction::getBaseClassName
      */
     public function testIsAllowed($modelToCheck, $protectedModel, $secureArea, $expectedResult)
     {
diff --git a/lib/internal/Magento/Framework/Module/Exception.php b/lib/internal/Magento/Framework/Module/Exception.php
deleted file mode 100644
index 15e5f6ac7b166f9e0d02d8a3e91ff67aa3e76ccf..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Module/Exception.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Framework\Module;
-
-class Exception extends \Exception
-{
-}
diff --git a/lib/internal/Magento/Framework/Module/ModuleList/Loader.php b/lib/internal/Magento/Framework/Module/ModuleList/Loader.php
index 943ed35520cbc0406eb694274fc8143147cc9d93..08660d98bb6ebeabb6085bf9689db4cb18189dad 100644
--- a/lib/internal/Magento/Framework/Module/ModuleList/Loader.php
+++ b/lib/internal/Magento/Framework/Module/ModuleList/Loader.php
@@ -55,7 +55,7 @@ class Loader
     /**
      * Loads the full module list information
      *
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return array
      */
     public function load()
@@ -67,10 +67,12 @@ class Loader
 
             try {
                 $this->parser->loadXML($contents);
-            } catch (\Magento\Framework\Exception $e) {
-                throw new \Magento\Framework\Exception(
-                    'Invalid Document: ' . $file . PHP_EOL . ' Error: ' . $e->getMessage(),
-                    $e->getCode(),
+            } catch (\Magento\Framework\Exception\LocalizedException $e) {
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        'Invalid Document: %1%2 Error: %3',
+                        [$file, PHP_EOL, $e->getMessage()]
+                    ),
                     $e
                 );
             }
diff --git a/lib/internal/Magento/Framework/Module/Plugin/DbStatusValidator.php b/lib/internal/Magento/Framework/Module/Plugin/DbStatusValidator.php
index 52cbea3c74f5deb867a27b2b12b944c443cce3b3..e8ff84ee476765a4ef471c9bc92b3a8489a53e1c 100644
--- a/lib/internal/Magento/Framework/Module/Plugin/DbStatusValidator.php
+++ b/lib/internal/Magento/Framework/Module/Plugin/DbStatusValidator.php
@@ -42,7 +42,7 @@ class DbStatusValidator
      * @param \Closure $proceed
      * @param \Magento\Framework\App\RequestInterface $request
      *
-     * @throws \Magento\Framework\Module\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return \Magento\Framework\App\ResponseInterface
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -55,9 +55,11 @@ class DbStatusValidator
             $errors = $this->dbVersionInfo->getDbVersionErrors();
             if ($errors) {
                 $formattedErrors = $this->formatErrors($errors);
-                throw new \Magento\Framework\Module\Exception(
-                    'Please update your database: Run "php -f index.php update" from the Magento root/setup directory.'
-                    . PHP_EOL . 'The following modules are outdated:' . PHP_EOL . implode(PHP_EOL, $formattedErrors)
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        'Please update your database: Run "php -f index.php update" from the Magento root/setup directory. %1The following modules are outdated:%2%3',
+                        [PHP_EOL, PHP_EOL, implode(PHP_EOL, $formattedErrors)]
+                    )
                 );
             } else {
                 $this->cache->save('true', 'db_is_up_to_date');
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/Plugin/DbStatusValidatorTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/Plugin/DbStatusValidatorTest.php
index 8a760ccec43eb2243a6f0cfe60c2cdbd683819e3..10e21e701802b59a7be38144bb7fb5d1cbf684d6 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/Plugin/DbStatusValidatorTest.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/Plugin/DbStatusValidatorTest.php
@@ -116,7 +116,7 @@ class DbStatusValidatorTest extends \PHPUnit_Framework_TestCase
      * @param array $dbVersionErrors
      *
      * @dataProvider aroundDispatchExceptionDataProvider
-     * @expectedException \Magento\Framework\Module\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Please update your database:
      */
     public function testAroundDispatchException(array $dbVersionErrors)
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php
index e777d9c51fcbf28f00be4981f63dcc9a14199633..3c5023be5c3661bc84aac7ff3e9e7b37988b455b 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php
@@ -135,7 +135,7 @@ class MigrationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Module\Setup\Migration::appendClassAliasReplace
+     * @covers \Magento\Framework\Module\Setup\Migration::appendClassAliasReplace
      */
     public function testAppendClassAliasReplace()
     {
diff --git a/lib/internal/Magento/Framework/Object.php b/lib/internal/Magento/Framework/Object.php
index c13d48075dfb44aec6064c4b9d4d557658c85115..81be913e5543c7dc3f664bfbfd570175a50bf534 100644
--- a/lib/internal/Magento/Framework/Object.php
+++ b/lib/internal/Magento/Framework/Object.php
@@ -494,7 +494,7 @@ class Object implements \ArrayAccess
      * @param   string $method
      * @param   array $args
      * @return  mixed
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __call($method, $args)
     {
@@ -514,8 +514,8 @@ class Object implements \ArrayAccess
                 $key = $this->_underscore(substr($method, 3));
                 return isset($this->_data[$key]);
         }
-        throw new \Magento\Framework\Exception(
-            sprintf('Invalid method %s::%s(%s)', get_class($this), $method, print_r($args, 1))
+        throw new \Magento\Framework\Exception\LocalizedException(
+            new \Magento\Framework\Phrase('Invalid method %1::%2(%3)', [get_class($this), $method, print_r($args, 1)])
         );
     }
 
diff --git a/lib/internal/Magento/Framework/Object/Cache.php b/lib/internal/Magento/Framework/Object/Cache.php
index 519021a01914b2c50198480dbf774fb6bf39eb93..911eaf0749cbd18d0dfb8b21b9a22dda8c59cf24 100644
--- a/lib/internal/Magento/Framework/Object/Cache.php
+++ b/lib/internal/Magento/Framework/Object/Cache.php
@@ -122,7 +122,7 @@ class Cache
      * @param string $idx
      * @param array|string $tags
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
@@ -150,11 +150,10 @@ class Cache
         }
 
         if (isset($this->_objects[$idx])) {
-            throw new \Magento\Framework\Exception(
-                'Object already exists in registry (' . $idx . '). Old object class: ' . get_class(
-                    $this->_objects[$idx]
-                ) . ', new object class: ' . get_class(
-                    $object
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    'Object already exists in registry (%1). Old object class: %2, new object class: %3',
+                    [$idx, get_class($this->_objects[$idx]), get_class($object)]
                 )
             );
         }
@@ -184,7 +183,7 @@ class Cache
      * @param string|array $refName
      * @param string $idx
      * @return bool|void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function reference($refName, $idx)
     {
@@ -196,13 +195,11 @@ class Cache
         }
 
         if (isset($this->_references[$refName])) {
-            throw new \Magento\Framework\Exception(
-                'The reference already exists: ' .
-                $refName .
-                '. New index: ' .
-                $idx .
-                ', old index: ' .
-                $this->_references[$refName]
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    'The reference already exists: %1. New index: %2, old index: %3',
+                    [$refName, $idx, $this->_references[$refName]]
+                )
             );
         }
         $this->_references[$refName] = $idx;
diff --git a/lib/internal/Magento/Framework/Object/Test/Unit/CacheTest.php b/lib/internal/Magento/Framework/Object/Test/Unit/CacheTest.php
index afcfad8fb5d296f3368a62ef0931db1cf2b275f0..6e66bb3f370abf3a2d20745cb84cabf06ad733af 100644
--- a/lib/internal/Magento/Framework/Object/Test/Unit/CacheTest.php
+++ b/lib/internal/Magento/Framework/Object/Test/Unit/CacheTest.php
@@ -24,7 +24,7 @@ class CacheTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Object already exists in registry (#1). Old object class: stdClass
      */
     public function testSaveWhenObjectAlreadyExistsInRegistry()
@@ -54,7 +54,7 @@ class CacheTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage The reference already exists: refName. New index: idx, old index: idx
      */
     public function testReferenceWhenReferenceAlreadyExist()
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/DomTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/DomTest.php
index 8990a324a7e7bd91129bc38c9e2ee36a31e0c802..690928ff07d8e9cb35c9fa286246ead92ddee452 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/DomTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/DomTest.php
@@ -72,7 +72,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\ObjectManager\Config\Reader\Dom::_createConfigMerger()
+     * @covers \Magento\Framework\ObjectManager\Config\Reader\Dom::_createConfigMerger()
      */
     public function testRead()
     {
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Relations/RuntimeTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Relations/RuntimeTest.php
index 3fde1b24d33603ef8159914db3ec962de5c9299b..2485e8e156228c7e2206971dd890e3e125e100e7 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Relations/RuntimeTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Relations/RuntimeTest.php
@@ -42,7 +42,7 @@ class RuntimeTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param $entity
-     * @expectedException  \Magento\Framework\Exception
+     * @expectedException  \Magento\Framework\Exception\LocalizedException
      * @dataProvider nonExistentGeneratorsDataProvider
      */
     public function testHasIfNonExists($entity)
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/BaseTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/BaseTest.php
index 650423f5475597f3aca3ac4fcd404cd41a3d5232..6e7d84e2f341bd8949b616950f3c04edf438ff37 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/BaseTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/BaseTest.php
@@ -101,7 +101,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Pricing\PriceInfo\Base::getAdjustments
+     * @covers \Magento\Framework\Pricing\PriceInfo\Base::getAdjustments
      */
     public function testGetAdjustments()
     {
@@ -110,7 +110,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Pricing\PriceInfo\Base::getAdjustment
+     * @covers \Magento\Framework\Pricing\PriceInfo\Base::getAdjustment
      */
     public function testGetAdjustment()
     {
diff --git a/lib/internal/Magento/Framework/Session/SaveHandler.php b/lib/internal/Magento/Framework/Session/SaveHandler.php
index bfd8a6958a712c8a52d9e2031748180c675e6d53..6f6595805bafe95a9c16c224e10a08e165c47aa6 100644
--- a/lib/internal/Magento/Framework/Session/SaveHandler.php
+++ b/lib/internal/Magento/Framework/Session/SaveHandler.php
@@ -6,6 +6,7 @@
 namespace Magento\Framework\Session;
 
 use Magento\Framework\App\DeploymentConfig;
+use Magento\Framework\Exception\SessionException;
 
 /**
  * Magento session save handler
@@ -34,7 +35,7 @@ class SaveHandler implements SaveHandlerInterface
         $saveMethod = $deploymentConfig->get(\Magento\Framework\Session\Config::PARAM_SESSION_SAVE_METHOD);
         try {
             $adapter = $saveHandlerFactory->create($saveMethod);
-        } catch (SaveHandlerException $e) {
+        } catch (SessionException $e) {
             $adapter = $saveHandlerFactory->create($default);
         }
         $this->saveHandlerAdapter = $adapter;
diff --git a/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php b/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php
index b9e9b8a27aa94186ac3a9bb24522d571ecfa3ace..7ff33f1f72b0791298ee803dafbd2623fb97d70a 100644
--- a/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php
+++ b/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Framework\Session\SaveHandler;
 
+use Magento\Framework\Exception\SessionException;
+use Magento\Framework\Phrase;
+
 /**
  * Data base session save handler
  */
@@ -40,15 +43,15 @@ class DbTable extends \SessionHandler
      * Check DB connection
      *
      * @return void
-     * @throws \Magento\Framework\Session\SaveHandlerException
+     * @throws \Magento\Framework\Exception\SessionException
      */
     protected function checkConnection()
     {
         if (!$this->_write) {
-            throw new \Magento\Framework\Session\SaveHandlerException('Write DB connection is not available');
+            throw new SessionException(new Phrase('Write DB connection is not available'));
         }
         if (!$this->_write->isTableExists($this->_sessionTable)) {
-            throw new \Magento\Framework\Session\SaveHandlerException('DB storage table does not exist');
+            throw new SessionException(new Phrase('DB storage table does not exist'));
         }
     }
 
diff --git a/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php b/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php
index cecf0740fe13b4b7cc8164eeef63a40873def4ca..89efdac63f84246370f00225a167f1b9c976e1d7 100644
--- a/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php
+++ b/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php
@@ -100,7 +100,7 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Session\SaveHandlerException
+     * @expectedException \Magento\Framework\Exception\SessionException
      * @expectedExceptionMessage Write DB connection is not available
      */
     public function testCheckConnectionNoConnection()
@@ -124,7 +124,7 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Session\SaveHandlerException
+     * @expectedException \Magento\Framework\Exception\SessionException
      * @expectedExceptionMessage DB storage table does not exist
      */
     public function testCheckConnectionNoTable()
diff --git a/lib/internal/Magento/Framework/Session/Validator.php b/lib/internal/Magento/Framework/Session/Validator.php
index 7fbf90088d08713d7b96b43bebcfd203e9e1dad5..7ddca4963110c662de5a3faba46562d558a7e074 100644
--- a/lib/internal/Magento/Framework/Session/Validator.php
+++ b/lib/internal/Magento/Framework/Session/Validator.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Framework\Session;
 
+use Magento\Framework\Exception\SessionException;
+use Magento\Framework\Phrase;
+
 /**
  * Session Validator
  */
@@ -71,7 +74,7 @@ class Validator implements ValidatorInterface
      *
      * @param SessionManagerInterface $session
      * @return void
-     * @throws Exception
+     * @throws SessionException
      */
     public function validate(SessionManagerInterface $session)
     {
@@ -80,7 +83,7 @@ class Validator implements ValidatorInterface
         } else {
             try {
                 $this->_validate();
-            } catch (Exception $e) {
+            } catch (SessionException $e) {
                 $session->destroy(['clear_storage' => false]);
                 // throw core session exception
                 throw $e;
@@ -92,7 +95,7 @@ class Validator implements ValidatorInterface
      * Validate data
      *
      * @return bool
-     * @throws Exception
+     * @throws SessionException
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     protected function _validate()
@@ -105,14 +108,24 @@ class Validator implements ValidatorInterface
             $this->_scopeType
         ) && $sessionData[self::VALIDATOR_REMOTE_ADDR_KEY] != $validatorData[self::VALIDATOR_REMOTE_ADDR_KEY]
         ) {
-            throw new Exception('Invalid session ' . self::VALIDATOR_REMOTE_ADDR_KEY . ' value.');
+            throw new SessionException(
+                new Phrase(
+                    'Invalid session %1 value.',
+                    [self::VALIDATOR_REMOTE_ADDR_KEY]
+                )
+            );
         }
         if ($this->_scopeConfig->getValue(
             self::XML_PATH_USE_HTTP_VIA,
             $this->_scopeType
         ) && $sessionData[self::VALIDATOR_HTTP_VIA_KEY] != $validatorData[self::VALIDATOR_HTTP_VIA_KEY]
         ) {
-            throw new Exception('Invalid session ' . self::VALIDATOR_HTTP_VIA_KEY . ' value.');
+            throw new SessionException(
+                new Phrase(
+                    'Invalid session %1 value.',
+                    [self::VALIDATOR_HTTP_VIA_KEY]
+                )
+            );
         }
 
         $httpXForwardedKey = $sessionData[self::VALIDATOR_HTTP_X_FORWARDED_FOR_KEY];
@@ -122,7 +135,12 @@ class Validator implements ValidatorInterface
             $this->_scopeType
         ) && $httpXForwardedKey != $validatorXForwarded
         ) {
-            throw new Exception('Invalid session ' . self::VALIDATOR_HTTP_X_FORWARDED_FOR_KEY . ' value.');
+            throw new SessionException(
+                new Phrase(
+                    'Invalid session %1 value.',
+                    [self::VALIDATOR_HTTP_X_FORWARDED_FOR_KEY]
+                )
+            );
         }
         if ($this->_scopeConfig->getValue(
             self::XML_PATH_USE_USER_AGENT,
@@ -134,7 +152,12 @@ class Validator implements ValidatorInterface
                     return true;
                 }
             }
-            throw new Exception('Invalid session ' . self::VALIDATOR_HTTP_USER_AGENT_KEY . ' value.');
+            throw new SessionException(
+                new Phrase(
+                    'Invalid session %1 value.',
+                    [self::VALIDATOR_HTTP_USER_AGENT_KEY]
+                )
+            );
         }
 
         return true;
diff --git a/lib/internal/Magento/Framework/Session/ValidatorInterface.php b/lib/internal/Magento/Framework/Session/ValidatorInterface.php
index 147e9dd587f59b150ec85f1b29542bce74c2eb13..f1407c41b4b023919f99619ba8e238a4a75c94d3 100644
--- a/lib/internal/Magento/Framework/Session/ValidatorInterface.php
+++ b/lib/internal/Magento/Framework/Session/ValidatorInterface.php
@@ -17,7 +17,7 @@ interface ValidatorInterface
      *
      * @param \Magento\Framework\Session\SessionManagerInterface $session
      * @return void
-     * @throws \Magento\Framework\Session\Exception
+     * @throws \Magento\Framework\Exception\SessionException
      */
     public function validate(\Magento\Framework\Session\SessionManagerInterface $session);
 }
diff --git a/lib/internal/Magento/Framework/Shell.php b/lib/internal/Magento/Framework/Shell.php
index 38b06f0d39d74fa72ef8f5f38ba70b18963a78e6..0652d49d039e0c43d21375d3d87153db78b1e243 100644
--- a/lib/internal/Magento/Framework/Shell.php
+++ b/lib/internal/Magento/Framework/Shell.php
@@ -42,7 +42,7 @@ class Shell implements ShellInterface
      * @param string $command Command with optional argument markers '%s'
      * @param string[] $arguments Argument values to substitute markers with
      * @return string Output of an executed command
-     * @throws \Magento\Framework\Exception If a command returns non-zero exit code
+     * @throws \Magento\Framework\Exception\LocalizedException If a command returns non-zero exit code
      */
     public function execute($command, array $arguments = [])
     {
@@ -51,7 +51,7 @@ class Shell implements ShellInterface
 
         $disabled = explode(',', ini_get('disable_functions'));
         if (in_array('exec', $disabled)) {
-            throw new Exception("exec function is disabled.");
+            throw new Exception\LocalizedException(new \Magento\Framework\Phrase("exec function is disabled."));
         }
 
         exec($command, $output, $exitCode);
@@ -59,7 +59,10 @@ class Shell implements ShellInterface
         $this->log($output);
         if ($exitCode) {
             $commandError = new \Exception($output, $exitCode);
-            throw new Exception("Command returned non-zero exit code:\n`{$command}`", 0, $commandError);
+            throw new Exception\LocalizedException(
+                new \Magento\Framework\Phrase("Command returned non-zero exit code:\n`%1`", [$command]),
+                $commandError
+            );
         }
         return $output;
     }
diff --git a/lib/internal/Magento/Framework/ShellInterface.php b/lib/internal/Magento/Framework/ShellInterface.php
index 3f891b3fc345b1a21d5973fce34af2bff089ee93..dae36d58f8d63735e4debaf52e3b8f6f3642dc98 100644
--- a/lib/internal/Magento/Framework/ShellInterface.php
+++ b/lib/internal/Magento/Framework/ShellInterface.php
@@ -15,7 +15,7 @@ interface ShellInterface
      *
      * @param string $command Command with optional argument markers '%s'
      * @param string[] $arguments Argument values to substitute markers with
-     * @throws \Magento\Framework\Exception If a command returns non-zero exit code
+     * @throws \Magento\Framework\Exception\LocalizedException If a command returns non-zero exit code
      * @return string
      */
     public function execute($command, array $arguments = []);
diff --git a/lib/internal/Magento/Framework/Stdlib/DateTime.php b/lib/internal/Magento/Framework/Stdlib/DateTime.php
index fcb268be94313cd381145ff4821f2831a6fd70b4..1de1a555645bd34e09bfe7bb793ca444089fa6ec 100644
--- a/lib/internal/Magento/Framework/Stdlib/DateTime.php
+++ b/lib/internal/Magento/Framework/Stdlib/DateTime.php
@@ -68,4 +68,31 @@ class DateTime
     {
         return preg_replace('#[ 0:-]#', '', $date) === '';
     }
+
+    /**
+     * Wrapper for native gmdate function
+     *
+     * @param string $format
+     * @param int $time
+     * @return string The given time in given format
+     *
+     * @codeCoverageIgnore
+     */
+    public function gmDate($format, $time)
+    {
+        return gmdate($format, $time);
+    }
+
+    /**
+     * Wrapper for native strtotime function
+     *
+     * @param string $timeStr
+     * @return int
+     *
+     * @codeCoverageIgnore
+     */
+    public function strToTime($timeStr)
+    {
+        return strtotime($timeStr);
+    }
 }
diff --git a/lib/internal/Magento/Framework/Stdlib/DateTime/DateTime.php b/lib/internal/Magento/Framework/Stdlib/DateTime/DateTime.php
index dc36a0755122edb792c32922c37ff1f8acddf4ee..312a40b1126400c1dd7582cbd0d7b138ad0098cc 100644
--- a/lib/internal/Magento/Framework/Stdlib/DateTime/DateTime.php
+++ b/lib/internal/Magento/Framework/Stdlib/DateTime/DateTime.php
@@ -63,6 +63,8 @@ class DateTime
      * @param  string $format
      * @param  int|string $input date in current timezone
      * @return string
+     *
+     * @deprecated (MAGETWO-35555)
      */
     public function gmtDate($format = null, $input = null)
     {
diff --git a/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/ValidationException.php b/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/ValidationException.php
deleted file mode 100644
index ca2ccc8e291c5d127d125dbfb1855064e30557a9..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/ValidationException.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/**
- * Datetime timezone exception
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\Stdlib\DateTime\Timezone;
-
-class ValidationException extends \Exception
-{
-}
diff --git a/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/Validator.php b/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/Validator.php
index 451c851f03d43d646ad617a3a6a3a579bfc39ae3..5474f1916b581ac9aad4ae8800c73f8166859340 100644
--- a/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/Validator.php
+++ b/lib/internal/Magento/Framework/Stdlib/DateTime/Timezone/Validator.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Framework\Stdlib\DateTime\Timezone;
 
+use Magento\Framework\Exception\ValidatorException;
+use Magento\Framework\Phrase;
+
 class Validator
 {
     /**
@@ -39,18 +42,22 @@ class Validator
      * @param int|string $timestamp
      * @param int|string $toDate
      * @return void
-     * @throws ValidationException
+     * @throws \Magento\Framework\Exception\ValidatorException
      */
     public function validate($timestamp, $toDate)
     {
         $transitionYear = date('Y', $timestamp);
 
         if ($transitionYear > $this->_yearMaxValue || $transitionYear < $this->_yearMinValue) {
-            throw new ValidationException('Transition year is out of system date range.');
+            throw new ValidatorException(
+                new Phrase('Transition year is out of system date range.')
+            );
         }
 
         if ((int) $timestamp > (int) $toDate) {
-            throw new ValidationException('Transition year is out of specified date range.');
+            throw new ValidatorException(
+                new Phrase('Transition year is out of specified date range.')
+            );
         }
     }
 }
diff --git a/lib/internal/Magento/Framework/Stdlib/Test/Unit/ArrayUtilsTest.php b/lib/internal/Magento/Framework/Stdlib/Test/Unit/ArrayUtilsTest.php
index 30a43b623090072bed8fde2a7759f1c20a3af493..08e3373ef96857b05e9c7470bd7f79524b575751 100644
--- a/lib/internal/Magento/Framework/Stdlib/Test/Unit/ArrayUtilsTest.php
+++ b/lib/internal/Magento/Framework/Stdlib/Test/Unit/ArrayUtilsTest.php
@@ -23,7 +23,7 @@ class ArrayUtilsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Stdlib\ArrayUtils::ksortMultibyte
+     * @covers \Magento\Framework\Stdlib\ArrayUtils::ksortMultibyte
      * @dataProvider ksortMultibyteDataProvider
      */
     public function testKsortMultibyte($input, $locale)
@@ -47,7 +47,7 @@ class ArrayUtilsTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Stdlib\ArrayUtils::decorateArray
+     * @covers \Magento\Framework\Stdlib\ArrayUtils::decorateArray
      */
     public function testDecorateArray()
     {
diff --git a/lib/internal/Magento/Framework/Stdlib/Test/Unit/Cookie/CookieScopeTest.php b/lib/internal/Magento/Framework/Stdlib/Test/Unit/Cookie/CookieScopeTest.php
index 755ef8c45de48819b70f29b1b0d1c4e21bc032af..d07d8b17c3f2c99ba719b1e6c604afb174919d3f 100644
--- a/lib/internal/Magento/Framework/Stdlib/Test/Unit/Cookie/CookieScopeTest.php
+++ b/lib/internal/Magento/Framework/Stdlib/Test/Unit/Cookie/CookieScopeTest.php
@@ -55,7 +55,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::getSensitiveCookieMetadata
+     * @covers ::getSensitiveCookieMetadata
      */
     public function testGetSensitiveCookieMetadataEmpty()
     {
@@ -71,7 +71,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::getPublicCookieMetadata
+     * @covers ::getPublicCookieMetadata
      */
     public function testGetPublicCookieMetadataEmpty()
     {
@@ -81,7 +81,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::getCookieMetadata
+     * @covers ::getCookieMetadata
      */
     public function testGetCookieMetadataEmpty()
     {
@@ -91,7 +91,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::createSensitiveMetadata ::getPublicCookieMetadata
+     * @covers ::createSensitiveMetadata ::getPublicCookieMetadata
      */
     public function testGetSensitiveCookieMetadataDefaults()
     {
@@ -121,7 +121,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
+     * @covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
      */
     public function testGetPublicCookieMetadataDefaults()
     {
@@ -153,7 +153,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
+     * @covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
      */
     public function testGetCookieMetadataDefaults()
     {
@@ -174,7 +174,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
+     * @covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
      */
     public function testGetSensitiveCookieMetadataOverrides()
     {
@@ -210,7 +210,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
+     * @covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
      */
     public function testGetPublicCookieMetadataOverrides()
     {
@@ -241,7 +241,7 @@ class CookieScopeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
+     * @covers ::createSensitiveMetadata ::getPublicCookieMetadata ::getCookieMetadata
      */
     public function testGetCookieMetadataOverrides()
     {
diff --git a/lib/internal/Magento/Framework/Stdlib/Test/Unit/DateTime/Timezone/ValidatorTest.php b/lib/internal/Magento/Framework/Stdlib/Test/Unit/DateTime/Timezone/ValidatorTest.php
index 2744763c7fbfe37af5db4e7998f33cd7c78a0895..8df4113d4392f7dba73b1ffcd8fbaa0c394b8a40 100644
--- a/lib/internal/Magento/Framework/Stdlib/Test/Unit/DateTime/Timezone/ValidatorTest.php
+++ b/lib/internal/Magento/Framework/Stdlib/Test/Unit/DateTime/Timezone/ValidatorTest.php
@@ -14,7 +14,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @dataProvider validateWithTimestampOutOfSystemRangeDataProvider
-     * @expectedException \Magento\Framework\Stdlib\DateTime\Timezone\ValidationException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Transition year is out of system date range.
      */
     public function testValidateWithTimestampOutOfSystemRangeThrowsException($range, $validateArgs)
@@ -24,7 +24,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Stdlib\DateTime\Timezone\ValidationException
+     * @expectedException \Magento\Framework\Exception\ValidatorException
      * @expectedExceptionMessage Transition year is out of specified date range.
      */
     public function testValidateWithTimestampOutOfSpecifiedRangeThrowsException()
diff --git a/lib/internal/Magento/Framework/Stdlib/Test/Unit/StringTest.php b/lib/internal/Magento/Framework/Stdlib/Test/Unit/StringTest.php
index 5a94a0d619ffd1211c2db5209c3c2ac795d8df69..0fef95cff1d54856a799fcc5ec64be1e07a249b2 100644
--- a/lib/internal/Magento/Framework/Stdlib/Test/Unit/StringTest.php
+++ b/lib/internal/Magento/Framework/Stdlib/Test/Unit/StringTest.php
@@ -23,7 +23,7 @@ class StringTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Stdlib\String::split
+     * @covers \Magento\Framework\Stdlib\String::split
      */
     public function testStrSplit()
     {
@@ -41,7 +41,7 @@ class StringTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Stdlib\String::splitInjection
+     * @covers \Magento\Framework\Stdlib\String::splitInjection
      */
     public function testSplitInjection()
     {
@@ -50,7 +50,7 @@ class StringTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Stdlib\String::cleanString
+     * @covers \Magento\Framework\Stdlib\String::cleanString
      */
     public function testCleanString()
     {
@@ -70,7 +70,7 @@ class StringTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Stdlib\String::strpos
+     * @covers \Magento\Framework\Stdlib\String::strpos
      */
     public function testStrpos()
     {
diff --git a/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php b/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php
index 06021edadb22ff4bf9e42e0f3bc457574f265de3..52077c116feb40b84619f8e48586bace99f140d5 100644
--- a/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php
@@ -23,7 +23,7 @@ class EscaperTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Escaper::escapeHtml
+     * @covers \Magento\Framework\Escaper::escapeHtml
      * @dataProvider escapeHtmlDataProvider
      */
     public function testEscapeHtml($data, $expected, $allowedTags = null)
@@ -58,7 +58,7 @@ class EscaperTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Escaper::escapeUrl
+     * @covers \Magento\Framework\Escaper::escapeUrl
      */
     public function testEscapeUrl()
     {
@@ -69,7 +69,7 @@ class EscaperTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Escaper::escapeJsQuote
+     * @covers \Magento\Framework\Escaper::escapeJsQuote
      */
     public function testEscapeJsQuote()
     {
@@ -80,7 +80,7 @@ class EscaperTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\Escaper::escapeQuote
+     * @covers \Magento\Framework\Escaper::escapeQuote
      */
     public function testEscapeQuote()
     {
diff --git a/lib/internal/Magento/Framework/Test/Unit/ObjectTest.php b/lib/internal/Magento/Framework/Test/Unit/ObjectTest.php
index 5af6181770b7a0f6bc5ae7734e246333a8e1f4a3..66edf78695dfb5e65b9e4516ad23f296e7d26745 100644
--- a/lib/internal/Magento/Framework/Test/Unit/ObjectTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/ObjectTest.php
@@ -328,7 +328,7 @@ string',
     /**
      * Tests \Magento\Framework\Object->__call()
      *
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testCall()
     {
diff --git a/lib/internal/Magento/Framework/Test/Unit/ShellTest.php b/lib/internal/Magento/Framework/Test/Unit/ShellTest.php
index 43ed43aedf902d1fb22e9876ea0f7dacea8b9cd5..093c3df126f8d3f4fab9d56f1c81ab075c594a21 100644
--- a/lib/internal/Magento/Framework/Test/Unit/ShellTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/ShellTest.php
@@ -111,7 +111,7 @@ class ShellTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Command returned non-zero exit code:
      * @expectedExceptionCode 0
      */
@@ -133,7 +133,7 @@ class ShellTest extends \PHPUnit_Framework_TestCase
             /* Force command to return non-zero exit code */
             $commandArgs[count($commandArgs) - 1] .= ' exit(42);';
             $this->testExecute($command, $commandArgs, ''); // no result is expected in a case of a command failure
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->assertInstanceOf('Exception', $e->getPrevious());
             $this->assertEquals($expectedError, $e->getPrevious()->getMessage());
             $this->assertEquals(42, $e->getPrevious()->getCode());
diff --git a/lib/internal/Magento/Framework/TestFramework/Test/Unit/Unit/Helper/ObjectManagerTest.php b/lib/internal/Magento/Framework/TestFramework/Test/Unit/Unit/Helper/ObjectManagerTest.php
deleted file mode 100644
index d4e50811d7d92598df1588fa0af35359b2879a35..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/TestFramework/Test/Unit/Unit/Helper/ObjectManagerTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-// @codingStandardsIgnoreFile
-
-namespace Magento\Framework\TestFramework\Test\Unit\Unit\Helper;
-
-class ObjectManagerTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * List of block default dependencies
-     *
-     * @var array
-     */
-    protected $_blockDependencies = [
-        'request' => 'Magento\Framework\App\RequestInterface',
-        'layout' => 'Magento\Framework\View\LayoutInterface',
-        'eventManager' => 'Magento\Framework\Event\ManagerInterface',
-        'translator' => 'Magento\Framework\TranslateInterface',
-        'cache' => 'Magento\Framework\App\CacheInterface',
-        'design' => 'Magento\Framework\View\DesignInterface',
-        'session' => 'Magento\Framework\Session\SessionManagerInterface',
-        'scopeConfig' => 'Magento\Framework\App\Config\ScopeConfigInterface',
-    ];
-
-    /**
-     * List of model default dependencies
-     *
-     * @var array
-     */
-    protected $_modelDependencies = [
-        'eventManager' => 'Magento\Framework\Event\ManagerInterface',
-        'cacheManager' => 'Magento\Framework\App\CacheInterface',
-        'resource' => 'Magento\Framework\Model\Resource\AbstractResource',
-        'resourceCollection' => 'Magento\Framework\Data\Collection\Db',
-    ];
-
-    /**
-     * @covers \Magento\TestFramework\TestCase\ObjectManager::getBlock
-     */
-    public function testGetBlock()
-    {
-        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var $template \Magento\Framework\View\Element\Template */
-        $template = $objectManager->getObject('Magento\Framework\View\Element\Template');
-        $this->assertInstanceOf('Magento\Framework\View\Element\Template', $template);
-        foreach ($this->_blockDependencies as $propertyName => $propertyType) {
-            $this->assertAttributeInstanceOf($propertyType, '_' . $propertyName, $template);
-        }
-
-        $area = 'frontend';
-        /** @var $appStateMock \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject */
-        $appStateMock = $this->getMock('Magento\Framework\App\State', ['getAreaCode'], [], '', false);
-        $appStateMock->expects($this->once())->method('getAreaCode')->will($this->returnValue($area));
-
-        $context = $objectManager->getObject('Magento\Framework\View\Element\Template\Context');
-        $appStateProperty = new \ReflectionProperty('Magento\Framework\View\Element\Template\Context', '_appState');
-        $appStateProperty->setAccessible(true);
-        $appStateProperty->setValue($context, $appStateMock);
-
-        /** @var $template \Magento\Framework\View\Element\Template */
-        $template = $objectManager->getObject('Magento\Framework\View\Element\Template', ['context' => $context]);
-        $this->assertEquals($area, $template->getArea());
-    }
-
-    /**
-     * @covers \Magento\TestFramework\ObjectManager::getModel
-     */
-    public function testGetModel()
-    {
-        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var $model \Magento\Framework\App\Config\ValueInterface */
-        $model = $objectManager->getObject('Magento\Framework\App\Config\Value');
-        $this->assertInstanceOf('Magento\Framework\App\Config\Value', $model);
-        foreach ($this->_modelDependencies as $propertyName => $propertyType) {
-            $this->assertAttributeInstanceOf($propertyType, '_' . $propertyName, $model);
-        }
-
-        /** @var $resourceMock \Magento\Framework\Module\Resource */
-        $resourceMock = $this->getMock(
-            'Magento\Framework\Module\Resource',
-            ['_getReadAdapter', 'getIdFieldName', '__sleep', '__wakeup'],
-            [],
-            '',
-            false
-        );
-        $resourceMock->expects($this->once())->method('_getReadAdapter')->will($this->returnValue(false));
-        $resourceMock->expects($this->any())->method('getIdFieldName')->will($this->returnValue('id'));
-        $arguments = ['resource' => $resourceMock];
-        $model = $objectManager->getObject('Magento\Framework\App\Config\Value', $arguments);
-        $this->assertFalse($model->getResource()->getDataVersion('test'));
-    }
-}
diff --git a/lib/internal/Magento/Framework/Url/ScopeResolver.php b/lib/internal/Magento/Framework/Url/ScopeResolver.php
index e53d1dd145cbcf1a7aa40261c5eb819507c8ed36..456eadcd11b8144a1b72bdfdb8339170df2a8717 100644
--- a/lib/internal/Magento/Framework/Url/ScopeResolver.php
+++ b/lib/internal/Magento/Framework/Url/ScopeResolver.php
@@ -39,7 +39,9 @@ class ScopeResolver implements \Magento\Framework\Url\ScopeResolverInterface
     {
         $scope = $this->scopeResolver->getScope($scopeId);
         if (!$scope instanceof \Magento\Framework\Url\ScopeInterface) {
-            throw new \Magento\Framework\Exception('Invalid scope object');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Invalid scope object')
+            );
         }
 
         return $scope;
diff --git a/lib/internal/Magento/Framework/Url/Test/Unit/DecoderTest.php b/lib/internal/Magento/Framework/Url/Test/Unit/DecoderTest.php
index 27b5fc97cb9e65fdf271cce8118ff9f3ff7b97d5..7799a53c57a6119df0cb9dc256ec33595e759c32 100644
--- a/lib/internal/Magento/Framework/Url/Test/Unit/DecoderTest.php
+++ b/lib/internal/Magento/Framework/Url/Test/Unit/DecoderTest.php
@@ -11,8 +11,8 @@ use \Magento\Framework\Url\Encoder;
 class DecoderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Framework\Url\Encoder::encode
-     * covers \Magento\Framework\Url\Decoder::decode
+     * @covers \Magento\Framework\Url\Encoder::encode
+     * @covers \Magento\Framework\Url\Decoder::decode
      */
     public function testDecode()
     {
diff --git a/lib/internal/Magento/Framework/Url/Test/Unit/ScopeResolverTest.php b/lib/internal/Magento/Framework/Url/Test/Unit/ScopeResolverTest.php
index 75b457c0813949a1e479504f9afe8ef44e5d5c5e..dfffc00248b5c65138014c1436906984c3effd3b 100644
--- a/lib/internal/Magento/Framework/Url/Test/Unit/ScopeResolverTest.php
+++ b/lib/internal/Magento/Framework/Url/Test/Unit/ScopeResolverTest.php
@@ -47,7 +47,7 @@ class ScopeResolverTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Invalid scope object
      */
     public function testGetScopeException()
diff --git a/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php b/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php
index 5c4e34a97356e571e99d8a1189391fb38abc75c6..5bc402bae8c4bd06e3d5c928ba06fd5605955e81 100644
--- a/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php
+++ b/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php
@@ -255,7 +255,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
      * Check XSD schema validates invalid config files
      *
      * @dataProvider getInvalidXmlFiles
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      *
      * @param array|string $configFile
      */
diff --git a/lib/internal/Magento/Framework/View/Asset/MergeStrategy/Direct.php b/lib/internal/Magento/Framework/View/Asset/MergeStrategy/Direct.php
index 8144fc1660bfbab4e41a4c80b175ebada284a84b..a7e94e698e2e45489f22bb2e31b0ee5c47f7ad60 100644
--- a/lib/internal/Magento/Framework/View/Asset/MergeStrategy/Direct.php
+++ b/lib/internal/Magento/Framework/View/Asset/MergeStrategy/Direct.php
@@ -60,7 +60,7 @@ class Direct implements \Magento\Framework\View\Asset\MergeStrategyInterface
      * @param \Magento\Framework\View\Asset\MergeableInterface[] $assetsToMerge
      * @param \Magento\Framework\View\Asset\LocalInterface $resultAsset
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     private function composeMergedContent(array $assetsToMerge, Asset\LocalInterface $resultAsset)
     {
diff --git a/lib/internal/Magento/Framework/View/Asset/Minified/AbstractAsset.php b/lib/internal/Magento/Framework/View/Asset/Minified/AbstractAsset.php
index 461ddb41c745636748484c230005b34cd64a7c8c..bbfa28664ed345a80e178071ee967ecbe281aca3 100644
--- a/lib/internal/Magento/Framework/View/Asset/Minified/AbstractAsset.php
+++ b/lib/internal/Magento/Framework/View/Asset/Minified/AbstractAsset.php
@@ -9,6 +9,7 @@ namespace Magento\Framework\View\Asset\Minified;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\View\Asset\MergeableInterface;
 use Magento\Framework\View\Asset\LocalInterface;
+use \Magento\Framework\Phrase;
 
 /**
  * Minified page asset
@@ -225,9 +226,8 @@ abstract class AbstractAsset implements MergeableInterface
                 $this->fillPropertiesByMinifyingAsset();
             } catch (\Exception $e) {
                 $this->logger->critical(
-                    new \Magento\Framework\Exception(
-                        'Could not minify file: ' . $this->originalAsset->getSourceFile(),
-                        0,
+                    new \Magento\Framework\Exception\LocalizedException(
+                        new Phrase('Could not minify file: %1', [$this->originalAsset->getSourceFile()]),
                         $e
                     )
                 );
diff --git a/lib/internal/Magento/Framework/View/Asset/MinifyService.php b/lib/internal/Magento/Framework/View/Asset/MinifyService.php
index 74a1518513ac4354ebefc67ca077d21bfdff45ff..7d5720fb4a8d618c5056106df90c30638da18efb 100644
--- a/lib/internal/Magento/Framework/View/Asset/MinifyService.php
+++ b/lib/internal/Magento/Framework/View/Asset/MinifyService.php
@@ -100,22 +100,28 @@ class MinifyService
      *
      * @param string $contentType
      * @return \Magento\Framework\Code\Minifier\AdapterInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function getAdapter($contentType)
     {
         if (!isset($this->adapters[$contentType])) {
             $adapterClass = $this->config->getAssetMinificationAdapter($contentType);
             if (!$adapterClass) {
-                throw new \Magento\Framework\Exception(
-                    "Minification adapter is not specified for '$contentType' content type"
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        "Minification adapter is not specified for '%1' content type",
+                        [$contentType]
+                    )
                 );
             }
             $adapter = $this->objectManager->get($adapterClass);
             if (!($adapter instanceof \Magento\Framework\Code\Minifier\AdapterInterface)) {
                 $type = get_class($adapter);
-                throw new \Magento\Framework\Exception(
-                    "Invalid adapter: '{$type}'. Expected: \\Magento\\Framework\\Code\\Minifier\\AdapterInterface"
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        "Invalid adapter: '%1'. Expected: \\Magento\\Framework\\Code\\Minifier\\AdapterInterface",
+                        [$type]
+                    )
                 );
             }
             $this->adapters[$contentType] = $adapter;
@@ -130,7 +136,7 @@ class MinifyService
      * @param string $strategy
      * @param bool $isDirectRequest
      * @return AssetInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function getAssetDecorated(AssetInterface $asset, $strategy, $isDirectRequest)
     {
diff --git a/lib/internal/Magento/Framework/View/Asset/Repository.php b/lib/internal/Magento/Framework/View/Asset/Repository.php
index fda21b7564074f7412b7430e9927ddef9a64e1bf..4b6801310a3758ad679dba0cefa1128d7c24e47d 100644
--- a/lib/internal/Magento/Framework/View/Asset/Repository.php
+++ b/lib/internal/Magento/Framework/View/Asset/Repository.php
@@ -346,7 +346,7 @@ class Repository
      *
      * @param string $fileId
      * @return array
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public static function extractModule($fileId)
     {
@@ -355,7 +355,9 @@ class Repository
         }
         $result = explode(self::FILE_ID_SEPARATOR, $fileId, 2);
         if (empty($result[0])) {
-            throw new \Magento\Framework\Exception('Scope separator "::" cannot be used without scope identifier.');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Scope separator "::" cannot be used without scope identifier.')
+            );
         }
         return [$result[0], $result[1]];
     }
diff --git a/lib/internal/Magento/Framework/View/Design/Theme/Domain/Factory.php b/lib/internal/Magento/Framework/View/Design/Theme/Domain/Factory.php
index f3c8a76bd2896f1677be47030204d9761beac023..7fa18b8bb0b9682ad2e919524cb622ec1a23e3d4 100644
--- a/lib/internal/Magento/Framework/View/Design/Theme/Domain/Factory.php
+++ b/lib/internal/Magento/Framework/View/Design/Theme/Domain/Factory.php
@@ -45,13 +45,13 @@ class Factory
      *
      * @param ThemeInterface $theme
      * @return mixed
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create(ThemeInterface $theme)
     {
         if (!isset($this->_types[$theme->getType()])) {
-            throw new \Magento\Framework\Exception(
-                sprintf('Invalid type of theme domain model "%s"', $theme->getType())
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Invalid type of theme domain model "%1"', [$theme->getType()])
             );
         }
         $class = $this->_types[$theme->getType()];
diff --git a/lib/internal/Magento/Framework/View/Design/Theme/Image.php b/lib/internal/Magento/Framework/View/Design/Theme/Image.php
index 5ec518abeb1c50aab01c6985baaa2795da235f4b..0101382d06c3230da510cf947483754ee52aad25 100644
--- a/lib/internal/Magento/Framework/View/Design/Theme/Image.php
+++ b/lib/internal/Magento/Framework/View/Design/Theme/Image.php
@@ -157,7 +157,7 @@ class Image
             $targetRelativePath =  $this->mediaDirectory->getRelativePath($previewDir . '/' . $destinationFileName);
             $isCopied = $this->rootDirectory->copyFile($sourceRelativePath, $targetRelativePath, $this->mediaDirectory);
             $this->theme->setPreviewImage($destinationFileName);
-        } catch (\Magento\Framework\Filesystem\FilesystemException $e) {
+        } catch (\Magento\Framework\Exception\FileSystemException $e) {
             $this->theme->setPreviewImage(null);
             $this->logger->critical($e);
         }
diff --git a/lib/internal/Magento/Framework/View/Design/Theme/Image/Uploader.php b/lib/internal/Magento/Framework/View/Design/Theme/Image/Uploader.php
index da5596876a7f1197a5e01fd5a006600186726a61..3e1a690653314e35e292d853802383b45615d817 100644
--- a/lib/internal/Magento/Framework/View/Design/Theme/Image/Uploader.php
+++ b/lib/internal/Magento/Framework/View/Design/Theme/Image/Uploader.php
@@ -61,7 +61,7 @@ class Uploader
      * @param string $scope the request key for file
      * @param string $destinationPath path to upload directory
      * @return bool
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function uploadPreviewImage($scope, $destinationPath)
     {
@@ -69,8 +69,8 @@ class Uploader
             return false;
         }
         if (!$this->_transferAdapter->isValid($scope)) {
-            throw new \Magento\Framework\Exception(
-                (string)new \Magento\Framework\Phrase('Uploaded image is not valid')
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Uploaded image is not valid')
             );
         }
         $upload = $this->_uploaderFactory->create(['fileId' => $scope]);
@@ -80,10 +80,14 @@ class Uploader
         $upload->setFilesDispersion(false);
 
         if (!$upload->checkAllowedExtension($upload->getFileExtension())) {
-            throw new \Magento\Framework\Exception((string)new \Magento\Framework\Phrase('Invalid image file type.'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Invalid image file type.')
+            );
         }
         if (!$upload->save($destinationPath)) {
-            throw new \Magento\Framework\Exception((string)new \Magento\Framework\Phrase('Image can not be saved.'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Image can not be saved.')
+            );
         }
         return $destinationPath . '/' . $upload->getUploadedFileName();
     }
diff --git a/lib/internal/Magento/Framework/View/Element/AbstractBlock.php b/lib/internal/Magento/Framework/View/Element/AbstractBlock.php
index 278e493e671b836f7296a08b9e24c246cde56de3..cf0c87c49d3a4ab8450d97e5b31af3704ff3ebdb 100644
--- a/lib/internal/Magento/Framework/View/Element/AbstractBlock.php
+++ b/lib/internal/Magento/Framework/View/Element/AbstractBlock.php
@@ -261,12 +261,14 @@ abstract class AbstractBlock extends \Magento\Framework\Object implements BlockI
      * Retrieve layout object
      *
      * @return \Magento\Framework\View\LayoutInterface
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getLayout()
     {
         if (!$this->_layout) {
-            throw new \Magento\Framework\Exception('Layout must be initialized');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Layout must be initialized')
+            );
         }
         return $this->_layout;
     }
@@ -744,7 +746,7 @@ abstract class AbstractBlock extends \Magento\Framework\Object implements BlockI
         try {
             $params = array_merge(['_secure' => $this->getRequest()->isSecure()], $params);
             return $this->_assetRepo->getUrlWithParams($fileId, $params);
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->_logger->critical($e);
             return $this->_getNotFoundUrl();
         }
diff --git a/lib/internal/Magento/Framework/View/Element/Html/Link/Current.php b/lib/internal/Magento/Framework/View/Element/Html/Link/Current.php
index 811bea3e4eb33d05aba2d29227fe34e056b345b6..7c971eaf437f13a4b301b4b210affbea20ce35d8 100644
--- a/lib/internal/Magento/Framework/View/Element/Html/Link/Current.php
+++ b/lib/internal/Magento/Framework/View/Element/Html/Link/Current.php
@@ -110,7 +110,19 @@ class Current extends \Magento\Framework\View\Element\Template
             $html .= $this->getTitle()
                 ? ' title="' . $this->escapeHtml((string)new \Magento\Framework\Phrase($this->getTitle())) . '"'
                 : '';
-            $html .= '>' . $this->escapeHtml((string)new \Magento\Framework\Phrase($this->getLabel())) . '</a></li>';
+            $html .= '>';
+
+            if ($this->getIsHighlighted()) {
+                $html .= '<strong>';
+            }
+
+            $html .= $this->escapeHtml((string)new \Magento\Framework\Phrase($this->getLabel()));
+
+            if ($this->getIsHighlighted()) {
+                $html .= '</strong>';
+            }
+
+            $html .= '</a></li>';
         }
 
         return $html;
diff --git a/lib/internal/Magento/Framework/View/Element/Html/Links.php b/lib/internal/Magento/Framework/View/Element/Html/Links.php
index d4dfc7b14942aa160bba7d9dda3dc1482cb5bd42..ffc9c297d8b219df6e1ec2ce5dc1102ac80ebe9c 100644
--- a/lib/internal/Magento/Framework/View/Element/Html/Links.php
+++ b/lib/internal/Magento/Framework/View/Element/Html/Links.php
@@ -20,6 +20,35 @@ class Links extends \Magento\Framework\View\Element\Template
         return $this->_layout->getChildBlocks($this->getNameInLayout());
     }
 
+    /**
+     * Find link by path
+     *
+     * @param string $path
+     * @return \Magento\Framework\View\Element\Html\Link
+     */
+    protected function getLinkByPath($path)
+    {
+        foreach ($this->getLinks() as $link) {
+            if ($link->getPath() == $path) {
+                return $link;
+            }
+        }
+    }
+
+    /**
+     * Set active link
+     *
+     * @param string $path
+     * @return void
+     */
+    public function setActive($path)
+    {
+        $link = $this->getLinkByPath($path);
+        if ($link) {
+            $link->setIsHighlighted(true);
+        }
+    }
+
     /**
      * Render Block
      *
diff --git a/lib/internal/Magento/Framework/View/File/Collector/Override/ThemeModular.php b/lib/internal/Magento/Framework/View/File/Collector/Override/ThemeModular.php
index 2edd72d7e9d61c8c98f854403cc66fb24311b52a..db731cdbabed60c6fa9b7d085e92966f41e0929b 100644
--- a/lib/internal/Magento/Framework/View/File/Collector/Override/ThemeModular.php
+++ b/lib/internal/Magento/Framework/View/File/Collector/Override/ThemeModular.php
@@ -12,7 +12,7 @@ use Magento\Framework\View\Design\ThemeInterface;
 use Magento\Framework\Filesystem;
 use Magento\Framework\Filesystem\Directory\ReadInterface;
 use Magento\Framework\View\File\Factory;
-use Magento\Framework\Exception;
+use Magento\Framework\Exception\LocalizedException;
 
 /**
  * Source of view files that explicitly override modular files of ancestor themes
@@ -61,7 +61,7 @@ class ThemeModular implements CollectorInterface
      * @param ThemeInterface $theme
      * @param string $filePath
      * @return array|\Magento\Framework\View\File[]
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getFiles(ThemeInterface $theme, $filePath)
     {
@@ -90,12 +90,10 @@ class ThemeModular implements CollectorInterface
             $moduleFull = $matches['module'];
             $ancestorThemeCode = $matches['themeVendor'] . '/' . $matches['themeName'];
             if (!isset($themes[$ancestorThemeCode])) {
-                throw new Exception(
-                    sprintf(
-                        "Trying to override modular view file '%s' for theme '%s', which is not ancestor of theme '%s'",
-                        $filename,
-                        $ancestorThemeCode,
-                        $theme->getCode()
+                throw new LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        "Trying to override modular view file '%1' for theme '%2', which is not ancestor of theme '%3'",
+                        [$filename, $ancestorThemeCode, $theme->getCode()]
                     )
                 );
             }
diff --git a/lib/internal/Magento/Framework/View/Layout.php b/lib/internal/Magento/Framework/View/Layout.php
index c6b2596c14f4991cbefb950fbdd9f0706170ea56..c2184cfff688e3f04e0863954a831e68b82b9ce2 100644
--- a/lib/internal/Magento/Framework/View/Layout.php
+++ b/lib/internal/Magento/Framework/View/Layout.php
@@ -480,7 +480,7 @@ class Layout extends \Magento\Framework\Simplexml\Config implements \Magento\Fra
      *
      * @param string $name
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _renderBlock($name)
     {
@@ -493,7 +493,7 @@ class Layout extends \Magento\Framework\Simplexml\Config implements \Magento\Fra
      *
      * @param string $name
      * @return string
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _renderUiComponent($name)
     {
@@ -906,12 +906,14 @@ class Layout extends \Magento\Framework\Simplexml\Config implements \Magento\Fra
      *
      * @param string $type
      * @return \Magento\Framework\App\Helper\AbstractHelper
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getBlockSingleton($type)
     {
         if (empty($type)) {
-            throw new \Magento\Framework\Exception('Invalid block type');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Invalid block type')
+            );
         }
         if (!isset($this->sharedBlocks[$type])) {
             $this->sharedBlocks[$type] = $this->createBlock($type);
diff --git a/lib/internal/Magento/Framework/View/Layout/Generator/Container.php b/lib/internal/Magento/Framework/View/Layout/Generator/Container.php
index d3fb8247a2336e374dc35a4423954e536a9b37c8..e0ebfb972ca90b4f4b84b7889374ff3e1128cecd 100644
--- a/lib/internal/Magento/Framework/View/Layout/Generator/Container.php
+++ b/lib/internal/Magento/Framework/View/Layout/Generator/Container.php
@@ -101,7 +101,7 @@ class Container implements Layout\GeneratorInterface
     /**
      * @param array $options
      * @return void
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function validateOptions($options)
     {
@@ -111,11 +111,10 @@ class Container implements Layout\GeneratorInterface
                 $this->allowedTags
             )
         ) {
-            throw new \Magento\Framework\Exception(
-                sprintf(
-                    'Html tag "%s" is forbidden for usage in containers. Consider to use one of the allowed: %s.',
-                    $options[Layout\Element::CONTAINER_OPT_HTML_TAG],
-                    implode(', ', $this->allowedTags)
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    'Html tag "%1" is forbidden for usage in containers. Consider to use one of the allowed: %2.',
+                    [$options[Layout\Element::CONTAINER_OPT_HTML_TAG], implode(', ', $this->allowedTags)]
                 )
             );
         }
@@ -126,8 +125,8 @@ class Container implements Layout\GeneratorInterface
                 || !empty($options[Layout\Element::CONTAINER_OPT_HTML_CLASS])
             )
         ) {
-            throw new \Magento\Framework\Exception(
-                'HTML ID or class will not have effect, if HTML tag is not specified.'
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('HTML ID or class will not have effect, if HTML tag is not specified.')
             );
         }
     }
diff --git a/lib/internal/Magento/Framework/View/Layout/ProcessorInterface.php b/lib/internal/Magento/Framework/View/Layout/ProcessorInterface.php
index 42105c9e90b723cf1d744a8d49ff579dfb08cfa1..f008321a24922542cbc15ae8d39607a9bc772f4d 100644
--- a/lib/internal/Magento/Framework/View/Layout/ProcessorInterface.php
+++ b/lib/internal/Magento/Framework/View/Layout/ProcessorInterface.php
@@ -93,7 +93,7 @@ interface ProcessorInterface
      * Load layout updates by handles
      *
      * @param array|string $handles
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return ProcessorInterface
      */
     public function load($handles = []);
diff --git a/lib/internal/Magento/Framework/View/Layout/Reader/Move.php b/lib/internal/Magento/Framework/View/Layout/Reader/Move.php
index d656c2d0448a9f57733d0ee2df6c534d3d9f3277..af3f01aa46e205d0ebb1ebb2d3e63f7afef8cf8a 100644
--- a/lib/internal/Magento/Framework/View/Layout/Reader/Move.php
+++ b/lib/internal/Magento/Framework/View/Layout/Reader/Move.php
@@ -43,7 +43,7 @@ class Move implements Layout\ReaderInterface
      *
      * @param \Magento\Framework\View\Layout\ScheduledStructure $scheduledStructure
      * @param \Magento\Framework\View\Layout\Element $currentElement
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return $this
      */
     protected function scheduleMove(Layout\ScheduledStructure $scheduledStructure, Layout\Element $currentElement)
@@ -58,7 +58,9 @@ class Move implements Layout\ReaderInterface
                 [$destination, $siblingName, $isAfter, $alias]
             );
         } else {
-            throw new \Magento\Framework\Exception('Element name and destination must be specified.');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Element name and destination must be specified.')
+            );
         }
         return $this;
     }
diff --git a/lib/internal/Magento/Framework/View/Model/Layout/Merge.php b/lib/internal/Magento/Framework/View/Model/Layout/Merge.php
index 6f438e29c8f21ebbc6deea8ec47416775d602aae..95c51d545c726b8ab4d7b6cb050202ed6e4686fa 100644
--- a/lib/internal/Magento/Framework/View/Model/Layout/Merge.php
+++ b/lib/internal/Magento/Framework/View/Model/Layout/Merge.php
@@ -405,7 +405,7 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
      * Load layout updates by handles
      *
      * @param array|string $handles
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return $this
      */
     public function load($handles = [])
@@ -413,7 +413,9 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
         if (is_string($handles)) {
             $handles = [$handles];
         } elseif (!is_array($handles)) {
-            throw new \Magento\Framework\Exception('Invalid layout update handle');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('Invalid layout update handle')
+            );
         }
 
         $this->addHandle($handles);
@@ -580,6 +582,8 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
      *
      * @param string $handle
      * @return string
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function getDbUpdateString($handle)
     {
@@ -666,7 +670,7 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
      * Collect and merge layout updates from files
      *
      * @return \Magento\Framework\View\Layout\Element
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _loadFileLayoutUpdatesXml()
     {
@@ -688,8 +692,11 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
                 continue;
             }
             if (!$file->isBase() && $fileXml->xpath(self::XPATH_HANDLE_DECLARATION)) {
-                throw new \Magento\Framework\Exception(
-                    sprintf("Theme layout update file '%s' must not declare page types.", $file->getFileName())
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(
+                        'Theme layout update file \'%1\' must not declare page types.',
+                        [$file->getFileName()]
+                    )
                 );
             }
             $handleName = basename($file->getFilename(), '.xml');
@@ -730,7 +737,7 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
      *
      * @param \Magento\Framework\View\Design\ThemeInterface $theme
      * @return \Magento\Theme\Model\Theme
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function _getPhysicalTheme(\Magento\Framework\View\Design\ThemeInterface $theme)
     {
@@ -739,8 +746,11 @@ class Merge implements \Magento\Framework\View\Layout\ProcessorInterface
             $result = $result->getParentTheme();
         }
         if (!$result) {
-            throw new \Magento\Framework\Exception(
-                "Unable to find a physical ancestor for a theme '{$theme->getThemeTitle()}'."
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase(
+                    'Unable to find a physical ancestor for a theme \'%1\'.',
+                    [$theme->getThemeTitle()]
+                )
             );
         }
         return $result;
diff --git a/lib/internal/Magento/Framework/View/Page/Config.php b/lib/internal/Magento/Framework/View/Page/Config.php
index 9fe5599d6a992a40cef269d645cc203413412e50..f01721a2704d401083bc98b5b86245d9d52b2e24 100644
--- a/lib/internal/Magento/Framework/View/Page/Config.php
+++ b/lib/internal/Magento/Framework/View/Page/Config.php
@@ -433,13 +433,15 @@ class Config
      * @param string $attribute
      * @param mixed $value
      * @return $this
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function setElementAttribute($elementType, $attribute, $value)
     {
         $this->build();
         if (array_search($elementType, $this->allowedTypes) === false) {
-            throw new \Magento\Framework\Exception($elementType . ' isn\'t allowed');
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase('%1 isn\'t allowed', [$elementType])
+            );
         }
         $this->elements[$elementType][$attribute] = $value;
         return $this;
diff --git a/lib/internal/Magento/Framework/View/Page/Config/Renderer.php b/lib/internal/Magento/Framework/View/Page/Config/Renderer.php
index ebfd7944a88aa054f316917dbd1da419ffdfde71..0f3b7cdf09f8d87cfc17acb8591a5e146a86bc34 100644
--- a/lib/internal/Magento/Framework/View/Page/Config/Renderer.php
+++ b/lib/internal/Magento/Framework/View/Page/Config/Renderer.php
@@ -363,7 +363,7 @@ class Renderer implements RendererInterface
             foreach ($assets as $asset) {
                 $result .= sprintf($template, $asset->getUrl());
             }
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->logger->critical($e);
             $result .= sprintf($template, $this->urlBuilder->getUrl('', ['_direct' => 'core/index/notFound']));
         }
diff --git a/lib/internal/Magento/Framework/View/Result/Page.php b/lib/internal/Magento/Framework/View/Result/Page.php
index e2f12e786c4421c20f67263c67fca8e4c1c3c2d5..2fab155de566867946cb5fff6a868c117667d5c5 100644
--- a/lib/internal/Magento/Framework/View/Result/Page.php
+++ b/lib/internal/Magento/Framework/View/Result/Page.php
@@ -328,7 +328,7 @@ class Page extends Layout
         try {
             $params = array_merge(['_secure' => $this->request->isSecure()], $params);
             return $this->assetRepo->getUrlWithParams($fileId, $params);
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->logger->critical($e);
             return $this->urlBuilder->getUrl('', ['_direct' => 'core/index/notFound']);
         }
diff --git a/lib/internal/Magento/Framework/View/Template/Html/Minifier.php b/lib/internal/Magento/Framework/View/Template/Html/Minifier.php
index 7905393ae85405e4e9ef22c62feef972dbab5dce..af80583da16e7f37c084151650869ef3f7c39c89 100644
--- a/lib/internal/Magento/Framework/View/Template/Html/Minifier.php
+++ b/lib/internal/Magento/Framework/View/Template/Html/Minifier.php
@@ -122,11 +122,11 @@ class Minifier implements MinifierInterface
                     '#(?<!' . implode('|', $this->inlineHtmlTags) . ')\> \<#',
                     '><',
                     preg_replace(
-                        '#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:textarea|pre|script|style)\b))*+)'
-                        . '(?:<(?>textarea|pre|script|style)\b|\z))#',
+                        '#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:textarea|pre|script)\b))*+)'
+                        . '(?:<(?>textarea|pre|script)\b|\z))#',
                         ' ',
                         preg_replace(
-                            '#(?<!:|\\\\)//(?!\s*\<\!\[)(?!\s*]]\>)[^\n\r]*#',
+                            '#(?<!:|\\\\|\'|")//(?!\s*\<\!\[)(?!\s*]]\>)[^\n\r]*#',
                             '',
                             preg_replace(
                                 '#(?<!:)//[^\n\r]*(\s\?\>)#',
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Asset/File/FallbackContextTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Asset/File/FallbackContextTest.php
index ae5ccf3b07522b35c46a2ce0269f8e128e0ccee7..c5eedd5cb5a4542658a2301132b7a92de568b51e 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Asset/File/FallbackContextTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Asset/File/FallbackContextTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Framework\View\Test\Unit\Asset\File;
 
 /**
- * covers \Magento\Framework\View\Asset\File\FallbackContext
+ * @covers \Magento\Framework\View\Asset\File\FallbackContext
  */
 class FallbackContextTest extends \PHPUnit_Framework_TestCase
 {
@@ -26,7 +26,7 @@ class FallbackContextTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Asset\File\FallbackContext::getConfigPath
+     * @covers \Magento\Framework\View\Asset\File\FallbackContext::getConfigPath
      * @param string $baseUrl
      * @param string $areaType
      * @param string $themePath
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Asset/MinifyServiceTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Asset/MinifyServiceTest.php
index d2d76f16bca9895f7c7f55e0eddb2df149702459..2e31f4d67733e308603855cac3dc43dd3d7e7514 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Asset/MinifyServiceTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Asset/MinifyServiceTest.php
@@ -127,7 +127,7 @@ class MinifyServiceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Minification adapter is not specified for 'js' content type
      */
     public function testGetAssetsNoAdapterDefined()
@@ -151,7 +151,7 @@ class MinifyServiceTest extends \PHPUnit_Framework_TestCase
     public function testGetAssetsInvalidAdapter()
     {
         $this->setExpectedException(
-            '\Magento\Framework\Exception',
+            '\Magento\Framework\Exception\LocalizedException',
             'Invalid adapter: \'stdClass\'. Expected: \Magento\Framework\Code\Minifier\AdapterInterface'
         );
         $asset = $this->getMockForAbstractClass('Magento\Framework\View\Asset\LocalInterface');
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Asset/RepositoryTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Asset/RepositoryTest.php
index 1ee041ddd1ec0fa01cf2afd41f67df3e87765039..60a2d297e4b5ba5a56bff218941ed1ea2fa7884c 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Asset/RepositoryTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Asset/RepositoryTest.php
@@ -309,7 +309,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Scope separator "::" cannot be used without scope identifier.
      */
     public function testExtractModuleException()
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/AbstractFileTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/AbstractFileTest.php
index 7505c2aab8c0fa62dc12d7bb976955c07168d699..95900ae331305960d53bc0c77b593d70b1142a29 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/AbstractFileTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/AbstractFileTest.php
@@ -69,8 +69,8 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::__construct
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::create
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::__construct
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::create
      */
     public function testCreate()
     {
@@ -83,7 +83,7 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::getFullPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::getFullPath
      */
     public function testGetFullPath()
     {
@@ -108,10 +108,10 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::prepareFile
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_prepareFileName
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_prepareFilePath
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_prepareSortOrder
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::prepareFile
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_prepareFileName
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_prepareFilePath
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_prepareSortOrder
      * @dataProvider getTestContent
      */
     public function testPrepareFile($type, $fileContent, $expectedContent, $existedFiles)
@@ -204,8 +204,8 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::save
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_saveFileContent
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::save
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_saveFileContent
      */
     public function testSave()
     {
@@ -248,8 +248,8 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::delete
-     * covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_deleteFileContent
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::delete
+     * @covers \Magento\Framework\View\Design\Theme\Customization\AbstractFile::_deleteFileContent
      */
     public function testDelete()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/PathTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/PathTest.php
index 6e7b020f731046de1a491a97c88d07f3bbcb4c43..f04ac911ee14d57c216a5f90fc27663daff8aa1f 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/PathTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Customization/PathTest.php
@@ -58,8 +58,8 @@ class PathTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\Path::__construct
-     * covers \Magento\Framework\View\Design\Theme\Customization\Path::getCustomizationPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization\Path::__construct
+     * @covers \Magento\Framework\View\Design\Theme\Customization\Path::getCustomizationPath
      */
     public function testGetCustomizationPath()
     {
@@ -69,7 +69,7 @@ class PathTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\Path::getThemeFilesPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization\Path::getThemeFilesPath
      */
     public function testGetThemeFilesPath()
     {
@@ -80,7 +80,7 @@ class PathTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization\Path::getCustomViewConfigPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization\Path::getCustomViewConfigPath
      */
     public function testGetCustomViewConfigPath()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php
index 928828537fd04bd594b5b5e76e3f983582c39eff..e181e2532ad0bdf3931242a9b1a3503193f0f84b 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php
@@ -77,8 +77,8 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::getFiles
-     * covers \Magento\Framework\View\Design\Theme\Customization::__construct
+     * @covers \Magento\Framework\View\Design\Theme\Customization::getFiles
+     * @covers \Magento\Framework\View\Design\Theme\Customization::__construct
      */
     public function testGetFiles()
     {
@@ -95,7 +95,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::getFilesByType
+     * @covers \Magento\Framework\View\Design\Theme\Customization::getFilesByType
      */
     public function testGetFilesByType()
     {
@@ -114,7 +114,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::generateFileInfo
+     * @covers \Magento\Framework\View\Design\Theme\Customization::generateFileInfo
      */
     public function testGenerationOfFileInfo()
     {
@@ -124,7 +124,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::getCustomizationPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization::getCustomizationPath
      */
     public function testGetCustomizationPath()
     {
@@ -141,7 +141,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::getThemeFilesPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization::getThemeFilesPath
      * @dataProvider getThemeFilesPathDataProvider
      * @param string $type
      * @param string $expectedMethod
@@ -174,7 +174,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::getCustomViewConfigPath
+     * @covers \Magento\Framework\View\Design\Theme\Customization::getCustomViewConfigPath
      */
     public function testGetCustomViewConfigPath()
     {
@@ -191,7 +191,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::reorder
+     * @covers \Magento\Framework\View\Design\Theme\Customization::reorder
      * @dataProvider customFileContent
      */
     public function testReorder($sequence, $filesContent)
@@ -267,7 +267,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Customization::delete
+     * @covers \Magento\Framework\View\Design\Theme\Customization::delete
      */
     public function testDelete()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Domain/FactoryTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Domain/FactoryTest.php
index 31285b23e88e6b10b96a697950bd29002864b6c6..3204ae36d8cf8b4ae018dbf3ab2e3616a65a61a7 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Domain/FactoryTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Domain/FactoryTest.php
@@ -12,7 +12,7 @@ namespace Magento\Framework\View\Test\Unit\Design\Theme\Domain;
 class FactoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Framework\View\Design\Theme\Domain\Factory::create
+     * @covers \Magento\Framework\View\Design\Theme\Domain\Factory::create
      */
     public function testCreate()
     {
@@ -44,7 +44,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Domain\Factory::create
+     * @covers \Magento\Framework\View\Design\Theme\Domain\Factory::create
      */
     public function testCreateWithWrongThemeType()
     {
@@ -57,7 +57,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
         $themeDomainFactory = new \Magento\Framework\View\Design\Theme\Domain\Factory($objectManager);
 
         $this->setExpectedException(
-            'Magento\Framework\Exception',
+            'Magento\Framework\Exception\LocalizedException',
             sprintf('Invalid type of theme domain model "%s"', $wrongThemeType)
         );
         $themeDomainFactory->create($themeMock);
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/FlyweightFactoryTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/FlyweightFactoryTest.php
index 8767f8092cb38da9cc268a08749c2a39b7d7235b..fc733f548a584cd402057356b423fc25dcc11f52 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/FlyweightFactoryTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/FlyweightFactoryTest.php
@@ -29,7 +29,7 @@ class FlyweightFactoryTest extends \PHPUnit_Framework_TestCase
      * @param string $path
      * @param int $expectedId
      * @dataProvider createByIdDataProvider
-     * covers \Magento\Framework\View\Design\Theme\FlyweightFactory::create
+     * @covers \Magento\Framework\View\Design\Theme\FlyweightFactory::create
      */
     public function testCreateById($path, $expectedId)
     {
@@ -63,7 +63,7 @@ class FlyweightFactoryTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\FlyweightFactory::create
+     * @covers \Magento\Framework\View\Design\Theme\FlyweightFactory::create
      */
     public function testCreateByPath()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Image/UploaderTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Image/UploaderTest.php
index 16fa864e3ecd5b380ad2d67a8e9dc7126b27bd53..603e49038c4e1609d4d9e644f08ea0ab9bb3f8fd 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Image/UploaderTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/Image/UploaderTest.php
@@ -102,7 +102,7 @@ class UploaderTest extends \PHPUnit_Framework_TestCase
                 'checkAllowedExtension' => true,
                 'save' => true,
                 'result' => false,
-                'exception' => 'Magento\Framework\Exception'
+                'exception' => 'Magento\Framework\Exception\LocalizedException'
             ],
             [
                 'isUploaded' => true,
@@ -110,7 +110,7 @@ class UploaderTest extends \PHPUnit_Framework_TestCase
                 'checkAllowedExtension' => false,
                 'save' => true,
                 'result' => false,
-                'exception' => 'Magento\Framework\Exception'
+                'exception' => 'Magento\Framework\Exception\LocalizedException'
             ],
             [
                 'isUploaded' => true,
@@ -118,14 +118,14 @@ class UploaderTest extends \PHPUnit_Framework_TestCase
                 'checkAllowedExtension' => true,
                 'save' => false,
                 'result' => false,
-                'exception' => 'Magento\Framework\Exception'
+                'exception' => 'Magento\Framework\Exception\LocalizedException'
             ]
         ];
     }
 
     /**
      * @dataProvider uploadDataProvider
-     * covers \Magento\Framework\View\Design\Theme\Image\Uploader::uploadPreviewImage
+     * @covers \Magento\Framework\View\Design\Theme\Image\Uploader::uploadPreviewImage
      */
     public function testUploadPreviewImage($isUploaded, $isValid, $checkExtension, $save, $result, $exception)
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/ImageTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/ImageTest.php
index 9eefb1c423c16711c2e4afd2212c13f7d8cf152e..998afda213463848b794085bd697c61316922afa 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/ImageTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/ImageTest.php
@@ -168,7 +168,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::__construct
+     * @covers \Magento\Framework\View\Design\Theme\Image::__construct
      */
     public function testConstructor()
     {
@@ -176,7 +176,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::createPreviewImage
+     * @covers \Magento\Framework\View\Design\Theme\Image::createPreviewImage
      */
     public function testCreatePreviewImage()
     {
@@ -195,7 +195,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::createPreviewImageCopy
+     * @covers \Magento\Framework\View\Design\Theme\Image::createPreviewImageCopy
      */
     public function testCreatePreviewImageCopy()
     {
@@ -242,7 +242,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::removePreviewImage
+     * @covers \Magento\Framework\View\Design\Theme\Image::removePreviewImage
      */
     public function testRemovePreviewImage()
     {
@@ -254,7 +254,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::removePreviewImage
+     * @covers \Magento\Framework\View\Design\Theme\Image::removePreviewImage
      */
     public function testRemoveEmptyPreviewImage()
     {
@@ -266,7 +266,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::uploadPreviewImage
+     * @covers \Magento\Framework\View\Design\Theme\Image::uploadPreviewImage
      */
     public function testUploadPreviewImage()
     {
@@ -294,7 +294,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::getPreviewImageUrl
+     * @covers \Magento\Framework\View\Design\Theme\Image::getPreviewImageUrl
      */
     public function testGetPreviewImageUrl()
     {
@@ -309,7 +309,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Design\Theme\Image::getPreviewImageUrl
+     * @covers \Magento\Framework\View\Design\Theme\Image::getPreviewImageUrl
      */
     public function testGetDefaultPreviewImageUrl()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/LinksTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/LinksTest.php
index 2b90d037cbb0ba0f18e24dda153a55fc0c55d956..8e4d84db273cbef5aa7c0a06df07a1a99222e512 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/LinksTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/LinksTest.php
@@ -5,70 +5,88 @@
  */
 namespace Magento\Framework\View\Test\Unit\Element\Html;
 
+use Magento\Framework\View\Element\Html\Links;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\View\Element\Template\Context;
+
 class LinksTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
+     * @var ObjectManager|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $_objectManagerHelper;
+    protected $objectManagerHelper;
 
-    /** @var \Magento\Framework\View\Element\Html\Links */
-    protected $_block;
+    /** @var Links|\PHPUnit_Framework_MockObject_MockObject */
+    protected $block;
 
-    /** @var \Magento\Framework\View\Element\Template\Context */
-    protected $_context;
+    /** @var Context|\PHPUnit_Framework_MockObject_MockObject */
+    protected $context;
 
     protected function setUp()
     {
-        $this->_objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-
-        /** @var  \Magento\Framework\View\Element\Template\Context $context */
-        $this->_context = $this->_objectManagerHelper->getObject('Magento\Framework\View\Element\Template\Context');
+        $this->objectManagerHelper = new ObjectManager($this);
 
-        /** @var \Magento\Framework\View\Element\Html\Links $block */
-        $this->_block = $this->_objectManagerHelper->getObject(
-            'Magento\Framework\View\Element\Html\Links',
-            ['context' => $this->_context]
-        );
+        /** @var Context $context */
+        $this->context = $this->objectManagerHelper->getObject('Magento\Framework\View\Element\Template\Context');
+        $this->block = new Links($this->context);
     }
 
     public function testGetLinks()
     {
         $blocks = [0 => 'blocks'];
         $name = 'test_name';
-        $this->_context->getLayout()->expects(
-            $this->once()
-        )->method(
-            'getChildBlocks'
-        )->with(
-            $name
-        )->will(
-            $this->returnValue($blocks)
-        );
-        $this->_block->setNameInLayout($name);
-        $this->assertEquals($blocks, $this->_block->getLinks());
+        $this->context->getLayout()
+            ->expects($this->once())
+            ->method('getChildBlocks')
+            ->with($name)
+            ->willReturn($blocks);
+        $this->block->setNameInLayout($name);
+        $this->assertEquals($blocks, $this->block->getLinks());
+    }
+
+    public function testSetActive()
+    {
+        $link = $this->getMock('Magento\Framework\View\Element\Html\Link', [], [], '', false);
+        $link
+            ->expects($this->at(1))
+            ->method('__call')
+            ->with('setIsHighlighted', [true]);
+        $link
+            ->expects($this->at(0))
+            ->method('__call')
+            ->with('getPath', [])
+            ->willReturn('test/path');
+
+        $name = 'test_name';
+        $this->context->getLayout()
+            ->expects($this->once())
+            ->method('getChildBlocks')
+            ->with($name)
+            ->willReturn([$link]);
+
+        $this->block->setNameInLayout($name);
+        $this->block->setActive('test/path');
     }
 
     public function testRenderLink()
     {
         $blockHtml = 'test';
         $name = 'test_name';
-        $this->_context->getLayout()->expects(
-            $this->once()
-        )->method(
-            'renderElement'
-        )->with(
-            $name
-        )->will(
-            $this->returnValue($blockHtml)
-        );
+        $this->context->getLayout()
+            ->expects($this->once())
+            ->method('renderElement')
+            ->with($name)
+            ->willReturn($blockHtml);
 
         /** @var \Magento\Framework\View\Element\AbstractBlock $link */
         $link = $this->getMockBuilder('Magento\Framework\View\Element\AbstractBlock')
             ->disableOriginalConstructor()
             ->getMock();
-        $link->expects($this->once())->method('getNameInLayout')->will($this->returnValue($name));
+        $link
+            ->expects($this->once())
+            ->method('getNameInLayout')
+            ->willReturn($name);
 
-        $this->assertEquals($blockHtml, $this->_block->renderLink($link));
+        $this->assertEquals($blockHtml, $this->block->renderLink($link));
     }
 }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php b/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php
index 00721963a9bedc0aec8848c62bedbb8060bbe9a5..1902c4884fe18ddfedf598125b8bf1d036160697 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php
@@ -113,7 +113,7 @@ class ThemeModularTest extends \PHPUnit_Framework_TestCase
     {
         $filePath = 'design/area/theme_path/Module_One/override/theme/vendor/parent_theme/1.xml';
         $this->setExpectedException(
-            'Magento\Framework\Exception',
+            'Magento\Framework\Exception\LocalizedException',
             "Trying to override modular view file '$filePath' for theme 'vendor/parent_theme'"
                 . ", which is not ancestor of theme 'vendor/theme_path'"
         );
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Helper/JsTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Helper/JsTest.php
index e1bd08cc6f92c4bb183083b3f85f4d1423fa7b8b..96a3a1f474e27a5ff5fde809ac65fb829fdd2e37 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Helper/JsTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Helper/JsTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\View\Test\Unit\Helper;
 class JsTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers \Magento\Framework\View\Helper\Js::getScript
+     * @covers \Magento\Framework\View\Helper\Js::getScript
      */
     public function testGetScript()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/BuilderTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/BuilderTest.php
index f2c8c6f347a6a0730f65528cdd437a32b410eb24..0c514265b3d8feedd7ad6f612554c7368029900c 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/BuilderTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/BuilderTest.php
@@ -14,14 +14,14 @@ use Magento\Framework\View\Layout\ProcessorInterface;
 
 /**
  * Class BuilderTest
- * covers \Magento\Framework\View\Layout\Builder
+ * @covers \Magento\Framework\View\Layout\Builder
  */
 class BuilderTest extends \PHPUnit_Framework_TestCase
 {
     const CLASS_NAME = 'Magento\Framework\View\Layout\Builder';
 
     /**
-     * covers \Magento\Framework\View\Layout\Builder::build()
+     * @covers \Magento\Framework\View\Layout\Builder::build()
      */
     public function testBuild()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/BlockTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/BlockTest.php
index 1f72728a7b72c2cc8167a24a8f4774809c0bb585..12a318f92beb4aef23244ef98f3353e0b8ca38a8 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/BlockTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/BlockTest.php
@@ -6,13 +6,13 @@
 namespace Magento\Framework\View\Test\Unit\Layout\Generator;
 
 /**
- * covers Magento\Framework\View\Layout\Generator\Block
+ * @covers \Magento\Framework\View\Layout\Generator\Block
  */
 class BlockTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * covers Magento\Framework\View\Layout\Generator\Block::process()
-     * covers Magento\Framework\View\Layout\Generator\Block::createBlock()
+     * @covers \Magento\Framework\View\Layout\Generator\Block::process()
+     * @covers \Magento\Framework\View\Layout\Generator\Block::createBlock()
      * @param string $testGroup
      * @param string $testTemplate
      * @param string $testTtl
@@ -26,6 +26,7 @@ class BlockTest extends \PHPUnit_Framework_TestCase
      * @dataProvider provider
      *
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function testProcess(
         $testGroup,
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/ContainerTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/ContainerTest.php
index 07f1c2aca8be0d22adeccf510f3986fee0bcea8a..547b646035cf9d7a199a9aa2851a243dd51338cc 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/ContainerTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Generator/ContainerTest.php
@@ -124,7 +124,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase
      * @param array $structureElements
      *
      * @dataProvider processWithExceptionDataProvider
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testProcessWithException($structureElements)
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php
index 0e5c9ec84d8957895337051890d256bccda9431b..86570f82f9d3cd4859e084953ce55051b3b3504a 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php
@@ -12,7 +12,7 @@ namespace Magento\Framework\View\Test\Unit\Layout\Reader;
 /**
  * Class BlockTest
  *
- * covers Magento\Framework\View\Layout\Reader\Block
+ * @covers \Magento\Framework\View\Layout\Reader\Block
  */
 class BlockTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/MoveTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/MoveTest.php
index 8d5c858b4e73af8bace4f445634f66e9b7025b25..1b3a28a7435e5c4f468135127c9f47c2639d24de 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/MoveTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/MoveTest.php
@@ -100,7 +100,7 @@ class MoveTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testProcessInvalidData()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
index 7041e93bef494104850814b7bf0e252073eeaaa3..a6198409487a37df9183ce84f46b27340c10e747 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\View\Layout;
 
 /**
  * Class HelperTest
- * covers Magento\Framework\View\Layout\ScheduledStructure\Helper
+ * @covers \Magento\Framework\View\Layout\ScheduledStructure\Helper
  */
 class HelperTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php
index 6a1a56c3d72cdcd08c45c89a305f43f55152b79b..de0509c8c6a7493cb49ddf2e40d7134cb68f5434 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php
@@ -66,7 +66,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getListToMove
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getListToMove
      */
     public function testGetListToMove()
     {
@@ -78,7 +78,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getListToRemove
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getListToRemove
      */
     public function testGetListToRemove()
     {
@@ -96,7 +96,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getElements
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElements
      */
     public function testGetElements()
     {
@@ -104,7 +104,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElement
      */
     public function testGetElement()
     {
@@ -116,7 +116,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::isElementsEmpty
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::isElementsEmpty
      */
     public function testIsElementsEmpty()
     {
@@ -126,7 +126,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::setElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElement
      */
     public function testSetElement()
     {
@@ -144,7 +144,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::hasElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasElement
      */
     public function testHasElement()
     {
@@ -153,7 +153,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElement
      */
     public function testUnsetElement()
     {
@@ -163,7 +163,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getElementToMove
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElementToMove
      */
     public function testGetElementToMove()
     {
@@ -186,7 +186,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToMove
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToMove
      */
     public function testSetElementToMove()
     {
@@ -204,7 +204,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElementFromListToRemove
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElementFromListToRemove
      */
     public function testUnsetElementFromListToRemove()
     {
@@ -214,7 +214,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToRemoveList
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToRemoveList
      */
     public function testSetElementToRemoveList()
     {
@@ -238,7 +238,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getStructure
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getStructure
      */
     public function testGetStructure()
     {
@@ -246,7 +246,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getStructureElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getStructureElement
      */
     public function testGetStructureElement()
     {
@@ -258,7 +258,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::isStructureEmpty
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::isStructureEmpty
      */
     public function testIsStructureEmpty()
     {
@@ -268,7 +268,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::hasStructureElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasStructureElement
      */
     public function testHasStructureElement()
     {
@@ -277,7 +277,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::setStructureElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setStructureElement
      */
     public function testSetStructureElement()
     {
@@ -295,7 +295,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::unsetStructureElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetStructureElement
      */
     public function testUnsetStructureElement()
     {
@@ -305,7 +305,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getPaths
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getPaths
      */
     public function testGetPaths()
     {
@@ -313,7 +313,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::getPath
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getPath
      */
     public function testGetPath()
     {
@@ -323,7 +323,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::hasPath
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasPath
      */
     public function testHasPath()
     {
@@ -332,7 +332,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::setPathElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setPathElement
      */
     public function testSetPathElement()
     {
@@ -350,7 +350,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::unsetPathElement
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetPathElement
      */
     public function testUnsetPathElement()
     {
@@ -360,7 +360,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::flushPaths
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushPaths
      */
     public function testFlushPaths()
     {
@@ -370,7 +370,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::flushScheduledStructure
+     * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushScheduledStructure
      */
     public function testFlushScheduledStructure()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/LayoutTest.php b/lib/internal/Magento/Framework/View/Test/Unit/LayoutTest.php
index cdbcf735f4286711068606a57961c29928c9260d..7679ac3d2846e2f1a06c3dada1b988e275ea5de4 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/LayoutTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/LayoutTest.php
@@ -6,7 +6,8 @@
 namespace Magento\Framework\View\Test\Unit;
 
 /**
- * Class LayoutTest
+ * @SuppressWarnings(PHPMD.TooManyFields)
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class LayoutTest extends \PHPUnit_Framework_TestCase
 {
@@ -142,9 +143,9 @@ class LayoutTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($this->readerContextMock);
         $this->generatorContextFactoryMock = $this->getMockBuilder(
-                'Magento\Framework\View\Layout\Generator\ContextFactory'
-            )->disableOriginalConstructor()
-            ->getMock();
+            'Magento\Framework\View\Layout\Generator\ContextFactory'
+        )->disableOriginalConstructor()
+        ->getMock();
 
         $this->model = new \Magento\Framework\View\Layout(
             $this->processorFactoryMock,
@@ -460,9 +461,9 @@ class LayoutTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout::setBlock
-     * covers \Magento\Framework\View\Layout::getAllBlocks
-     * covers \Magento\Framework\View\Layout::unsetElement
+     * @covers \Magento\Framework\View\Layout::setBlock
+     * @covers \Magento\Framework\View\Layout::getAllBlocks
+     * @covers \Magento\Framework\View\Layout::unsetElement
      */
     public function testSetGetBlock()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php
index b2f6f82a775feffb903cd352711d677a1a16327d..281bb8ac0519d7f345fbe8d264cb0834a9ca4f40 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/MergeTest.php
@@ -12,7 +12,9 @@ class MergeTest extends \PHPUnit_Framework_TestCase
     /**
      * Fixture XML instruction(s) to be used in tests
      */
+    // @codingStandardsIgnoreStart
     const FIXTURE_LAYOUT_XML = '<block class="Magento\Framework\View\Element\Template" template="fixture_template_one.phtml"/>';
+    // @codingStandardsIgnoreEnd
 
     /**
      * @var \Magento\Framework\View\Model\Layout\Merge
@@ -291,7 +293,10 @@ class MergeTest extends \PHPUnit_Framework_TestCase
         $handles = ['fixture_handle_one'];
         $this->_model->load($handles);
         $this->assertEquals($handles, $this->_model->getHandles());
-        $this->assertXmlStringEqualsXmlString('<body>' . self::FIXTURE_LAYOUT_XML . '</body>', $this->_model->asString());
+        $this->assertXmlStringEqualsXmlString(
+            '<body>' . self::FIXTURE_LAYOUT_XML . '</body>',
+            $this->_model->asString()
+        );
     }
 
     public function testGetFileLayoutUpdatesXml()
@@ -378,7 +383,7 @@ class MergeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException        \Magento\Framework\Exception
+     * @expectedException        \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Invalid layout update handle
      */
     public function testLoadWithInvalidArgumentThrowsException()
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/TranslatorTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/TranslatorTest.php
index 16636dfab46a73e6888f87ddbbd101b771eece1e..6dfb6cd3f6e16c6097cc12dc5764fe016d48bbfd 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/TranslatorTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Model/Layout/TranslatorTest.php
@@ -51,7 +51,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
      */
     public function testTranslateActionParametersWithNonTranslatedArgument()
     {
@@ -62,7 +62,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
      */
     public function testTranslateActionParametersWithTranslatedArgument()
     {
@@ -74,7 +74,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
      */
     public function testTranslateActionParametersWithHierarchyTranslatedArgumentAndNonStringParam()
     {
@@ -86,7 +86,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateActionParameters
      */
     public function testTranslateActionParametersWithoutModule()
     {
@@ -98,7 +98,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
      */
     public function testTranslateArgumentWithDefaultModuleAndSelfTranslatedMode()
     {
@@ -107,7 +107,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
      */
     public function testTranslateArgumentWithoutModuleAndNoSelfTranslatedMode()
     {
@@ -116,7 +116,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
      */
     public function testTranslateArgumentViaParentNodeWithParentModule()
     {
@@ -125,7 +125,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
      */
     public function testTranslateArgumentViaParentNodeWithOwnModule()
     {
@@ -134,7 +134,7 @@ XML;
     }
 
     /**
-     * covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
+     * @covers \Magento\Framework\View\Model\Layout\Translator::translateArgument
      */
     public function testTranslateArgumentViaParentWithNodeThatIsNotInTranslateList()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Page/BuilderTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Page/BuilderTest.php
index 721ef79e9fce1d870eb29f4382116595946ae7dc..6316c9e0036cfe133bbc4bb5ad88f3b497599a0a 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Page/BuilderTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Page/BuilderTest.php
@@ -10,7 +10,7 @@ use Magento\Framework;
 
 /**
  * Class BuilderTest
- * covers \Magento\Framework\View\Page\Builder
+ * @covers \Magento\Framework\View\Page\Builder
  */
 class BuilderTest extends \Magento\Framework\View\Test\Unit\Layout\BuilderTest
 {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Page/Config/RendererTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Page/Config/RendererTest.php
index e407988f77df31cddaa18ff21d82c26401b4f078..2917b75f726441b8b1b9f1e0e643c02ea19f3f12 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Page/Config/RendererTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Page/Config/RendererTest.php
@@ -264,7 +264,7 @@ class RendererTest extends \PHPUnit_Framework_TestCase
         $assetUrl = 'url';
         $assetNoRoutUrl = 'no_route_url';
 
-        $exception = new \Magento\Framework\Exception('my message');
+        $exception = new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase('my message'));
 
         $assetMockOne = $this->getMock('Magento\Framework\View\Asset\AssetInterface');
         $assetMockOne->expects($this->exactly(2))
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Page/ConfigTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Page/ConfigTest.php
index 403522b7aa4dceb8546b9377a664a90c4814e3fb..ae61cf0509216bda474b126185b0cfcb112afa37 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Page/ConfigTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Page/ConfigTest.php
@@ -360,7 +360,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
      */
     public function testElementAttributeException($elementType, $attribute, $value)
     {
-        $this->setExpectedException('\Magento\Framework\Exception', $elementType . " isn't allowed");
+        $this->setExpectedException('\Magento\Framework\Exception\LocalizedException', $elementType . " isn't allowed");
         $this->model->setElementAttribute($elementType, $attribute, $value);
     }
 
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Result/LayoutTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Result/LayoutTest.php
index faf0d388a9b2b3319656e1fc18a22d19061e88e5..de680b4301330f645c1323e9009106a136b0c146 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Result/LayoutTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Result/LayoutTest.php
@@ -10,7 +10,7 @@ namespace Magento\Framework\View\Test\Unit\Result;
 
 /**
  * Class LayoutTest
- * covers \Magento\Framework\View\Result\Layout
+ * @covers \Magento\Framework\View\Result\Layout
  */
 class LayoutTest extends \PHPUnit_Framework_TestCase
 {
@@ -59,7 +59,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Result\Layout::getLayout()
+     * @covers \Magento\Framework\View\Result\Layout::getLayout()
      */
     public function testGetLayout()
     {
diff --git a/lib/internal/Magento/Framework/Webapi/ErrorProcessor.php b/lib/internal/Magento/Framework/Webapi/ErrorProcessor.php
index 06b78b7c35cd5edcad9fd870d6b2c9fb89a9a14a..75b9df3174ca200c7e735d713f97b1aca45e0c9b 100644
--- a/lib/internal/Magento/Framework/Webapi/ErrorProcessor.php
+++ b/lib/internal/Magento/Framework/Webapi/ErrorProcessor.php
@@ -100,7 +100,9 @@ class ErrorProcessor
         $isDevMode = $this->_appState->getMode() === State::MODE_DEVELOPER;
         $stackTrace = $isDevMode ? $exception->getTraceAsString() : null;
 
-        if ($exception instanceof LocalizedException) {
+        if ($exception instanceof WebapiException) {
+            $maskedException = $exception;
+        } elseif ($exception instanceof LocalizedException) {
             // Map HTTP codes for LocalizedExceptions according to exception type
             if ($exception instanceof NoSuchEntityException) {
                 $httpCode = WebapiException::HTTP_NOT_FOUND;
@@ -120,7 +122,7 @@ class ErrorProcessor
             }
 
             $maskedException = new WebapiException(
-                $exception->getRawMessage(),
+                new Phrase($exception->getRawMessage()),
                 $exception->getCode(),
                 $httpCode,
                 $exception->getParameters(),
@@ -128,8 +130,6 @@ class ErrorProcessor
                 $errors,
                 $stackTrace
             );
-        } elseif ($exception instanceof WebapiException) {
-            $maskedException = $exception;
         } else {
             $message = $exception->getMessage();
             $code = $exception->getCode();
@@ -141,7 +141,7 @@ class ErrorProcessor
                 $code = 0;
             }
             $maskedException = new WebapiException(
-                $message,
+                new Phrase($message),
                 $code,
                 WebapiException::HTTP_INTERNAL_ERROR,
                 [],
diff --git a/lib/internal/Magento/Framework/Webapi/Exception.php b/lib/internal/Magento/Framework/Webapi/Exception.php
index b5b46c0e562bcf5aaebc986c7ecc7164380f93e7..208202fb0c5883504224885b010534ac1cccb3f5 100644
--- a/lib/internal/Magento/Framework/Webapi/Exception.php
+++ b/lib/internal/Magento/Framework/Webapi/Exception.php
@@ -8,8 +8,10 @@
 namespace Magento\Framework\Webapi;
 
 use Magento\Framework\Exception\ErrorMessage;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Phrase;
 
-class Exception extends \RuntimeException
+class Exception extends LocalizedException
 {
     /**#@+
      * Error HTTP response codes.
@@ -74,7 +76,7 @@ class Exception extends \RuntimeException
     /**
      * Initialize exception with HTTP code.
      *
-     * @param string $message
+     * @param \Magento\Framework\Phrase $phrase
      * @param int $code Error code
      * @param int $httpCode
      * @param array $details Additional exception details
@@ -85,7 +87,7 @@ class Exception extends \RuntimeException
      * @throws \InvalidArgumentException
      */
     public function __construct(
-        $message,
+        Phrase $phrase,
         $code = 0,
         $httpCode = self::HTTP_BAD_REQUEST,
         array $details = [],
@@ -97,7 +99,8 @@ class Exception extends \RuntimeException
         if ($httpCode < 400 || $httpCode > 599) {
             throw new \InvalidArgumentException(sprintf('The specified HTTP code "%d" is invalid.', $httpCode));
         }
-        parent::__construct($message, $code);
+        parent::__construct($phrase);
+        $this->code = $code;
         $this->_httpCode = $httpCode;
         $this->_details = $details;
         $this->_name = $name;
diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php
index 34f3936ce563c3b399eb280640bb532025ba507b..ba0091bc725a7e94f6073f2ea2fb21bbac36ca6d 100644
--- a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php
+++ b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php
@@ -52,10 +52,10 @@ class Json implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterfa
                 throw new \Magento\Framework\Webapi\Exception(new Phrase('Decoding error.'));
             } else {
                 throw new \Magento\Framework\Webapi\Exception(
-                    (string)(new Phrase(
+                    new Phrase(
                         'Decoding error: %1%2%3%4',
                         [PHP_EOL, $e->getMessage(), PHP_EOL, $e->getTraceAsString()]
-                    ))
+                    )
                 );
             }
         }
diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Xml.php b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Xml.php
index 3fe5eb8c0dd143010fa561452862cdc7746889e9..35c2c95a4d52dbad707009c902f95fd158bc19dc 100644
--- a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Xml.php
+++ b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Xml.php
@@ -66,7 +66,7 @@ class Xml implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterfac
             if ($this->_appState->getMode() !== State::MODE_DEVELOPER) {
                 $exceptionMessage = new Phrase('Decoding error.');
             } else {
-                $exceptionMessage = 'Decoding Error: ' . $this->_errorMessage;
+                $exceptionMessage = new Phrase('Decoding Error: %1', [$this->_errorMessage]);
             }
             throw new \Magento\Framework\Webapi\Exception($exceptionMessage);
         }
@@ -87,7 +87,7 @@ class Xml implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterfac
      */
     public function handleErrors($errorNumber, $errorMessage, $errorFile, $errorLine)
     {
-        if (is_null($this->_errorMessage)) {
+        if ($this->_errorMessage === null) {
             $this->_errorMessage = $errorMessage;
         } else {
             $this->_errorMessage .= $errorMessage;
diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Request/DeserializerFactory.php b/lib/internal/Magento/Framework/Webapi/Rest/Request/DeserializerFactory.php
index 2d3b3e57561cde5b57fbadd1cc2a1406ff60e74d..d901cda77240e3aba1668db5b6d15e0d57f158ca 100644
--- a/lib/internal/Magento/Framework/Webapi/Rest/Request/DeserializerFactory.php
+++ b/lib/internal/Magento/Framework/Webapi/Rest/Request/DeserializerFactory.php
@@ -7,6 +7,8 @@
  */
 namespace Magento\Framework\Webapi\Rest\Request;
 
+use Magento\Framework\Phrase;
+
 class DeserializerFactory
 {
     /**
@@ -53,7 +55,7 @@ class DeserializerFactory
 
         if (!isset($deserializerClass) || empty($deserializerClass)) {
             throw new \Magento\Framework\Webapi\Exception(
-                'Server cannot understand Content-Type HTTP header media type ' . $contentType
+                new Phrase('Server cannot understand Content-Type HTTP header media type %1', [$contentType])
             );
         }
 
diff --git a/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php b/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php
index 75d2a77d1cbd91cb954174264f64c699099f1c2b..df6496e33e57ba62e571b2e938d05befe23d40f9 100644
--- a/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php
+++ b/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php
@@ -9,7 +9,6 @@ namespace Magento\Framework\Webapi;
 
 use Magento\Framework\Api\AttributeValueFactory;
 use Magento\Framework\Api\AttributeValue;
-use Magento\Framework\Api\Config\Reader as ServiceConfigReader;
 use Magento\Framework\Api\SimpleDataObjectConverter;
 use Magento\Framework\App\Cache\Type\Webapi as WebapiCache;
 use Magento\Framework\Exception\InputException;
@@ -256,7 +255,7 @@ class ServiceInputProcessor
             try {
                 $result = $this->typeProcessor->processSimpleAndAnyType($value, $type);
             } catch (SerializationException $e) {
-                throw new WebapiException($e->getMessage());
+                throw new WebapiException(new Phrase($e->getMessage()));
             }
         } else {
             /** Complex type or array of complex types */
diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/ResponseTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/ResponseTest.php
index 2ca021aad47386081f62c9c52fad53a3ce5f59c3..b98ebe0c941b9bc63973aabd1971f7f477281a08 100644
--- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/ResponseTest.php
+++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/ResponseTest.php
@@ -7,6 +7,8 @@
  */
 namespace Magento\Framework\Webapi\Test\Unit\Rest;
 
+use Magento\Framework\Phrase;
+
 class ResponseTest extends \PHPUnit_Framework_TestCase
 {
     /** @var \Magento\Framework\Webapi\Rest\Response */
@@ -61,7 +63,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
     {
         /** Init \Magento\Framework\Webapi\Exception */
         $apiException = new \Magento\Framework\Webapi\Exception(
-            'Exception message.',
+            new Phrase('Exception message.'),
             0,
             \Magento\Framework\Webapi\Exception::HTTP_UNAUTHORIZED
         );
@@ -98,7 +100,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
             \Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR
         );
         /** Set exception to Rest response to get in to the _renderMessages method. */
-        $this->responseRest->setException(new \Magento\Framework\Webapi\Exception('Message.'));
+        $this->responseRest->setException(new \Magento\Framework\Webapi\Exception(new Phrase('Message.')));
         $this->responseRest->sendResponse();
     }
 
@@ -108,7 +110,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
     public function testSendResponseRenderMessagesHttpNotAcceptable()
     {
         $exception = new \Magento\Framework\Webapi\Exception(
-            'Message',
+            new Phrase('Message'),
             0,
             \Magento\Framework\Webapi\Exception::HTTP_NOT_ACCEPTABLE
         );
@@ -132,7 +134,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
         /** Set exception to Rest response to get in to the _renderMessages method. */
         $this->responseRest->setException(
             new \Magento\Framework\Webapi\Exception(
-                'Message.',
+                new Phrase('Message.'),
                 0,
                 \Magento\Framework\Webapi\Exception::HTTP_BAD_REQUEST
             )
@@ -162,7 +164,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
         );
         $exceptionMessage = 'Message';
         $exceptionHttpCode = \Magento\Framework\Webapi\Exception::HTTP_BAD_REQUEST;
-        $exception = new \Magento\Framework\Webapi\Exception($exceptionMessage, 0, $exceptionHttpCode);
+        $exception = new \Magento\Framework\Webapi\Exception(new Phrase($exceptionMessage), 0, $exceptionHttpCode);
         $this->errorProcessorMock->expects(
             $this->any()
         )->method(
diff --git a/lib/internal/Magento/Framework/Xml/Parser.php b/lib/internal/Magento/Framework/Xml/Parser.php
index 02c762922afb447497dc935f649a783a024150d9..08d82718d6b0c3f05f1b48775022fcf2903fb5a7 100644
--- a/lib/internal/Magento/Framework/Xml/Parser.php
+++ b/lib/internal/Magento/Framework/Xml/Parser.php
@@ -5,8 +5,6 @@
  */
 namespace Magento\Framework\Xml;
 
-use \Magento\Framework\Exception;
-
 class Parser
 {
     /**
@@ -149,6 +147,7 @@ class Parser
     /**
      * @param string $string
      * @return $this
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function loadXML($string)
     {
@@ -158,9 +157,12 @@ class Parser
 
         try {
             $this->getDom()->loadXML($string);
-        } catch (\Magento\Framework\Exception $e) {
+        } catch (\Magento\Framework\Exception\LocalizedException $e) {
             restore_error_handler();
-            throw new \Magento\Framework\Exception($e->getMessage(), $e->getCode(), $e);
+            throw new \Magento\Framework\Exception\LocalizedException(
+                new \Magento\Framework\Phrase($e->getMessage()),
+                $e
+            );
         }
 
         if ($this->errorHandlerIsActive) {
@@ -177,14 +179,14 @@ class Parser
      * @param string $errorStr
      * @param string $errorFile
      * @param int $errorLine
-     * @throws \Magento\Framework\Exception
+     * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
     public function errorHandler($errorNo, $errorStr, $errorFile, $errorLine)
     {
         if ($errorNo != 0) {
             $message = "{$errorStr} in {$errorFile} on line {$errorLine}";
-            throw new \Magento\Framework\Exception($message);
+            throw new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase($message));
         }
     }
 }
diff --git a/lib/internal/Magento/Framework/Xml/Test/Unit/ParserTest.php b/lib/internal/Magento/Framework/Xml/Test/Unit/ParserTest.php
index aeddfa9afbad0344bef7c5b19b94cad095305287..ed966cb8abfa2daadf6c883db60b7935e3caf766 100644
--- a/lib/internal/Magento/Framework/Xml/Test/Unit/ParserTest.php
+++ b/lib/internal/Magento/Framework/Xml/Test/Unit/ParserTest.php
@@ -33,7 +33,7 @@ class ParserTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Framework\Exception
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage DOMDocument::loadXML(): Opening and ending tag mismatch
      */
     public function testLoadXmlInvalid()
diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json
index 2650b2405cc313c4360d2b0f95e373c2bbf3e240..6584da302fbcc5cb180a9921b029beda1a41049b 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.42.0-beta11",
+    "version": "0.74.0-beta2",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/lib/web/css/source/lib/_navigation.less b/lib/web/css/source/lib/_navigation.less
index d56bd79f32c59e9ef806be17b8acaddd2d013288..6cf85b4ba0474fb65c4b07309445e12d85a5263f 100644
--- a/lib/web/css/source/lib/_navigation.less
+++ b/lib/web/css/source/lib/_navigation.less
@@ -8,6 +8,7 @@
 //  _____________________________________________
 
 .main-navigation(
+    @_nav__indent-side: 15px,
     @_nav-background-color: @navigation__background,
     @_nav-border: @navigation__border,
     @_nav-level0-font-size: @navigation-level0-item__font-size,
@@ -23,16 +24,21 @@
     @_nav-level0-item-text-decoration: @navigation-level0-item__text-decoration,
 
     @_nav-level0-item-background-color-active: @navigation-level0-item__active__background,
-    @_nav-level0-item-border-active: @navigation-level0-item__active__border,
+    @_nav-level0-item__active__border-color: @navigation-level0-item__active__border-color,
+    @_nav-level0-item__active__border-style: @navigation-level0-item__active__border-style,
+    @_nav-level0-item__active__border-width: @navigation-level0-item__active__border-width,
     @_nav-level0-item-color-active: @navigation-level0-item__active__color,
     @_nav-level0-item-text-decoration-active: @navigation-level0-item__active__text-decoration,
 
     @_submenu-background-color: @submenu__background,
     @_submenu-border: @submenu__border,
-    @_submenu-padding: @submenu__padding,
     @_submenu-font-size: @submenu__font-size,
     @_submenu-font-weight: @submenu__font-weight,
-    @_submenu-item-padding: @submenu-item__padding,
+    @_submenu-line-height: @submenu-item__line-height,
+    @_submenu-item__padding-top: @submenu__padding-top,
+    @_submenu-item__padding-right: @submenu__padding-right,
+    @_submenu-item__padding-bottom: @submenu__padding-bottom,
+    @_submenu-item__padding-left: @submenu__padding-left,
 
     @_submenu-item-background-color: @submenu-item__background,
     @_submenu-item-border: @submenu-item__border,
@@ -40,7 +46,10 @@
     @_submenu-item-text-decoration: @submenu-item__text-decoration,
 
     @_submenu-item-background-color-active: @submenu-item__active__background,
-    @_submenu-item-border-active: @submenu-item__active__border,
+    @_submenu-item__active__border: @submenu-item__active__border,
+    @_submenu-item__active__border-color: @submenu-item__active__border-color,
+    @_submenu-item__active__border-style: @submenu-item__active__border-style,
+    @_submenu-item__active__border-width: @submenu-item__active__border-width,
     @_submenu-item-color-active: @submenu-item__active__color,
     @_submenu-item-text-decoration-active: @submenu-item__active__text-decoration
 ) {
@@ -52,6 +61,16 @@
             margin: 0;
             padding: 0;
         }
+        li {
+            margin: 0;
+        }
+        a {
+            display: block;
+            .css(padding-top, @_submenu-item__padding-top);
+            .css(padding-right, @_submenu-item__padding-right);
+            .css(padding-bottom, @_submenu-item__padding-bottom);
+            .css(padding-left, @_submenu-item__padding-left);
+        }
         a,
         a:hover {
             .css(color, @_nav-level0-item-color);
@@ -60,22 +79,47 @@
         .level0 {
             .font-size(@_nav-level0-font-size);
             .css(border-top, @_nav-level0-item-border);
-            margin: 0;
             > .level-top {
                 .css(background, @_nav-level0-item-background-color);
                 .css(font-weight, @_nav-level0-font-weight);
                 .css(line-height, @_nav-level0-item-line-height);
                 .css(padding, @_nav-level0-item-padding);
                 .css(text-transform, @_nav-level0-text-transform);
-                display: block;
                 word-break: break-all;
             }
-            &.active > a {
-                .css(background, @_nav-level0-item-background-color-active);
-                .css(border, @_nav-level0-item-border-active);
-                .css(color, @_nav-level0-item-color-active);
-                .css(text-decoration, @_nav-level0-item-text-decoration-active);
+            &.active {
+                .all-category {
+                    .ui-state-focus {
+                        .css(background, @_nav-level0-item-background-color-active);
+                        .css(border-color, @_nav-level0-item__active__border-color);
+                        .css(border-style, @_nav-level0-item__active__border-style);
+                        .css(border-width, @_nav-level0-item__active__border-width);
+                        .css(color, @_nav-level0-item-color-active);
+                        .css(padding-left, @_nav__indent-side - @_submenu-item__active__border);
+                        .css(text-decoration, @_nav-level0-item-text-decoration-active);
+                        display: inline-block;
+                    }
+                }
+            }
+            > .level1 {
+                font-weight: @font-weight__semibold;
             }
+            &.active,
+            &.has-active { // ToDo UI: remove "has_active" here, when mobile navigation default open state is implemented
+                > a:not(.ui-state-active) {
+                    .css(background, @_nav-level0-item-background-color-active);
+                    .css(border-color, @_nav-level0-item__active__border-color);
+                    .css(border-style, @_nav-level0-item__active__border-style);
+                    .css(border-width, @_nav-level0-item__active__border-width);
+                    .css(color, @_nav-level0-item-color-active);
+                    .css(text-decoration, @_nav-level0-item-text-decoration-active);
+                    span:not(.ui-menu-icon) {
+                        margin-left: -@_submenu-item__active__border;
+                    }
+                }
+            }
+        }
+        li.level0 {
             &:last-child {
                 .css(border-bottom, @_nav-level0-item-border);
             }
@@ -89,25 +133,33 @@
                 .css(border, @_submenu-border);
                 .css(font-size, @_submenu-font-size);
                 .css(font-weight, @_submenu-font-weight);
+                .css(line-height, @_submenu-line-height);
+                left: auto !important;
                 overflow-x: hidden;
+                padding: 0;
                 position: relative;
-                transition: left .3s ease-out 0;
                 top: auto !important;
-                left: auto !important;
-                padding: 10px 20px;
-                > ul {
+                transition: left .3s ease-out;
+                > li {
+                    > a {
+                        padding-left: @_nav__indent-side;
+                    }
+                    &:last-child {
+                        margin-bottom: 0;
+                    }
+                }
+                ul {
                     display: block;
-                    .css(padding, @_submenu-padding);
+                    .css(padding-left, @_submenu-item__padding-left);
                     > li {
                         margin: 0;
                         a {
                             .css(background, @_submenu-item-background-color);
                             .css(border, @_submenu-item-border);
                             .css(color, @_submenu-item-color);
-                            .css(text-decoration, @_submenu-item-text-decoration);
                             display: block;
                             line-height: normal;
-                            .css(padding, @_submenu-item-padding);
+                            .css(text-decoration, @_submenu-item-text-decoration);
                         }
                     }
                 }
@@ -116,11 +168,23 @@
                     top: 0 !important;
                     padding-right: 0;
                 }
-                .active > a {
-                    .css(background, @_submenu-item-background-color-active);
-                    .css(border, @_submenu-item-border-active);
-                    .css(color, @_submenu-item-color-active);
-                    .css(text-decoration, @_submenu-item-text-decoration-active);
+                .active {
+                    > a {
+                        .css(background, @_submenu-item-background-color-active);
+                        .css(border-color, @_submenu-item__active__border-color);
+                        .css(border-style, @_submenu-item__active__border-style);
+                        .css(border-width, @_submenu-item__active__border-width);
+                        .css(color, @_submenu-item-color-active);
+                        .css(padding-left, @_nav__indent-side - @_submenu-item__active__border);
+                        .css(text-decoration, @_submenu-item-text-decoration-active);
+                    }
+                }
+                .level1 {
+                    &.active {
+                        > a {
+                            padding-left: @_nav__indent-side - @_submenu-item__active__border;
+                        }
+                    }
                 }
             }
         }
@@ -152,7 +216,9 @@
     @_nav-level0-item-text-decoration-hover: @navigation-desktop-level0-item__hover__text-decoration,
 
     @_nav-level0-item-background-color-active: @navigation-desktop-level0-item__active__background,
-    @_nav-level0-item-border-active: @navigation-desktop-level0-item__active__border,
+    @_nav-level0-item__active__border-color: @navigation-desktop-level0-item__active__border-color,
+    @_nav-level0-item__active__border-style: @navigation-desktop-level0-item__active__border-style,
+    @_nav-level0-item__active__border-width: @navigation-desktop-level0-item__active__border-width,
     @_nav-level0-item-color-active: @navigation-desktop-level0-item__active__color,
     @_nav-level0-item-text-decoration-active: @navigation-desktop-level0-item__active__text-decoration,
 
@@ -182,7 +248,9 @@
     @_submenu-item-text-decoration-hover: @submenu-desktop-item__hover__text-decoration,
 
     @_submenu-item-background-color-active: @submenu-desktop-item__active__background,
-    @_submenu-item-border-active: @submenu-desktop-item__active__border,
+    @_submenu-item__active__border-color: @submenu-desktop-item__active__border-color,
+    @_submenu-item__active__border-style: @submenu-desktop-item__active__border-style,
+    @_submenu-item__active__border-width: @submenu-desktop-item__active__border-width,
     @_submenu-item-color-active: @submenu-desktop-item__active__color,
     @_submenu-item-text-decoration-active: @submenu-desktop-item__active__text-decoration
 ) {
@@ -237,12 +305,16 @@
                     .css(text-decoration, @_nav-level0-item-text-decoration-hover);
                 }
             }
-            &.active {
+            &.active,
+            &.has-active {
                 > .level-top {
                     .css(background, @_nav-level0-item-background-color-active);
-                    .css(border, @_nav-level0-item-border-active);
+                    .css(border-color, @_nav-level0-item__active__border-color);
+                    .css(border-style, @_nav-level0-item__active__border-style);
+                    .css(border-width, @_nav-level0-item__active__border-width);
                     .css(color, @_nav-level0-item-color-active);
                     .css(text-decoration, @_nav-level0-item-text-decoration-active);
+                    display: inline-block;
                 }
             }
             &.parent:hover > .submenu {
@@ -288,7 +360,9 @@
                 }
                 .active > a {
                     .css(background, @_submenu-item-background-color-active);
-                    .css(border, @_submenu-item-border-active);
+                    .css(border-color, @_submenu-item__active__border-color);
+                    .css(border-style, @_submenu-item__active__border-style);
+                    .css(border-width, @_submenu-item__active__border-width);
                     .css(color, @_submenu-item-color-active);
                     .css(text-decoration, @_submenu-item-text-decoration-active);
                 }
@@ -365,7 +439,7 @@
         .css(margin-top, -@_size);
         > ul {
             .css(margin-top, @_size);
-            &:before{
+            &:before {
                 .css(color, @_bg);
                 content: '';
                 display: block;
@@ -382,7 +456,7 @@
         .css(margin-top, -@_size);
         > ul {
             .css(margin-top, @_size);
-            &:before{
+            &:before {
                 .css(color, @_border);
                 content: '';
                 display: block;
diff --git a/lib/web/css/source/lib/_resets.less b/lib/web/css/source/lib/_resets.less
index 30259fea3e72ce09b8c2eb8e27aa4727dae5c0e5..ca7398be9b9857089c0adabf4a84d11156095623 100644
--- a/lib/web/css/source/lib/_resets.less
+++ b/lib/web/css/source/lib/_resets.less
@@ -97,7 +97,7 @@
         }
     }
 
-    .keyfocus *,
+    ._keyfocus *,
     input:not([disabled]),
     textarea:not([disabled]),
     select:not([disabled]) {
@@ -111,6 +111,7 @@
 //  Normalize
 //  ---------------------------------------------
 
+//  ToDo UI: delete with old admin styles
 .normalize() {
     /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
     html {
diff --git a/lib/web/css/source/lib/variables/_colors.less b/lib/web/css/source/lib/variables/_colors.less
index 603a465151215b6ad4b766484de0edba7c25479f..95374e5802e6db799efd9467872db5928d19fbec 100644
--- a/lib/web/css/source/lib/variables/_colors.less
+++ b/lib/web/css/source/lib/variables/_colors.less
@@ -33,6 +33,7 @@
 @color-gray94: #f0f0f0;
 @color-gray95: #f2f2f2;
 @color-white-smoke: #f5f5f5;
+@color-white-dark-smoke: #efefef;
 @color-white-fog: #f8f8f8;
 
 @color-gray-light0: #f6f6f6;
diff --git a/lib/web/css/source/lib/variables/_icons.less b/lib/web/css/source/lib/variables/_icons.less
index 5b6cd989881c157bbe033fcd70e4cddda47ecfa4..443228833b6d87e93c4030cac230ad50f2c55ad6 100644
--- a/lib/web/css/source/lib/variables/_icons.less
+++ b/lib/web/css/source/lib/variables/_icons.less
@@ -33,6 +33,8 @@
 @icon-font__vertical-align: @icon__vertical-align;
 @icon-font__display: inline-block;
 
+@icon-calendar__font-size: 40px;
+
 //
 //  Variables for icons-blank-theme
 //  ---------------------------------------------
diff --git a/lib/web/css/source/lib/variables/_navigation.less b/lib/web/css/source/lib/variables/_navigation.less
index eb1840348a47677eabd5fd15fb314e0bb2e8c766..73d1ad71cb3e4e69fe9f26a6553e8cae1e77bab8 100644
--- a/lib/web/css/source/lib/variables/_navigation.less
+++ b/lib/web/css/source/lib/variables/_navigation.less
@@ -14,7 +14,7 @@
 @navigation-level0-item__font-weight: @font-weight__bold;
 @navigation-level0-item__line-height: false;
 @navigation-level0-item__margin: 0;
-@navigation-level0-item__padding: 8px @indent__xl 8px @indent__base;
+@navigation-level0-item__padding: 8px @indent__xl 8px 15px;
 @navigation-level0-item__text-transform: uppercase;
 
 @navigation-level0-item__background: '';
@@ -23,24 +23,32 @@
 @navigation-level0-item__text-decoration: none;
 
 @navigation-level0-item__active__background: '';
-@navigation-level0-item__active__border: '';
+@navigation-level0-item__active__border-color: @color-orange-red1;
+@navigation-level0-item__active__border-style: solid;
+@navigation-level0-item__active__border-width: 0 0 0 8px;
 @navigation-level0-item__active__color: '';
 @navigation-level0-item__active__text-decoration: '';
 
 @submenu__background: '';
 @submenu__border: '';
-@submenu__padding: 0 0 0 @indent__base;
+@submenu__padding-top: @indent__s;
+@submenu__padding-right: 0;
+@submenu__padding-bottom: @indent__s;
+@submenu__padding-left: 15px;
 @submenu__font-size: '';
 @submenu__font-weight: @font-weight__regular;
+@submenu-item__line-height: 1.3;
 
-@submenu-item__padding: 8px 0;
 @submenu-item__background: '';
 @submenu-item__border: '';
 @submenu-item__color: @color-gray34;
 @submenu-item__text-decoration: '';
 
 @submenu-item__active__background: '';
-@submenu-item__active__border: '';
+@submenu-item__active__border: 8px;
+@submenu-item__active__border-color: @color-orange-red1;
+@submenu-item__active__border-style: solid;
+@submenu-item__active__border-width: 0 0 0 @submenu-item__active__border;
 @submenu-item__active__color: '';
 @submenu-item__active__text-decoration: '';
 
@@ -68,7 +76,9 @@
 @navigation-desktop-level0-item__hover__text-decoration: @navigation-desktop-level0-item__text-decoration;
 
 @navigation-desktop-level0-item__active__background: '';
-@navigation-desktop-level0-item__active__border: '';
+@navigation-desktop-level0-item__active__border-color: @color-orange-red1;
+@navigation-desktop-level0-item__active__border-style: solid;
+@navigation-desktop-level0-item__active__border-width: 0 0 3px;
 @navigation-desktop-level0-item__active__color: @navigation-desktop-level0-item__hover__color;
 @navigation-desktop-level0-item__active__text-decoration: @navigation-desktop-level0-item__text-decoration;
 
@@ -98,6 +108,8 @@
 @submenu-desktop-item__hover__text-decoration: @navigation-desktop-level0-item__text-decoration;
 
 @submenu-desktop-item__active__background: '';
-@submenu-desktop-item__active__border: '';
+@submenu-desktop-item__active__border-color: @color-orange-red1;
+@submenu-desktop-item__active__border-style: solid;
+@submenu-desktop-item__active__border-width: 0 0 0 3px;
 @submenu-desktop-item__active__color: '';
 @submenu-desktop-item__active__text-decoration: '';
diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index 1a4b96a8b6b1af4959c44947f882fe0c55c33a11..354e7e4381d1d4f89540566d8cb81b0eef3825d9 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -73,6 +73,8 @@ define([
 
                     var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35;
                     jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
+
+                    jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                 },
                 close: function(event, ui) {
                     jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
@@ -393,6 +395,8 @@ define([
 
                     var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() - 30;
                     jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
+
+                    jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                 },
                 close: function(event, ui) {
                     jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
diff --git a/lib/web/mage/backend/notification.js b/lib/web/mage/backend/notification.js
index eb688214155efc8314dabc25cba88f44bfd839e8..7232e0310cddd185b88cbf5128cbf2502ba0172a 100644
--- a/lib/web/mage/backend/notification.js
+++ b/lib/web/mage/backend/notification.js
@@ -13,7 +13,7 @@ define([
     $.widget('mage.notification', {
         options: {
             templates: {
-                global: '<div class="messages"><div class="message <%- if (data.error) { %>error<% } %>"><div><%- data.message %></div></div></div>'
+                global: '<div class="messages"><div class="message <% if (data.error) { %>error<% } %>"><div><%- data.message %></div></div></div>'
             }
         },
 
diff --git a/lib/web/mage/backend/suggest.js b/lib/web/mage/backend/suggest.js
index 70dd802284562e8d43d54be0e28b5d38f7e27ac2..dfb3ef72d8c4d8424c949ea44dfba20b3a8f01be 100644
--- a/lib/web/mage/backend/suggest.js
+++ b/lib/web/mage/backend/suggest.js
@@ -811,15 +811,19 @@
          * @private
          */
         _renderMultiselect: function () {
+            var that = this;
             this.element.wrap(this.options.multiSuggestWrapper);
             this.elementWrapper = this.element.closest('[data-role="parent-choice-element"]');
-            this._getOptions().each($.proxy(function (i, option) {
-                option = $(option);
-                this._createOption({
-                    id: option.val(),
-                    label: option.text()
-                });
-            }, this));
+            $(function () {
+                that._getOptions()
+                    .each(function (i, option) {
+                        option = $(option);
+                        that._createOption({
+                            id: option.val(),
+                            label: option.text()
+                        });
+                    });
+            });
         },
 
         /**
diff --git a/lib/web/mage/backend/tabs.js b/lib/web/mage/backend/tabs.js
index a6965aa35e3539047605c1f9af55b76517bf0948..68187d0aed04d5f6a8047a687e89ef2e78889ee4 100644
--- a/lib/web/mage/backend/tabs.js
+++ b/lib/web/mage/backend/tabs.js
@@ -20,7 +20,9 @@
     $.widget('mage.tabs', $.ui.tabs, {
         options: {
             spinner: false,
-            groups: null
+            groups: null,
+            tabPanelClass: '',
+            excludedPanel: ''
         },
 
         /**
@@ -179,6 +181,9 @@
                     "aria-labelledby": anchorId
                 });
                 panel.attr("aria-labelledby", anchorId);
+                if (that.options.excludedPanel.indexOf(anchorId+'_content') < 0) {
+                    panel.addClass(that.options.tabPanelClass);
+                };
             });
 
             this.panels
@@ -278,7 +283,33 @@
          * @param {Object} e - event object
          */
         _onContentChange: function(e) {
-            this.anchors.eq(e.data.index).addClass('changed');
+            var cssChanged = '_changed';
+
+            this.anchors.eq(e.data.index).addClass(cssChanged);
+            this._updateNavTitleMessages(e,cssChanged);
+        },
+
+        /**
+         * Clone messages (tooltips) from anchor to parent element
+         * @protected
+         * @param {Object} e - event object
+         * @param {string} messageType - changed or error
+         */
+        _updateNavTitleMessages: function(e, messageType) {
+            var curAnchor = this.anchors.eq(e.data.index),
+                curItem = curAnchor.parents('[data-role="container"]').find('[data-role="title"]'),
+                curItemMessages = curItem.find('[data-role="title-messages"]'),
+                curItemMessage,
+                activeClass = "_active";
+
+            if ((curItemMessages).is(":empty")) {
+                curAnchor
+                    .find('[data-role="item-messages"]')
+                    .clone()
+                    .appendTo(curItemMessages);
+            }
+
+            curItemMessage = curItemMessages.find('.' + messageType).addClass(activeClass);
         },
 
         /**
@@ -287,7 +318,10 @@
          * @protected
          */
         _onInvalid: function(e) {
-            this.anchors.eq(e.data.index).addClass('error').find('.error').show();
+            var cssError = '_error';
+
+            this.anchors.eq(e.data.index).addClass(cssError).find('.' + cssError).show();
+            this._updateNavTitleMessages(e, cssError);
         },
 
         /**
@@ -296,7 +330,7 @@
          * @protected
          */
         _onFocus: function(e) {
-            this.option("active", e.data.index);
+            this.option("_active", e.data.index);
         },
 
         /**
diff --git a/lib/web/mage/calendar.js b/lib/web/mage/calendar.js
index e445e62e05929be9f648a9e3f53092bf3917c4ac..faa11353c33a47872131e64013ce3ed759aa9899 100644
--- a/lib/web/mage/calendar.js
+++ b/lib/web/mage/calendar.js
@@ -86,9 +86,14 @@
          * @param {Element}
          */
         _initPicker: function(element) {
-            element[this._picker()](this.options)
-                .next('.ui-datepicker-trigger')
-                .addClass('v-middle');
+            var picker = element[this._picker()](this.options),
+                pickerButtonText = picker.next('.ui-datepicker-trigger')
+                                          .find('img')
+                                          .attr('title');
+            picker.next('.ui-datepicker-trigger')
+                  .addClass('v-middle')
+                  .text('') // Remove jQuery UI datepicker generated image
+                  .append('<span>' + pickerButtonText + '</span>');
             this._setCurrentDate(element);
         },
 
diff --git a/lib/web/mage/loader.js b/lib/web/mage/loader.js
index b9443094f07201bda215e498f1706ba348a31629..a4bfc58b7859edd2cff3c200bd37a67733fc32c7 100644
--- a/lib/web/mage/loader.js
+++ b/lib/web/mage/loader.js
@@ -203,7 +203,7 @@ define([
             // ARIA support
             if (ariaSelected.length) {
                 ariaSelected.first().focus();
-                $(this.options.defaultContainer).addClass('keyfocus');
+                $(this.options.defaultContainer).addClass('_keyfocus');
             }
 
             if (settings && settings.showLoader) {
diff --git a/lib/web/mage/smart-keyboard-handler.js b/lib/web/mage/smart-keyboard-handler.js
index 2a62f855a3276d3c5b5ad54b0b145f67a5930870..55730e8106f4510be72e4d707ce02407a1ee4fda 100644
--- a/lib/web/mage/smart-keyboard-handler.js
+++ b/lib/web/mage/smart-keyboard-handler.js
@@ -10,7 +10,7 @@ define([
     function KeyboardHandler() {
         var body = $('body'),
             focusState = false,
-            tabFocusClass = 'keyfocus',
+            tabFocusClass = '_keyfocus',
             productsGrid = '[data-container="product-grid"]',
             catalogProductsGrid = $(productsGrid),
             CODE_TAB = 9;
diff --git a/lib/web/mage/translate-inline.js b/lib/web/mage/translate-inline.js
index aba0eec057cf38fd7391fbb0be33ecd29155c8da..ee7f68acd45c6acd31434bce9720c92bb578a7d0 100644
--- a/lib/web/mage/translate-inline.js
+++ b/lib/web/mage/translate-inline.js
@@ -31,25 +31,38 @@
             autoOpen : false,
             translateArea: null,
             modal: true,
-            dialogClass: "dialog",
-            width: 650,
+            dialogClass: 'popup-window',
+            width: '75%',
             title: $.mage.__('Translate'),
             height: 470,
-            zIndex: 2100,
+            position: {
+                my: 'left top',
+                at: 'center top',
+                of: 'body'
+            },
             buttons: [{
                 text: $.mage.__('Submit'),
-                'class': 'form-button button',
+                'class': 'action-primary',
                 click: function(e) {
                     $(this).translateInline('submit');
                 }
             },
             {
                 text: $.mage.__('Close'),
-                'class': 'form-button button',
+                'class': 'action-close',
                 click: function() {
                     $(this).translateInline('close');
                 }
-            }]
+            }],
+            open: function () {
+                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+
+                var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45;
+                jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
+            },
+            close: function () {
+                $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+            }
         },
         /**
          * Translate Inline creation
diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js
index 7632ce9b84977587975da37348f383f39395c89e..fbcf394becd3215ce0484cbefb6ddb585879c73c 100644
--- a/lib/web/mage/validation.js
+++ b/lib/web/mage/validation.js
@@ -916,10 +916,10 @@
             'This is a required field.'
         ],
         "validate-one-required-by-name": [
-            function(v, elm) {
+            function(v, elm, selector) {
                 var name        = elm.name.replace(/([\\"])/g, '\\$1'),
                     container   = this.currentForm,
-                    selector    = 'input[name="' + name + '"]:checked';
+                    selector    = selector === true ? 'input[name="' + name + '"]:checked' : selector;
                 
                 return !!container.querySelectorAll(selector).length;
             },
diff --git a/nginx.conf.sample b/nginx.conf.sample
index 1ea8ee9e97f28f40107edb14b4fe53e66589b40a..2ea2b6ce5848867deae4c3c6287234706039e57f 100644
--- a/nginx.conf.sample
+++ b/nginx.conf.sample
@@ -127,6 +127,7 @@ location / {
     }
 
     location ~ (index|get|static|report|404|503)\.php$ {
+        expires -1;
         fastcgi_pass   fastcgi_backend;
 
         fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
diff --git a/package.json b/package.json
index 12ffc19d59651831c958e793c61e221f076988c0..eaee4e18e2484b09731ec9a8e2a165eef83ae29c 100644
--- a/package.json
+++ b/package.json
@@ -9,11 +9,11 @@
   },
   "homepage": "http://magento.com/",
   "devDependencies": {
-    "connect": "^3.3.3",
     "grunt": "^0.4.5",
     "grunt-autoprefixer": "^2.0.0",
     "grunt-banner": "^0.3.1",
     "grunt-contrib-clean": "^0.6.0",
+    "grunt-contrib-connect": "^0.9.0",
     "grunt-contrib-cssmin": "^0.10.0",
     "grunt-contrib-imagemin": "^0.9.2",
     "grunt-contrib-jasmine": "^0.8.1",
@@ -28,6 +28,7 @@
     "morgan": "^1.5.0",
     "node-minify": "^1.0.1",
     "serve-static": "^1.7.1",
+    "strip-json-comments": "^1.0.2",
     "time-grunt": "^1.0.0",
     "underscore": "^1.7.0"
   },
diff --git a/pub/.htaccess b/pub/.htaccess
index b3f9b82f3723b106829e136d1609134ed4fdc196..7cac070b85bf7b33c187cfcefd3bf6e8e456306b 100755
--- a/pub/.htaccess
+++ b/pub/.htaccess
@@ -1,3 +1,8 @@
+############################################
+## uncomment the line below to enable developer mode
+
+#   SetEnv MAGE_MODE developer
+
 ############################################
 ## uncomment these lines for CGI mode
 ## make sure to specify the correct cgi php binary file name
@@ -153,6 +158,8 @@
 ## http://developer.yahoo.com/performance/rules.html#expires
 
     ExpiresDefault "access plus 1 year"
+    ExpiresByType text/html A0
+    ExpiresByType text/plain A0
 
 </IfModule>
 
diff --git a/setup/pub/styles/setup.css b/setup/pub/styles/setup.css
index 41b113a55c90f4be925712eee65124bb3200d537..ebe7d360aa51a5727093b1b86326a529a7fc3c07 100644
--- a/setup/pub/styles/setup.css
+++ b/setup/pub/styles/setup.css
@@ -3,4 +3,4 @@
  * See COPYING.txt for license details.
  */
 
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:focus{box-shadow:none;outline:0}.keyfocus :focus{box-shadow:0 0 0 1px #008bdb}embed,img,object,video{max-width:100%}.abs-clearer:after,.form-row:after,.header:after,.nav:after,.row:after{content:"";display:table;clear:both}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/light/opensans-300.eot);src:url(../../pub/fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../../pub/fonts/opensans/light/opensans-300.woff) format('woff'),url(../../pub/fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../../pub/fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/regular/opensans-400.eot);src:url(../../pub/fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../../pub/fonts/opensans/regular/opensans-400.woff) format('woff'),url(../../pub/fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../../pub/fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/semibold/opensans-600.eot);src:url(../../pub/fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../../pub/fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../../pub/fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../../pub/fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/bold/opensans-700.eot);src:url(../../pub/fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../../pub/fonts/opensans/bold/opensans-700.woff) format('woff'),url(../../pub/fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../../pub/fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:400;line-height:1.4}h1,h2,h3,h4,h5,h6{font-weight:400;margin-top:0}p{margin:0 0 1em}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}@font-face{font-family:Icons;src:url(../../pub/fonts/icons/icons.eot);src:url(../../pub/fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/icons/icons.woff2) format('woff2'),url(../../pub/fonts/icons/icons.woff) format('woff'),url(../../pub/fonts/icons/icons.ttf) format('truetype'),url(../../pub/fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}[class*=icon-]:after{font-family:Icons}.icon-success-thick:after{content:'\e600'}.icon-success:after{content:'\e601'}.icon-collapse:after{content:'\e602'}.icon-failed-thick:after{content:'\e603'}.icon-failed:after{content:'\e604'}.icon-expand:after{content:'\e605'}.icon-warning:after{content:'\e606'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.8em;left:0;position:absolute;right:0;top:.15em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e600'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e603'}dl,ol,ul{margin-top:0}.list{margin-bottom:1em;padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before{font-family:Icons;font-size:1.6em;left:-.1em;position:absolute;top:-.2em}.list-item-success:before{color:#79a22e;content:'\e601'}.list-item-failed:before{color:#e22626;content:'\e604'}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .5em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:-webkit-linear-gradient(left,color-stop(#e04f00 0),color-stop(#f65405 100%));background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:-webkit-linear-gradient(left,color-stop(#f65405 0),color-stop(#e04f00 100%));background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1)}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active{background-color:#574e48}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary.disabled:hover,.ie9 .btn-secondary[disabled]:active,.ie9 .btn-secondary[disabled]:hover{background-color:#514943;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;border-radius:2px;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{transition:opacity .2s linear;cursor:pointer}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e602'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e605';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{border-color:#adadad;border-radius:2px;height:1.4rem;line-height:1;width:1.4rem}.form-el-checkbox:checked+.form-label::before{content:'\e600';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.6rem;width:1.6rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;border-radius:2px;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;border-radius:2px;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.4235em .6655em .605em}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}.pseudo-table{display:table}.pseudo-td{display:table-cell}.messages{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:14px;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.message{margin-bottom:3rem}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0 2rem}.row{margin-left:0;margin-right:0}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:0;padding-right:0;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:-webkit-linear-gradient(top,#d1d1d1 0,#d4d4d4 100%);background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:.8rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after{display:none}.nav-bar>li.active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a{color:#000}.nav-bar>li.active a:hover{cursor:default}.nav-bar>li.active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:.7rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:.7rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.1rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.1rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}@-moz-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@-ms-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;-moz-animation-delay:.27s;-ms-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-moz-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;-moz-animation-delay:.36s;-ms-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;-moz-animation-delay:.45s;-ms-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-moz-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;-moz-animation-delay:.54s;-ms-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;-moz-animation-delay:.63s;-ms-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;-moz-animation-delay:.72s;-ms-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;-moz-animation-delay:.81s;-ms-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;-moz-animation-delay:.9;-ms-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}.spinner>span{-webkit-animation-direction:linear;-moz-animation-direction:linear;-ms-animation-direction:linear;animation-direction:linear;-webkit-animation-duration:.72s;-moz-animation-duration:.72s;-ms-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:fade;-moz-animation-name:fade;-ms-animation-name:fade;animation-name:fade;-webkit-transform:scale(0.4);-moz-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../../pub/images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;margin:2.5rem 0 3.5rem 5rem}.page-title{font-size:2rem;margin-bottom:1.3em}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit{margin-bottom:20px}.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.rediness-check-item{margin-bottom:4rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:7.5rem}.readiness-check-content{margin-left:7.5rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.rediness-check-side{float:right;padding-left:2.4rem;width:22rem}.rediness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:2rem;margin-top:.7rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;margin:1rem 0 2rem;max-height:20rem;overflow-y:auto;padding:1.5rem 2rem 2rem}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}@media all and (max-width:1047px){.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}}@media all and (min-width:768px){html{margin-left:calc(100vw - 100%);margin-right:0;overflow:auto}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
\ No newline at end of file
+html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}:after,:before{box-sizing:content-box}.abs-clearer:after,.form-row:after,.header:after,.nav:after,.row:after{content:"";display:table;clear:both}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/light/opensans-300.eot);src:url(../../pub/fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../../pub/fonts/opensans/light/opensans-300.woff) format('woff'),url(../../pub/fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../../pub/fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/regular/opensans-400.eot);src:url(../../pub/fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../../pub/fonts/opensans/regular/opensans-400.woff) format('woff'),url(../../pub/fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../../pub/fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/semibold/opensans-600.eot);src:url(../../pub/fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../../pub/fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../../pub/fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../../pub/fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../../pub/fonts/opensans/bold/opensans-700.eot);src:url(../../pub/fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../../pub/fonts/opensans/bold/opensans-700.woff) format('woff'),url(../../pub/fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../../pub/fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:400;line-height:1.4}h1,h2,h3,h4,h5,h6{font-weight:400;margin-top:0}p{margin:0 0 1em}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}@font-face{font-family:Icons;src:url(../../pub/fonts/icons/icons.eot);src:url(../../pub/fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../../pub/fonts/icons/icons.woff2) format('woff2'),url(../../pub/fonts/icons/icons.woff) format('woff'),url(../../pub/fonts/icons/icons.ttf) format('truetype'),url(../../pub/fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}[class*=icon-]:after{font-family:Icons}.icon-success-thick:after{content:'\e600'}.icon-success:after{content:'\e601'}.icon-collapse:after{content:'\e602'}.icon-failed-thick:after{content:'\e603'}.icon-failed:after{content:'\e604'}.icon-expand:after{content:'\e605'}.icon-warning:after{content:'\e606'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.8em;left:0;position:absolute;right:0;top:.15em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e600'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e603'}dl,ol,ul{margin-top:0}.list{margin-bottom:1em;padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before{font-family:Icons;font-size:1.6em;left:-.1em;position:absolute;top:-.2em}.list-item-success:before{color:#79a22e;content:'\e601'}.list-item-failed:before{color:#e22626;content:'\e604'}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .5em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1)}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active{background-color:#574e48}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary.disabled:hover,.ie9 .btn-secondary[disabled]:active,.ie9 .btn-secondary[disabled]:hover{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;border-radius:2px;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{transition:opacity .2s linear;cursor:pointer}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e602'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e605';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{border-color:#adadad;border-radius:2px;height:1.4rem;line-height:1;width:1.4rem}.form-el-checkbox:checked+.form-label::before{content:'\e600';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.6rem;width:1.6rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;border-radius:2px;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;border-radius:2px;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.4235em .6655em .605em}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}.pseudo-table{display:table}.pseudo-td{display:table-cell}.messages{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:14px;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.message{margin-bottom:3rem}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0 2rem}.row{margin-left:0;margin-right:0}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:0;padding-right:0;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:.8rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after{display:none}.nav-bar>li.active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a{color:#000}.nav-bar>li.active a:hover{cursor:default}.nav-bar>li.active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:.7rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:.7rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.1rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.1rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@-ms-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;-ms-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;-ms-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;-ms-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;-ms-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;-ms-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;-ms-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;-ms-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;-ms-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}.spinner>span{-webkit-animation-direction:linear;-ms-animation-direction:linear;animation-direction:linear;-webkit-animation-duration:.72s;-ms-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:fade;-ms-animation-name:fade;animation-name:fade;-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../../pub/images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;margin:2.5rem 0 3.5rem 5rem}.page-title{font-size:2rem;margin-bottom:1.3em}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit{margin-bottom:20px}.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.rediness-check-item{margin-bottom:4rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:7.5rem}.readiness-check-content{margin-left:7.5rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.rediness-check-side{float:right;padding-left:2.4rem;width:22rem}.rediness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:2rem;margin-top:.7rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;margin:1rem 0 2rem;max-height:20rem;overflow-y:auto;padding:1.5rem 2rem 2rem}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}@media all and (max-width:1047px){.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}}@media all and (min-width:768px){.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
\ No newline at end of file
diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index 8b93843046fb95d46f2abc1558a43f586fac0e47..066c58d914c86617da39fb79d720f74fb5902835 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -103,7 +103,7 @@ class Environment extends AbstractActionController
             'responseType' => $responseType,
             'data' => [
                 'version' => PHP_VERSION,
-                'ini' => ini_get('always_populate_raw_post_data')
+                'ini' => $iniSetting
             ]
         ];
 
diff --git a/setup/view/styles/lib/_reset.less b/setup/view/styles/lib/_reset.less
index e03b4d03d845a1e08fe390d16c8a78ac638ca83e..b392591ab95eb6661246639b2fa7e156c2f00633 100644
--- a/setup/view/styles/lib/_reset.less
+++ b/setup/view/styles/lib/_reset.less
@@ -3,33 +3,12 @@
 //  * See COPYING.txt for license details.
 //  */
 
-.normalize();
+//  Old reset support
+//  ToDo UI: Should be refactored
 
 * {
-    box-sizing: border-box;
-    &:focus {
-        box-shadow: none;
-        outline: 0;
-    }
-}
-
-.keyfocus * {
-    &:focus {
-        box-shadow: @focus__box-shadow;
-    }
-}
-
-img,
-video,
-embed,
-object {
-    max-width: 100%;
-}
-
-.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
-    html {
-        margin-left: ~'calc(100vw - 100%)';
-        margin-right: 0;
-        overflow: auto;
+    &:before,
+    &:after {
+        box-sizing: content-box;
     }
 }
diff --git a/setup/view/styles/setup.less b/setup/view/styles/setup.less
index db6d9a38cf13ba565c956cd25a79d4ad7bcb3662..7c2c2f5c355cd8070a7b953c53ecfc55a0a5ec85 100644
--- a/setup/view/styles/setup.less
+++ b/setup/view/styles/setup.less
@@ -15,9 +15,10 @@
 //  Local lib
 //  _____________________________________________
 
+@import '../../../app/design/adminhtml/Magento/backend/web/css/source/_reset.less';
+@import 'lib/_reset.less';
 @import 'lib/_variables.less';
 @import 'lib/_utilities.less';
-@import 'lib/_reset.less';
 @import 'lib/_extends.less';
 @import 'lib/_classes.less';
 @import 'lib/_typography.less';
@@ -27,7 +28,7 @@
 @import 'lib/_forms.less';
 @import 'lib/_pseudo-tables.less';
 
-@import '../../../app/design/adminhtml/Magento/backend/web/css/source/_messages.less';
+@import '../../../app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less';
 @import 'lib/_messages.less';
 
 @import 'lib/_structures.less';