diff --git a/CHANGELOG.md b/CHANGELOG.md
index a1d98332be0d5c39a997f7ce570933320e08c8e4..741aa9d1d7ce46126f5ca3c664d13540b84ec30c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,59 @@
+0.74.0-beta15
+=============
+* Framework Improvements:
+  * Introduced Drag&Drop Columns functionality in scope of Enhanced Data Grids on CMS 
+  * Improved Column Actions functionality in scope of Enhanced Data Grids on CMS
+  * Adapted Payment\Gateway framework to client requirements
+  * Removed 'field_expr' option from filters
+  * Added product details renderer list support on Catalog category page
+  * Security: Clickjacking solution - introduced X-Frame-Options
+  * Gift message was moved to shopping cart
+  * Improved simple products export
+  * Separated import of advanced prices
+  * Changed 'updated_at' filter for products export
+  * Added the link with sample product import file
+  * Cleared and improved the  messages and names in different modules
+  * Added mbstring extension as a requirement
+* Tests
+  * Increased test coverage for the CatalogInventory, Email and Newsletter modules
+  * Added wait to form element before filling a value in functional tests
+  * Increased test coverage of Reports module
+  * Functional tests were fixed and maintained
+* Fixed Bugs:
+  * Fixed loading of images from database media storage with separate connection
+  * Eliminated duplication of ComposerInformation class in Magento Framework and Setup Application
+  * Fixed an error message format inconsistency in theme uninstall command
+  * Fixed an issue where incorrect action name checks led to customer info leak
+  * Fixed an issue where /magento_version exposed too detailed version information
+  * Fixed an issue where generate data failed when table prefix exceeded length of 5
+  * Fixed an issue where product options were displayed not styled on "Edit Product from Wishlist" Frontend page
+  * Fixed an issue where payment information was displayed broken on "Order Management" Backend page forms
+  * Fixed an issue where admin panel pop-ups contained lots of empty space
+  * Fixed an issue where Customer account form was displayed broken
+  * Fixed an issue where all text fields were invisible in Backend "Add New Customer" page
+  * Fixed XSS issues in Magento - wishlist sending
+  * Fixed an issue where it was unable to specify all values of "Multiple Select" Product Custom Option to purchase
+  * Fixed an issue where setting a permission for 'ALL Groups' produced an error if other permissions existed
+  * Fixed an issue where stock was not updated when Stock indexer was in Update on Schedule mode
+  * Fixed an issue where it was not possible to update stock items of product using API service
+  * Fixed an issue where Customer review changes in backend were not reflected in frontend until cache was cleared
+  * Fixed an issue where cache was not updated when changing stock status using mass action
+  * Fixed an issue where Stock Items API service to return low stock information did not return correct results
+  * Fixed an issue where found records in global search in Backend could not be selected via keyboard
+  * Fixed an issue where Category menu items went out of screen when page side was reached
+  * Fixed an issue where subcategories in menu were shown instantly when user moved mouse quickly
+  * Fixed an issue where popup header was our of window range while creating group product
+  * Fixed an issue where region field was absent in customer address form on backend for "United Kingdom" country
+  * Fixed an ability to edit the Order from Admin panel
+  * Fixed an issue where email could not be retrieved from \Magento\Quote\Api\Data\AddressInterface after adding an address on OnePageCheckout
+  * Fixed an issue where Products were not displayed correctly across all storeviews of the catalog
+* Github Issues:
+  * [#1378](https://github.com/magento/magento2/issues/1319) -- jquery-cookie.js is not published by deploy tool in production mode
+  * [#1314](https://github.com/magento/magento2/pull/1314)-- Fixed a bug where type attribute for tag button was missing
+  * [#1354](https://github.com/magento/magento2/pull/1354) -- Add gitter.im badge to ReadMe.
+  * [#1378](https://github.com/magento/magento2/pull/1378) -- Fix incorrect js filename
+
+
 0.74.0-beta14
 =============
 * Framework improvements:
diff --git a/README.md b/README.md
index 286d550ef93cad1b69a526ecebed4ee3e5d17cb3..eda495863d05bee57e91dd9818a1a50ff82c7cd7 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
 [![Build Status](https://travis-ci.org/magento/magento2.svg?branch=master)](https://travis-ci.org/magento/magento2)
+[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/magento/magento2?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 <h2>Welcome</h2>
 Welcome to Magento 2 installation! We're glad you chose to install Magento 2, a cutting edge, feature-rich eCommerce solution that gets results.
 
diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json
index 5ae1d3e4e2009835a572a2c9081ee74619532b51..536437a77046f9446799fcd13337f0927cf059b9 100644
--- a/app/code/Magento/AdminNotification/composer.json
+++ b/app/code/Magento/AdminNotification/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json
index 3e7abff2e19eca58d7d762c6f90932188af3aef6..3ad468649799034d1276c2dd8c87a9c9542ff9f3 100644
--- a/app/code/Magento/AdvancedPricingImportExport/composer.json
+++ b/app/code/Magento/AdvancedPricingImportExport/composer.json
@@ -3,16 +3,16 @@
   "description": "N/A",
   "require": {
     "php": "~5.5.0|~5.6.0",
-    "magento/module-catalog": "0.74.0-beta14",
-    "magento/module-import-export": "0.74.0-beta14",
-    "magento/module-catalog-import-export": "0.74.0-beta14",
-    "magento/module-customer": "0.74.0-beta14",
-    "magento/module-store": "0.74.0-beta14",
-    "magento/framework": "0.74.0-beta14",
+    "magento/module-catalog": "0.74.0-beta15",
+    "magento/module-import-export": "0.74.0-beta15",
+    "magento/module-catalog-import-export": "0.74.0-beta15",
+    "magento/module-customer": "0.74.0-beta15",
+    "magento/module-store": "0.74.0-beta15",
+    "magento/framework": "0.74.0-beta15",
     "magento/magento-composer-installer": "*"
   },
   "type": "magento2-module",
-  "version": "0.74.0-beta14",
+  "version": "0.74.0-beta15",
   "license": [
     "OSL-3.0",
     "AFL-3.0"
diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json
index 9ce77947a0b214ceb0d0dd04c9e35f6e6c602ca2..34cf062da744cabb74763d6dd4e1cb4f51b0b31c 100644
--- a/app/code/Magento/Authorization/composer.json
+++ b/app/code/Magento/Authorization/composer.json
@@ -3,12 +3,12 @@
     "description": "Authorization module provides access to Magento ACL functionality.",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json
index b2b20216cf652a430d51f44492332e150011cd7d..736b6f9d688812f7cf6c76641c7048cb22aef09d 100644
--- a/app/code/Magento/Backend/composer.json
+++ b/app/code/Magento/Backend/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-developer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-cron": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-reports": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-user": "0.74.0-beta14",
-        "magento/module-backup": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-translation": "0.74.0-beta14",
-        "magento/module-require-js": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-developer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-cron": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-reports": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-user": "0.74.0-beta15",
+        "magento/module-backup": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-translation": "0.74.0-beta15",
+        "magento/module-require-js": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json
index 74b0a704e1de9374392c01a64e69b075fc416fde..22b5fa7ad13e30501fefd432dbd6abd7092b861a 100644
--- a/app/code/Magento/Backup/composer.json
+++ b/app/code/Magento/Backup/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-cron": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-cron": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json
index f3017a3a8dda032fb32a79cff12622d3cb601bc2..278203616826ca7b643d26a4b18b30befb0b8f2a 100644
--- a/app/code/Magento/Bundle/composer.json
+++ b/app/code/Magento/Bundle/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-catalog-rule": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-gift-message": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-catalog-rule": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-gift-message": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-webapi": "0.74.0-beta14"
+        "magento/module-webapi": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/BundleImportExport/composer.json b/app/code/Magento/BundleImportExport/composer.json
index 78b23b0ff876b31caff7359c35e625ee986e6100..73005bc01aa19c301e06089b742c2fc94838136d 100755
--- a/app/code/Magento/BundleImportExport/composer.json
+++ b/app/code/Magento/BundleImportExport/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/module-catalog-import-export": "0.74.0-beta14",
-        "magento/module-bundle": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/module-catalog-import-export": "0.74.0-beta15",
+        "magento/module-bundle": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CacheInvalidate/composer.json b/app/code/Magento/CacheInvalidate/composer.json
index 5f5a8b2ce39bfa5fff3162892d333dcbd8c1659f..f030ee269a32cfac2a479c63c5f4e16250e10b7f 100644
--- a/app/code/Magento/CacheInvalidate/composer.json
+++ b/app/code/Magento/CacheInvalidate/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json
index d3452e6042ef3c040a0d644ff3ae2fa4009f9c02..987ef790dfd28fc18a1e0a87488a86213f350154 100644
--- a/app/code/Magento/Captcha/composer.json
+++ b/app/code/Magento/Captcha/composer.json
@@ -3,15 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json
index 7c1d49431e273833b821bae24c446d3364c6b458..5664aebe69dc555c7cbd17907e10817cee4e00d7 100644
--- a/app/code/Magento/Catalog/composer.json
+++ b/app/code/Magento/Catalog/composer.json
@@ -3,37 +3,37 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-indexer": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-log": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-wishlist": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-msrp": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-catalog-rule": "0.74.0-beta14",
-        "magento/module-product-alert": "0.74.0-beta14",
-        "magento/module-url-rewrite": "0.74.0-beta14",
-        "magento/module-catalog-url-rewrite": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-indexer": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-log": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-wishlist": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-msrp": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-catalog-rule": "0.74.0-beta15",
+        "magento/module-product-alert": "0.74.0-beta15",
+        "magento/module-url-rewrite": "0.74.0-beta15",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta14"
+        "magento/module-cookie": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json
index ca381cabc50404db10ec64a2c7e635b69124c128..9f81689a2e32e10ea824acc247afdea084a2fe08 100644
--- a/app/code/Magento/CatalogImportExport/composer.json
+++ b/app/code/Magento/CatalogImportExport/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/module-indexer": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/module-indexer": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json
index fa1c799fe739d3bcf87ca6f916bcde0962624808..81dd41658e1e795b679f2f9e284b553609660041 100644
--- a/app/code/Magento/CatalogInventory/composer.json
+++ b/app/code/Magento/CatalogInventory/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-indexer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-indexer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json
index 539ca4af208560e40d7f890c9550308bde89485e..2769c69a24005ff315ce84cf5d2ee548c1fd5d1b 100644
--- a/app/code/Magento/CatalogRule/composer.json
+++ b/app/code/Magento/CatalogRule/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-rule": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-indexer": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-rule": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-indexer": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json
index 1d8292288c1c06458eea32cb0b3985d82f3147a4..6c9cce17601c714d54f92b6a2430025f79395c56 100644
--- a/app/code/Magento/CatalogSearch/composer.json
+++ b/app/code/Magento/CatalogSearch/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-search": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-indexer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-search": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-indexer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json
index 764fb5ed8db3fc88023dba3f275a543386e34315..290be0bf17556f32deaf2a8dd1af28b4883ace8a 100644
--- a/app/code/Magento/CatalogUrlRewrite/composer.json
+++ b/app/code/Magento/CatalogUrlRewrite/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-catalog-import-export": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-url-rewrite": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-catalog-import-export": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-url-rewrite": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CatalogWidget/composer.json b/app/code/Magento/CatalogWidget/composer.json
index a1708c5aa5d6b1c14848114666f7bb6e520eaa00..3f1bfb33e3f0ab88c266ebdb80202429257163d5 100644
--- a/app/code/Magento/CatalogWidget/composer.json
+++ b/app/code/Magento/CatalogWidget/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-rule": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-wishlist": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-rule": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-wishlist": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json
index 572909061f99a33ba2f588192618604966ddcdf2..f4d84dd1c413eecdd11e09907ff08e58476fbb56 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.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-gift-message": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-msrp": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-gift-message": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-msrp": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta14"
+        "magento/module-cookie": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json
index e8c5101da3db5419aec1bdba672036cfcbb060ae..13f10a6560e989f70548019e6eb5b043740c431b 100644
--- a/app/code/Magento/CheckoutAgreements/composer.json
+++ b/app/code/Magento/CheckoutAgreements/composer.json
@@ -3,14 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json
index 74159635377d7d0ac47f23cd8474b47b4415610b..e635bc36075189903b844d5f4f7e6f5e1e695d41 100644
--- a/app/code/Magento/Cms/composer.json
+++ b/app/code/Magento/Cms/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-email": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
-        "magento/module-variable": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-email": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
+        "magento/module-variable": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json
index c5d23577dd32064af54e69ea0c18bf918232f32a..318b250d7650c989f67aed2704cd3ad9ee82be14 100644
--- a/app/code/Magento/CmsUrlRewrite/composer.json
+++ b/app/code/Magento/CmsUrlRewrite/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-url-rewrite": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-url-rewrite": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Config/Block/System/Config/Form/Fieldset/Factory.php b/app/code/Magento/Config/Block/System/Config/Form/Fieldset/Factory.php
index 5cb02fb70512a02174cb60e6145c3095d0ba85af..623342951516a038acd8ae5beeb51081d53a491f 100644
--- a/app/code/Magento/Config/Block/System/Config/Form/Fieldset/Factory.php
+++ b/app/code/Magento/Config/Block/System/Config/Form/Fieldset/Factory.php
@@ -7,7 +7,7 @@
 namespace Magento\Config\Block\System\Config\Form\Fieldset;
 
 /**
- * Magento\Config\Block\System\Config\Form\Fieldset object factory
+ * Magento\Config\Block\System\Config\Form\Fieldset Class Factory
  *
  * @codeCoverageIgnore
  */
diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/DwstreeTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/DwstreeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f8b7596fd4a541eebe52c9f8e30168dc48b35ee
--- /dev/null
+++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/DwstreeTest.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Config\Test\Unit\Block\System\Config;
+
+class DwstreeTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Config\Block\System\Config\Dwstree
+     */
+    protected $object;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManagerMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $websiteMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    protected function setUp()
+    {
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->websiteMock = $this->getMockBuilder('Magento\Store\Model\Website')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->context = $objectManager->getObject(
+            'Magento\Backend\Block\Template\Context',
+            [
+                'request'      => $this->requestMock,
+                'storeManager' => $this->storeManagerMock,
+            ]
+        );
+
+        $this->object = $objectManager->getObject(
+            'Magento\Config\Block\System\Config\Dwstree',
+            ['context' => $this->context]
+        );
+    }
+
+    /**
+     * @param $section
+     * @param $website
+     * @param $store
+     * @dataProvider initTabsDataProvider
+     */
+    public function testInitTabs($section, $website, $store)
+    {
+        $this->requestMock->expects($this->any())
+            ->method('getParam')
+            ->will(
+                $this->returnValueMap(
+                    [
+                        ['section', $section],
+                        ['website', $website['expected']['code']],
+                        ['store', $store['expected']['code']],
+                    ]
+                )
+            );
+        $this->storeManagerMock->expects($this->once())
+            ->method('getWebsites')
+            ->willReturn([$this->websiteMock]);
+        $this->websiteMock->expects($this->any())
+            ->method('getCode')
+            ->willReturn($website['actual']['code']);
+        $this->websiteMock->expects($this->any())
+            ->method('getName')
+            ->willReturn($website['expected']['name']);
+        $this->websiteMock->expects($this->once())
+            ->method('getStores')
+            ->willReturn([$this->storeMock]);
+        $this->storeMock->expects($this->any())
+            ->method('getCode')
+            ->willReturn($store['actual']['code']);
+        $this->storeMock->expects($this->any())
+            ->method('getName')
+            ->willReturn($store['actual']['name']);
+
+        $this->assertEquals($this->object, $this->object->initTabs());
+
+        $this->assertEquals(
+            [
+                'default',
+                'website_' . $website['actual']['code'],
+                'store_'   . $store['actual']['code']
+            ],
+            $this->object->getTabsIds()
+        );
+    }
+
+    public function initTabsDataProvider()
+    {
+        return [
+            'matchAll'  => [
+                'scope'   => 'Test Scope',
+                'website' => [
+                    'expected' => ['name' => 'Test Website Name', 'code' => 'Test Website Code'],
+                    'actual'   => ['name' => 'Test Website Name', 'code' => 'Test Website Code'],
+                ],
+                'store'   => [
+                    'expected' => ['name' => 'Test   Store Name', 'code' => 'Test   Store Code'],
+                    'actual'   => ['name' => 'Test   Store Name', 'code' => 'Test   Store Code'],
+                ],
+            ],
+            'matchStore'  => [
+                'scope'   => 'Test Scope',
+                'website' => [
+                    'expected' => ['name' => 'Test Website Name', 'code' => 'Test Website Code'],
+                    'actual'   => ['name' => false, 'code' => false],
+                ],
+                'store'   => [
+                    'expected' => ['name' => 'Test   Store Name', 'code' => 'Test   Store Code'],
+                    'actual'   => ['name' => 'Test   Store Name', 'code' => 'Test   Store Code'],
+                ],
+            ],
+            'matchWebsite'  => [
+                'scope'   => 'Test Scope',
+                'website' => [
+                    'expected' => ['name' => 'Test Website Name', 'code' => 'Test Website Code'],
+                    'actual'   => ['name' => 'Test Website Name', 'code' => 'Test Website Code'],
+                ],
+                'store'   => [
+                    'expected' => ['name' => 'Test   Store Name', 'code' => 'Test   Store Code'],
+                    'actual'   => ['name' => false, 'code' => false],
+                ],
+            ],
+            'noMatch'  => [
+                'scope'   => 'Test Scope',
+                'website' => [
+                    'expected' => ['name' => 'Test Website Name', 'code' => 'Test Website Code'],
+                    'actual'   => ['name' => false, 'code' => false],
+                ],
+                'store'   => [
+                    'expected' => ['name' => 'Test   Store Name', 'code' => 'Test   Store Code'],
+                    'actual'   => ['name' => false, 'code' => false],
+                ],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/EditTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/EditTest.php
index 11ae924fe7ac294734c7ce67feffd2417a8b9bb4..323ec70a02c9d0daf2e43d290750ce3e64b8acd2 100644
--- a/app/code/Magento/Config/Test/Unit/Block/System/Config/EditTest.php
+++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/EditTest.php
@@ -145,4 +145,43 @@ class EditTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($expectedUrl, $this->_object->getSaveUrl());
     }
+
+    public function testPrepareLayout()
+    {
+        $expectedHeader = 'Test Header';
+        $expectedLabel  = 'Test  Label';
+        $expectedBlock  = 'Test  Block';
+
+        $blockMock = $this->getMockBuilder('Magento\Framework\View\Element\Template')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->_sectionMock->expects($this->once())
+            ->method('getFrontendModel')
+            ->willReturn($expectedBlock);
+        $this->_sectionMock->expects($this->once())
+            ->method('getLabel')
+            ->willReturn($expectedLabel);
+        $this->_sectionMock->expects($this->once())
+            ->method('getHeaderCss')
+            ->willReturn($expectedHeader);
+        $this->_layoutMock->expects($this->once())
+            ->method('getBlock')
+            ->with('page.actions.toolbar')
+            ->willReturn($blockMock);
+        $this->_layoutMock->expects($this->once())
+            ->method('createBlock')
+            ->with($expectedBlock)
+            ->willReturn($blockMock);
+        $blockMock->expects($this->once())
+            ->method('getNameInLayout')
+            ->willReturn($expectedBlock);
+        $this->_layoutMock->expects($this->once())
+            ->method('setChild')
+            ->with($expectedBlock, $expectedBlock, 'form')
+            ->willReturn($this->_layoutMock);
+
+        $this->_object->setNameInLayout($expectedBlock);
+        $this->_object->setLayout($this->_layoutMock);
+    }
 }
diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldTest.php
index 2c7125e9748104e156d1e0ae6b383b65b5502700..4e3579dde64ca8791c2e9c2cbd8a2ad550b9e896 100644
--- a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldTest.php
+++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldTest.php
@@ -71,7 +71,8 @@ class FieldTest extends \PHPUnit_Framework_TestCase
                 'getInherit',
                 'getCanUseWebsiteValue',
                 'getCanUseDefaultValue',
-                'setDisabled'
+                'setDisabled',
+                'getTooltip',
             ],
             [],
             '',
@@ -140,6 +141,19 @@ class FieldTest extends \PHPUnit_Framework_TestCase
         $this->assertContains($expected, $actual);
     }
 
+    public function testRenderValueWithTooltipBlock()
+    {
+        $testTooltip = 'test_tooltip';
+        $this->_elementMock->expects($this->any())->method('getTooltip')->will($this->returnValue($testTooltip));
+        $expected = '<td class="value with-tooltip">' .
+            $this->_testData['elementHTML'] .
+            '<div class="tooltip"><span class="help"><span></span></span><div class="tooltip-content">' .
+            $testTooltip .
+            '</div></div></td>';
+        $actual = $this->_object->render($this->_elementMock);
+        $this->assertContains($expected, $actual);
+    }
+
     public function testRenderHint()
     {
         $testHint = 'test_hint';
diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Fieldset/Modules/DisableOutputTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Fieldset/Modules/DisableOutputTest.php
index 6f5fa46f65a237ea26bf676537d91aac3c6d4ade..10fc39366922c25b5d2b295ad8ef1a30ba8efecf 100644
--- a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Fieldset/Modules/DisableOutputTest.php
+++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Fieldset/Modules/DisableOutputTest.php
@@ -7,102 +7,236 @@ namespace Magento\Config\Test\Unit\Block\System\Config\Form\Fieldset\Modules;
 
 class DisableOutputTest extends \PHPUnit_Framework_TestCase
 {
-    public function testRender()
+    /**
+     * @var \Magento\Config\Block\System\Config\Form\Fieldset\Modules\DisableOutput
+     */
+    protected $object;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $elementMock;
+
+    /**
+     * @var array
+     */
+    protected $elementData = [
+        'htmlId'      => 'test_field_id',
+        'name'        => 'test_name',
+        'label'       => 'test_label',
+        'elementHTML' => 'test_html',
+        'legend'      => 'test_legend',
+        'comment'     => 'test_comment',
+        'tooltip'     => 'test_tooltip',
+    ];
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $layoutMock;
+
+    /**
+     * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
+     */
+    protected $objectManager;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleListMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $authSessionMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $userMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $jsHelperMock;
+
+    /**
+     * @return void
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    protected function setUp()
     {
-        $testData = [
-            'htmlId' => 'test_field_id',
-            'label' => 'test_label',
-            'elementHTML' => 'test_html',
-            'legend' => 'test_legend',
-            'comment' => 'test_comment',
-        ];
-
-        $testModuleList = [
-            'testModuleWithConfigData',
-            'testModuleNoConfigData',
-        ];
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
-        $configData = ['advanced/modules_disable_output/testModuleWithConfigData' => 'testModuleData'];
-
-        $fieldMock = $this->getMockBuilder('Magento\Config\Block\System\Config\Form\Field')
+        $rendererMock = $this->getMockBuilder('Magento\Config\Block\System\Config\Form\Field')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $layoutMock = $this->getMockBuilder('Magento\Framework\View\Layout')
+        $this->layoutMock = $this->getMockBuilder('Magento\Framework\View\Layout')
             ->disableOriginalConstructor()
             ->getMock();
-        $layoutMock->expects($this->once())
+        $this->layoutMock->expects($this->any())
             ->method('getBlockSingleton')
-            ->with('Magento\Config\Block\System\Config\Form\Field')
-            ->willReturn($fieldMock);
+            ->willReturn($rendererMock);
 
-        $groupMock = $this->getMockBuilder('Magento\Config\Model\Config\Structure\Element\Group')
+        $this->jsHelperMock = $this->getMockBuilder('Magento\Framework\View\Helper\Js')
             ->disableOriginalConstructor()
             ->getMock();
-        $groupMock->expects($this->once())->method('getFieldsetCss')->willReturn('test_fieldset_css');
 
-        $elementMock = $this->getMockBuilder('Magento\Framework\Data\Form\Element\Text')
+        $this->moduleListMock = $this->getMockBuilder('Magento\Framework\Module\ModuleListInterface')
+            ->setMethods(['getNames', 'has', 'getAll', 'getOne'])
             ->disableOriginalConstructor()
-            ->setMethods(
-                [
-                    'getHtmlId', 'getExpanded', 'getElements', 'getLegend',
-                    'getComment', 'addField', 'setRenderer', 'toHtml'
-                ]
-            )->getMock();
+            ->getMock();
 
-        $elementMock->expects($this->any())
-            ->method('getHtmlId')
-            ->willReturn($testData['htmlId']);
+        $this->moduleListMock->expects($this->any())
+            ->method('getNames')
+            ->will($this->returnValue(['Test Name']));
+        $this->moduleListMock->expects($this->any())
+            ->method('has')
+            ->will($this->returnValue(true));
+        $this->moduleListMock->expects($this->any())
+            ->method('getAll')
+            ->will($this->returnValue([]));
+        $this->moduleListMock->expects($this->any())
+            ->method('getOne')
+            ->will($this->returnValue(null));
+
+        $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
+            ->setMethods(['getUser'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->userMock = $this->getMockBuilder('Magento\User\Model\User')
+            ->setMethods(['getExtra'])
+            ->disableOriginalConstructor()
+            ->getMock();
 
-        $elementMock->expects($this->any())->method('getExpanded')->willReturn(true);
-        $elementMock->expects($this->any())->method('getLegend')->willReturn($testData['legend']);
-        $elementMock->expects($this->any())->method('getComment')->willReturn($testData['comment']);
-        $elementMock->expects($this->any())->method('addField')->willReturn($elementMock);
-        $elementMock->expects($this->any())->method('setRenderer')->willReturn($elementMock);
-        $elementMock->expects($this->any())->method('toHtml')->willReturn('test_element_html');
+        $this->authSessionMock->expects($this->any())
+            ->method('getUser')
+            ->willReturn($this->userMock);
 
-        $moduleListMock = $this->getMockBuilder('Magento\Framework\Module\ModuleList')
+        $groupMock = $this->getMockBuilder('Magento\Config\Model\Config\Structure\Element\Group')
+            ->setMethods(['getFieldsetCss'])
             ->disableOriginalConstructor()
             ->getMock();
-        $moduleListMock->expects($this->any())->method('getNames')->willReturn(
-            array_merge(['Magento_Backend'], $testModuleList)
-        );
+        $groupMock->expects($this->any())->method('getFieldsetCss')->will($this->returnValue('test_fieldset_css'));
 
         $factory = $this->getMockBuilder('Magento\Framework\Data\Form\Element\Factory')
             ->disableOriginalConstructor()
             ->getMock();
-
         $factoryColl = $this->getMockBuilder('Magento\Framework\Data\Form\Element\CollectionFactory')
             ->disableOriginalConstructor()
             ->getMock();
+        $formMock = $this->getMock('Magento\Framework\Data\Form\AbstractForm', [], [$factory, $factoryColl]);
 
-        $formMock = $this->getMockBuilder('Magento\Framework\Data\Form\AbstractForm')
-            ->disableOriginalConstructor()
-            ->setConstructorArgs([$factory, $factoryColl])
-            ->getMock();
+        $context = $this->objectManager->getObject(
+            'Magento\Backend\Block\Context',
+            [
+                'layout' => $this->layoutMock,
+            ]
+        );
 
-        $formMock->expects($this->any())->method('getConfigValue')->willReturn('testConfigData');
+        $data = [
+            'context'     => $context,
+            'authSession' => $this->authSessionMock,
+            'jsHelper'    => $this->jsHelperMock,
+            'moduleList'  => $this->moduleListMock,
+            'data' => [
+                'group'          => $groupMock,
+                'form'           => $formMock,
+            ],
+        ];
 
-        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $object = $objectManager->getObject(
+        $this->object = $this->objectManager->getObject(
             'Magento\Config\Block\System\Config\Form\Fieldset\Modules\DisableOutput',
-            [
-                'moduleList' => $moduleListMock,
-                'layout' => $layoutMock,
-                'data' => [
-                    'group'      => $groupMock,
-                    'form'       => $formMock,
-                    'config_data' => $configData,
-                ],
-            ]
+            $data
         );
 
-        $collection = $objectManager->getObject('Magento\Framework\Data\Form\Element\Collection');
-        $elementMock->expects($this->any())->method('getElements')->willReturn($collection);
+        $this->elementMock = $this->getMockBuilder('Magento\Framework\Data\Form\Element\Text')
+            ->setMethods(
+                [
+                    'getId', 'getHtmlId', 'getName', 'getExpanded', 'getLegend', 'getComment', 'getTooltip', 'toHtml',
+                    'addField', 'setRenderer', 'getElements', 'getIsNested'
+                ]
+            )
+            ->disableOriginalConstructor()
+            ->disableOriginalClone()
+            ->enableAutoload()
+            ->getMock();
 
-        $actualHtml = $object->render($elementMock);
-        $this->assertContains('test_element_html', $actualHtml);
-        $this->assertContains('test_field_id', $actualHtml);
-        $this->assertContains('test_comment', $actualHtml);
+        $this->elementMock->expects($this->any())
+            ->method('getId')
+            ->will($this->returnValue($this->elementData['htmlId']));
+        $this->elementMock->expects($this->any())
+            ->method('getHtmlId')
+            ->will($this->returnValue($this->elementData['htmlId']));
+        $this->elementMock->expects($this->any())
+            ->method('getName')
+            ->will($this->returnValue($this->elementData['name']));
+        $this->elementMock->expects($this->any())
+            ->method('getLegend')
+            ->will($this->returnValue($this->elementData['legend']));
+        $this->elementMock->expects($this->any())
+            ->method('getComment')
+            ->will($this->returnValue($this->elementData['comment']));
+        $this->elementMock->expects($this->any())
+            ->method('getTooltip')
+            ->will($this->returnValue($this->elementData['tooltip']));
+        $this->elementMock->expects($this->any())
+            ->method('toHtml')
+            ->will($this->returnValue($this->elementData['elementHTML']));
+        $this->elementMock->expects($this->any())
+            ->method('addField')
+            ->will($this->returnValue($this->elementMock));
+        $this->elementMock->expects($this->any())
+            ->method('setRenderer')
+            ->will($this->returnValue($this->elementMock));
+        $this->elementMock->expects($this->any())
+            ->method('getElements')
+            ->will($this->returnValue([$this->elementMock]));
+    }
+
+    /**
+     * @param $expanded
+     * @param $nested
+     * @param $extra
+     * @dataProvider renderDataProvider
+     */
+    public function testRender($expanded, $nested, $extra)
+    {
+        $this->elementMock->expects($this->any())->method('getExpanded')->will($this->returnValue($expanded));
+        $this->elementMock->expects($this->any())->method('getIsNested')->will($this->returnValue($nested));
+        $this->userMock->expects($this->any())->method('getExtra')->willReturn($extra);
+        $actualHtml = $this->object->render($this->elementMock);
+
+        $this->assertContains($this->elementData['htmlId'], $actualHtml);
+        $this->assertContains($this->elementData['legend'], $actualHtml);
+        $this->assertContains($this->elementData['comment'], $actualHtml);
+        $this->assertContains($this->elementData['tooltip'], $actualHtml);
+        $this->assertContains($this->elementData['elementHTML'], $actualHtml);
+        if ($nested) {
+            $this->assertContains('nested', $actualHtml);
+        }
+    }
+
+    public function renderDataProvider()
+    {
+        return [
+            'expandedNestedExtra' => [
+                'expanded' => true,
+                'nested'   => true,
+                'extra'    => [],
+            ],
+            'collapsedNotNestedExtra' => [
+                'expanded' => false,
+                'nested'   => false,
+                'extra'    => ['configState' => [$this->elementData['htmlId'] => true]],
+            ],
+            'collapsedNotNestedNoExtra' => [
+                'expanded' => false,
+                'nested'   => false,
+                'extra'    => [],
+            ],
+        ];
     }
 }
diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldsetTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldsetTest.php
index ec6521ec090ac75e2c0442e06fecd77eb4742b04..e1d4f266467e194a77f43539f0eba25c647ae5c7 100644
--- a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldsetTest.php
+++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/FieldsetTest.php
@@ -30,7 +30,15 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
     /**
      * @var array
      */
-    protected $_testData;
+    protected $testData = [
+        'htmlId' => 'test_field_id',
+        'name' => 'test_name',
+        'label' => 'test_label',
+        'elementHTML' => 'test_html',
+        'legend' => 'test_legend',
+        'comment' => 'test_comment',
+        'tooltip'     => 'test_tooltip',
+    ];
 
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
@@ -47,16 +55,42 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
      */
     protected $_helperMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $authSessionMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $userMock;
+
+    /**
+     * @return void
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
     protected function setUp()
     {
-        $this->_requestMock = $this->getMock(
-            'Magento\Framework\App\RequestInterface',
-            [],
-            [],
-            '',
-            false,
-            false
-        );
+        $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
+            ->setMethods(['getUser'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->userMock = $this->getMockBuilder('Magento\User\Model\User')
+            ->setMethods(['getExtra'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->authSessionMock->expects($this->any())
+            ->method('getUser')
+            ->willReturn($this->userMock);
+
+        $this->_requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->_requestMock->expects($this->any())
+            ->method('getParam')
+            ->willReturn('Test Param');
         $this->_urlModelMock = $this->getMock('Magento\Backend\Model\Url', [], [], '', false, false);
         $this->_layoutMock = $this->getMock('Magento\Framework\View\Layout', [], [], '', false, false);
         $groupMock = $this->getMock(
@@ -66,12 +100,13 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $groupMock->expects($this->once())->method('getFieldsetCss')->will($this->returnValue('test_fieldset_css'));
+        $groupMock->expects($this->any())->method('getFieldsetCss')->will($this->returnValue('test_fieldset_css'));
 
         $this->_helperMock = $this->getMock('Magento\Framework\View\Helper\Js', [], [], '', false, false);
 
         $data = [
             'request' => $this->_requestMock,
+            'authSession' => $this->authSessionMock,
             'urlBuilder' => $this->_urlModelMock,
             'layout' => $this->_layoutMock,
             'jsHelper' => $this->_helperMock,
@@ -80,18 +115,9 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
         $this->_testHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_object = $this->_testHelper->getObject('Magento\Config\Block\System\Config\Form\Fieldset', $data);
 
-        $this->_testData = [
-            'htmlId' => 'test_field_id',
-            'name' => 'test_name',
-            'label' => 'test_label',
-            'elementHTML' => 'test_html',
-            'legend' => 'test_legend',
-            'comment' => 'test_comment',
-        ];
-
         $this->_elementMock = $this->getMock(
             'Magento\Framework\Data\Form\Element\Text',
-            ['getHtmlId', 'getName', 'getExpanded', 'getElements', 'getLegend', 'getComment'],
+            ['getId', 'getHtmlId', 'getName', 'getElements', 'getLegend', 'getComment', 'getIsNested', 'getExpanded'],
             [],
             '',
             false,
@@ -99,67 +125,75 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
             true
         );
 
-        $this->_elementMock->expects(
-            $this->any()
-        )->method(
-            'getHtmlId'
-        )->will(
-            $this->returnValue($this->_testData['htmlId'])
-        );
-        $this->_elementMock->expects(
-            $this->any()
-        )->method(
-            'getName'
-        )->will(
-            $this->returnValue($this->_testData['name'])
-        );
-        $this->_elementMock->expects($this->any())->method('getExpanded')->will($this->returnValue(true));
-        $this->_elementMock->expects(
-            $this->any()
-        )->method(
-            'getLegend'
-        )->will(
-            $this->returnValue($this->_testData['legend'])
-        );
-        $this->_elementMock->expects(
-            $this->any()
-        )->method(
-            'getComment'
-        )->will(
-            $this->returnValue($this->_testData['comment'])
-        );
+        $this->_elementMock->expects($this->any())
+            ->method('getId')
+            ->will($this->returnValue($this->testData['htmlId']));
+        $this->_elementMock->expects($this->any())
+            ->method('getHtmlId')
+            ->will($this->returnValue($this->testData['htmlId']));
+        $this->_elementMock->expects($this->any())
+            ->method('getName')
+            ->will($this->returnValue($this->testData['name']));
+        $this->_elementMock->expects($this->any())
+            ->method('getLegend')
+            ->will($this->returnValue($this->testData['legend']));
+        $this->_elementMock->expects($this->any())
+            ->method('getComment')
+            ->will($this->returnValue($this->testData['comment']));
     }
 
-    public function testRenderWithoutStoredElements()
+    /**
+     * @param $expanded
+     * @param $nested
+     * @param extra
+     * @dataProvider testRenderWithoutStoredElementsDataProvider
+     */
+    public function testRenderWithoutStoredElements($expanded, $nested, $extra)
     {
+        $this->userMock->expects($this->any())->method('getExtra')->willReturn($extra);
         $collection = $this->_testHelper->getObject('Magento\Framework\Data\Form\Element\Collection');
         $this->_elementMock->expects($this->any())->method('getElements')->will($this->returnValue($collection));
+        $this->_elementMock->expects($this->any())->method('getIsNested')->will($this->returnValue($nested));
+        $this->_elementMock->expects($this->any())->method('getExpanded')->will($this->returnValue($expanded));
         $actualHtml = $this->_object->render($this->_elementMock);
-        $this->assertContains($this->_testData['htmlId'], $actualHtml);
-        $this->assertContains($this->_testData['legend'], $actualHtml);
-        $this->assertContains($this->_testData['comment'], $actualHtml);
+        $this->assertContains($this->testData['htmlId'], $actualHtml);
+        $this->assertContains($this->testData['legend'], $actualHtml);
+        $this->assertContains($this->testData['comment'], $actualHtml);
+        if ($nested) {
+            $this->assertContains('nested', $actualHtml);
+        }
     }
 
-    public function testRenderWithStoredElements()
+    /**
+     * @param $expanded
+     * @param $nested
+     * @param $extra
+     * @dataProvider testRenderWithStoredElementsDataProvider
+     */
+    public function testRenderWithStoredElements($expanded, $nested, $extra)
     {
+        $this->userMock->expects($this->any())->method('getExtra')->willReturn($extra);
         $this->_helperMock->expects($this->any())->method('getScript')->will($this->returnArgument(0));
-
-        $fieldMock = $this->getMock(
-            'Magento\Framework\Data\Form\Element\Text',
-            ['getId', 'getTooltip', 'toHtml'],
-            [],
-            '',
-            false,
-            false,
-            true
-        );
-
+        $fieldMock = $this->getMockBuilder('Magento\Framework\Data\Form\Element\Text')
+            ->setMethods(['getId', 'getTooltip', 'toHtml', 'getHtmlId', 'getIsNested', 'getExpanded'])
+            ->disableOriginalConstructor()
+            ->getMock();
         $fieldMock->expects($this->any())->method('getId')->will($this->returnValue('test_field_id'));
         $fieldMock->expects($this->any())->method('getTooltip')->will($this->returnValue('test_field_tootip'));
         $fieldMock->expects($this->any())->method('toHtml')->will($this->returnValue('test_field_toHTML'));
+        $fieldMock->expects($this->any())->method('getHtmlId')->willReturn('test_field_HTML_id');
+
+        $fieldSetMock = $this->getMockBuilder('Magento\Framework\Data\Form\Element\Fieldset')
+            ->setMethods(['getId', 'getTooltip', 'toHtml', 'getHtmlId', 'getIsNested', 'getExpanded'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $fieldSetMock->expects($this->any())->method('getId')->will($this->returnValue('test_fieldset_id'));
+        $fieldSetMock->expects($this->any())->method('getTooltip')->will($this->returnValue('test_fieldset_tootip'));
+        $fieldSetMock->expects($this->any())->method('toHtml')->will($this->returnValue('test_fieldset_toHTML'));
+        $fieldSetMock->expects($this->any())->method('getHtmlId')->willReturn('test_fieldset_HTML_id');
 
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $factory = $this->getMock('Magento\Framework\Data\Form\Element\Factory', [], [], '', false);
+
         $factoryColl = $this->getMock(
             'Magento\Framework\Data\Form\Element\CollectionFactory',
             [],
@@ -167,13 +201,19 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+
         $formMock = $this->getMock('Magento\Framework\Data\Form\AbstractForm', [], [$factory, $factoryColl]);
-        $collection = $helper->getObject(
+
+        $collection = $this->_testHelper->getObject(
             'Magento\Framework\Data\Form\Element\Collection',
             ['container' => $formMock]
         );
         $collection->add($fieldMock);
+        $collection->add($fieldSetMock);
+
         $this->_elementMock->expects($this->any())->method('getElements')->will($this->returnValue($collection));
+        $this->_elementMock->expects($this->any())->method('getIsNested')->will($this->returnValue($nested));
+        $this->_elementMock->expects($this->any())->method('getExpanded')->will($this->returnValue($expanded));
 
         $actual = $this->_object->render($this->_elementMock);
 
@@ -182,5 +222,48 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase
         $expected = '<div id="row_test_field_id_comment" class="system-tooltip-box"' .
             ' style="display:none;">test_field_tootip</div>';
         $this->assertContains($expected, $actual);
+        if ($nested) {
+            $this->assertContains('nested', $actual);
+        }
+    }
+
+    /**
+     * @return array
+     */
+    public function testRenderWithoutStoredElementsDataProvider()
+    {
+        return $this->dataProvider();
+    }
+
+    /**
+     * @return array
+     */
+    public function testRenderWithStoredElementsDataProvider()
+    {
+        return $this->dataProvider();
+    }
+
+    /**
+     * @return array
+     */
+    protected function dataProvider()
+    {
+        return [
+            'expandedNestedExtra' => [
+                'expanded' => true,
+                'nested'   => true,
+                'extra'    => [],
+            ],
+            'collapsedNotNestedExtra' => [
+                'expanded' => false,
+                'nested'   => false,
+                'extra'    => ['configState' => [$this->testData['htmlId'] => true]],
+            ],
+            'collapsedNotNestedNoExtra' => [
+                'expanded' => false,
+                'nested'   => false,
+                'extra'    => [],
+            ],
+        ];
     }
 }
diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json
index cc83e07515d7c6e3f56c531d84d10edcceb1226e..202d760a77d18360d74c9c13ad6ff720257f1361 100644
--- a/app/code/Magento/Config/composer.json
+++ b/app/code/Magento/Config/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-cron": "0.74.0-beta14",
-        "magento/module-email": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-cron": "0.74.0-beta15",
+        "magento/module-email": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json
index 8d04a7bae07ab90d74604415193102a43f299075..d3b43f6b2c89cebbc90db6965afb7b35339f3532 100644
--- a/app/code/Magento/ConfigurableImportExport/composer.json
+++ b/app/code/Magento/ConfigurableImportExport/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-catalog-import-export": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/module-configurable-product": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-catalog-import-export": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/module-configurable-product": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json
index d67c88a3d956bb5c369acb68c95818f9d10047c2..bba5a6cb80801b75e3a58c0d1660c768787eeb1b 100644
--- a/app/code/Magento/ConfigurableProduct/composer.json
+++ b/app/code/Magento/ConfigurableProduct/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-msrp": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-catalog-rule": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-msrp": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-catalog-rule": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-      "magento/module-webapi": "0.74.0-beta14"
+      "magento/module-webapi": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json
index b439ea140c197b1ed56baf1e2d815da1401ad79b..811f9db9c949c9fcc5877905776039105c19335d 100644
--- a/app/code/Magento/Contact/composer.json
+++ b/app/code/Magento/Contact/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cookie/composer.json b/app/code/Magento/Cookie/composer.json
index 544fd07a9c3789660daca22b02bfc19ba3f3aef5..0135db41f94b4435603e54b98f7b44db55e9c085 100644
--- a/app/code/Magento/Cookie/composer.json
+++ b/app/code/Magento/Cookie/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-backend": "0.74.0-beta14"
+        "magento/module-backend": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json
index 6399fb6b9e9020bfbbdcd39b429d38acd51db867..3dfb26ce77621f8ed772c7cbcafbd7ec0423a736 100644
--- a/app/code/Magento/Cron/composer.json
+++ b/app/code/Magento/Cron/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json
index 84def1d3cbe14acfc288d09d027e68ac7ef0514f..6483dd03c9e1f55db24a962744a73132c5931f8a 100644
--- a/app/code/Magento/CurrencySymbol/composer.json
+++ b/app/code/Magento/CurrencySymbol/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json
index 0eece788e93cecb4c80b798123ea44284882baca..dee5a235594a0442cb4a5385ee820b53234f8582 100644
--- a/app/code/Magento/Customer/composer.json
+++ b/app/code/Magento/Customer/composer.json
@@ -3,33 +3,33 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-newsletter": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-wishlist": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-review": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
-        "magento/module-integration": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-newsletter": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-wishlist": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-review": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
+        "magento/module-integration": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta14"
+        "magento/module-cookie": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json
index b6a1e407f40a90d40681457f8b3c44f71a51810b..9fc8a75b0a1024c0b8daf7221968ba40410c68a6 100644
--- a/app/code/Magento/CustomerImportExport/composer.json
+++ b/app/code/Magento/CustomerImportExport/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/DesignEditor/composer.json b/app/code/Magento/DesignEditor/composer.json
index b1da5a0bdcd348ed89d44f6c55133d29d268e728..6e08b71249827713a36270a73e01a206da5fc1f3 100644
--- a/app/code/Magento/DesignEditor/composer.json
+++ b/app/code/Magento/DesignEditor/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-translation": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-translation": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json
index a48bb0105867b156433a4addf530adbefcf87e48..b24b34c4217b7322b25f1c69a1075ad616f5e286 100644
--- a/app/code/Magento/Developer/composer.json
+++ b/app/code/Magento/Developer/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json
index 02b7d41aa6e9cb7951f25396c7d440274d5b0d56..22bad15575a0e47c3b56e53095e34cf76d61e2c6 100644
--- a/app/code/Magento/Dhl/composer.json
+++ b/app/code/Magento/Dhl/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json
index 23ab56ed5a4f107e2748d9c98f7a78fe3b762bc4..9978cf2f0261f4e80bcb56bb9f9c64a74ccba91d 100644
--- a/app/code/Magento/Directory/composer.json
+++ b/app/code/Magento/Directory/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json
index b28ee43df4619e46d9314a36a88369cb34ce7a94..20ef84dcbb984fbe254d685219677e58a293a897 100644
--- a/app/code/Magento/Downloadable/composer.json
+++ b/app/code/Magento/Downloadable/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-gift-message": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-msrp": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-gift-message": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-msrp": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json
index 27a79fab2f4a2d182e3df0749481b2877d6eb5cf..caa8721af55b8e7b90228cd86b38de5aec349f91 100644
--- a/app/code/Magento/Eav/composer.json
+++ b/app/code/Magento/Eav/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Email/Model/Template.php b/app/code/Magento/Email/Model/Template.php
index a349f5d9ed0708300e369fb97800dc258f3ded2d..2bb54a0333a138ec34f36e4362d22018e2fbef1d 100644
--- a/app/code/Magento/Email/Model/Template.php
+++ b/app/code/Magento/Email/Model/Template.php
@@ -7,7 +7,6 @@ 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;
 
@@ -76,7 +75,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
     /**
      * Email template filter
      *
-     * @var FilterTemplate
+     * @var Filter
      */
     protected $_templateFilter;
 
@@ -278,10 +277,10 @@ class Template extends \Magento\Email\Model\AbstractTemplate implements \Magento
     /**
      * Declare template processing filter
      *
-     * @param FilterTemplate $filter
+     * @param Filter $filter
      * @return $this
      */
-    public function setTemplateFilter(FilterTemplate $filter)
+    public function setTemplateFilter(Filter $filter)
     {
         $this->_templateFilter = $filter;
         return $this;
diff --git a/app/code/Magento/Email/Model/Template/Filter.php b/app/code/Magento/Email/Model/Template/Filter.php
index c95b3f4e21572e16f38fdb967abf3ccc25a582e8..18ed7a756916ecbd28a78ef4fa82b562950c953a 100644
--- a/app/code/Magento/Email/Model/Template/Filter.php
+++ b/app/code/Magento/Email/Model/Template/Filter.php
@@ -110,6 +110,13 @@ class Filter extends \Magento\Framework\Filter\Template
      */
     protected $backendUrlBuilder;
 
+    /**
+     * Include processor
+     *
+     * @var callable|null
+     */
+    protected $_includeProcessor = null;
+
     /**
      * @param \Magento\Framework\Stdlib\String $string
      * @param \Psr\Log\LoggerInterface $logger
@@ -216,6 +223,49 @@ class Filter extends \Magento\Framework\Filter\Template
         return $this->_storeId;
     }
 
+    /**
+     * @param string[] $construction
+     * @return mixed
+     */
+    public function includeDirective($construction)
+    {
+        // Processing of {include template=... [...]} statement
+        $includeParameters = $this->_getIncludeParameters($construction[2]);
+        if (!isset($includeParameters['template']) or !$this->getIncludeProcessor()) {
+            // Not specified template or not set include processor
+            $replacedValue = '{Error in include processing}';
+        } else {
+            // Including of template
+            $templateCode = $includeParameters['template'];
+            unset($includeParameters['template']);
+            $includeParameters = array_merge_recursive($includeParameters, $this->_templateVars);
+            $replacedValue = call_user_func($this->getIncludeProcessor(), $templateCode, $includeParameters);
+        }
+        return $replacedValue;
+    }
+
+    /**
+     * Sets the processor of includes.
+     *
+     * @param callable $callback it must return string
+     * @return $this
+     */
+    public function setIncludeProcessor(array $callback)
+    {
+        $this->_includeProcessor = $callback;
+        return $this;
+    }
+
+    /**
+     * Sets the processor of includes.
+     *
+     * @return callable|null
+     */
+    public function getIncludeProcessor()
+    {
+        return is_callable($this->_includeProcessor) ? $this->_includeProcessor : null;
+    }
+
     /**
      * Retrieve Block html directive
      *
diff --git a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php
index 3c89c3a8532971729ea0a7fcbb408ef0854fb2a3..eddac2ab9c0b1b67de2d660a25e910f713019bdf 100644
--- a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php
+++ b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php
@@ -71,6 +71,11 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
      */
     private $emailConfig;
 
+    /**
+     * @var \Magento\Email\Model\Template\Filter|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filterTemplate;
+
     public function setUp()
     {
         $this->context = $this->getMockBuilder('Magento\Framework\Model\Context')
@@ -107,6 +112,18 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
         $this->emailConfig = $this->getMockBuilder('Magento\Email\Model\Template\Config')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->filterTemplate = $this->getMockBuilder('Magento\Email\Model\Template\Filter')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->filterTemplate->expects($this->any())
+            ->method('setUseAbsoluteLinks')
+            ->will($this->returnSelf());
+        $this->filterTemplate->expects($this->any())
+            ->method('setStoreId')
+            ->will($this->returnSelf());
+        $this->emailFilterFactory->expects($this->any())
+            ->method('create')
+            ->will($this->returnValue($this->filterTemplate));
     }
 
     /**
@@ -150,27 +167,12 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
     public function testSetAndGetTemplateFilter()
     {
         $model = $this->getModelMock();
-        $filterTemplate = $this->getMockBuilder('Magento\Framework\Filter\Template')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $model->setTemplateFilter($filterTemplate);
-        $this->assertSame($filterTemplate, $model->getTemplateFilter());
+        $model->setTemplateFilter($this->filterTemplate);
+        $this->assertSame($this->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()
@@ -181,7 +183,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->method('getDesignConfig')
             ->will($this->returnValue($designConfig));
 
-        $this->assertSame($filterTemplate, $model->getTemplateFilter());
+        $this->assertSame($this->filterTemplate, $model->getTemplateFilter());
     }
 
     /**
@@ -408,29 +410,18 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
      */
     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())
+        $this->filterTemplate->expects($this->once())
             ->method('setUseSessionInUrl')
             ->with(false)
             ->will($this->returnSelf());
-        $filterTemplate->expects($this->once())
+        $this->filterTemplate->expects($this->once())
             ->method('setPlainTemplateMode')
             ->with($templateType === \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT)
             ->will($this->returnSelf());
-        $filterTemplate->expects($this->any())
+        $this->filterTemplate->expects($this->any())
             ->method('setStoreId')
             ->will($this->returnSelf());
-        $filterTemplate->expects($this->any())
+        $this->filterTemplate->expects($this->any())
             ->method('getStoreId')
             ->will($this->returnValue($storeId));
 
@@ -446,7 +437,6 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($store));
 
         $model = $this->getModelMock(['getDesignConfig', '_applyDesignConfig', 'getPreparedTemplateText']);
-        $model->setTemplateFilter($filterTemplate);
         $model->setTemplateType($templateType);
 
         $designConfig = $this->getMockBuilder('Magento\Framework\Object')
@@ -454,13 +444,19 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $storeId = 'storeId';
-        $designConfig->expects($this->once())
+        $designConfig->expects($this->exactly(2))
             ->method('getStore')
             ->will($this->returnValue($storeId));
         $model->expects($this->once())
+            ->method('_applyDesignConfig')
+            ->willReturnSelf();
+        $model->expects($this->exactly(2))
             ->method('getDesignConfig')
             ->will($this->returnValue($designConfig));
-        $filterTemplate->expects($this->once())
+        $this->filterTemplate->expects($this->once())
+            ->method('setIncludeProcessor')
+            ->willReturnSelf();
+        $this->filterTemplate->expects($this->once())
             ->method('setVariables')
             ->with(array_merge([ 'this' => $model], $expectedVariables));
 
@@ -468,7 +464,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
         $model->expects($this->once())
             ->method('getPreparedTemplateText')
             ->will($this->returnValue($preparedTemplateText));
-        $filterTemplate->expects($this->once())
+        $this->filterTemplate->expects($this->once())
             ->method('filter')
             ->with($preparedTemplateText)
             ->will($this->returnValue($expectedResult));
@@ -556,13 +552,9 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
         $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));
+            ->will($this->returnValue($this->filterTemplate));
 
         $model->expects($this->once())
             ->method('_applyDesignConfig');
@@ -579,18 +571,18 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->method('getDesignConfig')
             ->will($this->returnValue($designConfig));
 
-        $filterTemplate->expects($this->once())
+        $this->filterTemplate->expects($this->once())
             ->method('setStoreId')
             ->with($storeId)
             ->will($this->returnSelf());
         $expectedResult = 'expected';
-        $filterTemplate->expects($this->once())
+        $this->filterTemplate->expects($this->once())
             ->method('filter')
             ->with($templateSubject)
             ->will($this->returnValue($expectedResult));
 
         $variables = [ 'key' => 'value' ];
-        $filterTemplate->expects($this->once())
+        $this->filterTemplate->expects($this->once())
             ->method('setVariables')
             ->with(array_merge($variables, ['this' => $model]));
         $this->assertEquals($expectedResult, $model->getProcessedTemplateSubject($variables));
diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json
index 337caab036bcf8efe39b14f1d7d22bf534a38f02..af00cc6e8c40e9b3a163290f4735f76378cbcbd0 100644
--- a/app/code/Magento/Email/composer.json
+++ b/app/code/Magento/Email/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-variable": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-variable": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json
index 63f7f335ce91ef6b55f722c63265ca6cc57f560a..fb0ea06af950bde812861049560a4f28c9049418 100644
--- a/app/code/Magento/Fedex/composer.json
+++ b/app/code/Magento/Fedex/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json
index 6159ad811b2306d08af85bd45cd0475e3ca56cfe..947f4b38fd94b846103d42917896e0bea3f209eb 100644
--- a/app/code/Magento/GiftMessage/composer.json
+++ b/app/code/Magento/GiftMessage/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-multishipping": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-multishipping": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json
index 5cc77002b47154ceced14a609d6e0d41282926d7..bee379a2e762516b2259c02de46480f235caaad9 100644
--- a/app/code/Magento/GoogleAdwords/composer.json
+++ b/app/code/Magento/GoogleAdwords/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json
index 09c1724be6bc16c662205bef182abc2a677a37b0..3e9335438799633dbf939e59a055693358b39e4e 100644
--- a/app/code/Magento/GoogleAnalytics/composer.json
+++ b/app/code/Magento/GoogleAnalytics/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-cookie": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-cookie": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json
index 97573703a09a74e685922b0b3948f6af8e30aa73..d1aa863fcde98cdaf636287ddcd519d9a3fd53ee 100644
--- a/app/code/Magento/GoogleOptimizer/composer.json
+++ b/app/code/Magento/GoogleOptimizer/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-google-analytics": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-google-analytics": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GoogleShopping/composer.json b/app/code/Magento/GoogleShopping/composer.json
index 1e2387799214e5b48fe356487cc1ea18ce2d030f..8b05adecaf37ca4bcb1ed68f33a1a236d75eaea9 100644
--- a/app/code/Magento/GoogleShopping/composer.json
+++ b/app/code/Magento/GoogleShopping/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json
index 33a57b24cb7193f6bb5f3b2f0eef591837005946..38e3c029caf0ddf0ef2bb97d829e25f314825335 100644
--- a/app/code/Magento/GroupedImportExport/composer.json
+++ b/app/code/Magento/GroupedImportExport/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-import-export": "0.74.0-beta14",
-        "magento/module-catalog-import-export": "0.74.0-beta14",
-        "magento/module-grouped-product": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-import-export": "0.74.0-beta15",
+        "magento/module-catalog-import-export": "0.74.0-beta15",
+        "magento/module-grouped-product": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json
index 4ee6e8762d9b6760ce1ad74e9978af483e913f0d..6a9998f81ccaf77f4adedcce9c72e3c7f155e104 100644
--- a/app/code/Magento/GroupedProduct/composer.json
+++ b/app/code/Magento/GroupedProduct/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/module-msrp": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/module-msrp": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json
index e5e58f1eeb8b2d8329b2789124b0a372ca75ef3a..24b773af890d977a1194fe15b9e5fb968a4684c5 100644
--- a/app/code/Magento/ImportExport/composer.json
+++ b/app/code/Magento/ImportExport/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-indexer": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-indexer": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json
index 5c2d70fd3ba1f4706522b5534b358eed397bb3d7..ca84f52830f052a60b50bbc295b5ef65a655e629 100644
--- a/app/code/Magento/Indexer/composer.json
+++ b/app/code/Magento/Indexer/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json
index 71e7696d8ef28184f8fd128d60231cac19b28ca4..91c648dd411685c5025f4a387ba826a5fae64e01 100644
--- a/app/code/Magento/Integration/composer.json
+++ b/app/code/Magento/Integration/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-user": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-user": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json
index 5fb0f54db609de19157dbbe5a22daf6d3025c950..944c003c8403ecd01acd50b480c9371ca243d237 100644
--- a/app/code/Magento/LayeredNavigation/composer.json
+++ b/app/code/Magento/LayeredNavigation/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Log/composer.json b/app/code/Magento/Log/composer.json
index 226458dacc1e2acfe398cfea0d658fb0ec2ab22e..ec04084fa01e1bcf75a405787a4ff23ddba93c29 100644
--- a/app/code/Magento/Log/composer.json
+++ b/app/code/Magento/Log/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json
index da20bf9f3dc3d8790f4710a3027cbd22335b0d34..0eb5bea42958863eea1b3175863a35c182f790a2 100644
--- a/app/code/Magento/MediaStorage/composer.json
+++ b/app/code/Magento/MediaStorage/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json
index 552af5d5da3518251046821ba504ab4608661fd3..19ff9e0fcb40ef3e710a1f0ef5d2e24a63a66b0b 100644
--- a/app/code/Magento/Msrp/composer.json
+++ b/app/code/Magento/Msrp/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-bundle": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-downloadable": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-grouped-product": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-bundle": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-downloadable": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-grouped-product": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json
index 3f6d9e22a139d0932d538424871afc49b49baa40..1ab4ff46d8bf15e58386db852e6c4843ae394921 100644
--- a/app/code/Magento/Multishipping/composer.json
+++ b/app/code/Magento/Multishipping/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json
index 1ac1fb8c9d929acbe852fb2c8c0fa93ee1e42409..ef5f2f74bf54e87f256c5b9d81fece403b531c0e 100644
--- a/app/code/Magento/Newsletter/composer.json
+++ b/app/code/Magento/Newsletter/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-email": "0.74.0-beta14",
-        "magento/module-cron": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-require-js": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-email": "0.74.0-beta15",
+        "magento/module-cron": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-require-js": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json
index 5118d798b7ee7a9f2a5c5f1291afd3a9f9ade93d..952c1c5ac6ced0ac0a4ce024a35bcc5bb4ddd8a5 100644
--- a/app/code/Magento/OfflinePayments/composer.json
+++ b/app/code/Magento/OfflinePayments/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json
index 5a4bc6de203315f49cc562f6c3561279bc5febe8..fc5dadb866578cd97d33d0c093d06fac159545d2 100644
--- a/app/code/Magento/OfflineShipping/composer.json
+++ b/app/code/Magento/OfflineShipping/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-sales-rule": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-sales-rule": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/PageCache/Block/Javascript.php b/app/code/Magento/PageCache/Block/Javascript.php
index bfc3b4a1a1e8b64e376b0889fa5bd75a4bfb08fe..980436b677bd3b51b23aaff170c32994e4b312a6 100644
--- a/app/code/Magento/PageCache/Block/Javascript.php
+++ b/app/code/Magento/PageCache/Block/Javascript.php
@@ -27,9 +27,10 @@ class Javascript extends \Magento\Framework\View\Element\Template
             ),
             'handles' => $this->_layout->getUpdate()->getHandles(),
             'originalRequest' => [
-                'route' => $this->getRequest()->getRouteName(),
+                'route'      => $this->getRequest()->getRouteName(),
                 'controller' => $this->getRequest()->getControllerName(),
-                'action' => $this->getRequest()->getActionName(),
+                'action'     => $this->getRequest()->getActionName(),
+                'uri'        => $this->getRequest()->getRequestUri(),
             ],
             'versionCookieName' => \Magento\Framework\App\PageCache\Version::COOKIE_NAME
         ];
diff --git a/app/code/Magento/PageCache/Controller/Block/Render.php b/app/code/Magento/PageCache/Controller/Block/Render.php
index 1544cca2cfacb36dfa57fa75fd8ae1138e42a8f5..789fb1b696fe0b824666f3f19a0e22dc0f3ea7a2 100644
--- a/app/code/Magento/PageCache/Controller/Block/Render.php
+++ b/app/code/Magento/PageCache/Controller/Block/Render.php
@@ -24,12 +24,15 @@ class Render extends \Magento\PageCache\Controller\Block
         $currentRoute = $this->getRequest()->getRouteName();
         $currentControllerName = $this->getRequest()->getControllerName();
         $currentActionName = $this->getRequest()->getActionName();
+        $currentRequestUri = $this->getRequest()->getRequestUri();
 
         $origRequest = $this->getRequest()->getParam('originalRequest');
         $origRequest = json_decode($origRequest, true);
         $this->getRequest()->setRouteName($origRequest['route']);
         $this->getRequest()->setControllerName($origRequest['controller']);
         $this->getRequest()->setActionName($origRequest['action']);
+        $this->getRequest()->setRequestUri($origRequest['uri']);
+
         /** @var \Magento\Framework\View\Element\BlockInterface[] $blocks */
         $blocks = $this->_getBlocks();
         $data = [];
@@ -41,6 +44,7 @@ class Render extends \Magento\PageCache\Controller\Block
         $this->getRequest()->setRouteName($currentRoute);
         $this->getRequest()->setControllerName($currentControllerName);
         $this->getRequest()->setActionName($currentActionName);
+        $this->getRequest()->setRequestUri($currentRequestUri);
 
         $this->getResponse()->setPrivateHeaders(\Magento\PageCache\Helper\Data::PRIVATE_MAX_AGE_CACHE);
         $this->translateInline->processResponseBody($data);
diff --git a/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php b/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
index 56a23aa1ac84f28e78958214c2e6db5b2c190e70..5cac08b148cf2c401bf2b58fc2b7450b805be74b 100644
--- a/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
@@ -54,12 +54,14 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
                 'getControllerName',
                 'getModuleName',
                 'getActionName',
+                'getRequestUri',
                 'getParam',
                 'setParams',
                 'getParams',
                 'setModuleName',
                 'isSecure',
                 'setActionName',
+                'setRequestUri',
                 'getCookie'
             ],
             [],
@@ -122,6 +124,9 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())
             ->method('getActionName')
             ->will($this->returnValue('action'));
+        $this->requestMock->expects($this->once())
+            ->method('getRequestUri')
+            ->will($this->returnValue('uri'));
         $this->urlBuilderMock->expects($this->once())
             ->method('getUrl')
             ->willReturn($url);
@@ -153,10 +158,11 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
      * @param string $route
      * @param string $controller
      * @param string $action
+     * @param string $uri
      * @param string $expectedResult
      * @dataProvider getScriptOptionsPrivateContentDataProvider
      */
-    public function testGetScriptOptionsPrivateContent($url, $route, $controller, $action, $expectedResult)
+    public function testGetScriptOptionsPrivateContent($url, $route, $controller, $action, $uri, $expectedResult)
     {
         $handles = [
             'some',
@@ -179,6 +185,10 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
             ->method('getActionName')
             ->will($this->returnValue($action));
 
+        $this->requestMock->expects($this->once())
+            ->method('getRequestUri')
+            ->will($this->returnValue($uri));
+
         $this->urlBuilderMock->expects($this->once())
             ->method('getUrl')
             ->willReturn($url);
@@ -191,14 +201,17 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
 
     public function getScriptOptionsPrivateContentDataProvider()
     {
+        // @codingStandardsIgnoreStart
         return [
             'http' => [
-                'url' => 'http://some-name.com/page_cache/block/render',
-                'route' => 'route',
-                'controller' => 'controller',
-                'action' => 'action',
-                'expectedResult' => '~"originalRequest":{"route":"route","controller":"controller","action":"action"}~'
+                'url'            => 'http://some-name.com/page_cache/block/render',
+                'route'          => 'route',
+                'controller'     => 'controller',
+                'action'         => 'action',
+                'uri'            => 'uri',
+                'expectedResult' => '~"originalRequest":{"route":"route","controller":"controller","action":"action","uri":"uri"}~'
             ],
         ];
+        //@codingStandardsIgnoreEnd
     }
 }
diff --git a/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php b/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
index 0bd7fcee22587e778d4cf4d8a849cfa9b030d11a..a9493a7a4c3abb2b6ff6472ccfce3007d0089ea2 100644
--- a/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
@@ -88,11 +88,11 @@ class RenderTest extends \PHPUnit_Framework_TestCase
     public function testExecuteNoParams()
     {
         $this->requestMock->expects($this->once())->method('isAjax')->will($this->returnValue(true));
-        $this->requestMock->expects($this->at(8))
+        $this->requestMock->expects($this->at(10))
             ->method('getParam')
             ->with($this->equalTo('blocks'), $this->equalTo(''))
             ->will($this->returnValue(''));
-        $this->requestMock->expects($this->at(9))
+        $this->requestMock->expects($this->at(11))
             ->method('getParam')
             ->with($this->equalTo('handles'), $this->equalTo(''))
             ->will($this->returnValue(''));
@@ -103,7 +103,7 @@ class RenderTest extends \PHPUnit_Framework_TestCase
     {
         $blocks = ['block1', 'block2'];
         $handles = ['handle1', 'handle2'];
-        $originalRequest = '{"route":"route","controller":"controller","action":"action"}';
+        $originalRequest = '{"route":"route","controller":"controller","action":"action","uri":"uri"}';
         $expectedData = ['block1' => 'data1', 'block2' => 'data2'];
 
         $blockInstance1 = $this->getMock(
@@ -136,15 +136,18 @@ class RenderTest extends \PHPUnit_Framework_TestCase
             ->method('getActionName')
             ->will($this->returnValue('render'));
         $this->requestMock->expects($this->at(4))
+            ->method('getRequestUri')
+            ->will($this->returnValue('uri'));
+        $this->requestMock->expects($this->at(5))
             ->method('getParam')
             ->with($this->equalTo('originalRequest'))
             ->will($this->returnValue($originalRequest));
 
-        $this->requestMock->expects($this->at(8))
+        $this->requestMock->expects($this->at(10))
             ->method('getParam')
             ->with($this->equalTo('blocks'), $this->equalTo(''))
             ->will($this->returnValue(json_encode($blocks)));
-        $this->requestMock->expects($this->at(9))
+        $this->requestMock->expects($this->at(11))
             ->method('getParam')
             ->with($this->equalTo('handles'), $this->equalTo(''))
             ->will($this->returnValue(json_encode($handles)));
diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json
index ce7896f50957edfc63dc32ca1c2b335c880bd0d9..177149ae0507f0740580835e539ed2d580463e07 100644
--- a/app/code/Magento/PageCache/composer.json
+++ b/app/code/Magento/PageCache/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json
index b78f45d789049bbd5d2a03a892e688dbd0d40535..14ac37fb3841d3b2484bcc845eb6c3a3b007209a 100644
--- a/app/code/Magento/Payment/composer.json
+++ b/app/code/Magento/Payment/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json
index b81c38561e3dfc1e24c9565dec1988e79ff43715..89ec0fa6a5f609f96b50618f6808d0226b64d88b 100644
--- a/app/code/Magento/Persistent/composer.json
+++ b/app/code/Magento/Persistent/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-cron": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-cron": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json
index 715f9607506075b3e7fd70a2f1f691c63f78f3f5..c1b9888b1a664c25cd95cd21c01deb06e3391ab7 100644
--- a/app/code/Magento/ProductAlert/composer.json
+++ b/app/code/Magento/ProductAlert/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json
index 05d09f86f706c1689b7d04bf1f05527d584c2ff2..feb3c2a305eb11d5628536ff6db8c4d4edbd3cdb 100644
--- a/app/code/Magento/Quote/composer.json
+++ b/app/code/Magento/Quote/composer.json
@@ -3,26 +3,26 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-catalog-rule": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-sales-sequence": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-catalog-rule": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-sales-sequence": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json
index 89ac5cea8d624dd0d8c836196cda54c80b9daa21..3cc7e89699a26e62961a8f9d8bccad58fd3bfe80 100644
--- a/app/code/Magento/Reports/composer.json
+++ b/app/code/Magento/Reports/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-log": "0.74.0-beta14",
-        "magento/module-wishlist": "0.74.0-beta14",
-        "magento/module-review": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-downloadable": "0.74.0-beta14",
-        "magento/module-sales-rule": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-log": "0.74.0-beta15",
+        "magento/module-wishlist": "0.74.0-beta15",
+        "magento/module-review": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-downloadable": "0.74.0-beta15",
+        "magento/module-sales-rule": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json
index f36ff58438ce0c1b827ee011308bdf0710623bf6..0fc9194a0947da6360fac6428e4213e1da62e872 100644
--- a/app/code/Magento/RequireJs/composer.json
+++ b/app/code/Magento/RequireJs/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json
index b8bb07beb0f6fc1ba9a59a47a57b2329e504a074..14feee694679037a59fdcf4e3dca5b6443564732 100644
--- a/app/code/Magento/Review/composer.json
+++ b/app/code/Magento/Review/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-newsletter": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-newsletter": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-cookie": "0.74.0-beta14"
+        "magento/module-cookie": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json
index ca4231a1f2e5bd6127a2792c31677aca56da011a..0447b0bebdf0cc709578c91ba181a0e77a740623 100644
--- a/app/code/Magento/Rss/composer.json
+++ b/app/code/Magento/Rss/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json
index 5d0a656ebc0bb6db836a97268ddecc99906ad595..c36aaa58007967ca66a23806342c93c98daa4b66 100644
--- a/app/code/Magento/Rule/composer.json
+++ b/app/code/Magento/Rule/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json
index e9850b28b5ebbefd68476b14a55a1ea6f8bb63af..e6aa2aa21e933a73bf9e758b74af7541e6b4e447 100644
--- a/app/code/Magento/Sales/composer.json
+++ b/app/code/Magento/Sales/composer.json
@@ -3,35 +3,35 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-sales-rule": "0.74.0-beta14",
-        "magento/module-sales-sequence": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-gift-message": "0.74.0-beta14",
-        "magento/module-reports": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-wishlist": "0.74.0-beta14",
-        "magento/module-email": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-sales-rule": "0.74.0-beta15",
+        "magento/module-sales-sequence": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-gift-message": "0.74.0-beta15",
+        "magento/module-reports": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-wishlist": "0.74.0-beta15",
+        "magento/module-email": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sales/etc/extension_attributes.xml b/app/code/Magento/Sales/etc/extension_attributes.xml
deleted file mode 100644
index 970a003625928f218f2073cbb4262cd7d3876499..0000000000000000000000000000000000000000
--- a/app/code/Magento/Sales/etc/extension_attributes.xml
+++ /dev/null
@@ -1,14 +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/Api/etc/extension_attributes.xsd">
-    <extension_attributes for="Magento\Sales\Api\Data\OrderInterface">
-        <attribute code="applied_taxes" type="Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterface[]" />
-        <attribute code="item_applied_taxes" type="Magento\Tax\Api\Data\OrderTaxDetailsItemInterface[]" />
-        <attribute code="converting_from_quote" type="boolean" />
-    </extension_attributes>
-</config>
diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json
index e842b73e7b207cacc55274b6f11cb78df5d008ab..5623e73c6e5030c07a23b41f61470a63eb779210 100644
--- a/app/code/Magento/SalesRule/composer.json
+++ b/app/code/Magento/SalesRule/composer.json
@@ -3,26 +3,26 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-rule": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/module-reports": "0.74.0-beta14",
-        "magento/module-catalog-rule": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-rule": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/module-reports": "0.74.0-beta15",
+        "magento/module-catalog-rule": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/SalesSequence/composer.json b/app/code/Magento/SalesSequence/composer.json
index 825a8e16713a027df4ea0dd1da8d58e2af16c7ea..00619abdd4ccc375066864103e2f2594e5de9eb7 100644
--- a/app/code/Magento/SalesSequence/composer.json
+++ b/app/code/Magento/SalesSequence/composer.json
@@ -3,11 +3,11 @@
   "description": "N/A",
   "require": {
     "php": "~5.5.0|~5.6.0",
-    "magento/framework": "0.74.0-beta14",
+    "magento/framework": "0.74.0-beta15",
     "magento/magento-composer-installer": "*"
   },
   "type": "magento2-module",
-  "version": "0.74.0-beta14",
+  "version": "0.74.0-beta15",
   "license": [
     "OSL-3.0",
     "AFL-3.0"
diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json
index 98e1ce97eda1a03ced7574846f0a8d0d3efc2722..898482de7d85fbc0c0f4ebba192853c5ac88896a 100644
--- a/app/code/Magento/Search/composer.json
+++ b/app/code/Magento/Search/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog-search": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-reports": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog-search": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-reports": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/SendFriend/composer.json b/app/code/Magento/SendFriend/composer.json
index b6712222a0c651e7a30e4186b029c40789fd30ae..9ccd7790f6db459b2bbfb5d2b3016b3d68611ed0 100644
--- a/app/code/Magento/SendFriend/composer.json
+++ b/app/code/Magento/SendFriend/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json
index 26e8e039f88d70c2292afe9ffeae4601a4f1ea4a..62cb5208ad210c275d76e2a2c5d639ee489ffd14 100644
--- a/app/code/Magento/Shipping/composer.json
+++ b/app/code/Magento/Shipping/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-contact": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-payment": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-contact": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-payment": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "ext-gd": "*",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-fedex": "0.74.0-beta14",
-        "magento/module-ups": "0.74.0-beta14"
+        "magento/module-fedex": "0.74.0-beta15",
+        "magento/module-ups": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json
index 6e9cd7ca7d1d8f9a280952fcccdd76c9b45a844c..8f90104dde46560271d479946fbd291437c32623 100644
--- a/app/code/Magento/Sitemap/composer.json
+++ b/app/code/Magento/Sitemap/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog-url-rewrite": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json
index 3bb80c7c21ec85900b2c9c7ec5b15ce3a6c99176..a99890e03fc5a37af4abca38b6f045cc7237e1d4 100644
--- a/app/code/Magento/Store/composer.json
+++ b/app/code/Magento/Store/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php b/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php
index 0d5f9de2e47c25c3261c4322fe94226c12058b70..9e9227adffd3487bf3f12b21966caee4fedd922d 100644
--- a/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php
+++ b/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php
@@ -84,7 +84,8 @@ class ContextPlugin
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
     ) {
-        if (!$this->moduleManager->isEnabled('Magento_PageCache') ||
+        if (!$this->customerSession->isLoggedIn() ||
+            !$this->moduleManager->isEnabled('Magento_PageCache') ||
             !$this->cacheConfig->isEnabled() ||
             !$this->taxHelper->isCatalogPriceDisplayAffectedByTax()) {
             return $proceed($request);
diff --git a/app/code/Magento/Tax/Model/Observer.php b/app/code/Magento/Tax/Model/Observer.php
index 6f8d41fbb17e96ece0bcaad9c87cb57e14498fac..25bf3ea1b56461e019947d147ca109ca6297151a 100644
--- a/app/code/Magento/Tax/Model/Observer.php
+++ b/app/code/Magento/Tax/Model/Observer.php
@@ -20,16 +20,6 @@ class Observer
      */
     protected $_taxData;
 
-    /**
-     * @var \Magento\Tax\Model\Sales\Order\TaxFactory
-     */
-    protected $_orderTaxFactory;
-
-    /**
-     * @var \Magento\Sales\Model\Order\Tax\ItemFactory
-     */
-    protected $_taxItemFactory;
-
     /**
      * @var \Magento\Tax\Model\Calculation
      */
@@ -57,8 +47,6 @@ class Observer
 
     /**
      * @param \Magento\Tax\Helper\Data $taxData
-     * @param \Magento\Tax\Model\Sales\Order\TaxFactory $orderTaxFactory
-     * @param \Magento\Sales\Model\Order\Tax\ItemFactory $taxItemFactory
      * @param \Magento\Tax\Model\Calculation $calculation
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Tax\Model\Resource\Report\TaxFactory $reportTaxFactory
@@ -67,8 +55,6 @@ class Observer
      */
     public function __construct(
         \Magento\Tax\Helper\Data $taxData,
-        \Magento\Tax\Model\Sales\Order\TaxFactory $orderTaxFactory,
-        \Magento\Sales\Model\Order\Tax\ItemFactory $taxItemFactory,
         \Magento\Tax\Model\Calculation $calculation,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Tax\Model\Resource\Report\TaxFactory $reportTaxFactory,
@@ -76,8 +62,6 @@ class Observer
         \Magento\Framework\Registry $registry
     ) {
         $this->_taxData = $taxData;
-        $this->_orderTaxFactory = $orderTaxFactory;
-        $this->_taxItemFactory = $taxItemFactory;
         $this->_calculation = $calculation;
         $this->_localeDate = $localeDate;
         $this->_reportTaxFactory = $reportTaxFactory;
@@ -114,145 +98,6 @@ class Observer
         }
     }
 
-    /**
-     * Save order tax information
-     *
-     * @param \Magento\Framework\Event\Observer $observer
-     * @return void
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     * @SuppressWarnings(PHPMD.NPathComplexity)
-     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
-     */
-    public function salesEventOrderAfterSave(\Magento\Framework\Event\Observer $observer)
-    {
-        $order = $observer->getEvent()->getOrder();
-
-        if (!$order->getConvertingFromQuote() || $order->getAppliedTaxIsSaved()) {
-            return;
-        }
-
-        $taxesAttr = $order->getCustomAttribute('applied_taxes');
-        if (is_null($taxesAttr) || !is_array($taxesAttr->getValue())) {
-            $taxes = [];
-        } else {
-            $taxes = $taxesAttr->getValue();
-        }
-
-        $getTaxesForItemsAttr = $order->getCustomAttribute('item_applied_taxes');
-        if (is_null($getTaxesForItemsAttr) || !is_array($getTaxesForItemsAttr->getValue())) {
-            $getTaxesForItems = [];
-        } else {
-            $getTaxesForItems = $getTaxesForItemsAttr->getValue();
-        }
-
-        $ratesIdQuoteItemId = [];
-        foreach ($getTaxesForItems as $taxesArray) {
-            foreach ($taxesArray as $rates) {
-                if (count($rates['rates']) == 1) {
-                    $ratesIdQuoteItemId[$rates['id']][] = [
-                        'id' => $rates['item_id'],
-                        'percent' => $rates['percent'],
-                        'code' => $rates['rates'][0]['code'],
-                        'associated_item_id' => $rates['associated_item_id'],
-                        'item_type' => $rates['item_type'],
-                        'amount' => $rates['amount'],
-                        'base_amount' => $rates['base_amount'],
-                        'real_amount' => $rates['amount'],
-                        'real_base_amount' => $rates['base_amount'],
-                    ];
-                } else {
-                    $percentSum = 0;
-                    foreach ($rates['rates'] as $rate) {
-                        $real_amount = $rates['amount'] * $rate['percent'] / $rates['percent'];
-                        $real_base_amount = $rates['base_amount'] * $rate['percent'] / $rates['percent'];
-                        $ratesIdQuoteItemId[$rates['id']][] = [
-                            'id' => $rates['item_id'],
-                            'percent' => $rate['percent'],
-                            'code' => $rate['code'],
-                            'associated_item_id' => $rates['associated_item_id'],
-                            'item_type' => $rates['item_type'],
-                            'amount' => $rates['amount'],
-                            'base_amount' => $rates['base_amount'],
-                            'real_amount' => $real_amount,
-                            'real_base_amount' => $real_base_amount,
-                        ];
-                        $percentSum += $rate['percent'];
-                    }
-                }
-            }
-        }
-
-        foreach ($taxes as $row) {
-            $id = $row['id'];
-            foreach ($row['rates'] as $tax) {
-                if (is_null($row['percent'])) {
-                    $baseRealAmount = $row['base_amount'];
-                } else {
-                    if ($row['percent'] == 0 || $tax['percent'] == 0) {
-                        continue;
-                    }
-                    $baseRealAmount = $row['base_amount'] / $row['percent'] * $tax['percent'];
-                }
-                $hidden = isset($row['hidden']) ? $row['hidden'] : 0;
-                $priority = isset($tax['priority']) ? $tax['priority'] : 0;
-                $position = isset($tax['position']) ? $tax['position'] : 0;
-                $process = isset($row['process']) ? $row['process'] : 0;
-                $data = [
-                    'order_id' => $order->getId(),
-                    'code' => $tax['code'],
-                    'title' => $tax['title'],
-                    'hidden' => $hidden,
-                    'percent' => $tax['percent'],
-                    'priority' => $priority,
-                    'position' => $position,
-                    'amount' => $row['amount'],
-                    'base_amount' => $row['base_amount'],
-                    'process' => $process,
-                    'base_real_amount' => $baseRealAmount,
-                ];
-
-                /** @var $orderTax \Magento\Tax\Model\Sales\Order\Tax */
-                $orderTax = $this->_orderTaxFactory->create();
-                $result = $orderTax->setData($data)->save();
-
-                if (isset($ratesIdQuoteItemId[$id])) {
-                    foreach ($ratesIdQuoteItemId[$id] as $quoteItemId) {
-                        if ($quoteItemId['code'] == $tax['code']) {
-                            $itemId = null;
-                            $associatedItemId = null;
-                            if (isset($quoteItemId['id'])) {
-                                //This is a product item
-                                $item = $order->getItemByQuoteItemId($quoteItemId['id']);
-                                $itemId = $item->getId();
-                            } elseif (isset($quoteItemId['associated_item_id'])) {
-                                //This item is associated with a product item
-                                $item = $order->getItemByQuoteItemId($quoteItemId['associated_item_id']);
-                                $associatedItemId = $item->getId();
-                            }
-
-                            $data = [
-                                'item_id' => $itemId,
-                                'tax_id' => $result->getTaxId(),
-                                'tax_percent' => $quoteItemId['percent'],
-                                'associated_item_id' => $associatedItemId,
-                                'amount' => $quoteItemId['amount'],
-                                'base_amount' => $quoteItemId['base_amount'],
-                                'real_amount' => $quoteItemId['real_amount'],
-                                'real_base_amount' => $quoteItemId['real_base_amount'],
-                                'taxable_item_type' => $quoteItemId['item_type'],
-                            ];
-                            /** @var $taxItem \Magento\Sales\Model\Order\Tax\Item */
-                            $taxItem = $this->_taxItemFactory->create();
-                            $taxItem->setData($data)->save();
-                        }
-                    }
-                }
-            }
-        }
-
-        $order->setAppliedTaxIsSaved(true);
-    }
-
     /**
      * Refresh sales tax report statistics for last day
      *
diff --git a/app/code/Magento/Tax/Model/Plugin/OrderSave.php b/app/code/Magento/Tax/Model/Plugin/OrderSave.php
new file mode 100644
index 0000000000000000000000000000000000000000..145c98ad60e38784b8c52cc9818ffff9fa5cd6bc
--- /dev/null
+++ b/app/code/Magento/Tax/Model/Plugin/OrderSave.php
@@ -0,0 +1,184 @@
+<?php
+/**
+ *
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tax\Model\Plugin;
+
+class OrderSave
+{
+    /**
+     * @var \Magento\Tax\Model\Sales\Order\TaxFactory
+     */
+    protected $orderTaxFactory;
+
+    /**
+     * @var \Magento\Sales\Model\Order\Tax\ItemFactory
+     */
+    protected $taxItemFactory;
+
+    /**
+     * @param \Magento\Tax\Model\Sales\Order\TaxFactory $orderTaxFactory
+     * @param \Magento\Sales\Model\Order\Tax\ItemFactory $taxItemFactory
+     */
+    public function __construct(
+        \Magento\Tax\Model\Sales\Order\TaxFactory $orderTaxFactory,
+        \Magento\Sales\Model\Order\Tax\ItemFactory $taxItemFactory
+    ) {
+        $this->orderTaxFactory = $orderTaxFactory;
+        $this->taxItemFactory = $taxItemFactory;
+    }
+
+    /**
+     * Save order tax
+     *
+     * @param \Magento\Sales\Api\OrderRepositoryInterface $subject
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return \Magento\Sales\Api\Data\OrderInterface
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function afterSave(
+        \Magento\Sales\Api\OrderRepositoryInterface $subject,
+        \Magento\Sales\Api\Data\OrderInterface $order
+    ) {
+        $this->saveOrderTax($order);
+        return $order;
+    }
+
+    /**
+     * @param \Magento\Sales\Api\Data\OrderInterface $order
+     * @return $this
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    protected function saveOrderTax(\Magento\Sales\Api\Data\OrderInterface $order)
+    {
+        $extensionAttribute = $order->getExtensionAttributes();
+        if (!$extensionAttribute ||
+            !$extensionAttribute->getConvertingFromQuote() ||
+            $order->getAppliedTaxIsSaved()) {
+            return;
+        }
+
+        $taxes = $extensionAttribute->getAppliedTaxes();
+        if ($taxes == null) {
+            $taxes = [];
+        }
+
+        $taxesForItems = $extensionAttribute->getItemAppliedTaxes();
+        if ($taxesForItems == null) {
+            $taxesForItems = [];
+        }
+
+        $ratesIdQuoteItemId = [];
+        foreach ($taxesForItems as $taxesArray) {
+            foreach ($taxesArray as $rates) {
+                if (count($rates['rates']) == 1) {
+                    $ratesIdQuoteItemId[$rates['id']][] = [
+                        'id' => $rates['item_id'],
+                        'percent' => $rates['percent'],
+                        'code' => $rates['rates'][0]['code'],
+                        'associated_item_id' => $rates['associated_item_id'],
+                        'item_type' => $rates['item_type'],
+                        'amount' => $rates['amount'],
+                        'base_amount' => $rates['base_amount'],
+                        'real_amount' => $rates['amount'],
+                        'real_base_amount' => $rates['base_amount'],
+                    ];
+                } else {
+                    $percentSum = 0;
+                    foreach ($rates['rates'] as $rate) {
+                        $realAmount = $rates['amount'] * $rate['percent'] / $rates['percent'];
+                        $realBaseAmount = $rates['base_amount'] * $rate['percent'] / $rates['percent'];
+                        $ratesIdQuoteItemId[$rates['id']][] = [
+                            'id' => $rates['item_id'],
+                            'percent' => $rate['percent'],
+                            'code' => $rate['code'],
+                            'associated_item_id' => $rates['associated_item_id'],
+                            'item_type' => $rates['item_type'],
+                            'amount' => $rates['amount'],
+                            'base_amount' => $rates['base_amount'],
+                            'real_amount' => $realAmount,
+                            'real_base_amount' => $realBaseAmount,
+                        ];
+                        $percentSum += $rate['percent'];
+                    }
+                }
+            }
+        }
+
+        foreach ($taxes as $row) {
+            $id = $row['id'];
+            foreach ($row['rates'] as $tax) {
+                if ($row['percent'] == null) {
+                    $baseRealAmount = $row['base_amount'];
+                } else {
+                    if ($row['percent'] == 0 || $tax['percent'] == 0) {
+                        continue;
+                    }
+                    $baseRealAmount = $row['base_amount'] / $row['percent'] * $tax['percent'];
+                }
+                $hidden = isset($row['hidden']) ? $row['hidden'] : 0;
+                $priority = isset($tax['priority']) ? $tax['priority'] : 0;
+                $position = isset($tax['position']) ? $tax['position'] : 0;
+                $process = isset($row['process']) ? $row['process'] : 0;
+                $data = [
+                    'order_id' => $order->getEntityId(),
+                    'code' => $tax['code'],
+                    'title' => $tax['title'],
+                    'hidden' => $hidden,
+                    'percent' => $tax['percent'],
+                    'priority' => $priority,
+                    'position' => $position,
+                    'amount' => $row['amount'],
+                    'base_amount' => $row['base_amount'],
+                    'process' => $process,
+                    'base_real_amount' => $baseRealAmount,
+                ];
+
+                /** @var $orderTax \Magento\Tax\Model\Sales\Order\Tax */
+                $orderTax = $this->orderTaxFactory->create();
+                $result = $orderTax->setData($data)->save();
+
+                if (isset($ratesIdQuoteItemId[$id])) {
+                    foreach ($ratesIdQuoteItemId[$id] as $quoteItemId) {
+                        if ($quoteItemId['code'] == $tax['code']) {
+                            $itemId = null;
+                            $associatedItemId = null;
+                            if (isset($quoteItemId['id'])) {
+                                //This is a product item
+                                $item = $order->getItemByQuoteItemId($quoteItemId['id']);
+                                $itemId = $item->getId();
+                            } elseif (isset($quoteItemId['associated_item_id'])) {
+                                //This item is associated with a product item
+                                $item = $order->getItemByQuoteItemId($quoteItemId['associated_item_id']);
+                                $associatedItemId = $item->getId();
+                            }
+
+                            $data = [
+                                'item_id' => $itemId,
+                                'tax_id' => $result->getTaxId(),
+                                'tax_percent' => $quoteItemId['percent'],
+                                'associated_item_id' => $associatedItemId,
+                                'amount' => $quoteItemId['amount'],
+                                'base_amount' => $quoteItemId['base_amount'],
+                                'real_amount' => $quoteItemId['real_amount'],
+                                'real_base_amount' => $quoteItemId['real_base_amount'],
+                                'taxable_item_type' => $quoteItemId['item_type'],
+                            ];
+                            /** @var $taxItem \Magento\Sales\Model\Order\Tax\Item */
+                            $taxItem = $this->taxItemFactory->create();
+                            $taxItem->setData($data)->save();
+                        }
+                    }
+                }
+            }
+        }
+
+        $order->setAppliedTaxIsSaved(true);
+        return $this;
+    }
+}
diff --git a/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php b/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php
index c269ee02dad4e39942e757265796d51cd4f095fd..f45aebc00cbbc60b9c0b60da06024f69f23b7c0d 100644
--- a/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php
+++ b/app/code/Magento/Tax/Model/Quote/ToOrderConverter.php
@@ -16,6 +16,20 @@ class ToOrderConverter
      */
     protected $quoteAddress;
 
+    /**
+     * @var \Magento\Sales\Api\Data\OrderExtensionFactory
+     */
+    protected $orderExtensionFactory;
+
+    /**
+     * @param \Magento\Sales\Api\Data\OrderExtensionFactory $orderExtensionFactory
+     */
+    public function __construct(
+        \Magento\Sales\Api\Data\OrderExtensionFactory $orderExtensionFactory
+    ) {
+        $this->orderExtensionFactory = $orderExtensionFactory;
+    }
+
     /**
      * @param QuoteAddressToOrder $subject
      * @param QuoteAddress $address
@@ -39,21 +53,20 @@ class ToOrderConverter
     {
         /** @var \Magento\Sales\Model\Order $order */
         $taxes = $this->quoteAddress->getAppliedTaxes();
-        if (is_array($taxes)) {
-            if (is_array($order->getAppliedTaxes())) {
-                $taxes = array_merge($order->getAppliedTaxes(), $taxes);
-            }
-            $order->setCustomAttribute('applied_taxes', $taxes);
-            $order->setCustomAttribute('converting_from_quote', true);
+        $extensionAttributes = $order->getExtensionAttributes();
+        if ($extensionAttributes == null) {
+            $extensionAttributes = $this->orderExtensionFactory->create();
+        }
+        if (!empty($taxes)) {
+            $extensionAttributes->setAppliedTaxes($taxes);
+            $extensionAttributes->setConvertingFromQuote(true);
         }
 
         $itemAppliedTaxes = $this->quoteAddress->getItemsAppliedTaxes();
-        if (is_array($itemAppliedTaxes)) {
-            if (is_array($order->getItemAppliedTaxes())) {
-                $itemAppliedTaxes = array_merge($order->getItemAppliedTaxes(), $itemAppliedTaxes);
-            }
-            $order->setCustomAttribute('item_applied_taxes', $itemAppliedTaxes);
+        if (!empty($itemAppliedTaxes)) {
+            $extensionAttributes->setItemAppliedTaxes($itemAppliedTaxes);
         }
+        $order->setExtensionAttributes($extensionAttributes);
         return $order;
     }
 }
diff --git a/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php b/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php
index 66ad1afdbcad98f745caad2d25bc55af4ab53a91..a220173520494df90e106aa9c76734c667a83024 100644
--- a/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php
+++ b/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php
@@ -12,6 +12,16 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
      */
     protected $taxHelperMock;
 
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelperMock;
+
+    /**
+     * @var \Magento\Weee\Model\Tax
+     */
+    protected $weeeTaxMock;
+
     /**
      * @var \Magento\Framework\App\Http\Context
      */
@@ -49,6 +59,14 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
+        $this->weeeHelperMock = $this->getMockBuilder('Magento\Weee\Helper\Data')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->weeeTaxMock = $this->getMockBuilder('\Magento\Weee\Model\Tax')
+            ->disableOriginalConstructor()
+            ->getMock();
+
         $this->httpContextMock = $this->getMockBuilder('Magento\Framework\App\Http\Context')
             ->disableOriginalConstructor()
             ->getMock();
@@ -60,7 +78,8 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
         $this->customerSessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
             ->disableOriginalConstructor()
             ->setMethods([
-                'getDefaultTaxBillingAddress', 'getDefaultTaxShippingAddress', 'getCustomerTaxClassId'
+                'getDefaultTaxBillingAddress', 'getDefaultTaxShippingAddress', 'getCustomerTaxClassId',
+                'getWebsiteId', 'isLoggedIn'
             ])
             ->getMock();
 
@@ -78,57 +97,87 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
                 'customerSession' => $this->customerSessionMock,
                 'httpContext' => $this->httpContextMock,
                 'calculation' => $this->taxCalculationMock,
+                'weeeTax' => $this->weeeTaxMock,
                 'taxHelper' => $this->taxHelperMock,
+                'weeeHelper' => $this->weeeHelperMock,
                 'moduleManager' => $this->moduleManagerMock,
                 'cacheConfig' => $this->cacheConfigMock
             ]
         );
     }
 
-    public function testAroundDispatch()
+    /**
+     * @param bool $cache
+     * @param bool $taxEnabled
+     * @param bool $loggedIn
+     * @dataProvider dataProviderAroundDispatch
+     */
+    public function testAroundDispatch($cache, $taxEnabled, $loggedIn)
     {
+        $this->customerSessionMock->expects($this->any())
+            ->method('isLoggedIn')
+            ->willReturn($loggedIn);
+
         $this->moduleManagerMock->expects($this->any())
             ->method('isEnabled')
             ->with('Magento_PageCache')
-            ->willReturn(true);
+            ->willReturn($cache);
 
         $this->cacheConfigMock->expects($this->any())
             ->method('isEnabled')
-            ->willReturn(true);
-
-        $this->taxHelperMock->expects($this->any())
-            ->method('isCatalogPriceDisplayAffectedByTax')
-            ->willReturn(true);
-
-        $this->customerSessionMock->expects($this->once())
-            ->method('getDefaultTaxBillingAddress')
-            ->willReturn(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
-        $this->customerSessionMock->expects($this->once())
-            ->method('getDefaultTaxShippingAddress')
-            ->willReturn(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
-        $this->customerSessionMock->expects($this->once())
-            ->method('getCustomerTaxClassId')
-            ->willReturn(1);
-
-        $this->taxCalculationMock->expects($this->once())
-            ->method('getTaxRates')
-            ->with(
-                ['country_id' => 1, 'region_id' => null, 'postcode' => 11111],
-                ['country_id' => 1, 'region_id' => null, 'postcode' => 11111],
-                1
-            )
-            ->willReturn([]);
-
-        $this->httpContextMock->expects($this->once())
-            ->method('setValue')
-            ->with('tax_rates', [], 0);
-
-        $action = $this->objectManager->getObject('Magento\Framework\App\Action\Action');
-        $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
-        $expectedResult = 'expectedResult';
-        $proceed = function ($request) use ($expectedResult) {
-            return $expectedResult;
-        };
-        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+            ->willReturn($cache);
+
+        if ($cache && $loggedIn) {
+            $this->taxHelperMock->expects($this->any())
+                ->method('isCatalogPriceDisplayAffectedByTax')
+                ->willReturn($taxEnabled);
+
+            if ($taxEnabled) {
+                $this->customerSessionMock->expects($this->once())
+                    ->method('getDefaultTaxBillingAddress')
+                    ->willReturn(['country_id' => 1, 'region_id' => 1, 'postcode' => 11111]);
+                $this->customerSessionMock->expects($this->once())
+                    ->method('getDefaultTaxShippingAddress')
+                    ->willReturn(['country_id' => 1, 'region_id' => 1, 'postcode' => 11111]);
+                $this->customerSessionMock->expects($this->once())
+                    ->method('getCustomerTaxClassId')
+                    ->willReturn(1);
+
+                $this->taxCalculationMock->expects($this->once())
+                    ->method('getTaxRates')
+                    ->with(
+                        ['country_id' => 1, 'region_id' => 1, 'postcode' => 11111],
+                        ['country_id' => 1, 'region_id' => 1, 'postcode' => 11111],
+                        1
+                    )
+                    ->willReturn([]);
+
+                $this->httpContextMock->expects($this->any())
+                    ->method('setValue')
+                    ->with('tax_rates', [], 0);
+            }
+
+            $action = $this->objectManager->getObject('Magento\Framework\App\Action\Action');
+            $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
+            $expectedResult = 'expectedResult';
+            $proceed = function ($request) use ($expectedResult) {
+                return $expectedResult;
+            };
+            $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+        }
+    }
+
+    /**
+     * @return array
+     */
+    public function dataProviderAroundDispatch()
+    {
+        return [
+            [false, false, false],
+            [true, true, false],
+            [true, true, true],
+            [true, false, true],
+            [true, true, true]
+        ];
     }
 }
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Observer/SessionTest.php b/app/code/Magento/Tax/Test/Unit/Model/Observer/SessionTest.php
index 8ef95ead2e386d8e95a03ff03d02a76b8350c89b..1226fa6e9d35d62140f1abe8bae59273c496910d 100755
--- a/app/code/Magento/Tax/Test/Unit/Model/Observer/SessionTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Observer/SessionTest.php
@@ -64,7 +64,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase
         $this->customerSessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
             ->disableOriginalConstructor()
             ->setMethods([
-                'setCustomerTaxClassId', 'setDefaultTaxBillingAddress', 'setDefaultTaxShippingAddress'
+                'setCustomerTaxClassId', 'setDefaultTaxBillingAddress', 'setDefaultTaxShippingAddress', 'setWebsiteId'
             ])
             ->getMock();
 
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Plugin/OrderSaveTest.php b/app/code/Magento/Tax/Test/Unit/Model/Plugin/OrderSaveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f50e79c9658b377c088ab51aed488d2494ee8f82
--- /dev/null
+++ b/app/code/Magento/Tax/Test/Unit/Model/Plugin/OrderSaveTest.php
@@ -0,0 +1,463 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tax\Test\Unit\Model\Plugin;
+
+use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+class OrderSaveTest extends \PHPUnit_Framework_TestCase
+{
+    const ORDERID = 123;
+    const ITEMID = 151;
+    const ORDER_ITEM_ID = 116;
+
+    /**
+     * @var \Magento\Tax\Model\Sales\Order\TaxFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $orderTaxFactoryMock;
+
+    /**
+     * @var \Magento\Sales\Model\Order\Tax\ItemFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $taxItemFactoryMock;
+
+    /**
+     * @var \Magento\Sales\Api\OrderRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $subjectMock;
+
+    /**
+     * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Tax\Model\Plugin\OrderSave
+     */
+    protected $model;
+
+    public function setUp()
+    {
+        $this->orderTaxFactoryMock = $this->getMockBuilder(
+            '\Magento\Tax\Model\Sales\Order\TaxFactory'
+        )->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->taxItemFactoryMock = $this->getMockBuilder('\Magento\Sales\Model\Order\Tax\ItemFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->subjectMock = $this->getMockForAbstractClass('\Magento\Sales\Api\OrderRepositoryInterface');
+
+        $this->objectManagerHelper = new ObjectManager($this);
+        $this->model = $this->objectManagerHelper->getObject(
+            '\Magento\Tax\Model\Plugin\OrderSave',
+            [
+                'orderTaxFactory' => $this->orderTaxFactoryMock,
+                'taxItemFactory' => $this->taxItemFactoryMock,
+            ]
+        );
+    }
+
+    protected function setupOrderMock()
+    {
+        $orderMock = $this->getMockBuilder('\Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'getExtensionAttributes',
+                    'getAppliedTaxIsSaved',
+                    'getItemByQuoteItemId',
+                    'setAppliedTaxIsSaved',
+                    'getEntityId',
+                ]
+            )->getMock();
+
+        return $orderMock;
+    }
+
+    protected function setupExtensionAttributeMock()
+    {
+        $orderExtensionAttributeMock = $this->getMockBuilder('\Magento\Sales\Api\Data\OrderExtensionInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'getAppliedTaxes',
+                    'getConvertingFromQuote',
+                    'getItemAppliedTaxes',
+                ]
+            )->getMock();
+
+        return $orderExtensionAttributeMock;
+    }
+
+    protected function verifyOrderTaxes($expectedTaxes)
+    {
+        $index = 0;
+        $orderTaxes = [];
+        foreach ($expectedTaxes as $orderTaxId => $orderTaxData) {
+            $orderTaxMock = $this->getMockBuilder('\Magento\Tax\Model\Sales\Order\Tax')
+                ->disableOriginalConstructor()
+                ->setMethods(
+                    [
+                        'getTaxId',
+                        'setData',
+                        'save',
+                    ]
+                )->getMock();
+            $orderTaxMock->expects($this->once())
+                ->method('setData')
+                ->with($orderTaxData)
+                ->willReturnSelf();
+            $orderTaxMock->expects($this->once())
+                ->method('save')
+                ->willReturnSelf();
+            $orderTaxMock->expects($this->atLeastOnce())
+                ->method('getTaxId')
+                ->willReturn($orderTaxId);
+            $this->orderTaxFactoryMock->expects($this->at($index))
+                ->method('create')
+                ->willReturn($orderTaxMock);
+            $orderTaxes[] = $orderTaxMock;
+            $index++;
+        }
+    }
+
+    public function verifyItemTaxes($expectedItemTaxes)
+    {
+        $index = 0;
+        $itemTaxes = [];
+        foreach ($expectedItemTaxes as $itemTax) {
+            $itemTaxMock = $this->getMockBuilder('\Magento\Tax\Model\Sales\Order\Tax\Item')
+                ->disableOriginalConstructor()
+                ->setMethods(
+                    [
+                        'setData',
+                        'save',
+                    ]
+                )->getMock();
+            $itemTaxMock->expects($this->once())
+                ->method('setData')
+                ->with($itemTax)
+                ->willReturnSelf();
+            $itemTaxMock->expects($this->once())
+                ->method('save')
+                ->willReturnSelf();
+            $this->taxItemFactoryMock->expects($this->at($index))
+                ->method('create')
+                ->willReturn($itemTaxMock);
+            $itemTaxes[] = $itemTaxMock;
+            $index++;
+        }
+    }
+
+    /**
+     * @dataProvider afterSaveDataProvider
+     */
+    public function testAfterSave(
+        $appliedTaxes,
+        $itemAppliedTaxes,
+        $expectedTaxes,
+        $expectedItemTaxes
+    ) {
+        $orderMock = $this->setupOrderMock();
+
+        $extensionAttributeMock = $this->setupExtensionAttributeMock();
+        $extensionAttributeMock->expects($this->any())
+            ->method('getConvertingFromQuote')
+            ->willReturn(true);
+        $extensionAttributeMock->expects($this->any())
+            ->method('getAppliedTaxes')
+            ->willReturn($appliedTaxes);
+        $extensionAttributeMock->expects($this->any())
+            ->method('getItemAppliedTaxes')
+            ->willReturn($itemAppliedTaxes);
+
+
+        $orderItemMock = $this->getMockBuilder('\Magento\Sales\Model\Order\Item')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', ])
+            ->getMock();
+        $orderItemMock->expects($this->atLeastOnce())
+            ->method('getId')
+            ->willReturn(self::ORDER_ITEM_ID);
+        $orderMock->expects($this->once())
+            ->method('getAppliedTaxIsSaved')
+            ->willReturn(false);
+        $orderMock->expects($this->once())
+            ->method('getExtensionAttributes')
+            ->willReturn($extensionAttributeMock);
+        $orderMock->expects($this->atLeastOnce())
+            ->method('getItemByQuoteItemId')
+            ->with(self::ITEMID)
+            ->willReturn($orderItemMock);
+        $orderMock->expects($this->atLeastOnce())
+            ->method('getEntityId')
+            ->willReturn(self::ORDERID);
+
+        $orderMock->expects($this->once())
+            ->method('setAppliedTaxIsSaved')
+            ->with(true);
+
+        $this->verifyOrderTaxes($expectedTaxes);
+        $this->verifyItemTaxes($expectedItemTaxes);
+
+        $this->assertEquals($orderMock, $this->model->afterSave($this->subjectMock, $orderMock));
+    }
+
+    /**
+     * @return array
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function afterSaveDataProvider()
+    {
+        return [
+            //one item with shipping
+            //three tax rates: state and national tax rates of 6 and 5 percent with priority 0
+            //city tax rate of 3 percent with priority 1
+            'item_with_shipping_three_tax' => [
+                'applied_taxes' => [
+                    [
+                        'amount' => 0.66,
+                        'base_amount' => 0.66,
+                        'percent' => 11,
+                        'id' => 'ILUS',
+                        'rates' => [
+                            [
+                                'percent' => 6,
+                                'code' => 'IL',
+                                'title' => 'IL',
+                            ],
+                            [
+                                'percent' => 5,
+                                'code' => 'US',
+                                'title' => 'US',
+                            ],
+                        ],
+                    ],
+                    [
+                        'amount' => 0.2,
+                        'base_amount' => 0.2,
+                        'percent' => 3.33,
+                        'id' => 'CityTax',
+                        'rates' => [
+                            [
+                                'percent' => 3,
+                                'code' => 'CityTax',
+                                'title' => 'CityTax',
+                            ],
+                        ],
+                    ],
+                ],
+                'item_applied_taxes' => [
+                    //item tax, three tax rates
+                    [
+                        //first two taxes are combined
+                        [
+                            'amount' => 0.11,
+                            'base_amount' => 0.11,
+                            'percent' => 11,
+                            'id' => 'ILUS',
+                            'rates' => [
+                                [
+                                    'percent' => 6,
+                                    'code' => 'IL',
+                                    'title' => 'IL',
+                                ],
+                                [
+                                    'percent' => 5,
+                                    'code' => 'US',
+                                    'title' => 'US',
+                                ],
+                            ],
+                            'item_id' => self::ITEMID,
+                            'item_type' => 'product',
+                            'associated_item_id' => null,
+                        ],
+                        //city tax
+                        [
+                            'amount' => 0.03,
+                            'base_amount' => 0.03,
+                            'percent' => 3.33,
+                            'id' => 'CityTax',
+                            'rates' => [
+                                [
+                                    'percent' => 3,
+                                    'code' => 'CityTax',
+                                    'title' => 'CityTax',
+                                ],
+                            ],
+                            'item_id' => self::ITEMID,
+                            'item_type' => 'product',
+                            'associated_item_id' => null,
+                        ],
+                    ],
+                    //shipping tax
+                    [
+                        //first two taxes are combined
+                        [
+                            'amount' => 0.55,
+                            'base_amount' => 0.55,
+                            'percent' => 11,
+                            'id' => 'ILUS',
+                            'rates' => [
+                                [
+                                    'percent' => 6,
+                                    'code' => 'IL',
+                                    'title' => 'IL',
+                                ],
+                                [
+                                    'percent' => 5,
+                                    'code' => 'US',
+                                    'title' => 'US',
+                                ],
+                            ],
+                            'item_id' => null,
+                            'item_type' => 'shipping',
+                            'associated_item_id' => null,
+                        ],
+                        //city tax
+                        [
+                            'amount' => 0.17,
+                            'base_amount' => 0.17,
+                            'percent' => 3.33,
+                            'id' => 'CityTax',
+                            'rates' => [
+                                [
+                                    'percent' => 3,
+                                    'code' => 'CityTax',
+                                    'title' => 'CityTax',
+                                ],
+                            ],
+                            'item_id' => null,
+                            'item_type' => 'shipping',
+                            'associated_item_id' => null,
+                        ],
+                    ],
+                ],
+                'expected_order_taxes' => [
+                    //state tax
+                    '35' => [
+                        'order_id' => self::ORDERID,
+                        'code' => 'IL',
+                        'title' => 'IL',
+                        'hidden' => 0,
+                        'percent' => 6,
+                        'priority' => 0,
+                        'position' => 0,
+                        'amount' => 0.66,
+                        'base_amount' => 0.66,
+                        'process' => 0,
+                        'base_real_amount' => 0.36,
+                    ],
+                    //federal tax
+                    '36' => [
+                        'order_id' => self::ORDERID,
+                        'code' => 'US',
+                        'title' => 'US',
+                        'hidden' => 0,
+                        'percent' => 5,
+                        'priority' => 0,
+                        'position' => 0,
+                        'amount' => 0.66, //combined amount
+                        'base_amount' => 0.66,
+                        'process' => 0,
+                        'base_real_amount' => 0.3, //portion for specific rate
+                    ],
+                    //city tax
+                    '37' => [
+                        'order_id' => self::ORDERID,
+                        'code' => 'CityTax',
+                        'title' => 'CityTax',
+                        'hidden' => 0,
+                        'percent' => 3,
+                        'priority' => 0,
+                        'position' => 0,
+                        'amount' => 0.2, //combined amount
+                        'base_amount' => 0.2,
+                        'process' => 0,
+                        'base_real_amount' => 0.18018018018018, //this number is meaningless since this is single rate
+                    ],
+                ],
+                'expected_item_taxes' => [
+                    [
+                        //state tax for item
+                        'item_id' => self::ORDER_ITEM_ID,
+                        'tax_id' => '35',
+                        'tax_percent' => 6,
+                        'associated_item_id' => null,
+                        'amount' => 0.11,
+                        'base_amount' => 0.11,
+                        'real_amount' => 0.06,
+                        'real_base_amount' => 0.06,
+                        'taxable_item_type' => 'product',
+                    ],
+                    [
+                        //state tax for shipping
+                        'item_id' => null,
+                        'tax_id' => '35',
+                        'tax_percent' => 6,
+                        'associated_item_id' => null,
+                        'amount' => 0.55,
+                        'base_amount' => 0.55,
+                        'real_amount' => 0.3,
+                        'real_base_amount' => 0.3,
+                        'taxable_item_type' => 'shipping',
+                    ],
+                    [
+                        //federal tax for item
+                        'item_id' => self::ORDER_ITEM_ID,
+                        'tax_id' => '36',
+                        'tax_percent' => 5,
+                        'associated_item_id' => null,
+                        'amount' => 0.11,
+                        'base_amount' => 0.11,
+                        'real_amount' => 0.05,
+                        'real_base_amount' => 0.05,
+                        'taxable_item_type' => 'product',
+                    ],
+                    [
+                        //federal tax for shipping
+                        'item_id' => null,
+                        'tax_id' => '36',
+                        'tax_percent' => 5,
+                        'associated_item_id' => null,
+                        'amount' => 0.55,
+                        'base_amount' => 0.55,
+                        'real_amount' => 0.25,
+                        'real_base_amount' => 0.25,
+                        'taxable_item_type' => 'shipping',
+                    ],
+                    [
+                        //city tax for item
+                        'item_id' => self::ORDER_ITEM_ID,
+                        'tax_id' => '37',
+                        'tax_percent' => 3.33,
+                        'associated_item_id' => null,
+                        'amount' => 0.03,
+                        'base_amount' => 0.03,
+                        'real_amount' => 0.03,
+                        'real_base_amount' => 0.03,
+                        'taxable_item_type' => 'product',
+                    ],
+                    [
+                        //city tax for shipping
+                        'item_id' => null,
+                        'tax_id' => '37',
+                        'tax_percent' => 3.33,
+                        'associated_item_id' => null,
+                        'amount' => 0.17,
+                        'base_amount' => 0.17,
+                        'real_amount' => 0.17,
+                        'real_base_amount' => 0.17,
+                        'taxable_item_type' => 'shipping',
+                    ],
+                ],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Quote/ToOrderConverterTest.php b/app/code/Magento/Tax/Test/Unit/Model/Quote/ToOrderConverterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc72250a496783692451f8c12ecc610f9de28d43
--- /dev/null
+++ b/app/code/Magento/Tax/Test/Unit/Model/Quote/ToOrderConverterTest.php
@@ -0,0 +1,195 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Tax\Test\Unit\Model\Quote;
+
+use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+class ToOrderConverterTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Api\Data\OrderExtensionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $orderExtensionFactoryMock;
+
+    /**
+     * @var \Magento\Quote\Model\Quote\Address|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $quoteAddressMock;
+
+    /**
+     * @var \Magento\Quote\Model\Quote\Address\ToOrder|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $subjectMock;
+
+    /**
+     * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Tax\Model\Quote\ToOrderConverter
+     */
+    protected $model;
+
+    public function setUp()
+    {
+        $this->orderExtensionFactoryMock = $this->getMockBuilder(
+            '\Magento\Sales\Api\Data\OrderExtensionFactory'
+        )->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->quoteAddressMock = $this->getMockBuilder('\Magento\Quote\Model\Quote\Address')
+            ->disableOriginalConstructor()
+            ->setMethods(['getAppliedTaxes', 'getItemsAppliedTaxes'])
+            ->getMock();
+        $this->subjectMock = $this->getMockBuilder('\Magento\Quote\Model\Quote\Address\ToOrder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->objectManagerHelper = new ObjectManager($this);
+        $this->model = $this->objectManagerHelper->getObject(
+            '\Magento\Tax\Model\Quote\ToOrderConverter',
+            [
+                'orderExtensionFactory' => $this->orderExtensionFactoryMock,
+            ]
+        );
+    }
+
+    protected function setupOrderExtensionAttributeMock()
+    {
+        $orderExtensionAttributeMock = $this->getMockBuilder('\Magento\Sales\Api\Data\OrderExtensionInterface')
+            ->setMethods(
+                [
+                    'setAppliedTaxes',
+                    'setConvertingFromQuote',
+                    'setItemAppliedTaxes'
+                ]
+            )->getMock();
+
+        return $orderExtensionAttributeMock;
+    }
+
+    /**
+     * @dataProvider afterConvertDataProvider
+     */
+    public function testAfterConvert($appliedTaxes, $itemsAppliedTaxes)
+    {
+        $this->model->beforeConvert($this->subjectMock, $this->quoteAddressMock);
+
+        $this->quoteAddressMock->expects($this->once())
+            ->method('getAppliedTaxes')
+            ->willReturn($appliedTaxes);
+        $this->quoteAddressMock->expects($this->once())
+            ->method('getItemsAppliedTaxes')
+            ->willReturn($itemsAppliedTaxes);
+
+        $orderMock = $this->getMockBuilder('\Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $orderExtensionAttributeMock = $this->setupOrderExtensionAttributeMock();
+
+        $orderMock->expects($this->once())
+            ->method('getExtensionAttributes')
+            ->willReturn($orderExtensionAttributeMock);
+
+        $orderExtensionAttributeMock->expects($this->once())
+            ->method('setAppliedTaxes')
+            ->with($appliedTaxes);
+        $orderExtensionAttributeMock->expects($this->once())
+            ->method('setConvertingFromQuote')
+            ->with(true);
+        $orderExtensionAttributeMock->expects($this->once())
+            ->method('setItemAppliedTaxes')
+            ->with($itemsAppliedTaxes);
+        $orderMock->expects($this->once())
+            ->method('setExtensionAttributes')
+            ->with($orderExtensionAttributeMock);
+
+        $this->assertEquals($orderMock, $this->model->afterConvert($this->subjectMock, $orderMock));
+    }
+
+    /**
+     * @dataProvider afterConvertDataProvider
+     */
+    public function testAfterConvertNullExtensionAttribute($appliedTaxes, $itemsAppliedTaxes)
+    {
+        $this->model->beforeConvert($this->subjectMock, $this->quoteAddressMock);
+
+        $this->quoteAddressMock->expects($this->once())
+            ->method('getAppliedTaxes')
+            ->willReturn($appliedTaxes);
+        $this->quoteAddressMock->expects($this->once())
+            ->method('getItemsAppliedTaxes')
+            ->willReturn($itemsAppliedTaxes);
+
+        $orderExtensionAttributeMock = $this->setupOrderExtensionAttributeMock();
+        
+        $orderMock = $this->getMockBuilder('\Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $orderMock->expects($this->once())
+            ->method('getExtensionAttributes')
+            ->willReturn(null);
+
+        $this->orderExtensionFactoryMock->expects($this->once())
+            ->method('create')
+            ->willReturn($orderExtensionAttributeMock);
+
+        $orderExtensionAttributeMock->expects($this->once())
+            ->method('setAppliedTaxes')
+            ->with($appliedTaxes);
+        $orderExtensionAttributeMock->expects($this->once())
+            ->method('setConvertingFromQuote')
+            ->with(true);
+        $orderExtensionAttributeMock->expects($this->once())
+            ->method('setItemAppliedTaxes')
+            ->with($itemsAppliedTaxes);
+        $orderMock->expects($this->once())
+            ->method('setExtensionAttributes')
+            ->with($orderExtensionAttributeMock);
+
+        $this->assertEquals($orderMock, $this->model->afterConvert($this->subjectMock, $orderMock));
+    }
+
+    public function afterConvertDataProvider()
+    {
+        return [
+            'afterConvert' => [
+                'applied_taxes' => [
+                    'IL' => [
+                        'amount' => 0.36,
+                        'percent' => 6,
+                        'rates' => [
+                            [
+                                'percent' => 6,
+                                'code' => 'IL',
+                                'title' => 'IL',
+                            ]
+                        ]
+                    ]
+                ],
+                'item_applied_taxes' => [
+                    'sequence-1' => [
+                        [
+                            'amount' => 0.06,
+                            'item_id' => 146,
+                        ],
+                    ],
+                    'shipping' => [
+                        [
+                            'amount' => 0.30,
+                            'item_type' => 'shipping',
+                        ]
+                    ],
+                ],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json
index b2d4d6faad79318556340971f6dd6d832e89af6c..4318d6c1941543fddb8ac9817117b3680c9399b7 100644
--- a/app/code/Magento/Tax/composer.json
+++ b/app/code/Magento/Tax/composer.json
@@ -3,24 +3,24 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-reports": "0.74.0-beta14",
-        "magento/module-page-cache": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-reports": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Tax/etc/di.xml b/app/code/Magento/Tax/etc/di.xml
index 1873c509f6e792e252170a35897ca45d2283ba8a..12dd5b270fc3c2740cf0f272bcd38fdb812d9b0d 100644
--- a/app/code/Magento/Tax/etc/di.xml
+++ b/app/code/Magento/Tax/etc/di.xml
@@ -77,4 +77,7 @@
             <argument name="resourcePrefix" xsi:type="string">sales</argument>
         </arguments>
     </type>
+    <type name="Magento\Sales\Api\OrderRepositoryInterface">
+        <plugin name="save_order_tax" type="Magento\Tax\Model\Plugin\OrderSave"/>
+    </type>
 </config>
diff --git a/app/code/Magento/Tax/etc/events.xml b/app/code/Magento/Tax/etc/events.xml
index 4d2c2d3ba60da356a557d9c5f87e6fc33df14cd2..b523cf565dd000c1b1e0877911973ca364534642 100644
--- a/app/code/Magento/Tax/etc/events.xml
+++ b/app/code/Magento/Tax/etc/events.xml
@@ -6,9 +6,6 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
-    <event name="sales_order_save_after">
-        <observer name="tax" instance="Magento\Tax\Model\Observer" method="salesEventOrderAfterSave" />
-    </event>
     <event name="sales_quote_collect_totals_before">
         <observer name="tax" instance="Magento\Tax\Model\Observer" method="quoteCollectTotalsBefore" />
     </event>
diff --git a/app/code/Magento/Tax/etc/extension_attributes.xml b/app/code/Magento/Tax/etc/extension_attributes.xml
index 0302ae2fcd16a12a2f270d5f7e04fda059c52af4..810c04b8c1917e9230db99faeac529445844b019 100644
--- a/app/code/Magento/Tax/etc/extension_attributes.xml
+++ b/app/code/Magento/Tax/etc/extension_attributes.xml
@@ -9,4 +9,9 @@
     <extension_attributes for="Magento\Quote\Api\Data\TotalsInterface">
         <attribute code="tax_grandtotal_details" type="Magento\Tax\Api\Data\GrandTotalDetailsInterface[]" />
     </extension_attributes>
+    <extension_attributes for="Magento\Sales\Api\Data\OrderInterface">
+        <attribute code="applied_taxes" type="Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterface[]" />
+        <attribute code="item_applied_taxes" type="Magento\Tax\Api\Data\OrderTaxDetailsItemInterface[]" />
+        <attribute code="converting_from_quote" type="boolean" />
+    </extension_attributes>
 </config>
diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json
index 2642b8587938955bd7b651a9485560794002064f..36629c619cd0106f03d270e71c8d2662fe7b903a 100644
--- a/app/code/Magento/TaxImportExport/composer.json
+++ b/app/code/Magento/TaxImportExport/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json
index 9fbb0bd754d2cc08791507e25ca35d5d013776d9..a9cd25b0194302174803c3b620111f92b527f530 100644
--- a/app/code/Magento/Theme/composer.json
+++ b/app/code/Magento/Theme/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-widget": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/module-media-storage": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-require-js": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-widget": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/module-media-storage": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-require-js": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-translation": "0.74.0-beta14"
+        "magento/module-translation": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json
index 7de19b36d8a93d4c6640246a5098e529c27e1860..5c79e40d52acd35b52658273c6d3f8f6a68bd4ae 100644
--- a/app/code/Magento/Translation/composer.json
+++ b/app/code/Magento/Translation/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-developer": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-developer": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json
index 35d8c625925fde44598e7b8524c3e574d51f309e..4138d9f2507c47f012b5ba5972e895932e52ac16 100644
--- a/app/code/Magento/Ui/composer.json
+++ b/app/code/Magento/Ui/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json
index 871fbcdc12c1d2a6a3055ac20e0b5370575a5489..8cdcff8d4de70370db4f54d74eae86ba955e7088 100644
--- a/app/code/Magento/Ups/composer.json
+++ b/app/code/Magento/Ups/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json
index 24a2772e11a3c6bf97a534c2fa44c09e672e3d6d..fb57d5793c08abd344c9117ef2ccd8aa18ba767a 100644
--- a/app/code/Magento/UrlRewrite/composer.json
+++ b/app/code/Magento/UrlRewrite/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog-url-rewrite": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-cms-url-rewrite": "0.74.0-beta14",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog-url-rewrite": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-cms-url-rewrite": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json
index b16f88f04a4c5b9cec2efb70b688923490d10226..add8cb809cc92db648f94ac35f2f97cdd7ca2467 100644
--- a/app/code/Magento/User/composer.json
+++ b/app/code/Magento/User/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-integration": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-integration": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json
index 59b75138b5be4d8cb021390eec32bc8747c00f8e..290d060ec4f9cc215f324450561911d0afb564b3 100644
--- a/app/code/Magento/Usps/composer.json
+++ b/app/code/Magento/Usps/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-shipping": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/module-config": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-shipping": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-config": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json
index 58eb8dbd4b6c0be1e41c82dd72972cde940dfe8c..54e469e6183bbf4e4fbf8dc87664bc225cb94203 100644
--- a/app/code/Magento/Variable/composer.json
+++ b/app/code/Magento/Variable/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0|~5.6.0",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-email": "0.74.0-beta14",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-email": "0.74.0-beta15",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Version/composer.json b/app/code/Magento/Version/composer.json
index 07feda54cfd8fcfa810c79f28b9775b8abd4951b..9e21c3965e33e496f65a068a047400cca3a6ffa0 100644
--- a/app/code/Magento/Version/composer.json
+++ b/app/code/Magento/Version/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json
index 7c018de1b3b051d135d1fe69741e44a94185723c..041ad6295d148297a86c738e3254e8a8709e2937 100644
--- a/app/code/Magento/Webapi/composer.json
+++ b/app/code/Magento/Webapi/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-authorization": "0.74.0-beta14",
-        "magento/module-integration": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-authorization": "0.74.0-beta15",
+        "magento/module-integration": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-user": "0.74.0-beta14"
+        "magento/module-user": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php b/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..2fcb1aa0e363166b4b39e7cb4296a165b02ab123
--- /dev/null
+++ b/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php
@@ -0,0 +1,205 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Weee\Model\App\Action;
+
+/**
+ * Class ContextPlugin
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class ContextPlugin
+{
+    /**
+     * @var \Magento\Customer\Model\Session
+     */
+    protected $customerSession;
+
+    /**
+     * @var \Magento\Framework\App\Http\Context
+     */
+    protected $httpContext;
+
+    /**
+     * @var \Magento\Tax\Helper\Data
+     */
+    protected $taxHelper;
+
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelper;
+
+    /**
+     * @var \Magento\Framework\Module\Manager
+     */
+    protected $moduleManager;
+
+    /**
+     * @var \Magento\Weee\Model\Tax
+     */
+    protected $weeeTax;
+
+    /**
+     * @var \Magento\PageCache\Model\Config
+     */
+    protected $cacheConfig;
+
+    /**
+     * @var \Magento\Store\Model\StoreManagerInterface
+     */
+    protected $storeManager;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface
+     */
+    protected $scopeConfig;
+
+    /**
+     * @param \Magento\Customer\Model\Session $customerSession
+     * @param \Magento\Framework\App\Http\Context $httpContext
+     * @param \Magento\Weee\Model\Tax $weeeTax
+     * @param \Magento\Tax\Helper\Data $taxHelper
+     * @param \Magento\Weee\Helper\Data $weeeHelper
+     * @param \Magento\Framework\Module\Manager $moduleManager
+     * @param \Magento\PageCache\Model\Config $cacheConfig
+     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
+     */
+    public function __construct(
+        \Magento\Customer\Model\Session $customerSession,
+        \Magento\Framework\App\Http\Context $httpContext,
+        \Magento\Weee\Model\Tax $weeeTax,
+        \Magento\Tax\Helper\Data $taxHelper,
+        \Magento\Weee\Helper\Data $weeeHelper,
+        \Magento\Framework\Module\Manager $moduleManager,
+        \Magento\PageCache\Model\Config $cacheConfig,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
+    ) {
+        $this->customerSession = $customerSession;
+        $this->httpContext = $httpContext;
+        $this->weeeTax = $weeeTax;
+        $this->taxHelper = $taxHelper;
+        $this->weeeHelper = $weeeHelper;
+        $this->moduleManager = $moduleManager;
+        $this->cacheConfig = $cacheConfig;
+        $this->storeManager = $storeManager;
+        $this->scopeConfig = $scopeConfig;
+    }
+
+    /**
+     * @param \Magento\Framework\App\Action\Action $subject
+     * @param callable $proceed
+     * @param \Magento\Framework\App\RequestInterface $request
+     * @return mixed
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function aroundDispatch(
+        \Magento\Framework\App\Action\Action $subject,
+        \Closure $proceed,
+        \Magento\Framework\App\RequestInterface $request
+    ) {
+        if (!$this->weeeHelper->isEnabled() ||
+            !$this->customerSession->isLoggedIn() ||
+            !$this->moduleManager->isEnabled('Magento_PageCache') ||
+            !$this->cacheConfig->isEnabled()) {
+            return $proceed($request);
+        }
+
+        $basedOn = $this->taxHelper->getTaxBasedOn();
+        if ($basedOn != 'shipping' && $basedOn != 'billing') {
+            return $proceed($request);
+        }
+
+        $weeeTaxRegion = $this->getWeeeTaxRegion($basedOn);
+        $websiteId = $this->storeManager->getStore()->getWebsiteId();
+        $countryId = $weeeTaxRegion['countryId'];
+        $regionId = $weeeTaxRegion['regionId'];
+
+        if (!$countryId && !$regionId) {
+            // country and region does not exist
+            return $proceed($request);
+        } else if ($countryId && !$regionId) {
+            // country exist and region does not exist
+            $regionId = 0;
+            $exist = $this->weeeTax->isWeeeInLocation(
+                $countryId,
+                $regionId,
+                $websiteId
+            );
+        } else {
+            // country and region exist
+            $exist = $this->weeeTax->isWeeeInLocation(
+                $countryId,
+                $regionId,
+                $websiteId
+            );
+            if (!$exist) {
+                // just check the country for weee
+                $regionId = 0;
+                $exist = $this->weeeTax->isWeeeInLocation(
+                    $countryId,
+                    $regionId,
+                    $websiteId
+                );
+            }
+        }
+
+        if ($exist) {
+            $this->httpContext->setValue(
+                'weee_tax_region',
+                ['countryId' => $countryId, 'regionId' => $regionId],
+                0
+            );
+        }
+        return $proceed($request);
+    }
+
+    /**
+     * @param string $basedOn
+     * @return array
+     */
+    protected function getWeeeTaxRegion($basedOn)
+    {
+        $countryId = null;
+        $regionId = null;
+        $defaultCountryId = $this->scopeConfig->getValue(
+            \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_COUNTRY,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            null
+        );
+        $defaultRegionId = $this->scopeConfig->getValue(
+            \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_REGION,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            null
+        );
+
+        if ($basedOn == 'shipping') {
+            $defaultShippingAddress = $this->customerSession->getDefaultTaxShippingAddress();
+            if (empty($defaultShippingAddress)) {
+                $countryId = $defaultCountryId;
+                $regionId = $defaultRegionId;
+            } else {
+                $countryId = $defaultShippingAddress['country_id'];
+                $regionId = $defaultShippingAddress['region_id'];
+            }
+
+        } else if ($basedOn == 'billing') {
+            $defaultBillingAddress = $this->customerSession->getDefaultTaxBillingAddress();
+            if (empty($defaultBillingAddress)) {
+                $countryId = $defaultCountryId;
+                $regionId = $defaultRegionId;
+            } else {
+                $countryId = $defaultBillingAddress['country_id'];
+                $regionId = $defaultBillingAddress['region_id'];
+            }
+        }
+        return ['countryId' => $countryId, 'regionId' => $regionId];
+    }
+}
diff --git a/app/code/Magento/Weee/Model/Observer/Session.php b/app/code/Magento/Weee/Model/Observer/Session.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f72b64c6bf792eff2d650191fa8016cb5ad2325
--- /dev/null
+++ b/app/code/Magento/Weee/Model/Observer/Session.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/**
+ * Customer Session Event Observer
+ */
+namespace Magento\Weee\Model\Observer;
+
+class Session
+{
+    /**
+     * @var \Magento\Customer\Model\Session
+     */
+    protected $customerSession;
+
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelper;
+
+    /**
+     * Module manager
+     *
+     * @var \Magento\Framework\Module\Manager
+     */
+    private $moduleManager;
+
+    /**
+     * Cache config
+     *
+     * @var \Magento\PageCache\Model\Config
+     */
+    private $cacheConfig;
+
+    /**
+     * @param \Magento\Customer\Model\Session $customerSession
+     * @param \Magento\Weee\Helper\Data $weeeHelper
+     * @param \Magento\Framework\Module\Manager $moduleManager
+     * @param \Magento\PageCache\Model\Config $cacheConfig
+     */
+    public function __construct(
+        \Magento\Customer\Model\Session $customerSession,
+        \Magento\Weee\Helper\Data $weeeHelper,
+        \Magento\Framework\Module\Manager $moduleManager,
+        \Magento\PageCache\Model\Config $cacheConfig
+    ) {
+        $this->customerSession = $customerSession;
+        $this->weeeHelper = $weeeHelper;
+        $this->moduleManager = $moduleManager;
+        $this->cacheConfig = $cacheConfig;
+    }
+
+    /**
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     */
+    public function customerLoggedIn(\Magento\Framework\Event\Observer $observer)
+    {
+        if ($this->moduleManager->isEnabled('Magento_PageCache') && $this->cacheConfig->isEnabled() &&
+            $this->weeeHelper->isEnabled()) {
+            /** @var \Magento\Customer\Model\Data\Customer $customer */
+            $customer = $observer->getData('customer');
+
+            /** @var \Magento\Customer\Api\Data\AddressInterface[] $addresses */
+            $addresses = $customer->getAddresses();
+            if (isset($addresses)) {
+                $defaultShippingFound = false;
+                $defaultBillingFound = false;
+                foreach ($addresses as $address) {
+                    if ($address->isDefaultBilling()) {
+                        $defaultBillingFound = true;
+                        $this->customerSession->setDefaultTaxBillingAddress(
+                            [
+                                'country_id' => $address->getCountryId(),
+                                'region_id'  => $address->getRegion() ? $address->getRegion()->getRegionId() : null,
+                                'postcode'   => $address->getPostcode(),
+                            ]
+                        );
+                    }
+                    if ($address->isDefaultShipping()) {
+                        $defaultShippingFound = true;
+                        $this->customerSession->setDefaultTaxShippingAddress(
+                            [
+                                'country_id' => $address->getCountryId(),
+                                'region_id'  => $address->getRegion() ? $address->getRegion()->getRegionId() : null,
+                                'postcode'   => $address->getPostcode(),
+                            ]
+                        );
+                    }
+                    if ($defaultShippingFound && $defaultBillingFound) {
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Address after save event handler
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     */
+    public function afterAddressSave($observer)
+    {
+        if ($this->moduleManager->isEnabled('Magento_PageCache') && $this->cacheConfig->isEnabled() &&
+            $this->weeeHelper->isEnabled()) {
+            /** @var $customerAddress Address */
+            $address = $observer->getCustomerAddress();
+
+            // Check if the address is either the default billing, shipping, or both
+            if ($address->getIsPrimaryBilling() || $address->getIsDefaultBilling()) {
+                $this->customerSession->setDefaultTaxBillingAddress(
+                    [
+                        'country_id' => $address->getCountryId(),
+                        'region_id'  => $address->getRegion() ? $address->getRegionId() : null,
+                        'postcode'   => $address->getPostcode(),
+                    ]
+                );
+            }
+
+            if ($address->getIsPrimaryShipping() || $address->getIsDefaultShipping()) {
+                $this->customerSession->setDefaultTaxShippingAddress(
+                    [
+                        'country_id' => $address->getCountryId(),
+                        'region_id'  => $address->getRegion() ? $address->getRegionId() : null,
+                        'postcode'   => $address->getPostcode(),
+                    ]
+                );
+            }
+        }
+    }
+}
diff --git a/app/code/Magento/Weee/Model/Resource/Tax.php b/app/code/Magento/Weee/Model/Resource/Tax.php
index e55e57340028adefa033fe7f02ba45e081ed9fcc..ee7e3783b9d62d0e305c28d03097f990be3d24c3 100644
--- a/app/code/Magento/Weee/Model/Resource/Tax.php
+++ b/app/code/Magento/Weee/Model/Resource/Tax.php
@@ -52,4 +52,38 @@ class Tax extends \Magento\Framework\Model\Resource\Db\AbstractDb
     {
         return $this->_getReadAdapter()->fetchOne($select);
     }
+
+    /**
+     * @param int $countryId
+     * @param int $regionId
+     * @param int $websiteId
+     * @return boolean
+     */
+    public function isWeeeInLocation($countryId, $regionId, $websiteId)
+    {
+        // Check if there is a weee_tax for the country and region
+        $attributeSelect = $this->getReadConnection()->select();
+        $attributeSelect->from(
+            $this->getTable('weee_tax'),
+            'value'
+        )->where(
+            'website_id IN(?)',
+            [$websiteId, 0]
+        )->where(
+            'country = ?',
+            $countryId
+        )->where(
+            'state = ?',
+            $regionId
+        )->limit(
+            1
+        );
+
+        $value = $this->getReadConnection()->fetchOne($attributeSelect);
+        if ($value) {
+            return true;
+        }
+
+        return false;
+    }
 }
diff --git a/app/code/Magento/Weee/Model/Tax.php b/app/code/Magento/Weee/Model/Tax.php
index 3b41cdeeb598382ab50aa542c442c0d672e0da65..91dd14ffa3f1f26d0607b862f2eae95544d20431 100644
--- a/app/code/Magento/Weee/Model/Tax.php
+++ b/app/code/Magento/Weee/Model/Tax.php
@@ -232,8 +232,18 @@ class Tax extends \Magento\Framework\Model\AbstractModel
             if ($customerId = $this->_customerSession->getCustomerId()) {
                 $shipping = $this->accountManagement->getDefaultShippingAddress($customerId);
                 $billing = $this->accountManagement->getDefaultBillingAddress($customerId);
+                $customerTaxClass = null;
+            } else {
+                $shippingAddressArray = $this->_customerSession->getDefaultTaxShippingAddress();
+                $billingAddressArray = $this->_customerSession->getDefaultTaxBillingAddress();
+                if (!empty($billingAddressArray)) {
+                    $billing = new \Magento\Framework\Object($billingAddressArray);
+                }
+                if (!empty($shippingAddressArray)) {
+                    $shipping = new \Magento\Framework\Object($shippingAddressArray);
+                }
+                $customerTaxClass = $this->_customerSession->getCustomerTaxClassId();
             }
-            $customerTaxClass = null;
         }
 
         $rateRequest = $calculator->getRateRequest(
@@ -322,4 +332,15 @@ class Tax extends \Magento\Framework\Model\AbstractModel
         }
         return $result;
     }
+
+    /**
+     * @param int $countryId
+     * @param int $regionId
+     * @param int $websiteId
+     * @return boolean
+     */
+    public function isWeeeInLocation($countryId, $regionId, $websiteId)
+    {
+        return $this->getResource()->isWeeeInLocation($countryId, $regionId, $websiteId);
+    }
 }
diff --git a/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php b/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0f7a3ad75fb91b47bdcd3a62aea9ca32b7495586
--- /dev/null
+++ b/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php
@@ -0,0 +1,378 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Weee\Test\Unit\App\Action;
+
+/**
+ * Class ContextPluginTest
+ *
+ * @package Magento\Weee\Test\Unit\App\Action
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class ContextPluginTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Tax\Helper\Data
+     */
+    protected $taxHelperMock;
+
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelperMock;
+
+    /**
+     * @var \Magento\Weee\Model\Tax
+     */
+    protected $weeeTaxMock;
+
+    /**
+     * @var \Magento\Framework\App\Http\Context
+     */
+    protected $httpContextMock;
+
+    /**
+     * @var \Magento\Tax\Model\Calculation\Proxy
+     */
+    protected $taxCalculationMock;
+
+    /**
+     * @var \Magento\Framework\Module\Manager
+     */
+    protected $moduleManagerMock;
+
+    /**
+     * @var \Magento\PageCache\Model\Config
+     */
+    protected $cacheConfigMock;
+
+    /**
+     * @var \Magento\Store\Model\StoreManager
+     */
+    protected $storeManageMock;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfig
+     */
+    protected $scopeConfigMock;
+
+    /**
+     * @var \Magento\Tax\Model\App\Action\ContextPlugin
+     */
+    protected $contextPlugin;
+
+    protected function setUp()
+    {
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->taxHelperMock = $this->getMockBuilder('Magento\Tax\Helper\Data')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->weeeHelperMock = $this->getMockBuilder('Magento\Weee\Helper\Data')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->weeeTaxMock = $this->getMockBuilder('\Magento\Weee\Model\Tax')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->httpContextMock = $this->getMockBuilder('Magento\Framework\App\Http\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->customerSessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getDefaultTaxBillingAddress', 'getDefaultTaxShippingAddress', 'getCustomerTaxClassId',
+                'getWebsiteId', 'isLoggedIn'
+            ])
+            ->getMock();
+
+        $this->moduleManagerMock = $this->getMockBuilder('Magento\Framework\Module\Manager')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->cacheConfigMock = $this->getMockBuilder('Magento\PageCache\Model\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManager')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->contextPlugin = $this->objectManager->getObject(
+            'Magento\Weee\Model\App\Action\ContextPlugin',
+            [
+                'customerSession' => $this->customerSessionMock,
+                'httpContext' => $this->httpContextMock,
+                'weeeTax' => $this->weeeTaxMock,
+                'taxHelper' => $this->taxHelperMock,
+                'weeeHelper' => $this->weeeHelperMock,
+                'moduleManager' => $this->moduleManagerMock,
+                'cacheConfig' => $this->cacheConfigMock,
+                'storeManager' => $this->storeManagerMock,
+                'scopeConfig' => $this->scopeConfigMock
+            ]
+        );
+    }
+
+    public function testAroundDispatchBasedOnDefault()
+    {
+        $this->customerSessionMock->expects($this->once())
+            ->method('isLoggedIn')
+            ->willReturn(true);
+
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->taxHelperMock->expects($this->once())
+            ->method('getTaxBasedOn')
+            ->willReturn('billing');
+
+        $storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $storeMock->expects($this->once())
+            ->method('getWebsiteId')
+            ->willReturn(1);
+
+        $this->storeManagerMock->expects($this->once())
+            ->method('getStore')
+            ->willReturn($storeMock);
+
+        $this->scopeConfigMock->expects($this->at(0))
+            ->method('getValue')
+            ->with(
+                \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_COUNTRY,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                null
+            )
+            ->willReturn('US');
+
+        $this->scopeConfigMock->expects($this->at(1))
+            ->method('getValue')
+            ->with(
+                \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_REGION,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                null
+            )
+            ->willReturn(0);
+
+        $this->weeeTaxMock->expects($this->once())
+            ->method('isWeeeInLocation')
+            ->with('US', 0, 1)
+            ->willReturn(true);
+
+        $this->httpContextMock->expects($this->once())
+            ->method('setValue')
+            ->with('weee_tax_region', ['countryId' => 'US', 'regionId' => 0], 0);
+
+        $action = $this->objectManager->getObject('Magento\Framework\App\Action\Action');
+        $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
+        $expectedResult = 'expectedResult';
+        $proceed = function ($request) use ($expectedResult) {
+            return $expectedResult;
+        };
+        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+    }
+
+    public function testAroundDispatchBasedOnOrigin()
+    {
+        $this->customerSessionMock->expects($this->once())
+            ->method('isLoggedIn')
+            ->willReturn(true);
+
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->taxHelperMock->expects($this->once())
+            ->method('getTaxBasedOn')
+            ->willReturn('origin');
+
+        $action = $this->objectManager->getObject('Magento\Framework\App\Action\Action');
+        $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
+        $expectedResult = 'expectedResult';
+        $proceed = function ($request) use ($expectedResult) {
+            return $expectedResult;
+        };
+        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+    }
+
+    public function testAroundDispatchBasedOnBilling()
+    {
+        $this->customerSessionMock->expects($this->once())
+            ->method('isLoggedIn')
+            ->willReturn(true);
+
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->taxHelperMock->expects($this->once())
+            ->method('getTaxBasedOn')
+            ->willReturn('billing');
+
+        $storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $storeMock->expects($this->once())
+            ->method('getWebsiteId')
+            ->willReturn(1);
+
+        $this->storeManagerMock->expects($this->once())
+            ->method('getStore')
+            ->willReturn($storeMock);
+
+        $this->scopeConfigMock->expects($this->at(0))
+            ->method('getValue')
+            ->with(
+                \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_COUNTRY,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                null
+            )
+            ->willReturn('US');
+
+        $this->scopeConfigMock->expects($this->at(1))
+            ->method('getValue')
+            ->with(
+                \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_REGION,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                null
+            )
+            ->willReturn(0);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('getDefaultTaxBillingAddress')
+            ->willReturn(['country_id' => 'US', 'region_id' => 1]);
+
+        $this->weeeTaxMock->expects($this->once())
+            ->method('isWeeeInLocation')
+            ->with('US', 1, 1)
+            ->willReturn(true);
+
+        $this->httpContextMock->expects($this->once())
+            ->method('setValue')
+            ->with('weee_tax_region', ['countryId' => 'US', 'regionId' => 1], 0);
+
+        $action = $this->objectManager->getObject('Magento\Framework\App\Action\Action');
+        $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
+        $expectedResult = 'expectedResult';
+        $proceed = function ($request) use ($expectedResult) {
+            return $expectedResult;
+        };
+        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+    }
+
+    public function testAroundDispatchBasedOnShipping()
+    {
+        $this->customerSessionMock->expects($this->once())
+            ->method('isLoggedIn')
+            ->willReturn(true);
+
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->taxHelperMock->expects($this->once())
+            ->method('getTaxBasedOn')
+            ->willReturn('shipping');
+
+        $storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $storeMock->expects($this->once())
+            ->method('getWebsiteId')
+            ->willReturn(1);
+
+        $this->storeManagerMock->expects($this->once())
+            ->method('getStore')
+            ->willReturn($storeMock);
+
+        $this->scopeConfigMock->expects($this->at(0))
+            ->method('getValue')
+            ->with(
+                \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_COUNTRY,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                null
+            )
+            ->willReturn('US');
+
+        $this->scopeConfigMock->expects($this->at(1))
+            ->method('getValue')
+            ->with(
+                \Magento\Tax\Model\Config::CONFIG_XML_PATH_DEFAULT_REGION,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                null
+            )
+            ->willReturn(0);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('getDefaultTaxShippingAddress')
+            ->willReturn(['country_id' => 'US', 'region_id' => 1]);
+
+        $this->weeeTaxMock->expects($this->once())
+            ->method('isWeeeInLocation')
+            ->with('US', 1, 1)
+            ->willReturn(true);
+
+        $this->httpContextMock->expects($this->once())
+            ->method('setValue')
+            ->with('weee_tax_region', ['countryId' => 'US', 'regionId' => 1], 0);
+
+        $action = $this->objectManager->getObject('Magento\Framework\App\Action\Action');
+        $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
+        $expectedResult = 'expectedResult';
+        $proceed = function ($request) use ($expectedResult) {
+            return $expectedResult;
+        };
+        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+    }
+}
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Observer/SessionTest.php b/app/code/Magento/Weee/Test/Unit/Model/Observer/SessionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..db31c7931bedab29ca21223702a8b8cd035a3070
--- /dev/null
+++ b/app/code/Magento/Weee/Test/Unit/Model/Observer/SessionTest.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Weee\Test\Unit\Model\Observer;
+
+class SessionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\Event\Observer
+     */
+    protected $observerMock;
+
+    /**
+     * @var \Magento\Customer\Model\Session
+     */
+    protected $customerSessionMock;
+
+    /**
+     * Module manager
+     *
+     * @var \Magento\Framework\Module\Manager
+     */
+    private $moduleManagerMock;
+
+    /**
+     * Cache config
+     *
+     * @var \Magento\PageCache\Model\Config
+     */
+    private $cacheConfigMock;
+
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelperMock;
+
+    /**
+     * @var \Magento\Tax\Model\Observer\Session
+     */
+    protected $session;
+
+
+    protected function setUp()
+    {
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->observerMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getCustomerAddress', 'getData'
+            ])
+            ->getMock();
+
+        $this->customerSessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'setDefaultTaxBillingAddress', 'setDefaultTaxShippingAddress', 'setWebsiteId'
+            ])
+            ->getMock();
+
+        $this->moduleManagerMock = $this->getMockBuilder('Magento\Framework\Module\Manager')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->cacheConfigMock = $this->getMockBuilder('Magento\PageCache\Model\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->weeeHelperMock = $this->getMockBuilder('Magento\Weee\Helper\Data')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->session = $this->objectManager->getObject(
+            'Magento\Weee\Model\Observer\Session',
+            [
+                'customerSession' => $this->customerSessionMock,
+                'weeeHelper' => $this->weeeHelperMock,
+                'moduleManager' => $this->moduleManagerMock,
+                'cacheConfig' => $this->cacheConfigMock
+            ]
+        );
+    }
+
+    public function testCustomerLoggedIn()
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->any())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $customerMock = $this->getMockBuilder('Magento\Customer\Model\Data\Customer')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->observerMock->expects($this->once())
+            ->method('getData')
+            ->with('customer')
+            ->willReturn($customerMock);
+
+        $address = $this->objectManager->getObject('Magento\Customer\Model\Data\Address');
+        $address->setIsDefaultShipping(true);
+        $address->setIsDefaultBilling(true);
+        $address->setCountryId(1);
+        $address->setPostCode(11111);
+
+        $addresses = [$address];
+        $customerMock->expects($this->once())
+            ->method('getAddresses')
+            ->willReturn($addresses);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxBillingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxShippingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+
+        $this->session->customerLoggedIn($this->observerMock);
+    }
+
+    public function testAfterAddressSave()
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->any())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $address = $this->objectManager->getObject('Magento\Customer\Model\Address');
+        $address->setIsDefaultShipping(true);
+        $address->setIsDefaultBilling(true);
+        $address->setIsPrimaryBilling(true);
+        $address->setIsPrimaryShipping(true);
+        $address->setCountryId(1);
+        $address->setData('postcode', 11111);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxBillingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxShippingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+
+        $this->observerMock->expects($this->once())
+            ->method('getCustomerAddress')
+            ->willReturn($address);
+
+        $this->session->afterAddressSave($this->observerMock);
+    }
+}
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Resource/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/Resource/TaxTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..27a4dedc845dd2b530a082088417a4412686faa0
--- /dev/null
+++ b/app/code/Magento/Weee/Test/Unit/Model/Resource/TaxTest.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Weee\Test\Unit\Model\Resource;
+
+class TaxTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Weee\Model\Resource\Tax
+     */
+    protected $model;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resourceMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManagerMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $adapterMock;
+
+    protected function setUp()
+    {
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->storeManagerMock = $this->getMock('\Magento\Store\Model\StoreManagerInterface');
+
+        $this->selectMock = $this->getMock('\Magento\Framework\DB\Select', [], [], '', false);
+
+        $this->adapterMock = $this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface', [], [], '', false);
+        $this->adapterMock->expects($this->once())
+            ->method('select')
+            ->willReturn($this->selectMock);
+
+        $this->resourceMock = $this->getMock('\Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock->expects($this->at(0))
+            ->method('getConnection')
+            ->with('core_write')
+            ->willReturn($this->adapterMock);
+
+        $this->resourceMock->expects($this->at(1))
+            ->method('getConnection')
+            ->with('core_read')
+            ->willReturn($this->adapterMock);
+
+        $this->resourceMock->expects($this->once())
+            ->method('getTableName')
+            ->willReturn('table_name');
+
+        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
+
+        $this->model = $this->objectManager->getObject(
+            'Magento\Weee\Model\Resource\Tax',
+            [
+                'context' => $contextMock,
+            ]
+        );
+    }
+
+    public function testInWeeeLocation()
+    {
+        $this->selectMock->expects($this->at(1))
+            ->method('where')
+            ->with('website_id IN(?)', [1, 0])
+            ->willReturn($this->selectMock);
+
+        $this->selectMock->expects($this->at(2))
+            ->method('where')
+            ->with('country = ?', 'US')
+            ->willReturn($this->selectMock);
+
+        $this->selectMock->expects($this->at(3))
+            ->method('where')
+            ->with('state = ?', 0)
+            ->willReturn($this->selectMock);
+
+        $this->selectMock->expects($this->any())
+            ->method('from')
+            ->with('table_name', 'value')
+            ->willReturn($this->selectMock);
+
+        $this->model->isWeeeInLocation('US', 0, 1);
+    }
+}
diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json
index 7102e797d034a46b70b9724af86c42669e9a8d1b..6fe75a545c2e3d77c698cfc70bbd201305e99d51 100644
--- a/app/code/Magento/Weee/composer.json
+++ b/app/code/Magento/Weee/composer.json
@@ -3,21 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-tax": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-directory": "0.74.0-beta14",
-        "magento/module-eav": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-quote": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-tax": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-directory": "0.74.0-beta15",
+        "magento/module-eav": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-page-cache": "0.74.0-beta15",
+        "magento/module-quote": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Weee/etc/frontend/di.xml b/app/code/Magento/Weee/etc/frontend/di.xml
index 274af56fa7134cb28eb908da6c486daa4c45b333..c9b706532877b79db60711a610859a92117c4fe7 100644
--- a/app/code/Magento/Weee/etc/frontend/di.xml
+++ b/app/code/Magento/Weee/etc/frontend/di.xml
@@ -13,4 +13,8 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\App\Action\Action">
+        <plugin name="weee-app-action-dispatchController-context-plugin"
+                type="Magento\Weee\Model\App\Action\ContextPlugin"/>
+    </type>
 </config>
diff --git a/app/code/Magento/Weee/etc/frontend/events.xml b/app/code/Magento/Weee/etc/frontend/events.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bc96ce0399341f63d40f814ee72e061f54d205c
--- /dev/null
+++ b/app/code/Magento/Weee/etc/frontend/events.xml
@@ -0,0 +1,16 @@
+<?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="customer_data_object_login">
+        <observer name="customer_weee_logged_in" instance="Magento\Weee\Model\Observer\Session" method="customerLoggedIn" />
+    </event>
+    <event name="customer_address_save_after">
+        <observer name="customer_weee_after_address_save" instance="Magento\Weee\Model\Observer\Session" method="afterAddressSave" />
+    </event>
+</config>
diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json
index 53ed15c7b6fb5644a930350c0ef7825766161645..bc523c4dfc4fb7ce6cf7f8557171d4150713d5a5 100644
--- a/app/code/Magento/Widget/composer.json
+++ b/app/code/Magento/Widget/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-cms": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-variable": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-cms": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-variable": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json
index 31d183b64bb0ae5cafd1f548adcc4c776cf12132..6420024f7fe65a5009e19b1494cfe23e1470a9ec 100644
--- a/app/code/Magento/Wishlist/composer.json
+++ b/app/code/Magento/Wishlist/composer.json
@@ -3,28 +3,28 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/module-store": "0.74.0-beta14",
-        "magento/module-customer": "0.74.0-beta14",
-        "magento/module-catalog": "0.74.0-beta14",
-        "magento/module-checkout": "0.74.0-beta14",
-        "magento/module-theme": "0.74.0-beta14",
-        "magento/module-catalog-inventory": "0.74.0-beta14",
-        "magento/module-rss": "0.74.0-beta14",
-        "magento/module-backend": "0.74.0-beta14",
-        "magento/module-sales": "0.74.0-beta14",
-        "magento/module-grouped-product": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
-        "magento/module-ui": "0.74.0-beta14",
+        "magento/module-store": "0.74.0-beta15",
+        "magento/module-customer": "0.74.0-beta15",
+        "magento/module-catalog": "0.74.0-beta15",
+        "magento/module-checkout": "0.74.0-beta15",
+        "magento/module-theme": "0.74.0-beta15",
+        "magento/module-catalog-inventory": "0.74.0-beta15",
+        "magento/module-rss": "0.74.0-beta15",
+        "magento/module-backend": "0.74.0-beta15",
+        "magento/module-sales": "0.74.0-beta15",
+        "magento/module-grouped-product": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
+        "magento/module-ui": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "suggest": {
-        "magento/module-configurable-product": "0.74.0-beta14",
-        "magento/module-downloadable": "0.74.0-beta14",
-        "magento/module-bundle": "0.74.0-beta14",
-        "magento/module-cookie": "0.74.0-beta14"
+        "magento/module-configurable-product": "0.74.0-beta15",
+        "magento/module-downloadable": "0.74.0-beta15",
+        "magento/module-bundle": "0.74.0-beta15",
+        "magento/module-cookie": "0.74.0-beta15"
     },
     "type": "magento2-module",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json
index a635d2f6368d6f8d066d468efc7a6056820e06e4..994aa5c930a775f5a3ec975cc75a335cb5d605c1 100644
--- a/app/design/adminhtml/Magento/backend/composer.json
+++ b/app/design/adminhtml/Magento/backend/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json
index e715b5304c3a39ca06f52c98c37a438a68cf839d..72d53a5c015e815232790bc9b4f1adbc0c796104 100644
--- a/app/design/frontend/Magento/blank/composer.json
+++ b/app/design/frontend/Magento/blank/composer.json
@@ -3,11 +3,11 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json
index 011484f9abf79fb35ffa25a064e3debc221029ee..24dde37d5609594df501e8d9b0f026b86028789c 100644
--- a/app/design/frontend/Magento/luma/composer.json
+++ b/app/design/frontend/Magento/luma/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
-        "magento/theme-frontend-blank": "0.74.0-beta14",
-        "magento/framework": "0.74.0-beta14",
+        "magento/theme-frontend-blank": "0.74.0-beta15",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/app/i18n/magento/de_de/composer.json b/app/i18n/magento/de_de/composer.json
index 752d5584e51535511fc382bd1edfad901affa4fd..3e9d723ba1e9571b8ea58bb261587566375e1923 100644
--- a/app/i18n/magento/de_de/composer.json
+++ b/app/i18n/magento/de_de/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-de_de",
     "description": "German (Germany) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "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 4feb2ced23f3e909170d222c43410ff08edc5cd7..8743ec39e77badf5d2ddce2850899dcc9cd19d58 100644
--- a/app/i18n/magento/en_us/composer.json
+++ b/app/i18n/magento/en_us/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-en_us",
     "description": "English (United States) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "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 c2a70d39babadc84b11b03652e750d590ffd15fa..9f039e8e7f96eee37f839065ad7d055c8b7acd90 100644
--- a/app/i18n/magento/es_es/composer.json
+++ b/app/i18n/magento/es_es/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-es_es",
     "description": "Spanish (Spain) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "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 b6c40d9c8fa9be5d193c4f81534ab9cf0bebdd89..89b782484baffebf357f63c56b5ad5e437e07a1f 100644
--- a/app/i18n/magento/fr_fr/composer.json
+++ b/app/i18n/magento/fr_fr/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-fr_fr",
     "description": "French (France) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "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 c905b708215fd32745c8c1313fca3649c31f4c7c..01ab7abdb18c0487f89b02cb327e418818f2d7f8 100644
--- a/app/i18n/magento/nl_nl/composer.json
+++ b/app/i18n/magento/nl_nl/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-nl_nl",
     "description": "Dutch (Netherlands) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "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 4f80afff03c0adbfab31185741fdb201c6391b50..a52d0be442954404ec0fd3ab5c2105df23bb6c4e 100644
--- a/app/i18n/magento/pt_br/composer.json
+++ b/app/i18n/magento/pt_br/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-pt_br",
     "description": "Portuguese (Brazil) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "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 63c14d0af900801962fcaa32f179cf375fa451f9..f2b0c7803c9498a07dbfe603b8a58fcee58118a0 100644
--- a/app/i18n/magento/zh_cn/composer.json
+++ b/app/i18n/magento/zh_cn/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "magento/language-zh_cn",
     "description": "Chinese (China) language",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
-        "magento/framework": "0.74.0-beta14",
+        "magento/framework": "0.74.0-beta15",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/composer.json b/composer.json
index de38e5f9054eaa949f908c24667d2eca249f0c4b..46f9532c0fc0c658a6857a6cbc3e639d34d92075 100644
--- a/composer.json
+++ b/composer.json
@@ -2,7 +2,7 @@
     "name": "magento/magento2ce",
     "description": "Magento 2 (Community Edition)",
     "type": "project",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/composer.lock b/composer.lock
index ad898f081b37863b7058659247c2f9facb8c4a70..3edd20fd60b9ab37eebc62bb027fb7d6f8ab8691 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "abd337bce9c7d09a56c1c40b3d2e4092",
+    "hash": "0c8183878a902922b635912a4ca71bdd",
     "packages": [
         {
             "name": "composer/composer",
@@ -1757,18 +1757,21 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030"
+                "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
-                "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030",
+                "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
             "require-dev": {
+                "fabpot/php-cs-fixer": "1.7.*",
+                "phpunit/phpunit": "~4.0",
+                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-serializer": "self.version",
@@ -1789,19 +1792,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Stdlib\\": ""
+                    "Zend\\Stdlib\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zf2",
+            "homepage": "https://github.com/zendframework/zend-stdlib",
             "keywords": [
                 "stdlib",
                 "zf2"
             ],
-            "time": "2015-04-01 18:09:29"
+            "time": "2015-03-25 20:55:48"
         },
         {
             "name": "zendframework/zend-text",
@@ -1894,12 +1897,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-validator.git",
-                "reference": "eb678d20256f120a72ca27276bbb2875841701ab"
+                "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/45fac2545a0f2eb66d71cb7966feee481e7c475f",
-                "reference": "eb678d20256f120a72ca27276bbb2875841701ab",
+                "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f",
                 "shasum": ""
             },
             "require": {
@@ -1907,6 +1910,9 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
+                "fabpot/php-cs-fixer": "1.7.*",
+                "phpunit/phpunit": "~4.0",
+                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-db": "self.version",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-i18n": "self.version",
@@ -1934,7 +1940,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Validator\\": ""
+                    "Zend\\Validator\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1942,12 +1948,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides a set of commonly needed validators",
-            "homepage": "https://github.com/zendframework/zf2",
+            "homepage": "https://github.com/zendframework/zend-validator",
             "keywords": [
                 "validator",
                 "zf2"
             ],
-            "time": "2015-04-01 18:09:30"
+            "time": "2015-03-25 20:55:48"
         },
         {
             "name": "zendframework/zend-view",
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php b/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php
index ce94b1e855a8acbcf54132c42c930a80783fa932..d40ef433bcc0a6c958bded00ad3a9a6bc78e7173 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php
@@ -14,8 +14,6 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $_SERVER['HTTP_HOST'] = 'example.com';
-        $_SERVER['REQUEST_URI'] = '/fancy_uri';
         $this->_helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
             'Magento\Framework\Url\Helper\Data'
         );
@@ -23,12 +21,12 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCurrentBase64Url()
     {
-        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MQ,,', $this->_helper->getCurrentBase64Url());
+        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MS8,', $this->_helper->getCurrentBase64Url());
     }
 
     public function testGetEncodedUrl()
     {
-        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MQ,,', $this->_helper->getEncodedUrl());
+        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MS8,', $this->_helper->getEncodedUrl());
         $this->assertEquals('aHR0cDovL2V4YW1wbGUuY29tLw,,', $this->_helper->getEncodedUrl('http://example.com/'));
     }
 }
diff --git a/dev/tools/performance-toolkit/fixtures/orders.php b/dev/tools/performance-toolkit/fixtures/orders.php
deleted file mode 100644
index e2aa2c832e0fb6390dda692fce7b5b831329b047..0000000000000000000000000000000000000000
--- a/dev/tools/performance-toolkit/fixtures/orders.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-/**
- * Class OrdersFixture
- */
-class OrdersFixture extends \Magento\ToolkitFramework\Fixture
-{
-    /**
-     * @var int
-     */
-    protected $priority = 135;
-
-    /**
-     * {@inheritdoc}
-     */
-    public function execute()
-    {
-        $ordersCount = \Magento\ToolkitFramework\Config::getInstance()->getValue('orders', 0);
-        if ($ordersCount < 1) {
-            return;
-        }
-        $this->application->resetObjectManager();
-
-        $writeAdapter = $this->getConnection('write');
-
-        $quoteTableName = $this->getTableName(
-            'quote',
-            'Magento\Quote\Model\Resource\Quote'
-        );
-        $quoteAddressTableName = $this->getTableName(
-            'quote_address',
-            'Magento\Quote\Model\Resource\Quote\Address'
-        );
-        $quoteItemTableName = $this->getTableName(
-            'quote_item',
-            'Magento\Quote\Model\Resource\Quote\Item'
-        );
-        $quoteItemOptionTableName = $this->getTableName(
-            'quote_item_option',
-            'Magento\Quote\Model\Resource\Quote\Item\Option'
-        );
-        $quotePaymentTableName = $this->getTableName(
-            'quote_payment',
-            'Magento\Quote\Model\Resource\Quote\Payment'
-        );
-        $quoteAddressRateTableName = $this->getTableName(
-            'quote_shipping_rate',
-            'Magento\Quote\Model\Resource\Quote\Address\Rate'
-        );
-        $reportEventTableName = $this->getTableName(
-            'report_event',
-            'Magento\Reports\Model\Resource\Event'
-        );
-        $salesOrderTableName = $this->getTableName(
-            'sales_order',
-            'Magento\Sales\Model\Resource\Order'
-        );
-        $salesOrderAddressTableName = $this->getTableName(
-            'sales_order_address',
-            'Magento\Sales\Model\Resource\Order'
-        );
-        $salesOrderGridTableName = $this->getTableName(
-            'sales_order_grid',
-            'Magento\Sales\Model\Resource\Order\Grid'
-        );
-        $salesOrderItemTableName = $this->getTableName(
-            'sales_order_item',
-            'Magento\Sales\Model\Resource\Order\Item'
-        );
-        $salesOrderPaymentTableName = $this->getTableName(
-            'sales_order_payment',
-            'Magento\Sales\Model\Resource\Order\Payment'
-        );
-        $salesOrderStatusHistoryTableName = $this->getTableName(
-            'sales_order_status_history',
-            'Magento\Sales\Model\Resource\Order\Status\History'
-        );
-        $eavEntityStoreTableName = $this->getTableName(
-            'eav_entity_store',
-            '\Magento\Eav\Model\Resource\Entity\Store'
-        );
-        /** @var \Magento\Store\Model\StoreManager $storeManager */
-        $storeManager = $this->application->getObjectManager()->create('Magento\Store\Model\StoreManager');
-        /** @var $category \Magento\Catalog\Model\Category */
-        $category = $this->application->getObjectManager()->get('Magento\Catalog\Model\Category');
-        /** @var $product \Magento\Catalog\Model\Product */
-        $product = $this->application->getObjectManager()->get('Magento\Catalog\Model\Product');
-
-        $result = [];
-        $stores = $storeManager->getStores();
-        foreach ($stores as $store) {
-            $storeId = $store->getStoreId();
-            $websiteId = $store->getWebsite()->getId();
-            $websiteName = $store->getWebsite()->getName();
-            $groupName = $store->getGroup()->getName();
-            $storeName = $store->getName();
-            $storeRootCategory = $store->getRootCategoryId();
-            $category->load($storeRootCategory);
-            $categoryResource = $category->getResource();
-            //Get all categories
-            $resultsCategories = $categoryResource->getAllChildren($category);
-            foreach ($resultsCategories as $resultsCategory) {
-                $category->load($resultsCategory);
-                $structure = explode('/', $category->getPath());
-                $pathSize = count($structure);
-                if ($pathSize > 1) {
-                    $path = [];
-                    for ($i = 1; $i < $pathSize; $i++) {
-                        $path[] = $category->load($structure[$i])->getName();
-                    }
-                    array_shift($path);
-                    $resultsCategoryName = implode('/', $path);
-                } else {
-                    $resultsCategoryName = $category->getName();
-                }
-                //Not use root categories
-                if (trim($resultsCategoryName) != '') {
-                    /** @var $productCategory \Magento\Catalog\Model\Category */
-                    $productCategory = $this->application->getObjectManager()->get('Magento\Catalog\Model\Category');
-
-                    /** @var $simpleProductCollection \Magento\Catalog\Model\Resource\Product\Collection */
-                    $simpleProductCollection = $this->application->getObjectManager()->create(
-                        'Magento\Catalog\Model\Resource\Product\Collection'
-                    );
-
-                    $simpleProductCollection->addStoreFilter($storeId);
-                    $simpleProductCollection->addWebsiteFilter($websiteId);
-                    $simpleProductCollection->addCategoryFilter($productCategory->load($resultsCategory));
-                    $simpleProductCollection->getSelect()->where(" type_id = 'simple' ");
-                    $simpleIds = $simpleProductCollection->getAllIds(2);
-                    $simpleProductsResult = [];
-                    foreach ($simpleIds as $key => $simpleId) {
-                        $simpleProduct = $product->load($simpleId);
-                        $simpleProductsResult[$key]['simpleProductId'] = $simpleId;
-                        $simpleProductsResult[$key]['simpleProductSku'] = $simpleProduct->getSku();
-                        $simpleProductsResult[$key]['simpleProductName'] = $simpleProduct->getName();
-                    }
-
-                    $result[] = [
-                        $storeId,
-                        $websiteName. '\n'. $groupName . '\n' . $storeName,
-                        $simpleProductsResult
-                    ];
-                }
-            }
-        }
-
-        $productStoreId = function ($index) use ($result) {
-            return $result[$index % count($result)][0];
-        };
-        $productStoreName = function ($index) use ($result) {
-            return $result[$index % count($result)][1];
-        };
-
-        $simpleProductId[0] = function ($index) use ($result) {
-            return $result[$index % count($result)][2][0]['simpleProductId'];
-        };
-        $simpleProductId[1] = function ($index) use ($result) {
-            return $result[$index % count($result)][2][1]['simpleProductId'];
-        };
-        $simpleProductSku[0] = function ($index) use ($result) {
-            return $result[$index % count($result)][2][0]['simpleProductSku'];
-        };
-        $simpleProductSku[1] = function ($index) use ($result) {
-            return $result[$index % count($result)][2][1]['simpleProductSku'];
-        };
-        $simpleProductName[0] = function ($index) use ($result) {
-            return $result[$index % count($result)][2][0]['simpleProductName'];
-        };
-        $simpleProductName[1] = function ($index) use ($result) {
-            return $result[$index % count($result)][2][1]['simpleProductName'];
-        };
-
-        $entityId = 1;
-        while ($entityId <= $ordersCount) {
-            $queries = "";
-
-            $orderNumber = 100000000 * $productStoreId($entityId) + $entityId;
-            $email = 'order_' . $entityId . '@example.com';
-            $firstName = 'First Name';
-            $lastName = 'Last Name';
-            $company = 'Company';
-            $address = 'Address';
-            $city = 'City';
-            $state = 'Alabama';
-            $country = 'US';
-            $zip = '11111';
-            $phone = '911';
-            $time = date("Y-m-d h:i:s");
-
-            $simpleProductIdLen[0] = strlen($simpleProductId[0]($entityId));
-            $simpleProductIdLen[1] = strlen($simpleProductId[1]($entityId));
-
-            $queries .= "INSERT INTO `{$eavEntityStoreTableName}` (`entity_store_id`, `entity_type_id`, `store_id`, `increment_prefix`, `increment_last_id`) VALUES ({$productStoreId($entityId)}, 5, {$productStoreId($entityId)}, '{$productStoreId($entityId)}', '{$orderNumber}') ON DUPLICATE KEY UPDATE `increment_last_id`='{$orderNumber}';";
-
-            $quoteId = $entityId;
-            $queries .= "INSERT INTO `{$quoteTableName}` (`entity_id`, `store_id`, `created_at`, `updated_at`, `converted_at`, `is_active`, `is_virtual`, `is_multi_shipping`, `items_count`, `items_qty`, `orig_order_id`, `store_to_base_rate`, `store_to_quote_rate`, `base_currency_code`, `store_currency_code`, `quote_currency_code`, `grand_total`, `base_grand_total`, `checkout_method`, `customer_id`, `customer_tax_class_id`, `customer_group_id`, `customer_email`, `customer_prefix`, `customer_firstname`, `customer_middlename`, `customer_lastname`, `customer_suffix`, `customer_dob`, `customer_note`, `customer_note_notify`, `customer_is_guest`, `remote_ip`, `applied_rule_ids`, `reserved_order_id`, `password_hash`, `coupon_code`, `global_currency_code`, `base_to_global_rate`, `base_to_quote_rate`, `customer_taxvat`, `customer_gender`, `subtotal`, `base_subtotal`, `subtotal_with_discount`, `base_subtotal_with_discount`, `is_changed`, `trigger_recollect`, `ext_shipping_info`, `is_persistent`, `gift_message_id`) VALUES ({$quoteId}, {$productStoreId($entityId)}, '{$time}', '1970-01-01 03:00:00', NULL, 0, 0, 0, 2, 2.0000, 0, 0.0000, 0.0000, 'USD', 'USD', 'USD', 25.3000, 25.3000, 'guest', NULL, 3, 0, '{$email}', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 1, '127.0.0.1', '1', NULL, NULL, NULL, 'USD', 1.0000, 1.0000, NULL, NULL, 17.0000, 17.0000, 15.3000, 15.3000, 1, 0, NULL, 0, NULL);";
-
-            $quoteAddressId[0] = $entityId * 2 - 1;
-            $quoteAddressId[1] = $entityId * 2;
-            $queries .= "INSERT INTO `{$quoteAddressTableName}` (`address_id`, `quote_id`, `created_at`, `updated_at`, `customer_id`, `save_in_address_book`, `customer_address_id`, `address_type`, `email`, `prefix`, `firstname`, `middlename`, `lastname`, `suffix`, `company`, `street`, `city`, `region`, `region_id`, `postcode`, `country_id`, `telephone`, `fax`, `same_as_billing`, `collect_shipping_rates`, `shipping_method`, `shipping_description`, `weight`, `subtotal`, `base_subtotal`, `subtotal_with_discount`, `base_subtotal_with_discount`, `tax_amount`, `base_tax_amount`, `shipping_amount`, `base_shipping_amount`, `shipping_tax_amount`, `base_shipping_tax_amount`, `discount_amount`, `base_discount_amount`, `grand_total`, `base_grand_total`, `customer_notes`, `applied_taxes`, `discount_description`, `shipping_discount_amount`, `base_shipping_discount_amount`, `subtotal_incl_tax`, `base_subtotal_total_incl_tax`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `shipping_discount_tax_compensation_amount`, `base_shipping_discount_tax_compensation_amnt`, `shipping_incl_tax`, `base_shipping_incl_tax`, `free_shipping`, `vat_id`, `vat_is_valid`, `vat_request_id`, `vat_request_date`, `vat_request_success`, `gift_message_id`) VALUES ({$quoteAddressId[0]}, {$quoteId}, '{$time}', '1970-01-01 03:00:00', NULL, 1, NULL, 'billing', '{$email}', NULL, '{$firstName}', NULL, '{$lastName}', NULL, '{$company}', '{$address}', '{$city}', '{$state}', 1, '{$zip}', '{$country}', '{$phone}', NULL, 0, 0, NULL, NULL, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, NULL, NULL, 0.0000, 0.0000, 0.0000, 0.0000, NULL, NULL, NULL, NULL, NULL, 0.0000, NULL, 0.0000, 0.0000, 0.0000, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);";
-            $queries .= "INSERT INTO `{$quoteAddressTableName}` (`address_id`, `quote_id`, `created_at`, `updated_at`, `customer_id`, `save_in_address_book`, `customer_address_id`, `address_type`, `email`, `prefix`, `firstname`, `middlename`, `lastname`, `suffix`, `company`, `street`, `city`, `region`, `region_id`, `postcode`, `country_id`, `telephone`, `fax`, `same_as_billing`, `collect_shipping_rates`, `shipping_method`, `shipping_description`, `weight`, `subtotal`, `base_subtotal`, `subtotal_with_discount`, `base_subtotal_with_discount`, `tax_amount`, `base_tax_amount`, `shipping_amount`, `base_shipping_amount`, `shipping_tax_amount`, `base_shipping_tax_amount`, `discount_amount`, `base_discount_amount`, `grand_total`, `base_grand_total`, `customer_notes`, `applied_taxes`, `discount_description`, `shipping_discount_amount`, `base_shipping_discount_amount`, `subtotal_incl_tax`, `base_subtotal_total_incl_tax`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `shipping_discount_tax_compensation_amount`, `base_shipping_discount_tax_compensation_amnt`, `shipping_incl_tax`, `base_shipping_incl_tax`, `free_shipping`, `vat_id`, `vat_is_valid`, `vat_request_id`, `vat_request_date`, `vat_request_success`, `gift_message_id`) VALUES ({$quoteAddressId[1]}, {$quoteId}, '{$time}', '1970-01-01 03:00:00', NULL, 0, NULL, 'shipping', '{$email}', NULL, '{$firstName}', NULL, '{$lastName}', NULL, '{$company}', '{$address}', '{$city}', '{$state}', 1, '{$zip}', '{$country}', '{$phone}', NULL, 1, 0, 'flatrate_flatrate', 'Flat Rate - Fixed', 2.0000, 17.0000, 17.0000, 0.0000, 0.0000, 0.0000, 0.0000, 10.0000, 10.0000, 0.0000, 0.0000, -1.7000, -1.7000, 25.3000, 25.3000, NULL, 'a:0:{}', NULL, 0.0000, 0.0000, 17.0000, NULL, 0.0000, 0.0000, 0.0000, NULL, 10.0000, 10.0000, 0, NULL, NULL, NULL, NULL, NULL, NULL);";
-
-            $quoteItemId[0] = $entityId * 4 - 3;
-            $quoteItemId[1] = $entityId * 4 - 2;
-            $quoteItemId[2] = $entityId * 4 - 1;
-            $quoteItemId[3] = $entityId * 4;
-            $queries .= "INSERT INTO `{$quoteItemTableName}` (`item_id`, `quote_id`, `created_at`, `updated_at`, `product_id`, `store_id`, `parent_item_id`, `is_virtual`, `sku`, `name`, `description`, `applied_rule_ids`, `additional_data`, `is_qty_decimal`, `no_discount`, `weight`, `qty`, `price`, `base_price`, `custom_price`, `discount_percent`, `discount_amount`, `base_discount_amount`, `tax_percent`, `tax_amount`, `base_tax_amount`, `row_total`, `base_row_total`, `row_total_with_discount`, `row_weight`, `product_type`, `base_tax_before_discount`, `tax_before_discount`, `original_custom_price`, `redirect_url`, `base_cost`, `price_incl_tax`, `base_price_incl_tax`, `row_total_incl_tax`, `base_row_total_incl_tax`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `free_shipping`, `gift_message_id`, `weee_tax_applied`, `weee_tax_applied_amount`, `weee_tax_applied_row_amount`, `weee_tax_disposition`, `weee_tax_row_disposition`, `base_weee_tax_applied_amount`, `base_weee_tax_applied_row_amnt`, `base_weee_tax_disposition`, `base_weee_tax_row_disposition`) VALUES ({$quoteItemId[0]}, {$quoteId}, '1970-01-01 03:00:00', '1970-01-01 03:00:00', {$simpleProductId[0]($entityId)}, {$productStoreId($entityId)}, NULL, 0, '{$simpleProductSku[0]($entityId)}', '{$simpleProductName[0]($entityId)}', NULL, '1', NULL, 0, 0, 1.0000, 1.0000, 8.5000, 8.5000, NULL, 10.0000, 0.8500, 0.8500, 0.0000, 0.0000, 0.0000, 8.5000, 8.5000, 0.0000, 1.0000, 'simple', NULL, NULL, NULL, NULL, NULL, 8.5000, 8.5000, 8.5000, 8.5000, 0.0000, 0.0000, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);";
-            $queries .= "INSERT INTO `{$quoteItemTableName}` (`item_id`, `quote_id`, `created_at`, `updated_at`, `product_id`, `store_id`, `parent_item_id`, `is_virtual`, `sku`, `name`, `description`, `applied_rule_ids`, `additional_data`, `is_qty_decimal`, `no_discount`, `weight`, `qty`, `price`, `base_price`, `custom_price`, `discount_percent`, `discount_amount`, `base_discount_amount`, `tax_percent`, `tax_amount`, `base_tax_amount`, `row_total`, `base_row_total`, `row_total_with_discount`, `row_weight`, `product_type`, `base_tax_before_discount`, `tax_before_discount`, `original_custom_price`, `redirect_url`, `base_cost`, `price_incl_tax`, `base_price_incl_tax`, `row_total_incl_tax`, `base_row_total_incl_tax`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `free_shipping`, `gift_message_id`, `weee_tax_applied`, `weee_tax_applied_amount`, `weee_tax_applied_row_amount`, `weee_tax_disposition`, `weee_tax_row_disposition`, `base_weee_tax_applied_amount`, `base_weee_tax_applied_row_amnt`, `base_weee_tax_disposition`, `base_weee_tax_row_disposition`) VALUES ({$quoteItemId[1]}, {$quoteId}, '1970-01-01 03:00:00', '1970-01-01 03:00:00', {$simpleProductId[1]($entityId)}, {$productStoreId($entityId)}, NULL, 0, '{$simpleProductSku[1]($entityId)}', '{$simpleProductName[1]($entityId)}', NULL, '1', NULL, 0, 0, 1.0000, 1.0000, 8.5000, 8.5000, NULL, 10.0000, 0.8500, 0.8500, 0.0000, 0.0000, 0.0000, 8.5000, 8.5000, 0.0000, 1.0000, 'simple', NULL, NULL, NULL, NULL, NULL, 8.5000, 8.5000, 8.5000, 8.5000, 0.0000, 0.0000, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);";
-
-            $quoteItemOptionId[0] = $entityId * 8 - 7;
-            $quoteItemOptionId[1] = $entityId * 8 - 6;
-            $quoteItemOptionId[2] = $entityId * 8 - 5;
-            $quoteItemOptionId[3] = $entityId * 8 - 4;
-            $quoteItemOptionId[4] = $entityId * 8 - 3;
-            $quoteItemOptionId[5] = $entityId * 8 - 2;
-            $quoteItemOptionId[6] = $entityId * 8 - 1;
-            $quoteItemOptionId[7] = $entityId * 8;
-            $queries .= "INSERT INTO `{$quoteItemOptionTableName}` (`option_id`, `item_id`, `product_id`, `code`, `value`) VALUES ({$quoteItemOptionId[0]}, {$quoteItemId[0]}, {$simpleProductId[0]($entityId)}, 'info_buyRequest', 'a:3:{s:4:\"uenc\";s:44:\"aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw,\";s:7:\"product\";s:{$simpleProductIdLen[0]}:\"{$simpleProductId[0]($entityId)}\";s:3:\"qty\";i:1;}');";
-            $queries .= "INSERT INTO `{$quoteItemOptionTableName}` (`option_id`, `item_id`, `product_id`, `code`, `value`) VALUES ({$quoteItemOptionId[1]}, {$quoteItemId[1]}, {$simpleProductId[1]($entityId)}, 'info_buyRequest', 'a:3:{s:4:\"uenc\";s:44:\"aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw,\";s:7:\"product\";s:{$simpleProductIdLen[1]}:\"{$simpleProductId[1]($entityId)}\";s:3:\"qty\";i:1;}');";
-
-            $quotePaymentId = $quoteId;
-            $queries .= "INSERT INTO `{$quotePaymentTableName}` (`payment_id`, `quote_id`, `created_at`, `updated_at`, `method`, `cc_type`, `cc_number_enc`, `cc_last_4`, `cc_cid_enc`, `cc_owner`, `cc_exp_month`, `cc_exp_year`, `cc_ss_owner`, `cc_ss_start_month`, `cc_ss_start_year`, `po_number`, `additional_data`, `cc_ss_issue`, `additional_information`) VALUES ({$quotePaymentId}, {$quoteId}, '{$time}', '1970-01-01 03:00:00', 'checkmo', NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL, NULL, NULL, NULL);";
-
-            $quoteShippingRateId = $quoteAddressId[1];
-            $queries .= "INSERT INTO `{$quoteAddressRateTableName}` (`rate_id`, `address_id`, `created_at`, `updated_at`, `carrier`, `carrier_title`, `code`, `method`, `method_description`, `price`, `error_message`, `method_title`) VALUES ({$quoteShippingRateId}, {$quoteAddressId[1]}, '{$time}', '1970-01-01 03:00:00', 'flatrate', 'Flat Rate', 'flatrate_flatrate', 'flatrate', NULL, 10.0000, NULL, 'Fixed');";
-
-            $reportEventId[0] = $quoteItemId[0];
-            $reportEventId[1] = $quoteItemId[1];
-            $reportEventId[2] = $quoteItemId[2];
-            $reportEventId[3] = $quoteItemId[3];
-            $queries .= "INSERT INTO `{$reportEventTableName}` (`event_id`, `logged_at`, `event_type_id`, `object_id`, `subject_id`, `subtype`, `store_id`) VALUES ({$reportEventId[0]}, '{$time}', 4, {$simpleProductId[0]($entityId)}, 2, 1, {$productStoreId($entityId)});";
-            $queries .= "INSERT INTO `{$reportEventTableName}` (`event_id`, `logged_at`, `event_type_id`, `object_id`, `subject_id`, `subtype`, `store_id`) VALUES ({$reportEventId[1]}, '{$time}', 4, {$simpleProductId[1]($entityId)}, 2, 1, {$productStoreId($entityId)});";
-
-            $salesOrderId = $quoteId;
-            $queries .= "INSERT INTO `{$salesOrderTableName}` (`entity_id`, `state`, `status`, `coupon_code`, `protect_code`, `shipping_description`, `is_virtual`, `store_id`, `customer_id`, `base_discount_amount`, `base_discount_canceled`, `base_discount_invoiced`, `base_discount_refunded`, `base_grand_total`, `base_shipping_amount`, `base_shipping_canceled`, `base_shipping_invoiced`, `base_shipping_refunded`, `base_shipping_tax_amount`, `base_shipping_tax_refunded`, `base_subtotal`, `base_subtotal_canceled`, `base_subtotal_invoiced`, `base_subtotal_refunded`, `base_tax_amount`, `base_tax_canceled`, `base_tax_invoiced`, `base_tax_refunded`, `base_to_global_rate`, `base_to_order_rate`, `base_total_canceled`, `base_total_invoiced`, `base_total_invoiced_cost`, `base_total_offline_refunded`, `base_total_online_refunded`, `base_total_paid`, `base_total_qty_ordered`, `base_total_refunded`, `discount_amount`, `discount_canceled`, `discount_invoiced`, `discount_refunded`, `grand_total`, `shipping_amount`, `shipping_canceled`, `shipping_invoiced`, `shipping_refunded`, `shipping_tax_amount`, `shipping_tax_refunded`, `store_to_base_rate`, `store_to_order_rate`, `subtotal`, `subtotal_canceled`, `subtotal_invoiced`, `subtotal_refunded`, `tax_amount`, `tax_canceled`, `tax_invoiced`, `tax_refunded`, `total_canceled`, `total_invoiced`, `total_offline_refunded`, `total_online_refunded`, `total_paid`, `total_qty_ordered`, `total_refunded`, `can_ship_partially`, `can_ship_partially_item`, `customer_is_guest`, `customer_note_notify`, `billing_address_id`, `customer_group_id`, `edit_increment`, `email_sent`, `send_email`, `forced_shipment_with_invoice`, `payment_auth_expiration`, `quote_address_id`, `quote_id`, `shipping_address_id`, `adjustment_negative`, `adjustment_positive`, `base_adjustment_negative`, `base_adjustment_positive`, `base_shipping_discount_amount`, `base_subtotal_incl_tax`, `base_total_due`, `payment_authorization_amount`, `shipping_discount_amount`, `subtotal_incl_tax`, `total_due`, `weight`, `customer_dob`, `increment_id`, `applied_rule_ids`, `base_currency_code`, `customer_email`, `customer_firstname`, `customer_lastname`, `customer_middlename`, `customer_prefix`, `customer_suffix`, `customer_taxvat`, `discount_description`, `ext_customer_id`, `ext_order_id`, `global_currency_code`, `hold_before_state`, `hold_before_status`, `order_currency_code`, `original_increment_id`, `relation_child_id`, `relation_child_real_id`, `relation_parent_id`, `relation_parent_real_id`, `remote_ip`, `shipping_method`, `store_currency_code`, `store_name`, `x_forwarded_for`, `customer_note`, `created_at`, `updated_at`, `total_item_count`, `customer_gender`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `shipping_discount_tax_compensation_amount`, `base_shipping_discount_tax_compensation_amnt`, `discount_tax_compensation_invoiced`, `base_discount_tax_compensation_invoiced`, `discount_tax_compensation_refunded`, `base_discount_tax_compensation_refunded`, `shipping_incl_tax`, `base_shipping_incl_tax`, `coupon_rule_name`, `gift_message_id`) VALUES ({$salesOrderId}, 'new', 'pending', NULL, '272ecb', 'Flat Rate - Fixed', 0, {$productStoreId($entityId)}, NULL, -1.7000, NULL, NULL, NULL, 25.3000, 10.0000, NULL, NULL, NULL, 0.0000, NULL, 17.0000, NULL, NULL, NULL, 0.0000, NULL, NULL, NULL, 1.0000, 1.0000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.7000, NULL, NULL, NULL, 25.3000, 10.0000, NULL, NULL, NULL, 0.0000, NULL, 0.0000, 0.0000, 17.0000, NULL, NULL, NULL, 0.0000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2.0000, NULL, NULL, NULL, 1, 1, 2, 0, NULL, 1, 1, NULL, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, 17.0000, 25.3000, NULL, NULL, 17.0000, 25.3000, 2.0000, NULL, {$orderNumber}, '1', 'USD', '{$email}', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'USD', NULL, NULL, 'USD', NULL, NULL, NULL, NULL, NULL, '127.0.0.1', 'flatrate_flatrate', 'USD', '{$productStoreName($entityId)}', NULL, NULL, '{$time}', '{$time}', 2, NULL, 0.0000, 0.0000, 0.0000, NULL, NULL, NULL, NULL, NULL, 10.0000, 10.0000, NULL, NULL);";
-
-            $salesOrderAddressId[0] = $quoteAddressId[0];
-            $salesOrderAddressId[1] = $quoteAddressId[1];
-            $queries .= "INSERT INTO `{$salesOrderAddressTableName}` (`entity_id`, `parent_id`, `customer_address_id`, `quote_address_id`, `region_id`, `customer_id`, `fax`, `region`, `postcode`, `lastname`, `street`, `city`, `email`, `telephone`, `country_id`, `firstname`, `address_type`, `prefix`, `middlename`, `suffix`, `company`, `vat_id`, `vat_is_valid`, `vat_request_id`, `vat_request_date`, `vat_request_success`) VALUES ({$salesOrderAddressId[0]}, {$salesOrderId}, NULL, NULL, 1, NULL, NULL, '{$state}', '{$zip}', '{$lastName}', '{$address}', '{$city}', '{$email}', '{$phone}', '{$country}', '{$firstName}', 'shipping', NULL, NULL, NULL, '{$company}', NULL, NULL, NULL, NULL, NULL);";
-            $queries .= "INSERT INTO `{$salesOrderAddressTableName}` (`entity_id`, `parent_id`, `customer_address_id`, `quote_address_id`, `region_id`, `customer_id`, `fax`, `region`, `postcode`, `lastname`, `street`, `city`, `email`, `telephone`, `country_id`, `firstname`, `address_type`, `prefix`, `middlename`, `suffix`, `company`, `vat_id`, `vat_is_valid`, `vat_request_id`, `vat_request_date`, `vat_request_success`) VALUES ({$salesOrderAddressId[1]}, {$salesOrderId}, NULL, NULL, 1, NULL, NULL, '{$state}', '{$zip}', '{$lastName}', '{$address}', '{$city}', '{$email}', '{$phone}', '{$country}', '{$firstName}', 'billing', NULL, NULL, NULL, '{$company}', NULL, NULL, NULL, NULL, NULL);";
-
-            $salesOrderGridId = $salesOrderId;
-            $queries .= "INSERT INTO `{$salesOrderGridTableName}` (`entity_id`, `status`, `store_id`, `store_name`, `customer_id`, `base_grand_total`, `base_total_paid`, `grand_total`, `total_paid`, `increment_id`, `base_currency_code`, `order_currency_code`, `shipping_name`, `billing_name`, `created_at`, `updated_at`) VALUES ({$salesOrderGridId}, 'pending', {$productStoreId($entityId)}, '{$productStoreName($entityId)}', NULL, 25.3000, NULL, 25.3000, NULL, {$orderNumber}, 'USD', 'USD', '', '', '{$time}', NULL);";
-
-            $salesOrderItemId[0] = $quoteItemId[0];
-            $salesOrderItemId[1] = $quoteItemId[1];
-            $salesOrderItemId[2] = $quoteItemId[2];
-            $salesOrderItemId[3] = $quoteItemId[3];
-            $queries .= "INSERT INTO `{$salesOrderItemTableName}` (`item_id`, `order_id`, `parent_item_id`, `quote_item_id`, `store_id`, `created_at`, `updated_at`, `product_id`, `product_type`, `product_options`, `weight`, `is_virtual`, `sku`, `name`, `description`, `applied_rule_ids`, `additional_data`, `is_qty_decimal`, `no_discount`, `qty_backordered`, `qty_canceled`, `qty_invoiced`, `qty_ordered`, `qty_refunded`, `qty_shipped`, `base_cost`, `price`, `base_price`, `original_price`, `base_original_price`, `tax_percent`, `tax_amount`, `base_tax_amount`, `tax_invoiced`, `base_tax_invoiced`, `discount_percent`, `discount_amount`, `base_discount_amount`, `discount_invoiced`, `base_discount_invoiced`, `amount_refunded`, `base_amount_refunded`, `row_total`, `base_row_total`, `row_invoiced`, `base_row_invoiced`, `row_weight`, `base_tax_before_discount`, `tax_before_discount`, `ext_order_item_id`, `locked_do_invoice`, `locked_do_ship`, `price_incl_tax`, `base_price_incl_tax`, `row_total_incl_tax`, `base_row_total_incl_tax`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `discount_tax_compensation_invoiced`, `base_discount_tax_compensation_invoiced`, `discount_tax_compensation_refunded`, `base_discount_tax_compensation_refunded`, `tax_canceled`, `discount_tax_compensation_canceled`, `tax_refunded`, `base_tax_refunded`, `discount_refunded`, `base_discount_refunded`, `free_shipping`, `gift_message_id`, `gift_message_available`, `weee_tax_applied`, `weee_tax_applied_amount`, `weee_tax_applied_row_amount`, `weee_tax_disposition`, `weee_tax_row_disposition`, `base_weee_tax_applied_amount`, `base_weee_tax_applied_row_amnt`, `base_weee_tax_disposition`, `base_weee_tax_row_disposition`) VALUES ({$salesOrderItemId[0]}, {$salesOrderId}, NULL, {$quoteItemId[0]}, {$productStoreId($entityId)}, '{$time}', '0000-00-00 00:00:00', {$simpleProductId[0]($entityId)}, 'simple', 'a:1:{s:15:\"info_buyRequest\";a:3:{s:4:\"uenc\";s:44:\"aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw,\";s:7:\"product\";s:{$simpleProductIdLen[0]}:\"{$simpleProductId[0]($entityId)}\";s:3:\"qty\";i:1;}}', 1.0000, 0, '{$simpleProductSku[0]($entityId)}', '{$simpleProductName[0]($entityId)}', NULL, '1', NULL, 0, 0, NULL, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, NULL, 8.5000, 8.5000, 10.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 10.0000, 0.8500, 0.8500, 0.0000, 0.0000, 0.0000, 0.0000, 8.5000, 8.5000, 0.0000, 0.0000, 1.0000, NULL, NULL, NULL, NULL, NULL, 8.5000, 8.5000, 8.5000, 8.5000, 0.0000, 0.0000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);";
-            $queries .= "INSERT INTO `{$salesOrderItemTableName}` (`item_id`, `order_id`, `parent_item_id`, `quote_item_id`, `store_id`, `created_at`, `updated_at`, `product_id`, `product_type`, `product_options`, `weight`, `is_virtual`, `sku`, `name`, `description`, `applied_rule_ids`, `additional_data`, `is_qty_decimal`, `no_discount`, `qty_backordered`, `qty_canceled`, `qty_invoiced`, `qty_ordered`, `qty_refunded`, `qty_shipped`, `base_cost`, `price`, `base_price`, `original_price`, `base_original_price`, `tax_percent`, `tax_amount`, `base_tax_amount`, `tax_invoiced`, `base_tax_invoiced`, `discount_percent`, `discount_amount`, `base_discount_amount`, `discount_invoiced`, `base_discount_invoiced`, `amount_refunded`, `base_amount_refunded`, `row_total`, `base_row_total`, `row_invoiced`, `base_row_invoiced`, `row_weight`, `base_tax_before_discount`, `tax_before_discount`, `ext_order_item_id`, `locked_do_invoice`, `locked_do_ship`, `price_incl_tax`, `base_price_incl_tax`, `row_total_incl_tax`, `base_row_total_incl_tax`, `discount_tax_compensation_amount`, `base_discount_tax_compensation_amount`, `discount_tax_compensation_invoiced`, `base_discount_tax_compensation_invoiced`, `discount_tax_compensation_refunded`, `base_discount_tax_compensation_refunded`, `tax_canceled`, `discount_tax_compensation_canceled`, `tax_refunded`, `base_tax_refunded`, `discount_refunded`, `base_discount_refunded`, `free_shipping`, `gift_message_id`, `gift_message_available`, `weee_tax_applied`, `weee_tax_applied_amount`, `weee_tax_applied_row_amount`, `weee_tax_disposition`, `weee_tax_row_disposition`, `base_weee_tax_applied_amount`, `base_weee_tax_applied_row_amnt`, `base_weee_tax_disposition`, `base_weee_tax_row_disposition`) VALUES ({$salesOrderItemId[1]}, {$salesOrderId}, NULL, {$quoteItemId[1]}, {$productStoreId($entityId)}, '{$time}', '0000-00-00 00:00:00', {$simpleProductId[1]($entityId)}, 'simple', 'a:1:{s:15:\"info_buyRequest\";a:3:{s:4:\"uenc\";s:44:\"aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw,\";s:7:\"product\";s:{$simpleProductIdLen[1]}:\"{$simpleProductId[1]($entityId)}\";s:3:\"qty\";i:1;}}', 1.0000, 0, '{$simpleProductSku[1]($entityId)}', '{$simpleProductName[1]($entityId)}', NULL, '1', NULL, 0, 0, NULL, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, NULL, 8.5000, 8.5000, 10.0000, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 10.0000, 0.8500, 0.8500, 0.0000, 0.0000, 0.0000, 0.0000, 8.5000, 8.5000, 0.0000, 0.0000, 1.0000, NULL, NULL, NULL, NULL, NULL, 8.5000, 8.5000, 8.5000, 8.5000, 0.0000, 0.0000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);";
-
-            $salesOrderPaymentId = $salesOrderId;
-            $queries .= "INSERT INTO `{$salesOrderPaymentTableName}` (`entity_id`, `parent_id`, `base_shipping_captured`, `shipping_captured`, `amount_refunded`, `base_amount_paid`, `amount_canceled`, `base_amount_authorized`, `base_amount_paid_online`, `base_amount_refunded_online`, `base_shipping_amount`, `shipping_amount`, `amount_paid`, `amount_authorized`, `base_amount_ordered`, `base_shipping_refunded`, `shipping_refunded`, `base_amount_refunded`, `amount_ordered`, `base_amount_canceled`, `quote_payment_id`, `additional_data`, `cc_exp_month`, `cc_ss_start_year`, `echeck_bank_name`, `method`, `cc_debug_request_body`, `cc_secure_verify`, `protection_eligibility`, `cc_approval`, `cc_last_4`, `cc_status_description`, `echeck_type`, `cc_debug_response_serialized`, `cc_ss_start_month`, `echeck_account_type`, `last_trans_id`, `cc_cid_status`, `cc_owner`, `cc_type`, `po_number`, `cc_exp_year`, `cc_status`, `echeck_routing_number`, `account_status`, `anet_trans_method`, `cc_debug_response_body`, `cc_ss_issue`, `echeck_account_name`, `cc_avs_status`, `cc_number_enc`, `cc_trans_id`, `address_status`, `additional_information`) VALUES ({$salesOrderPaymentId}, {$salesOrderId}, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 10.0000, 10.0000, NULL, NULL, 25.3000, NULL, NULL, NULL, 25.3000, NULL, NULL, NULL, NULL, '0', NULL, 'checkmo', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'a:1:{s:53:\"a:1:{s:12:\"method_title\";s:19:\"Check / Money order\";}\";N;}');";
-
-            $salesOrderStatusHistoryId = $salesOrderId;
-            $queries .= "INSERT INTO `{$salesOrderStatusHistoryTableName}` (`entity_id`, `parent_id`, `is_customer_notified`, `is_visible_on_front`, `comment`, `status`, `created_at`, `entity_name`) VALUES ({$salesOrderStatusHistoryId}, {$salesOrderId}, 1, 0, NULL, 'pending', '{$time}', 'order');";
-
-            $writeAdapter->multiQuery($queries);
-
-            $entityId++;
-        }
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getActionTitle()
-    {
-        return 'Generating orders';
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function introduceParamLabels()
-    {
-        return [
-            'orders'     => 'Orders'
-        ];
-    }
-
-    /**
-     * Get real table name for db table, validated by db adapter
-     *
-     * @param string $tableName
-     * @param string $resourceName
-     * @return string
-     */
-    public function getTableName($tableName, $resourceName)
-    {
-        $resource = $this->application->getObjectManager()->get($resourceName);
-        return $this->getConnection('write')->getTableName($resource->getTable($tableName));
-    }
-
-    /**
-     * Retrieve connection to resource specified by $resourceName
-     *
-     * @param string $resourceName
-     * @return \Magento\Framework\DB\Adapter\AdapterInterface|false
-     */
-    public function getConnection($resourceName)
-    {
-        return $this->application->getObjectManager()->get(
-            'Magento\Framework\App\Resource'
-        )->getConnection($resourceName);
-    }
-}
-
-return new OrdersFixture($this);
diff --git a/lib/internal/Magento/Framework/Api/DataObjectHelper.php b/lib/internal/Magento/Framework/Api/DataObjectHelper.php
index 2fb75d5f841613fb0523cc88e7062112d1fc6729..70a7b79c71b8b9b011aae799e4e3b76f6c7027f2 100644
--- a/lib/internal/Magento/Framework/Api/DataObjectHelper.php
+++ b/lib/internal/Magento/Framework/Api/DataObjectHelper.php
@@ -176,7 +176,7 @@ class DataObjectHelper
             $object = $this->objectFactory->create($returnType, []);
             $this->populateWithArray($object, $value, $returnType);
         } else if (is_subclass_of($returnType, '\Magento\Framework\Api\ExtensionAttributesInterface')) {
-            $object = $this->extensionFactory->create(get_class($dataObject), $value);
+            $object = $this->extensionFactory->create(get_class($dataObject), ['data' => $value]);
         } else {
             $object = $this->objectFactory->create($returnType, $value);
         }
diff --git a/lib/internal/Magento/Framework/AppInterface.php b/lib/internal/Magento/Framework/AppInterface.php
index fb61d6803b3681c56a7af5ad3a29cc8468484e27..76de8c573539c2d3a51ba2c7275525fc78100f03 100644
--- a/lib/internal/Magento/Framework/AppInterface.php
+++ b/lib/internal/Magento/Framework/AppInterface.php
@@ -17,7 +17,7 @@ interface AppInterface
     /**
      * Magento version
      */
-    const VERSION = '0.74.0-beta14';
+    const VERSION = '0.74.0-beta15';
 
     /**
      * Launch application
diff --git a/lib/internal/Magento/Framework/Filter/Template.php b/lib/internal/Magento/Framework/Filter/Template.php
index 50db67715c20e9c3dd1adaea1bbb8e98a181cb4e..5c6fede1d57b6cf4f5a0faeaebec9360322bbf1d 100644
--- a/lib/internal/Magento/Framework/Filter/Template.php
+++ b/lib/internal/Magento/Framework/Filter/Template.php
@@ -32,13 +32,6 @@ class Template implements \Zend_Filter_Interface
      */
     protected $_templateVars = [];
 
-    /**
-     * Include processor
-     *
-     * @var callable|null
-     */
-    protected $_includeProcessor = null;
-
     /**
      * @var \Magento\Framework\Stdlib\String
      */
@@ -68,28 +61,6 @@ class Template implements \Zend_Filter_Interface
         return $this;
     }
 
-    /**
-     * Sets the processor of includes.
-     *
-     * @param callable $callback it must return string
-     * @return $this
-     */
-    public function setIncludeProcessor(array $callback)
-    {
-        $this->_includeProcessor = $callback;
-        return $this;
-    }
-
-    /**
-     * Sets the processor of includes.
-     *
-     * @return callable|null
-     */
-    public function getIncludeProcessor()
-    {
-        return is_callable($this->_includeProcessor) ? $this->_includeProcessor : null;
-    }
-
     /**
      * Filter the string as template.
      *
@@ -153,27 +124,6 @@ class Template implements \Zend_Filter_Interface
         return $replacedValue;
     }
 
-    /**
-     * @param string[] $construction
-     * @return mixed
-     */
-    public function includeDirective($construction)
-    {
-        // Processing of {include template=... [...]} statement
-        $includeParameters = $this->_getIncludeParameters($construction[2]);
-        if (!isset($includeParameters['template']) or !$this->getIncludeProcessor()) {
-            // Not specified template or not set include processor
-            $replacedValue = '{Error in include processing}';
-        } else {
-            // Including of template
-            $templateCode = $includeParameters['template'];
-            unset($includeParameters['template']);
-            $includeParameters = array_merge_recursive($includeParameters, $this->_templateVars);
-            $replacedValue = call_user_func($this->getIncludeProcessor(), $templateCode, $includeParameters);
-        }
-        return $replacedValue;
-    }
-
     /**
      * @param string[] $construction
      * @return string
diff --git a/lib/internal/Magento/Framework/Test/Unit/UrlTest.php b/lib/internal/Magento/Framework/Test/Unit/UrlTest.php
index baa556bb19f789d773d6c48fdf9ac454ac19f951..c5bcc5175ab5dbe63db53e0ea4fcad888e96c8fa 100644
--- a/lib/internal/Magento/Framework/Test/Unit/UrlTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/UrlTest.php
@@ -121,7 +121,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase
     public function testGetCurrentUrl($httpHost, $url)
     {
         $requestMock = $this->getRequestMock();
-        $requestMock->expects($this->once())->method('getServer')->with('REQUEST_URI')->willReturn('/fancy_uri');
+        $requestMock->expects($this->once())->method('getRequestUri')->willReturn('/fancy_uri');
         $requestMock->expects($this->once())->method('getScheme')->will($this->returnValue('http'));
         $requestMock->expects($this->once())->method('getHttpHost')->will($this->returnValue($httpHost));
         $model = $this->getUrlModel(['request' => $requestMock]);
diff --git a/lib/internal/Magento/Framework/Url.php b/lib/internal/Magento/Framework/Url.php
index 7d4c4c33399ac0ae5ee53379727681a291cc7bfd..a300ebe01f4858c06dd598d769d1352ed79394d8 100644
--- a/lib/internal/Magento/Framework/Url.php
+++ b/lib/internal/Magento/Framework/Url.php
@@ -1045,7 +1045,7 @@ class Url extends \Magento\Framework\Object implements \Magento\Framework\UrlInt
                 $port = ':' . $httpHostWithPort[1];
             }
         }
-        return $this->_request->getScheme() . '://' . $httpHost . $port . $this->_request->getServer('REQUEST_URI');
+        return $this->_request->getScheme() . '://' . $httpHost . $port . $this->_request->getRequestUri();
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json
index 29ca6222b30be7c45122ac19c9f1c48c04c408fc..65ab1eb321eb7010afe26da3948acb78c93bdb01 100644
--- a/lib/internal/Magento/Framework/composer.json
+++ b/lib/internal/Magento/Framework/composer.json
@@ -2,7 +2,7 @@
     "name": "magento/framework",
     "description": "N/A",
     "type": "magento2-library",
-    "version": "0.74.0-beta14",
+    "version": "0.74.0-beta15",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
diff --git a/lib/web/mage/apply/main.js b/lib/web/mage/apply/main.js
index 6a5e99560244cf1f24b5b23ed2a9b88c9ad7a3fe..37a12873c3335e7cb2a3afee00770ec5ce5effdd 100644
--- a/lib/web/mage/apply/main.js
+++ b/lib/web/mage/apply/main.js
@@ -13,7 +13,7 @@ define([
         nodeSelector = '[' + dataAttr + ']';
 
     /**
-     * Initializes components assigned to a specfied element via data-* attribute.
+     * Initializes components assigned to a specified element via data-* attribute.
      *
      * @param {HTMLElement} el - Element to initialize components with.
      * @param {Object|String} config - Initial components' config.
@@ -21,6 +21,7 @@ define([
      */
     function init(el, config, component) {
         require([component], function (fn) {
+
             if (typeof fn === 'object') {
                 fn = fn[component];
             }
@@ -65,11 +66,29 @@ define([
             _.toArray(nodes)
                 .map(getData)
                 .concat(virtuals)
-                .forEach(function (item) {
-                    _.each(item.data, init.bind(null, item.el));
+                .forEach(function (itemContainer) {
+                    var configStack,
+                        element = itemContainer.el;
+
+                    _.each(itemContainer.data, function (obj, key) {
+                            if (obj.mixins) {
+                                require(obj.mixins, function () {
+                                    for (var i = 0, len = arguments.length; i < len; i++) {
+                                        $.extend(true, itemContainer.data[key], arguments[i](itemContainer.data[key], element));
+                                    }
+
+                                    delete obj.mixins;
+                                    _.each(itemContainer.data, init.bind(null, element));
+                                })
+                            } else {
+                                _.each(itemContainer.data, init.bind(null, element));
+                            }
+
+                        }
+                    );
+
                 });
         },
-
         applyFor: init
     };
 });
diff --git a/lib/web/mage/apply/scripts.js b/lib/web/mage/apply/scripts.js
index d9448fe1468e8245ded0b339fe0f9ac43b8c89f8..593d0bba6fd05b1ca86ff288934c93e674345b71 100644
--- a/lib/web/mage/apply/scripts.js
+++ b/lib/web/mage/apply/scripts.js
@@ -28,23 +28,30 @@ define([
      * Merges provided data with a current data
      * of a elements' "data-mage-init" attribute.
      *
-     * @param {Object} components - Object with compoenets and theirs configuration.
+     * @param {Object} components - Object with components and theirs configuration.
      * @param {HTMLElement} elem - Element whose data should be modified.
      */
     function setData(components, elem) {
         var data = elem.getAttribute(dataAttr);
 
         data = !!data ? JSON.parse(data) : {};
+        _.each(components, function(obj, key) {
+            if (_.has(obj, 'mixins')) {
+                data[key].mixins = data[key].mixins || [];
+                data[key].mixins = data[key].mixins.concat(obj.mixins);
+                delete obj.mixins;
+            }
+        });
+
         data = $.extend(true, data, components);
         data = JSON.stringify(data);
-
         elem.setAttribute(dataAttr, data);
     }
 
     /**
      * Search for the elements by privded selector and extends theirs data.
      *
-     * @param {Object} components - Object with compoenets and theirs configuration.
+     * @param {Object} components - Object with components and theirs configuration.
      * @param {String} selector - Selector for the elements.
      */
     function processElems(components, selector) {