From 9abf9a6aad3080914536d7d7a1140cc9661a2c58 Mon Sep 17 00:00:00 2001
From: mage2-team <mage2-team@magento.com>
Date: Fri, 3 Oct 2014 14:28:39 -0700
Subject: [PATCH] 0.1.0-alpha98 * GitHub requests:    * [#678]
 (https://github.com/magento/magento2/issues/678) -- Fixed Travis CI builds *
 Functional tests:    * Create Sales Order Backend    * Delete Products from
 Wishlist    * Download Products Report    * Mass Orders Update    * Sales Tax
 Report * Fixed bugs:    * Fixed an issue where success message was not
 displayed after product review submit    * Fixed an issue where it was
 impossible to start checkout process using PayPal from the JavaScript pop-up
 window when the Display Actual Price option was set to On Gesture    * Fixed
 an issue where a fatal error was thrown after shipping method selection in
 PayPal Express Checkout    * Fixed an issue with parameters exceptions in
 SOAP response    * Fixed an issue where
 testGetRequestTokenOauthTimestampRefused unit test failed in certain cases   
 * Fixed an issue where TestCreateCustomer test thrown fatal error when making
 a SOAP request    * Fixed an issue with required parameters in WSDL    *
 Fixed an issue where Customer Account Service returned void response in the
 resetPassword method    * Fixed an issue where REST API failed during bundle
 product creation

---
 .travis.yml                                   |   3 +-
 CHANGELOG.md                                  |  21 ++
 .../Magento/AdminNotification/composer.json   |  10 +-
 app/code/Magento/Authorization/composer.json  |   6 +-
 app/code/Magento/Authorizenet/composer.json   |  18 +-
 app/code/Magento/Backend/composer.json        |  36 +--
 app/code/Magento/Backup/composer.json         |  12 +-
 app/code/Magento/Bundle/composer.json         |  30 +--
 app/code/Magento/Captcha/composer.json        |  14 +-
 .../V1/Category/ProductLinks/WriteService.php |  14 +-
 .../Service/V1/Category/WriteService.php      |   4 +-
 app/code/Magento/Catalog/composer.json        |  48 ++--
 .../Magento/CatalogImportExport/composer.json |  20 +-
 .../Magento/CatalogInventory/composer.json    |  20 +-
 app/code/Magento/CatalogRule/composer.json    |  16 +-
 app/code/Magento/CatalogSearch/composer.json  |  22 +-
 .../Magento/CatalogUrlRewrite/composer.json   |  18 +-
 app/code/Magento/Centinel/composer.json       |  14 +-
 app/code/Magento/Checkout/composer.json       |  36 +--
 .../Magento/CheckoutAgreements/composer.json  |  10 +-
 app/code/Magento/Cms/composer.json            |  20 +-
 app/code/Magento/CmsUrlRewrite/composer.json  |   8 +-
 .../ConfigurableImportExport/composer.json    |  14 +-
 .../V1/Product/Option/WriteService.php        |  60 ++++-
 .../Magento/ConfigurableProduct/composer.json |  28 +--
 app/code/Magento/Contact/composer.json        |  12 +-
 app/code/Magento/Core/composer.json           |  16 +-
 app/code/Magento/Cron/composer.json           |   8 +-
 app/code/Magento/CurrencySymbol/composer.json |  14 +-
 .../Service/V1/CustomerAccountService.php     |   1 +
 .../V1/CustomerAccountServiceInterface.php    |   2 +-
 app/code/Magento/Customer/composer.json       |  36 +--
 .../CustomerImportExport/composer.json        |  16 +-
 app/code/Magento/DesignEditor/composer.json   |  14 +-
 app/code/Magento/Dhl/composer.json            |  22 +-
 app/code/Magento/Directory/composer.json      |  10 +-
 app/code/Magento/Downloadable/composer.json   |  34 +--
 app/code/Magento/Eav/composer.json            |  12 +-
 app/code/Magento/Email/composer.json          |  12 +-
 app/code/Magento/Fedex/composer.json          |  18 +-
 app/code/Magento/GiftMessage/composer.json    |  22 +-
 app/code/Magento/GoogleAdwords/composer.json  |   8 +-
 .../Magento/GoogleAnalytics/composer.json     |   8 +-
 .../Magento/GoogleOptimizer/composer.json     |  14 +-
 app/code/Magento/GoogleShopping/composer.json |  20 +-
 .../Magento/GroupedImportExport/composer.json |  14 +-
 app/code/Magento/GroupedProduct/composer.json |  24 +-
 app/code/Magento/ImportExport/composer.json   |  14 +-
 app/code/Magento/Indexer/composer.json        |   8 +-
 app/code/Magento/Install/composer.json        |  14 +-
 app/code/Magento/Integration/composer.json    |  16 +-
 .../Magento/LayeredNavigation/composer.json   |   8 +-
 app/code/Magento/Log/composer.json            |  14 +-
 app/code/Magento/Msrp/composer.json           |  24 +-
 .../Magento/Msrp/view/base/web/js/msrp.js     |   4 +-
 app/code/Magento/Multishipping/composer.json  |  20 +-
 app/code/Magento/Newsletter/composer.json     |  22 +-
 .../Magento/OfflinePayments/composer.json     |   6 +-
 .../Magento/OfflineShipping/composer.json     |  20 +-
 app/code/Magento/Ogone/composer.json          |  12 +-
 .../Magento/PageCache/Controller/Block.php    |   2 +-
 app/code/Magento/PageCache/composer.json      |   8 +-
 .../PayPalRecurringPayment/composer.json      |  16 +-
 app/code/Magento/Payment/composer.json        |  14 +-
 .../Magento/Paypal/Block/Bml/Shortcut.php     |   3 +
 .../Magento/Paypal/Block/Express/Shortcut.php |   3 +
 app/code/Magento/Paypal/Model/Observer.php    |   8 +-
 app/code/Magento/Paypal/composer.json         |  30 +--
 app/code/Magento/Paypal/etc/di.xml            |   9 +
 .../frontend/templates/express/shortcut.phtml |   6 +-
 .../express/shortcut/container.phtml          |  33 +++
 .../view/frontend/web/js/paypal-checkout.js   |   6 +-
 .../Paypal/view/frontend/web/order-review.js  |   1 +
 app/code/Magento/Persistent/composer.json     |  16 +-
 app/code/Magento/ProductAlert/composer.json   |  12 +-
 .../Magento/RecurringPayment/composer.json    |  26 +--
 app/code/Magento/Reports/composer.json        |  36 +--
 app/code/Magento/RequireJs/composer.json      |   4 +-
 app/code/Magento/Review/composer.json         |  22 +-
 app/code/Magento/Rss/composer.json            |   8 +-
 app/code/Magento/Rule/composer.json           |  12 +-
 app/code/Magento/Sales/composer.json          |  44 ++--
 app/code/Magento/SalesRule/composer.json      |  34 +--
 app/code/Magento/Sendfriend/composer.json     |  14 +-
 app/code/Magento/Shipping/composer.json       |  26 +--
 app/code/Magento/Sitemap/composer.json        |  18 +-
 app/code/Magento/Store/composer.json          |  10 +-
 app/code/Magento/Tax/composer.json            |  28 +--
 .../Magento/TaxImportExport/composer.json     |  12 +-
 app/code/Magento/Theme/composer.json          |  16 +-
 app/code/Magento/Translation/composer.json    |  10 +-
 app/code/Magento/Ui/composer.json             |   8 +-
 app/code/Magento/Ups/composer.json            |  18 +-
 app/code/Magento/UrlRewrite/composer.json     |  18 +-
 app/code/Magento/User/Model/User.php          |   3 +-
 app/code/Magento/User/composer.json           |  14 +-
 app/code/Magento/Usps/composer.json           |  18 +-
 .../Controller/ServiceArgsSerializer.php      |  26 ++-
 app/code/Magento/Webapi/composer.json         |  16 +-
 app/code/Magento/Weee/composer.json           |  24 +-
 app/code/Magento/Widget/composer.json         |  14 +-
 app/code/Magento/Wishlist/composer.json       |  32 +--
 .../adminhtml/Magento/backend/composer.json   |   4 +-
 .../adminhtml/Magento/backend/theme.xml       |   2 +-
 .../frontend/Magento/blank/composer.json      |   4 +-
 app/design/frontend/Magento/blank/theme.xml   |   2 +-
 .../frontend/Magento/plushe/composer.json     |   6 +-
 app/design/frontend/Magento/plushe/theme.xml  |   2 +-
 app/design/install/Magento/basic/theme.xml    |   2 +-
 app/i18n/magento/de_de/composer.json          |   4 +-
 app/i18n/magento/en_us/composer.json          |   4 +-
 app/i18n/magento/es_es/composer.json          |   4 +-
 app/i18n/magento/fr_fr/composer.json          |   4 +-
 app/i18n/magento/nl_nl/composer.json          |   4 +-
 app/i18n/magento/pt_br/composer.json          |   4 +-
 app/i18n/magento/zh_cn/composer.json          |   4 +-
 composer.json                                 |   2 +-
 .../Backend/Test/Block/Widget/Grid.php        |  87 ++++++-
 .../test.csv                                  |   3 -
 .../Test/TestCase/BundleDynamicTest.php       |   6 +-
 .../Bundle/Test/TestCase/BundleFixedTest.php  |   6 +-
 .../Bundle/Test/TestCase/EditBundleTest.php   |   6 +-
 .../Block/Adminhtml/Product/ProductForm.xml   |  10 +-
 ...AssertProductIsNotDisplayingOnFrontend.php |   2 +-
 .../Catalog/Test/Fixture/AssignProducts.php   |   8 +-
 .../Catalog/Test/Fixture/Cart/Item.php        |   6 +-
 .../Test/Fixture/CatalogProductSimple.php     |   2 +-
 .../Test/Fixture/CatalogProductSimple.xml     |   2 +-
 .../CatalogProductSimple/CheckoutData.php     |   9 +-
 .../Test/Fixture/CatalogProductVirtual.php    |   2 +-
 .../CatalogProductVirtual/CheckoutData.php    |   7 +
 .../Test/Fixture/CrosssellProducts.php        |  14 +-
 .../Magento/Catalog/Test/Fixture/Product.php  |   2 +-
 .../Handler/CatalogProductSimple/Curl.php     |   6 +-
 .../Test/Handler/CatalogProductSimple/Ui.php  |   2 +-
 .../Catalog/Test/Handler/Ui/CreateProduct.php |   2 +-
 .../Test/Repository/CatalogProductSimple.php  |  16 ++
 .../Test/Repository/CatalogProductVirtual.php |  36 +++
 .../TestCase/Category/AssignProductTest.php   |   6 +-
 .../Test/TestCase/Category/CreateTest.php     |   4 +-
 .../TestCase/Product/CreateProductTest.php    |   6 +-
 .../Product/CreateSimpleWithCategoryTest.php  |   2 +-
 ...SimpleWithCustomOptionsAndCategoryTest.php |   4 +-
 .../Test/TestCase/Product/CreateTest.php      |   6 +-
 .../TestCase/Product/CreateVirtualTest.php    |   6 +-
 .../Product/EditSimpleProductTest.php         |   6 +-
 .../TestCase/Product/UnassignCategoryTest.php |   4 +-
 .../TestCase/AdvancedSearchEntityTest.php     |   1 -
 .../Test/TestCase/AdvancedSearchTest.php      |   1 -
 .../Cms/Test/Handler/CmsBlock/Curl.php        |  10 +-
 .../Magento/Cms/Test/Handler/CmsPage/Curl.php |   2 +-
 .../ConfigurableAttributesData.php            |   1 +
 .../test.csv                                  |   2 -
 .../test.csv                                  |   4 +-
 .../Test/TestCase/CreateConfigurableTest.php  |   6 +-
 .../Test/TestCase/CreateWithAttributeTest.php |   2 +-
 .../Test/TestCase/EditConfigurableTest.php    |   4 +-
 .../app/Magento/Core/Test/Block/Messages.php  |   4 +-
 .../UpdateCustomVariableEntityTest.php        |  11 +-
 .../Test/TestStep/SetupConfigurationStep.php  |  82 +++++++
 .../Block/Adminhtml/Edit/Tab/Addresses.php    |  17 +-
 .../TestCase/BackendCustomerCreateTest.php    |   2 +-
 .../Block/Customer/Products/ListProducts.php} |  45 ++--
 .../Fixture/DownloadableProductInjectable.php |  46 +---
 .../Fixture/DownloadableProductInjectable.xml |   1 +
 .../DownloadableProductInjectable/Links.php   |  16 +-
 .../DownloadableProductInjectable/Curl.php    |  32 +++
 .../Page/DownloadableCustomerProducts.xml     |  34 +++
 .../test.csv                                  |   2 -
 .../Create/LinksPurchasedSeparatelyTest.php   |   6 +-
 .../testCreateDownloadableProduct.csv         |  30 +--
 .../testUpdateDownloadableProduct.csv         |  16 +-
 .../Magento/Downloadable/Test/etc/page.xml    |  31 +++
 .../test.csv                                  |   2 -
 .../Test/TestCase/CreateGroupedTest.php       |   4 +-
 .../Adminhtml/Product/Downloads/Grid.php      |  49 ++++
 .../Block/Adminhtml/Sales/TaxRule/Action.php} |  42 ++--
 .../Block/Adminhtml/Sales/TaxRule/Filter.php} |  37 ++-
 .../Block/Adminhtml/Sales/TaxRule/Filter.xml  |  51 +++++
 .../Block/Adminhtml/Sales/TaxRule/Grid.php}   |  25 +-
 .../AssertBestsellerReportResult.php          |   2 +-
 .../AssertDownloadsReportResult.php           |  81 +++++++
 .../AssertNewAccountsReportTotalResult.php    |   2 +-
 .../Constraint/AssertOrderedProductResult.php |   2 +-
 .../AssertProductReportByCustomerInGrid.php   |   2 +-
 ...sertProductReviewIsAvailableForProduct.php |   2 +-
 .../Test/Constraint/AssertTaxReportInGrid.php |  82 +++++++
 .../Constraint/AssertTaxReportNotInGrid.php   |  82 +++++++
 .../Test/Page/Adminhtml/DownloadsReport.xml   |  34 +++
 .../Test/Page/Adminhtml/SalesTaxReport.xml    |  44 ++++
 .../BestsellerProductsReportEntityTest.php    |  89 ++++++++
 .../test.csv                                  |   4 +
 .../DownloadProductsReportEntityTest.php      | 135 +++++++++++
 .../DownloadProductsReportEntityTest/test.csv |   4 +
 .../TestCase/SalesTaxReportEntityTest.php     | 214 ++++++++++++++++++
 .../SalesTaxReportEntityTest/test.csv         |   4 +
 .../Magento/Reports/Test/etc/constraint.xml   |   9 +
 .../app/Magento/Reports/Test/etc/page.xml     |  10 +
 ...teProductReviewEntityOnProductPageTest.php |   4 +-
 .../app/Magento/Store/Test/Fixture/Store.php  |   5 +-
 .../Magento/Store/Test/Repository/Store.php   |   8 +
 .../TestCase/DeleteStoreEntityTest/test.csv   |   2 +-
 .../Magento/Store/Test/TestCase/StoreTest.php |   6 +-
 .../TestCase/UpdateStoreEntityTest/test.csv   |   4 +-
 .../Tax/Test/Block/Adminhtml/Rule/Grid.php    |  30 ++-
 .../testCreateTaxRule.csv                     |  10 +-
 .../Magento/Tax/Test/TestCase/TaxRuleTest.php |   2 +-
 .../testUpdateTaxRule.csv                     |  10 +-
 .../Test/TestStep/DeleteAllTaxRulesStep.php   |  77 +++++++
 .../Constraint/AssertUrlRewriteInGrid.php     |   2 +-
 .../Constraint/AssertUrlRewriteNotInGrid.php  |   2 +-
 .../UrlRewrite/Test/Fixture/UrlRewrite.php    |  11 +
 .../Test/Fixture/UrlRewrite/IdPath.php        | 124 ++++++++++
 .../Test/Fixture/UrlRewriteProduct.php        |   2 +-
 .../DeleteCategoryUrlRewriteEntityTest.php    |   2 +-
 .../DeleteProductUrlRewriteEntityTest.php     |   2 +-
 .../UpdateCategoryUrlRewriteEntityTest.php    |   3 +-
 .../UpdateProductUrlRewriteEntityTest.php     |   2 +-
 .../app/Magento/User/Test/Fixture/User.php    |   3 +-
 .../Magento/User/Test/Fixture/User/RoleId.php |   2 +-
 .../User/Test/Handler/AdminUserRole/Curl.php  |   2 +-
 .../Magento/User/Test/Handler/User/Curl.php   |   1 +
 .../TestCase/CreateAdminUserEntityTest.php    |   2 +-
 .../CreateAdminUserEntityTest/test.csv        |  14 +-
 .../UserLoginAfterChangingPermissionsTest.php | 165 ++++++++++++++
 .../testLoginAfterChangingPermissions.csv     |   2 +
 .../Wishlist/Test/Block/Customer/Wishlist.php |  17 ++
 .../Test/Block/Customer/Wishlist/Items.php    |  27 ++-
 .../Block/Customer/Wishlist/Items/Product.php |  17 ++
 .../AssertProductsIsAbsentInWishlist.php      |   5 +-
 .../Test/Constraint/AssertWishlistIsEmpty.php |  20 +-
 .../Wishlist/Test/Page/WishlistIndex.xml      |   5 +
 .../TestCase/AbstractWishlistOnFrontend.php   | 155 +++++++++++++
 ...CartFromCustomerWishlistOnFrontendTest.php | 127 +----------
 .../test.csv                                  |   5 +
 ...leteProductsFromWishlistOnFrontendTest.php |  96 ++++++++
 .../test.csv                                  |   9 +
 .../Service/V1/CustomerAccountServiceTest.php |  14 +-
 .../V1/Product/Option/WriteServiceTest.php    |  32 ++-
 .../Service/V1/CustomerAccountServiceTest.php |   2 +-
 .../Magento/Integration/Oauth/OauthTest.php   |   9 +-
 .../Magento/Paypal/Model/ObserverTest.php     |   5 +-
 .../Magento/Framework/AppInterface.php        |   2 +-
 lib/internal/Magento/Framework/composer.json  |   2 +-
 244 files changed, 3203 insertions(+), 1294 deletions(-)
 create mode 100644 app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml
 delete mode 100644 dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest/test.csv
 delete mode 100644 dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest/test.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Core/Test/TestStep/SetupConfigurationStep.php
 rename dev/tests/functional/tests/app/Magento/{GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest.php => Downloadable/Test/Block/Customer/Products/ListProducts.php} (57%)
 create mode 100644 dev/tests/functional/tests/app/Magento/Downloadable/Test/Page/DownloadableCustomerProducts.xml
 delete mode 100644 dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest/test.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Downloadable/Test/etc/page.xml
 delete mode 100644 dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest/test.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Product/Downloads/Grid.php
 rename dev/tests/functional/tests/app/Magento/{Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest.php => Reports/Test/Block/Adminhtml/Sales/TaxRule/Action.php} (56%)
 rename dev/tests/functional/tests/app/Magento/{ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest.php => Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.php} (56%)
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.xml
 rename dev/tests/functional/tests/app/Magento/{Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest.php => Reports/Test/Block/Adminhtml/Sales/TaxRule/Grid.php} (57%)
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertDownloadsReportResult.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportInGrid.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportNotInGrid.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/DownloadsReport.xml
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/SalesTaxReport.xml
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest/test.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest/test.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest/test.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
 create mode 100644 dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite/IdPath.php
 create mode 100644 dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest.php
 create mode 100644 dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest/testLoginAfterChangingPermissions.csv
 create mode 100644 dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AbstractWishlistOnFrontend.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest.php
 create mode 100644 dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest/test.csv

diff --git a/.travis.yml b/.travis.yml
index be0daf855c3..9a946264450 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -30,11 +30,12 @@ before_script:
   - sh -c "if [ '$TEST_SUITE' = 'integration' ] || [ '$TEST_SUITE' = 'integration_integrity' ]; then mysql -e 'create database magento_integration_tests;'; mv dev/tests/integration/etc/local-mysql.travis.xml.dist dev/tests/integration/etc/local-mysql.xml; fi"
   # Install tools for static tests
   - sh -c "if [ '$TEST_SUITE' = 'static_phpcs' ] || [ '$TEST_SUITE' = 'static_annotation' ]; then pear install pear/PHP_CodeSniffer-1.5.2; fi"
+  # Change memmory_limit for travis server
   - echo 'memory_limit = -1' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
   - phpenv rehash;
 script:
   # Unit tests
-  sh -c "if [ '$TEST_SUITE' = 'unit' ]; then ./vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist; fi"
+  - sh -c "if [ '$TEST_SUITE' = 'unit' ]; then ./vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist; fi"
   # Integration tests
   - sh -c "if [ '$TEST_SUITE' = 'integration' ]; then cd dev/tests/integration/; ./../../../vendor/bin/phpunit -c phpunit.xml.dist; fi"
   # Integration integrity tests
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1538aca81b9..4ba3ae52992 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,24 @@
+0.1.0-alpha98
+=============
+* GitHub requests:
+   * [#678] (https://github.com/magento/magento2/issues/678) -- Fixed Travis CI builds
+* Functional tests:
+   * Create Sales Order Backend
+   * Delete Products from Wishlist
+   * Download Products Report
+   * Mass Orders Update
+   * Sales Tax Report
+* Fixed bugs:
+   * Fixed an issue where success message was not displayed after product review submit
+   * Fixed an issue where it was impossible to start checkout process using PayPal from the JavaScript pop-up window when the Display Actual Price option was set to On Gesture
+   * Fixed an issue where a fatal error was thrown after shipping method selection in PayPal Express Checkout
+   * Fixed an issue with parameters exceptions in SOAP response
+   * Fixed an issue where testGetRequestTokenOauthTimestampRefused unit test failed in certain cases
+   * Fixed an issue where TestCreateCustomer test thrown fatal error when making a SOAP request
+   * Fixed an issue with required parameters in WSDL
+   * Fixed an issue where Customer Account Service returned void response in the resetPassword method
+   * Fixed an issue where REST API failed during bundle product creation
+
 0.1.0-alpha97
 =============
  * Various improvements:
diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json
index 946ca70e54c..d6b9a185830 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json
index e4b92a7168f..19783cd57f0 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.4.11|~5.5.0",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Authorizenet/composer.json b/app/code/Magento/Authorizenet/composer.json
index a29aeab87e2..452828c3d78 100644
--- a/app/code/Magento/Authorizenet/composer.json
+++ b/app/code/Magento/Authorizenet/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-centinel": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-centinel": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json
index 6381f36e6cd..ed736bd65da 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-cron": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-reports": "0.1.0-alpha97",
-        "magento/module-catalog-search": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-user": "0.1.0-alpha97",
-        "magento/module-backup": "0.1.0-alpha97",
-        "magento/module-email": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-translation": "0.1.0-alpha97",
-        "magento/module-require-js": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-cron": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-reports": "0.1.0-alpha98",
+        "magento/module-catalog-search": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-user": "0.1.0-alpha98",
+        "magento/module-backup": "0.1.0-alpha98",
+        "magento/module-email": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-translation": "0.1.0-alpha98",
+        "magento/module-require-js": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json
index ee63f6d2344..2503def2156 100644
--- a/app/code/Magento/Backup/composer.json
+++ b/app/code/Magento/Backup/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-cron": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-cron": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json
index b7e4ac63c1c..b5576e91c0c 100644
--- a/app/code/Magento/Bundle/composer.json
+++ b/app/code/Magento/Bundle/composer.json
@@ -3,24 +3,24 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-catalog-rule": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-gift-message": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
-        "magento/module-webapi": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-catalog-rule": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-gift-message": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
+        "magento/module-webapi": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json
index 4ae84418b00..7d3f0eff666 100644
--- a/app/code/Magento/Captcha/composer.json
+++ b/app/code/Magento/Captcha/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Catalog/Service/V1/Category/ProductLinks/WriteService.php b/app/code/Magento/Catalog/Service/V1/Category/ProductLinks/WriteService.php
index 082b927dd10..c25e5a72e7f 100644
--- a/app/code/Magento/Catalog/Service/V1/Category/ProductLinks/WriteService.php
+++ b/app/code/Magento/Catalog/Service/V1/Category/ProductLinks/WriteService.php
@@ -102,11 +102,11 @@ class WriteService implements WriteServiceInterface
             $category->save();
         } catch (\Exception $e) {
             throw new CouldNotSaveException(
-                'Could not save product "%1" with position %2 to category %3',
+                'Could not save product "%product_id" with position %position to category %category_id',
                 [
-                    $productId,
-                    $productLink->getPosition(),
-                    $categoryId,
+                    'product_id' => $productId,
+                    'position' => $productLink->getPosition(),
+                    'category_id' => $categoryId
                 ],
                 $e
             );
@@ -137,10 +137,10 @@ class WriteService implements WriteServiceInterface
             $category->save();
         } catch (\Exception $e) {
             throw new CouldNotSaveException(
-                'Could not remove product "%1" from category with ID "%2"',
+                'Could not remove product "%product_sku" from category with ID "%category_id"',
                 [
-                    $productSku,
-                    $categoryId,
+                    'product_sku' => $productSku,
+                    'category_id' => $categoryId,
                 ],
                 $e
             );
diff --git a/app/code/Magento/Catalog/Service/V1/Category/WriteService.php b/app/code/Magento/Catalog/Service/V1/Category/WriteService.php
index e2725bf8209..307d05be341 100644
--- a/app/code/Magento/Catalog/Service/V1/Category/WriteService.php
+++ b/app/code/Magento/Catalog/Service/V1/Category/WriteService.php
@@ -86,7 +86,7 @@ class WriteService implements WriteServiceInterface
             $this->validateCategory($categoryModel);
             $categoryModel->save();
         } catch (\Exception $e) {
-            throw new CouldNotSaveException('Could not save category: %1', [$e->getMessage()], $e);
+            throw new CouldNotSaveException('Could not save category: %message', ['message' => $e->getMessage()], $e);
         }
         return $categoryModel->getId();
     }
@@ -105,7 +105,7 @@ class WriteService implements WriteServiceInterface
         try {
             $category->delete();
         } catch (\Exception $e) {
-            throw new StateException('Cannot delete category with id %1', [$categoryId], $e);
+            throw new StateException('Cannot delete category with id %category_id', ['category_id' => $categoryId], $e);
         }
 
         return true;
diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json
index 5a75b0a230d..9816d6d7ad3 100644
--- a/app/code/Magento/Catalog/composer.json
+++ b/app/code/Magento/Catalog/composer.json
@@ -3,33 +3,33 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-indexer": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-log": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-widget": "0.1.0-alpha97",
-        "magento/module-wishlist": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-msrp": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-catalog-rule": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-catalog-search": "0.1.0-alpha97",
-        "magento/module-product-alert": "0.1.0-alpha97",
-        "magento/module-url-rewrite": "0.1.0-alpha97",
-        "magento/module-catalog-url-rewrite": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-indexer": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-log": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-widget": "0.1.0-alpha98",
+        "magento/module-wishlist": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-msrp": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-catalog-rule": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-catalog-search": "0.1.0-alpha98",
+        "magento/module-product-alert": "0.1.0-alpha98",
+        "magento/module-url-rewrite": "0.1.0-alpha98",
+        "magento/module-catalog-url-rewrite": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json
index 4e6aaa07908..5f6009a6b50 100644
--- a/app/code/Magento/CatalogImportExport/composer.json
+++ b/app/code/Magento/CatalogImportExport/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-import-export": "0.1.0-alpha97",
-        "magento/module-indexer": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-import-export": "0.1.0-alpha98",
+        "magento/module-indexer": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json
index e377c3bbbe8..9e56de86a50 100644
--- a/app/code/Magento/CatalogInventory/composer.json
+++ b/app/code/Magento/CatalogInventory/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-indexer": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-indexer": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json
index a6c09e071f1..d3f41c07eb7 100644
--- a/app/code/Magento/CatalogRule/composer.json
+++ b/app/code/Magento/CatalogRule/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-rule": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-rule": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json
index a9cc6a7815b..e976256674b 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-indexer": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-indexer": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json
index 0eb731ddbca..c1c1912ef7e 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.4.11|~5.5.0",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-catalog-import-export": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-import-export": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-url-rewrite": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-catalog-import-export": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-import-export": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-url-rewrite": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Centinel/composer.json b/app/code/Magento/Centinel/composer.json
index 0ca946052ef..f9e19a28ff9 100644
--- a/app/code/Magento/Centinel/composer.json
+++ b/app/code/Magento/Centinel/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json
index 772f86efbdb..f5bbda4fc26 100644
--- a/app/code/Magento/Checkout/composer.json
+++ b/app/code/Magento/Checkout/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-authorization": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-gift-message": "0.1.0-alpha97",
-        "magento/module-wishlist": "0.1.0-alpha97",
-        "magento/module-page-cache": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-msrp": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-authorization": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-gift-message": "0.1.0-alpha98",
+        "magento/module-wishlist": "0.1.0-alpha98",
+        "magento/module-page-cache": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-msrp": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json
index ba2e152066f..83c52cd325b 100644
--- a/app/code/Magento/CheckoutAgreements/composer.json
+++ b/app/code/Magento/CheckoutAgreements/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json
index da8253d95d9..49ffbcf4fa6 100644
--- a/app/code/Magento/Cms/composer.json
+++ b/app/code/Magento/Cms/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-widget": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-email": "0.1.0-alpha97",
-        "magento/module-ui": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-widget": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-email": "0.1.0-alpha98",
+        "magento/module-ui": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json
index acf8fb0f3b8..0817b25e54b 100644
--- a/app/code/Magento/CmsUrlRewrite/composer.json
+++ b/app/code/Magento/CmsUrlRewrite/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-url-rewrite": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-url-rewrite": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json
index e17863da679..60a4cb8ee0a 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.4.11|~5.5.0",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-catalog-import-export": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-import-export": "0.1.0-alpha97",
-        "magento/module-configurable-product": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-catalog-import-export": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-import-export": "0.1.0-alpha98",
+        "magento/module-configurable-product": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteService.php b/app/code/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteService.php
index 28fe23b5e1d..17e66e503bf 100644
--- a/app/code/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteService.php
+++ b/app/code/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteService.php
@@ -37,7 +37,6 @@ use Magento\Framework\StoreManagerInterface;
 use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Exception\CouldNotSaveException;
-use Magento\Webapi\Exception;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -105,6 +104,7 @@ class WriteService implements WriteServiceInterface
      */
     public function add($productSku, Option $option)
     {
+        $this->validateNewOptionData($option);
         $product = $this->productRepository->get($productSku);
         $allowedTypes = [ProductType::TYPE_SIMPLE, ProductType::TYPE_VIRTUAL, ConfigurableType::TYPE_CODE];
         if (!in_array($product->getTypeId(), $allowedTypes)) {
@@ -138,6 +138,46 @@ class WriteService implements WriteServiceInterface
         return $configurableAttribute->getId();
     }
 
+    /**
+     * Ensure that all necessary data is available for a new option creation.
+     *
+     * @param Option $option
+     * @return void
+     * @throws InputException
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     */
+    public function validateNewOptionData(Option $option)
+    {
+        $inputException = new InputException();
+        if (!$option->getAttributeId()) {
+            $inputException->addError('Option attribute ID is not specified.');
+        }
+        if (!$option->getType()) {
+            $inputException->addError('Option type is not specified.');
+        }
+        if (!$option->getLabel()) {
+            $inputException->addError('Option label is not specified.');
+        }
+        if (!$option->getValues()) {
+            $inputException->addError('Option values are not specified.');
+        } else {
+            foreach ($option->getValues() as $optionValue) {
+                if (!$optionValue->getIndex()) {
+                    $inputException->addError('Value index is not specified for an option.');
+                }
+                if (null === $optionValue->getPrice()) {
+                    $inputException->addError('Price is not specified for an option.');
+                }
+                if (null === $optionValue->isPercent()) {
+                    $inputException->addError('Percent/absolute is not specified for an option.');
+                }
+            }
+        }
+        if ($inputException->wasErrorAdded()) {
+            throw $inputException;
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -148,13 +188,13 @@ class WriteService implements WriteServiceInterface
         $configurableAttribute = $this->configurableAttributeFactory->create();
         $configurableAttribute->load($optionId);
         if (!$configurableAttribute->getId() || $configurableAttribute->getProductId() != $product->getId()) {
-            throw new NoSuchEntityException('Option with id "%1" not found', [$optionId]);
+            throw new NoSuchEntityException('Option with id "%option_id" not found', ['option_id' => $optionId]);
         }
         $configurableAttribute = $this->optionConverter->getModelFromData($option, $configurableAttribute);
         try {
             $configurableAttribute->save();
         } catch (\Exception $e) {
-            throw new CouldNotSaveException('Could not update option with id "%1"', [$optionId]);
+            throw new CouldNotSaveException('Could not update option with id "%option_id"', ['option_id' => $optionId]);
         }
 
         return true;
@@ -180,21 +220,19 @@ class WriteService implements WriteServiceInterface
     }
 
     /**
+     * Get product by SKU.
+     *
      * @param string $productSku
      * @return \Magento\Catalog\Model\Product
-     * @throws \Magento\Webapi\Exception
+     * @throws InputException
      */
     private function getProduct($productSku)
     {
         $product = $this->productRepository->get($productSku);
         if (ConfigurableType::TYPE_CODE !== $product->getTypeId()) {
-            throw new Exception(
-                'Product with specified sku: "%1" is not a configurable product',
-                Exception::HTTP_FORBIDDEN,
-                Exception::HTTP_FORBIDDEN,
-                [
-                    $product->getSku()
-                ]
+            throw new InputException(
+                'Product with specified sku: "%sku" is not a configurable product',
+                ['sku' => $product->getSku()]
             );
         }
         return $product;
diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json
index dd6b68d1aca..a73d1b581d4 100644
--- a/app/code/Magento/ConfigurableProduct/composer.json
+++ b/app/code/Magento/ConfigurableProduct/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-catalog-rule": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
-        "magento/module-webapi": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-catalog-rule": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
+        "magento/module-webapi": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json
index c4b5409c8bc..01e17f63638 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Core/composer.json b/app/code/Magento/Core/composer.json
index 9d33c4c2962..23b7e1efcde 100644
--- a/app/code/Magento/Core/composer.json
+++ b/app/code/Magento/Core/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-cron": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-page-cache": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-cron": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-page-cache": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json
index 0ada7c1ab43..6cb1f839846 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json
index 92f7949f60b..72802c32385 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-page-cache": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-page-cache": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Customer/Service/V1/CustomerAccountService.php b/app/code/Magento/Customer/Service/V1/CustomerAccountService.php
index 4b34f881786..899114e148a 100644
--- a/app/code/Magento/Customer/Service/V1/CustomerAccountService.php
+++ b/app/code/Magento/Customer/Service/V1/CustomerAccountService.php
@@ -355,6 +355,7 @@ class CustomerAccountService implements CustomerAccountServiceInterface
         $this->checkPasswordStrength($newPassword);
         $customerModel->setPasswordHash($this->getPasswordHash($newPassword));
         $customerModel->save();
+        return true;
     }
 
     /**
diff --git a/app/code/Magento/Customer/Service/V1/CustomerAccountServiceInterface.php b/app/code/Magento/Customer/Service/V1/CustomerAccountServiceInterface.php
index 54448946c06..4f6b7791413 100644
--- a/app/code/Magento/Customer/Service/V1/CustomerAccountServiceInterface.php
+++ b/app/code/Magento/Customer/Service/V1/CustomerAccountServiceInterface.php
@@ -194,7 +194,7 @@ interface CustomerAccountServiceInterface
      * @param string $customerId
      * @param string $resetToken Token sent to customer via e-mail
      * @param string $newPassword
-     * @return void
+     * @return bool true on success
      * @throws \Magento\Framework\Exception\State\InputMismatchException If token is mismatched
      * @throws \Magento\Framework\Exception\State\ExpiredException If token is expired
      * @throws \Magento\Framework\Exception\InputException If token or customer id is invalid
diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json
index e1d3c73fe7d..2606751e614 100644
--- a/app/code/Magento/Customer/composer.json
+++ b/app/code/Magento/Customer/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-newsletter": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-wishlist": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-review": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-page-cache": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
-        "magento/module-authorization": "0.1.0-alpha97",
-        "magento/module-integration": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-newsletter": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-wishlist": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-review": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-page-cache": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
+        "magento/module-authorization": "0.1.0-alpha98",
+        "magento/module-integration": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json
index b422fcd758f..a15aa5a2ab4 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.4.11|~5.5.0",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-import-export": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-import-export": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/DesignEditor/composer.json b/app/code/Magento/DesignEditor/composer.json
index 76d6d3100b3..17e3dce6173 100644
--- a/app/code/Magento/DesignEditor/composer.json
+++ b/app/code/Magento/DesignEditor/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json
index 764da496332..a6e18f87b53 100644
--- a/app/code/Magento/Dhl/composer.json
+++ b/app/code/Magento/Dhl/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json
index a58450d3f7f..649e7f2cce9 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json
index 427bfb86449..29ce6486676 100644
--- a/app/code/Magento/Downloadable/composer.json
+++ b/app/code/Magento/Downloadable/composer.json
@@ -3,26 +3,26 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-wishlist": "0.1.0-alpha97",
-        "magento/module-gift-message": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-msrp": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-wishlist": "0.1.0-alpha98",
+        "magento/module-gift-message": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-msrp": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json
index 4762b42b045..54e4f1f2853 100644
--- a/app/code/Magento/Eav/composer.json
+++ b/app/code/Magento/Eav/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json
index 8b02103b840..00e01ba7745 100644
--- a/app/code/Magento/Email/composer.json
+++ b/app/code/Magento/Email/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json
index c23658cc4a4..32b84ec73ef 100644
--- a/app/code/Magento/Fedex/composer.json
+++ b/app/code/Magento/Fedex/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json
index 38540a41549..b6f223ae1fa 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-multishipping": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-multishipping": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json
index 5d8a4ec9ad4..30d86f3de86 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json
index 1520dd03b09..d37451ce687 100644
--- a/app/code/Magento/GoogleAnalytics/composer.json
+++ b/app/code/Magento/GoogleAnalytics/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json
index b3bc0b4e288..61834880cdd 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-google-analytics": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-google-analytics": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GoogleShopping/composer.json b/app/code/Magento/GoogleShopping/composer.json
index 40ab8c4fc33..a745694b62e 100644
--- a/app/code/Magento/GoogleShopping/composer.json
+++ b/app/code/Magento/GoogleShopping/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json
index ff4046298de..c6f0282751b 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.4.11|~5.5.0",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-import-export": "0.1.0-alpha97",
-        "magento/module-catalog-import-export": "0.1.0-alpha97",
-        "magento/module-grouped-product": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-import-export": "0.1.0-alpha98",
+        "magento/module-catalog-import-export": "0.1.0-alpha98",
+        "magento/module-grouped-product": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json
index f1fcf590315..157c79664c8 100644
--- a/app/code/Magento/GroupedProduct/composer.json
+++ b/app/code/Magento/GroupedProduct/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-msrp": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-msrp": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json
index 561eddbb92c..0893d2ffac4 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-indexer": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-indexer": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "ext-ctype": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json
index 895ea508063..c077d1cb6d9 100644
--- a/app/code/Magento/Indexer/composer.json
+++ b/app/code/Magento/Indexer/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-page-cache": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-page-cache": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Install/composer.json b/app/code/Magento/Install/composer.json
index 54dfe0c181d..e77069c40dd 100644
--- a/app/code/Magento/Install/composer.json
+++ b/app/code/Magento/Install/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-user": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-user": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json
index 9c0e59d43d4..ac122e1c5aa 100644
--- a/app/code/Magento/Integration/composer.json
+++ b/app/code/Magento/Integration/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-user": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
-        "magento/module-authorization": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-user": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
+        "magento/module-authorization": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json
index 8086986cb7b..3673a1dd303 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.4.11|~5.5.0",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Log/composer.json b/app/code/Magento/Log/composer.json
index 69e46c04b5f..0fa1ad00f7f 100644
--- a/app/code/Magento/Log/composer.json
+++ b/app/code/Magento/Log/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json
index 0b4b89d2783..95939c5e8bf 100644
--- a/app/code/Magento/Msrp/composer.json
+++ b/app/code/Magento/Msrp/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-bundle": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-configurable-product": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-downloadable": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-grouped-product": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-bundle": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-configurable-product": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-downloadable": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-grouped-product": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js
index 85c1a66a587..39be72ddcf7 100644
--- a/app/code/Magento/Msrp/view/base/web/js/msrp.js
+++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js
@@ -47,6 +47,9 @@ define(["jquery", "jquery/ui", "mage/dropdown"], function($) {
                     this.element.trigger('reloadPrice');
                     var dialog = $("#map-popup-click-for-price");
                     this._popupDialog(dialog, this.options.popupId);
+                    if (this.options.addToCartUrl) {
+                        $(this.options.cartForm).attr('action', this.options.addToCartUrl);
+                    }
                     if (!this.options.showAddToCart) {
                         $('#product_addtocart_form_from_popup').hide();
                     }
@@ -87,7 +90,6 @@ define(["jquery", "jquery/ui", "mage/dropdown"], function($) {
             }
             if (this.options.addToCartUrl) {
                 $('.mage-dropdown-dialog > .ui-dialog-content').dropdownDialog("close");
-                $(this.options.cartForm).attr('action', this.options.addToCartUrl);
             }
             $(this.options.cartForm).submit();
         }
diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json
index 3b6e72a0456..8c854c979c5 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json
index 1299cb53107..1fa8e57e7a7 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-widget": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-email": "0.1.0-alpha97",
-        "magento/module-cron": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-widget": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-email": "0.1.0-alpha98",
+        "magento/module-cron": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json
index 65ed9dc6de6..b318a197759 100644
--- a/app/code/Magento/OfflinePayments/composer.json
+++ b/app/code/Magento/OfflinePayments/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json
index 35d7460d1d6..837b044618a 100644
--- a/app/code/Magento/OfflineShipping/composer.json
+++ b/app/code/Magento/OfflineShipping/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-sales-rule": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-sales-rule": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Ogone/composer.json b/app/code/Magento/Ogone/composer.json
index 63095972229..1460b473722 100644
--- a/app/code/Magento/Ogone/composer.json
+++ b/app/code/Magento/Ogone/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/PageCache/Controller/Block.php b/app/code/Magento/PageCache/Controller/Block.php
index 572babf097c..f712b19b817 100644
--- a/app/code/Magento/PageCache/Controller/Block.php
+++ b/app/code/Magento/PageCache/Controller/Block.php
@@ -43,7 +43,7 @@ class Block extends \Magento\Framework\App\Action\Action
         $blocks = json_decode($blocks);
         $handles = json_decode($handles);
 
-        $this->_view->loadLayout($handles);
+        $this->_view->loadLayout($handles, true, true, false);
         $data = array();
 
         $layout = $this->_view->getLayout();
diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json
index a6cd124ebca..637740ce1bd 100644
--- a/app/code/Magento/PageCache/composer.json
+++ b/app/code/Magento/PageCache/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/PayPalRecurringPayment/composer.json b/app/code/Magento/PayPalRecurringPayment/composer.json
index e45d930bccb..a461470fa5b 100644
--- a/app/code/Magento/PayPalRecurringPayment/composer.json
+++ b/app/code/Magento/PayPalRecurringPayment/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-paypal": "0.1.0-alpha97",
-        "magento/module-recurring-payment": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-paypal": "0.1.0-alpha98",
+        "magento/module-recurring-payment": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json
index ac92021012d..d94ee2ccce6 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-centinel": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-centinel": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Paypal/Block/Bml/Shortcut.php b/app/code/Magento/Paypal/Block/Bml/Shortcut.php
index 61d55a5c657..ee1677dc104 100644
--- a/app/code/Magento/Paypal/Block/Bml/Shortcut.php
+++ b/app/code/Magento/Paypal/Block/Bml/Shortcut.php
@@ -93,6 +93,7 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
      * @param string $startAction
      * @param string $alias
      * @param string $bmlMethodCode
+     * @param string $shortcutTemplate
      * @param array $data
      */
     public function __construct
@@ -105,6 +106,7 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
         $startAction,
         $alias,
         $bmlMethodCode,
+        $shortcutTemplate,
         array $data = array()
     ) {
         $this->_paymentData = $paymentData;
@@ -114,6 +116,7 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
         $this->_paymentMethodCode = $paymentMethodCode;
         $this->_startAction = $startAction;
         $this->_alias = $alias;
+        $this->setTemplate($shortcutTemplate);
         $this->_bmlMethodCode = $bmlMethodCode;
         parent::__construct($context, $data);
     }
diff --git a/app/code/Magento/Paypal/Block/Express/Shortcut.php b/app/code/Magento/Paypal/Block/Express/Shortcut.php
index 86c0c87bc24..0a2cc61ef0b 100644
--- a/app/code/Magento/Paypal/Block/Express/Shortcut.php
+++ b/app/code/Magento/Paypal/Block/Express/Shortcut.php
@@ -121,6 +121,7 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
      * @param string $startAction
      * @param string $checkoutType
      * @param string $alias
+     * @param string $shortcutTemplate
      * @param \Magento\Checkout\Model\Session $checkoutSession
      * @param array $data
      */
@@ -137,6 +138,7 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
         $startAction,
         $checkoutType,
         $alias,
+        $shortcutTemplate,
         \Magento\Checkout\Model\Session $checkoutSession = null,
         array $data = array()
     ) {
@@ -152,6 +154,7 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
         $this->_startAction = $startAction;
         $this->_checkoutType = $checkoutType;
         $this->_alias = $alias;
+        $this->setTemplate($shortcutTemplate);
 
         parent::__construct($context, $data);
         $this->_isScopePrivate = true;
diff --git a/app/code/Magento/Paypal/Model/Observer.php b/app/code/Magento/Paypal/Model/Observer.php
index 77e23a27eca..aad004543ae 100644
--- a/app/code/Magento/Paypal/Model/Observer.php
+++ b/app/code/Magento/Paypal/Model/Observer.php
@@ -81,11 +81,6 @@ class Observer
      */
     protected $_shortcutFactory;
 
-    /**
-     * Shortcut template path
-     */
-    const SHORTCUT_TEMPLATE = 'express/shortcut.phtml';
-
     /**
      * @param \Magento\Core\Helper\Data $coreData
      * @param \Magento\Paypal\Helper\Hss $paypalHss
@@ -242,6 +237,7 @@ class Observer
         /** @var \Magento\Catalog\Block\ShortcutButtons $shortcutButtons */
         $shortcutButtons = $observer->getEvent()->getContainer();
         $blocks = [
+            'Magento\Paypal\Block\Express\ShortcutContainer',
             'Magento\Paypal\Block\Express\Shortcut',
             'Magento\Paypal\Block\PayflowExpress\Shortcut',
             'Magento\Paypal\Block\Bml\Shortcut',
@@ -265,8 +261,6 @@ class Observer
                 $observer->getEvent()->getIsCatalogProduct()
             )->setShowOrPosition(
                 $observer->getEvent()->getOrPosition()
-            )->setTemplate(
-                self::SHORTCUT_TEMPLATE
             );
             $shortcutButtons->addShortcut($shortcut);
         }
diff --git a/app/code/Magento/Paypal/composer.json b/app/code/Magento/Paypal/composer.json
index 62d584462c6..46d3f8695df 100644
--- a/app/code/Magento/Paypal/composer.json
+++ b/app/code/Magento/Paypal/composer.json
@@ -3,25 +3,25 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-centinel": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-centinel": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Paypal/etc/di.xml b/app/code/Magento/Paypal/etc/di.xml
index 4fc299e88f1..e953780e8fd 100644
--- a/app/code/Magento/Paypal/etc/di.xml
+++ b/app/code/Magento/Paypal/etc/di.xml
@@ -58,14 +58,22 @@
             <argument name="startAction" xsi:type="string">paypal/express/start/button/1</argument>
             <argument name="checkoutType" xsi:type="string">Magento\Paypal\Model\Express\Checkout</argument>
             <argument name="alias" xsi:type="string">product.info.addtocart.paypal</argument>
+            <argument name="shortcutTemplate" xsi:type="string">express/shortcut.phtml</argument>
         </arguments>
     </type>
+    <virtualType name="Magento\Paypal\Block\Express\ShortcutContainer" type="Magento\Paypal\Block\Express\Shortcut">
+        <arguments>
+            <argument name="alias" xsi:type="string">product.info.addtocart.paypalShortcutContainer</argument>
+            <argument name="shortcutTemplate" xsi:type="string">express/shortcut/container.phtml</argument>
+        </arguments>
+    </virtualType>
     <virtualType name="Magento\Paypal\Block\PayflowExpress\Shortcut" type="Magento\Paypal\Block\Express\Shortcut">
         <arguments>
             <argument name="paymentMethodCode" xsi:type="const">Magento\Paypal\Model\Config::METHOD_WPP_PE_EXPRESS</argument>
             <argument name="startAction" xsi:type="string">paypal/payflowexpress/start/button/1</argument>
             <argument name="checkoutType" xsi:type="string">Magento\Paypal\Model\PayflowExpress\Checkout</argument>
             <argument name="alias" xsi:type="string">product.info.addtocart.payflow</argument>
+            <argument name="shortcutTemplate" xsi:type="string">express/shortcut.phtml</argument>
         </arguments>
     </virtualType>
     <type name="Magento\Paypal\Block\Bml\Shortcut">
@@ -74,6 +82,7 @@
             <argument name="startAction" xsi:type="string">paypal/bml/start/button/1</argument>
             <argument name="bmlMethodCode" xsi:type="const">Magento\Paypal\Model\Config::METHOD_WPP_BML</argument>
             <argument name="alias" xsi:type="string">product.info.addtocart.paypalbml</argument>
+            <argument name="shortcutTemplate" xsi:type="string">express/shortcut.phtml</argument>
         </arguments>
     </type>
     <type name="Magento\Payment\Model\Checks\Composite">
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
index 9c65d060a06..af04820dd79 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
@@ -42,10 +42,6 @@ if ($this->isOrPositionBefore()) {
            alt="<?php echo __('Checkout with PayPal'); ?>"
            title="<?php echo __('Checkout with PayPal'); ?>"/>
     <?php if ($this->getConfirmationUrl() || $this->getIsInCatalogProduct()): ?>
-        <?php if ($this->getIsInCatalogProduct()): ?>
-            <input type="hidden" id="pp-checkout-url" name="return_url" value=""/>
-        <?php endif; ?>
-
         <?php
         $confirmationUrl = $this->getConfirmationUrl();
         $isInCatalogProduct = $this->getIsInCatalogProduct();
@@ -62,7 +58,7 @@ require(['jquery', 'Magento_Paypal/js/paypal-checkout'], function($){
         confirmUrl: "<?php echo !empty($confirmationUrl) ? $confirmationUrl : false ?>",
         isCatalogProduct: "<?php echo !empty($isInCatalogProduct) ? $isInCatalogProduct : false ?>",
         paypalCheckoutSelector: '#pp-checkout-url',
-        productAddToCartForm: '#product_addtocart_form'
+        shortcutContainerClass: '<?php echo "." . $shortcutHtmlId ?>'
     });
     
 });
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml
new file mode 100644
index 00000000000..dca1c8e6637
--- /dev/null
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Academic Free License (AFL 3.0)
+ * that is bundled with this package in the file LICENSE_AFL.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/afl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
+ */
+?>
+<?php
+/**
+ * @var $this Magento\Paypal\Block\Express\Shortcut
+ */
+?>
+<?php if ($this->getIsInCatalogProduct()): ?>
+    <input type="hidden" id="pp-checkout-url" name="return_url" value=""/>
+<?php endif; ?>
+
diff --git a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
index 00f7df3977c..45249b2fa16 100644
--- a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
+++ b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
@@ -42,8 +42,10 @@ define([
                     }
                 }
                 if (this.options.isCatalogProduct) {
-                    $(this.options.paypalCheckoutSelector).val(returnUrl);
-                    $(this.options.productAddToCartForm).submit();
+                    // find the form from which the button was clicked
+                    var form  = $(this.options.shortcutContainerClass).closest("form");
+                    $(form).find(this.options.paypalCheckoutSelector).val(returnUrl);
+                    $(form).submit();
                 } else {
                     $.mage.redirect(returnUrl);
                 }
diff --git a/app/code/Magento/Paypal/view/frontend/web/order-review.js b/app/code/Magento/Paypal/view/frontend/web/order-review.js
index 3c610bb94cc..1034dafb436 100644
--- a/app/code/Magento/Paypal/view/frontend/web/order-review.js
+++ b/app/code/Magento/Paypal/view/frontend/web/order-review.js
@@ -176,6 +176,7 @@ define([
             if (this.element.data('mageValidation')) {
                 return this.element.validation().valid();
             }
+            return true;
         },
 
         /**
diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json
index a25825eaa2c..378bcf76865 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-cron": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-cron": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json
index 9f3c3216d07..785422097cf 100644
--- a/app/code/Magento/ProductAlert/composer.json
+++ b/app/code/Magento/ProductAlert/composer.json
@@ -3,15 +3,15 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/RecurringPayment/composer.json b/app/code/Magento/RecurringPayment/composer.json
index b8bd1ab1c5e..94442e13902 100644
--- a/app/code/Magento/RecurringPayment/composer.json
+++ b/app/code/Magento/RecurringPayment/composer.json
@@ -3,22 +3,22 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json
index 47d42e8dced..0cdedfb4e61 100644
--- a/app/code/Magento/Reports/composer.json
+++ b/app/code/Magento/Reports/composer.json
@@ -3,27 +3,27 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-widget": "0.1.0-alpha97",
-        "magento/module-log": "0.1.0-alpha97",
-        "magento/module-wishlist": "0.1.0-alpha97",
-        "magento/module-review": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-downloadable": "0.1.0-alpha97",
-        "magento/module-sales-rule": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-widget": "0.1.0-alpha98",
+        "magento/module-log": "0.1.0-alpha98",
+        "magento/module-wishlist": "0.1.0-alpha98",
+        "magento/module-review": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-downloadable": "0.1.0-alpha98",
+        "magento/module-sales-rule": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json
index 5f6b598c277..23ec053254d 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.4.11|~5.5.0",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json
index 29c172fbb70..5449d3aa435 100644
--- a/app/code/Magento/Review/composer.json
+++ b/app/code/Magento/Review/composer.json
@@ -3,20 +3,20 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-newsletter": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-newsletter": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json
index f4380ee4515..0583eb66b6a 100644
--- a/app/code/Magento/Rss/composer.json
+++ b/app/code/Magento/Rss/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json
index bb7975eda0f..7d9fa0e7d97 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json
index 46bc9944d9b..c0d7676c85f 100644
--- a/app/code/Magento/Sales/composer.json
+++ b/app/code/Magento/Sales/composer.json
@@ -3,31 +3,31 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-authorization": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-sales-rule": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-widget": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-gift-message": "0.1.0-alpha97",
-        "magento/module-reports": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-wishlist": "0.1.0-alpha97",
-        "magento/module-email": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-authorization": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-sales-rule": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-widget": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-gift-message": "0.1.0-alpha98",
+        "magento/module-reports": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-wishlist": "0.1.0-alpha98",
+        "magento/module-email": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json
index 19d2b6b920a..bb8754a0464 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-rule": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-reports": "0.1.0-alpha97",
-        "magento/module-catalog-rule": "0.1.0-alpha97",
-        "magento/module-widget": "0.1.0-alpha97",
-        "magento/module-cron": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-rule": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-reports": "0.1.0-alpha98",
+        "magento/module-catalog-rule": "0.1.0-alpha98",
+        "magento/module-widget": "0.1.0-alpha98",
+        "magento/module-cron": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Sendfriend/composer.json b/app/code/Magento/Sendfriend/composer.json
index 976cf398f14..e9aefbc67e2 100644
--- a/app/code/Magento/Sendfriend/composer.json
+++ b/app/code/Magento/Sendfriend/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json
index aa103114a72..30e15a97db3 100644
--- a/app/code/Magento/Shipping/composer.json
+++ b/app/code/Magento/Shipping/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-contact": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-payment": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-contact": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-payment": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "ext-gd": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json
index cd9d94f3055..1ceb37b1c82 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog-url-rewrite": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog-url-rewrite": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json
index 622ac35b3bd..5a32828033d 100644
--- a/app/code/Magento/Store/composer.json
+++ b/app/code/Magento/Store/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-ui": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-ui": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json
index b21fa5a1319..faa67acb52c 100644
--- a/app/code/Magento/Tax/composer.json
+++ b/app/code/Magento/Tax/composer.json
@@ -3,23 +3,23 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-reports": "0.1.0-alpha97",
-        "magento/module-configurable-product": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-reports": "0.1.0-alpha98",
+        "magento/module-configurable-product": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json
index 549e0fd2d5f..c5552cbb187 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.4.11|~5.5.0",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json
index eae6bdbc4cc..25294ec39fe 100644
--- a/app/code/Magento/Theme/composer.json
+++ b/app/code/Magento/Theme/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-translation": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-translation": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json
index ecb509392ce..7dd5da0f009 100644
--- a/app/code/Magento/Translation/composer.json
+++ b/app/code/Magento/Translation/composer.json
@@ -3,14 +3,14 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json
index cc0b3354d6a..b8a564f6d85 100644
--- a/app/code/Magento/Ui/composer.json
+++ b/app/code/Magento/Ui/composer.json
@@ -3,13 +3,13 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json
index ea4a5bd145d..10debbf8f1d 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.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json
index 2faad085665..5fde5c1e6ec 100644
--- a/app/code/Magento/UrlRewrite/composer.json
+++ b/app/code/Magento/UrlRewrite/composer.json
@@ -3,18 +3,18 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog-url-rewrite": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-cms-url-rewrite": "0.1.0-alpha97",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog-url-rewrite": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-cms-url-rewrite": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/User/Model/User.php b/app/code/Magento/User/Model/User.php
index 1b9260fb773..d42bd15220d 100644
--- a/app/code/Magento/User/Model/User.php
+++ b/app/code/Magento/User/Model/User.php
@@ -211,7 +211,8 @@ class User extends AbstractModel implements StorageInterface
                 '_roleFactory',
                 '_encryptor',
                 '_transportBuilder',
-                '_storeManager'
+                '_storeManager',
+                '_validatorBeforeSave'
             )
         );
     }
diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json
index 6db87fb5083..f0a8e811680 100644
--- a/app/code/Magento/User/composer.json
+++ b/app/code/Magento/User/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-authorization": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-integration": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-authorization": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-integration": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json
index ebab020361b..a5470c3bd37 100644
--- a/app/code/Magento/Usps/composer.json
+++ b/app/code/Magento/Usps/composer.json
@@ -3,19 +3,19 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-shipping": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-shipping": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "lib-libxml": "*",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Webapi/Controller/ServiceArgsSerializer.php b/app/code/Magento/Webapi/Controller/ServiceArgsSerializer.php
index 49e55065c93..8ab2e781126 100644
--- a/app/code/Magento/Webapi/Controller/ServiceArgsSerializer.php
+++ b/app/code/Magento/Webapi/Controller/ServiceArgsSerializer.php
@@ -213,8 +213,8 @@ class ServiceArgsSerializer
                 if ($type === TypeProcessor::ANY_TYPE) {
                     continue;
                 }
-                //If custom attribute value is an array then its a data object type
-                $attributeValue = $this->_createFromArray($type, $customAttributeValue);
+
+                $attributeValue = $this->_createDataObjectForTypeAndArrayValue($type, $customAttributeValue);
             } else {
                 $attributeValue = $this->_convertValue($customAttributeValue, $type);
             }
@@ -228,6 +228,28 @@ class ServiceArgsSerializer
         return $result;
     }
 
+    /**
+     * Creates a data object type from a given type name and a PHP array.
+     *
+     * @param string $type The type of data object to create
+     * @param array $customAttributeValue The data object values
+     * @return mixed
+     */
+    protected function _createDataObjectForTypeAndArrayValue($type, $customAttributeValue)
+    {
+        if (substr($type, -2) === "[]") {
+            $type = substr($type, 0, -2);
+            $attributeValue = [];
+            foreach ($customAttributeValue as $value) {
+                $attributeValue[] = $this->_createFromArray($type, $value);
+            }
+        } else {
+            $attributeValue = $this->_createFromArray($type, $customAttributeValue);
+        }
+
+        return $attributeValue;
+    }
+
     /**
      * Convert data from array to Data Object representation if type is Data Object or array of Data Objects.
      *
diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json
index 5774dfbea9d..b18f8e6f495 100644
--- a/app/code/Magento/Webapi/composer.json
+++ b/app/code/Magento/Webapi/composer.json
@@ -3,17 +3,17 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-authorization": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-integration": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-user": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-authorization": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-integration": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-user": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json
index 4579e60f538..aabbb4d654f 100644
--- a/app/code/Magento/Weee/composer.json
+++ b/app/code/Magento/Weee/composer.json
@@ -3,21 +3,21 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-tax": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-directory": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-eav": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-bundle": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-tax": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-directory": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-eav": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-bundle": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json
index be96f2855b6..ca7a34c58a8 100644
--- a/app/code/Magento/Widget/composer.json
+++ b/app/code/Magento/Widget/composer.json
@@ -3,16 +3,16 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-cms": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-cms": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json
index b4547a75dd3..b43053c8d6d 100644
--- a/app/code/Magento/Wishlist/composer.json
+++ b/app/code/Magento/Wishlist/composer.json
@@ -3,25 +3,25 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/module-store": "0.1.0-alpha97",
-        "magento/module-customer": "0.1.0-alpha97",
-        "magento/module-catalog": "0.1.0-alpha97",
-        "magento/module-core": "0.1.0-alpha97",
-        "magento/module-checkout": "0.1.0-alpha97",
-        "magento/module-theme": "0.1.0-alpha97",
-        "magento/module-catalog-inventory": "0.1.0-alpha97",
-        "magento/module-rss": "0.1.0-alpha97",
-        "magento/module-backend": "0.1.0-alpha97",
-        "magento/module-bundle": "0.1.0-alpha97",
-        "magento/module-sales": "0.1.0-alpha97",
-        "magento/module-grouped-product": "0.1.0-alpha97",
-        "magento/module-configurable-product": "0.1.0-alpha97",
-        "magento/module-downloadable": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/module-store": "0.1.0-alpha98",
+        "magento/module-customer": "0.1.0-alpha98",
+        "magento/module-catalog": "0.1.0-alpha98",
+        "magento/module-core": "0.1.0-alpha98",
+        "magento/module-checkout": "0.1.0-alpha98",
+        "magento/module-theme": "0.1.0-alpha98",
+        "magento/module-catalog-inventory": "0.1.0-alpha98",
+        "magento/module-rss": "0.1.0-alpha98",
+        "magento/module-backend": "0.1.0-alpha98",
+        "magento/module-bundle": "0.1.0-alpha98",
+        "magento/module-sales": "0.1.0-alpha98",
+        "magento/module-grouped-product": "0.1.0-alpha98",
+        "magento/module-configurable-product": "0.1.0-alpha98",
+        "magento/module-downloadable": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-module",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json
index 53888ad9bdc..407afee3724 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.4.11|~5.5.0",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/design/adminhtml/Magento/backend/theme.xml b/app/design/adminhtml/Magento/backend/theme.xml
index 6c738f9599b..acbb07ba133 100644
--- a/app/design/adminhtml/Magento/backend/theme.xml
+++ b/app/design/adminhtml/Magento/backend/theme.xml
@@ -24,5 +24,5 @@
 -->
 <theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Config/etc/theme.xsd">
     <title>Magento 2 backend</title>
-    <version>0.1.0-alpha97</version>
+    <version>0.1.0-alpha98</version>
 </theme>
diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json
index ff9957a1d87..8386cbafd9d 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.4.11|~5.5.0",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/design/frontend/Magento/blank/theme.xml b/app/design/frontend/Magento/blank/theme.xml
index 4ce39439c7b..feb7ace0aa1 100644
--- a/app/design/frontend/Magento/blank/theme.xml
+++ b/app/design/frontend/Magento/blank/theme.xml
@@ -24,7 +24,7 @@
 -->
 <theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Config/etc/theme.xsd">
     <title>Magento Blank</title>
-    <version>0.1.0-alpha97</version>
+    <version>0.1.0-alpha98</version>
     <media>
         <preview_image>media/preview.jpg</preview_image>
     </media>
diff --git a/app/design/frontend/Magento/plushe/composer.json b/app/design/frontend/Magento/plushe/composer.json
index a4be706b5b2..afab06c3975 100644
--- a/app/design/frontend/Magento/plushe/composer.json
+++ b/app/design/frontend/Magento/plushe/composer.json
@@ -3,12 +3,12 @@
     "description": "N/A",
     "require": {
         "php": "~5.4.11|~5.5.0",
-        "magento/theme-frontend-blank": "0.1.0-alpha97",
-        "magento/framework": "0.1.0-alpha97",
+        "magento/theme-frontend-blank": "0.1.0-alpha98",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-theme",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "extra": {
         "map": [
             [
diff --git a/app/design/frontend/Magento/plushe/theme.xml b/app/design/frontend/Magento/plushe/theme.xml
index 99f74b8f2eb..ae7f7d0b8f1 100644
--- a/app/design/frontend/Magento/plushe/theme.xml
+++ b/app/design/frontend/Magento/plushe/theme.xml
@@ -24,7 +24,7 @@
 -->
 <theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Config/etc/theme.xsd">
     <title>Magento Plushe</title>
-    <version>0.1.0-alpha97</version>
+    <version>0.1.0-alpha98</version>
     <parent>Magento/blank</parent>
     <media>
         <preview_image>media/preview.jpg</preview_image>
diff --git a/app/design/install/Magento/basic/theme.xml b/app/design/install/Magento/basic/theme.xml
index 2f2fbec2347..2e347e2c163 100644
--- a/app/design/install/Magento/basic/theme.xml
+++ b/app/design/install/Magento/basic/theme.xml
@@ -24,5 +24,5 @@
 -->
 <theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Config/etc/theme.xsd">
     <title>Magento Basic</title>
-    <version>0.1.0-alpha97</version>
+    <version>0.1.0-alpha98</version>
 </theme>
diff --git a/app/i18n/magento/de_de/composer.json b/app/i18n/magento/de_de/composer.json
index f985c2c20c5..062c3add974 100644
--- a/app/i18n/magento/de_de/composer.json
+++ b/app/i18n/magento/de_de/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-de_de",
     "description": "German (Germany) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "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 14c9283de5b..576af7cda01 100644
--- a/app/i18n/magento/en_us/composer.json
+++ b/app/i18n/magento/en_us/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-en_us",
     "description": "English (United States) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "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 8bfa7b0685d..d5702cc1f5d 100644
--- a/app/i18n/magento/es_es/composer.json
+++ b/app/i18n/magento/es_es/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-es_es",
     "description": "Spanish (Spain) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "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 162eba88f30..5d9c4962205 100644
--- a/app/i18n/magento/fr_fr/composer.json
+++ b/app/i18n/magento/fr_fr/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-fr_fr",
     "description": "French (France) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "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 9a85fa702e1..c8c6d10ede6 100644
--- a/app/i18n/magento/nl_nl/composer.json
+++ b/app/i18n/magento/nl_nl/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-nl_nl",
     "description": "Dutch (Netherlands) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "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 7d62abb5167..38f0b204123 100644
--- a/app/i18n/magento/pt_br/composer.json
+++ b/app/i18n/magento/pt_br/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-pt_br",
     "description": "Portuguese (Brazil) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "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 16562ae1971..45f3b1ea226 100644
--- a/app/i18n/magento/zh_cn/composer.json
+++ b/app/i18n/magento/zh_cn/composer.json
@@ -1,9 +1,9 @@
 {
     "name": "magento/language-zh_cn",
     "description": "Chinese (China) language",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
-        "magento/framework": "0.1.0-alpha97",
+        "magento/framework": "0.1.0-alpha98",
         "magento/magento-composer-installer": "*"
     },
     "type": "magento2-language",
diff --git a/composer.json b/composer.json
index 43976dfad94..ca94c7c2a83 100644
--- a/composer.json
+++ b/composer.json
@@ -2,7 +2,7 @@
     "name": "magento/project-community-edition",
     "description": "Magento project (Community Edition)",
     "type": "project",
-    "version": "0.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
         "php": "~5.4.11|~5.5.0"
     },
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index 7c11952fad3..76d6fb16a12 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -151,11 +151,46 @@ abstract class Grid extends Block
     protected $option = '[name="status"]';
 
     /**
-     * Selector for action expand Filter
+     * Filter button
      *
      * @var string
      */
-    protected $filterOpen = '.action.filters-toggle';
+    protected $filterButton = '.action.filters-toggle';
+
+    /**
+     * Active class
+     *
+     * @var string
+     */
+    protected $active = '.active';
+
+    /**
+     * Base part of row locator template for getRow() method
+     *
+     * @var string
+     */
+    protected $location = '//div[@class="grid"]//tr[';
+
+    /**
+     * Secondary part of row locator template for getRow() method
+     *
+     * @var string
+     */
+    protected $rowTemplate = 'td[contains(text(),normalize-space("%s"))]';
+
+    /**
+     * Secondary part of row locator template for getRow() method with strict option
+     *
+     * @var string
+     */
+    protected $rowTemplateStrict = 'td[text()[normalize-space()="%s"]]';
+
+    /**
+     * Magento grid loader
+     *
+     * @var string
+     */
+    protected $loader = '[data-role="spinner"]';
 
     /**
      * Get backend abstract block
@@ -200,10 +235,11 @@ abstract class Grid extends Block
      */
     public function search(array $filter)
     {
+        $this->openFilterBlock();
         $this->resetFilter();
         $this->prepareForSearch($filter);
         $this->_rootElement->find($this->searchButton, Locator::SELECTOR_CSS)->click();
-        $this->getTemplateBlock()->waitLoader();
+        $this->waitLoader();
         $this->reinitRootElement();
     }
 
@@ -215,6 +251,7 @@ abstract class Grid extends Block
      */
     public function searchAndOpen(array $filter)
     {
+        $this->openFilterBlock();
         $this->search($filter);
         $rowItem = $this->_rootElement->find($this->rowItem, Locator::SELECTOR_CSS);
         if ($rowItem->isVisible()) {
@@ -225,6 +262,24 @@ abstract class Grid extends Block
         }
     }
 
+    /**
+     * Wait loader
+     *
+     * @return void
+     */
+    protected function waitLoader()
+    {
+        $browser = $this->browser;
+        $selector = $this->loader;
+        $browser->waitUntil(
+            function () use ($browser, $selector) {
+                $productSavedMessage = $browser->find($selector);
+                return $productSavedMessage->isVisible() == false ? true : null;
+            }
+        );
+        $this->getTemplateBlock()->waitLoader();
+    }
+
     /**
      * Method that waits for the configured selector using class attributes.
      */
@@ -247,6 +302,7 @@ abstract class Grid extends Block
      */
     public function searchAndSelect(array $filter)
     {
+        $this->openFilterBlock();
         $this->search($filter);
         $selectItem = $this->_rootElement->find($this->selectItem);
         if ($selectItem->isVisible()) {
@@ -261,12 +317,9 @@ abstract class Grid extends Block
      */
     public function resetFilter()
     {
-        $expandFilterButton = $this->_rootElement->find($this->filterOpen, Locator::SELECTOR_CSS);
-        if ($expandFilterButton->isVisible()) {
-            $expandFilterButton->click();
-        }
+        $this->openFilterBlock();
         $this->_rootElement->find($this->resetButton, Locator::SELECTOR_CSS)->click();
-        $this->getTemplateBlock()->waitLoader();
+        $this->waitLoader();
         $this->reinitRootElement();
     }
 
@@ -323,6 +376,7 @@ abstract class Grid extends Block
      */
     protected function getRow(array $filter, $isSearchable = true, $isStrict = true)
     {
+        $this->openFilterBlock();
         if ($isSearchable) {
             $this->search($filter);
         }
@@ -349,6 +403,7 @@ abstract class Grid extends Block
      */
     public function isRowVisible(array $filter, $isSearchable = true, $isStrict = true)
     {
+        $this->openFilterBlock();
         return $this->getRow($filter, $isSearchable, $isStrict)->isVisible();
     }
 
@@ -360,11 +415,25 @@ abstract class Grid extends Block
      */
     public function sortGridByField($field, $sort = "desc")
     {
+        $this->openFilterBlock();
         $sortBlock = $this->_rootElement->find(sprintf($this->sortLink, $field, $sort));
         if ($sortBlock->isVisible()) {
             $sortBlock->click();
-            $this->getTemplateBlock()->waitLoader();
+            $this->waitLoader();
         }
         $this->reinitRootElement();
     }
+
+    /**
+     * Open Filter Block
+     *
+     * @return void
+     */
+    protected function openFilterBlock()
+    {
+        $button = $this->_rootElement->find($this->filterButton);
+        if ($button->isVisible() && !$this->_rootElement->find($this->filterButton . $this->active)->isVisible()) {
+            $button->click();
+        }
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest/test.csv b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest/test.csv
deleted file mode 100644
index 3e389686633..00000000000
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest/test.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-"products";"qty";"constraint"
-"bundleProduct::bundle_dynamic_product";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
-"bundleProduct::bundle_fixed_product";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleDynamicTest.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleDynamicTest.php
index da5588b335c..57103046af3 100755
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleDynamicTest.php
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleDynamicTest.php
@@ -66,12 +66,12 @@ class BundleDynamicTest extends Functional
         $productForm->fill($bundle, null, $category);
         $createProductPage->getFormPageActions()->save();
         //Verification
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         // Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verification
         $this->assertOnGrid($bundle);
         $this->assertOnCategory($bundle);
@@ -88,7 +88,7 @@ class BundleDynamicTest extends Functional
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
         $productGridPage->open();
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleFixedTest.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleFixedTest.php
index 11796d0e499..26025de223c 100755
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleFixedTest.php
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/BundleFixedTest.php
@@ -66,12 +66,12 @@ class BundleFixedTest extends Functional
         $productForm->fill($bundle, null, $category);
         $createProductPage->getFormPageActions()->save();
         //Verification
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         // Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verification
         $this->assertOnGrid($bundle);
         $this->assertOnCategory($bundle);
@@ -88,7 +88,7 @@ class BundleFixedTest extends Functional
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
         $productGridPage->open();
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/EditBundleTest.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/EditBundleTest.php
index bd41afca571..c6b5eb6d960 100755
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/EditBundleTest.php
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/EditBundleTest.php
@@ -73,13 +73,13 @@ class EditBundleTest extends Functional
 
         $productGridPage->open();
         $gridBlock->searchAndOpen([
-            'sku' => $product->getProductSku(),
+            'sku' => $product->getSku(),
             'type' => 'Bundle Product'
         ]);
         $productForm->fill($editProduct);
         $editProductPage->getFormPageActions()->save();
         //Verifying
-        $editProductPage->getMessagesBlock()->assertSuccessMessage();
+        $editProductPage->getMessagesBlock()->waitSuccessMessage();
         // Flush cache
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
@@ -112,7 +112,7 @@ class EditBundleTest extends Functional
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
         $productGridPage->open();
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/ProductForm.xml
index e54210bf600..3c5c315ec91 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/ProductForm.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/ProductForm.xml
@@ -64,6 +64,15 @@
             <description />
         </fields>
     </product-details>
+    <search-engine-optimization>
+        <class>\Magento\Backend\Test\Block\Widget\Tab</class>
+        <selector>#product_info_tabs_search-engine-optimization</selector>
+        <strategy>css selector</strategy>
+        <wrapper>product</wrapper>
+        <fields>
+            <url_key/>
+        </fields>
+    </search-engine-optimization>
     <websites>
         <class>\Magento\Backend\Test\Block\Widget\Tab</class>
         <selector>#product_info_tabs_websites</selector>
@@ -137,7 +146,6 @@
             <is_returnable>
                 <input>select</input>
             </is_returnable>
-            <url_key/>
             <gift_message_available>
                 <input>select</input>
             </gift_message_available>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductIsNotDisplayingOnFrontend.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductIsNotDisplayingOnFrontend.php
index fab93fbed78..a7e92102079 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductIsNotDisplayingOnFrontend.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductIsNotDisplayingOnFrontend.php
@@ -168,7 +168,7 @@ class AssertProductIsNotDisplayingOnFrontend extends AbstractConstraint
         }
 
         if ($isProductVisible) {
-            $errors[] = '- product with name "{$product->getName()}" is found in this category.';
+            $errors[] = "- product with name '{$product->getName()}' is found in this category.";
         }
 
         return $errors;
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/AssignProducts.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/AssignProducts.php
index fdc3c604ce6..51fb6832a78 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/AssignProducts.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/AssignProducts.php
@@ -40,9 +40,9 @@ class AssignProducts extends Product
     {
         parent::__construct($configuration, $placeholders);
 
-        $this->_placeholders[$this->assignType . '_simple::getProductSku'] = array($this, 'productProvider');
+        $this->_placeholders[$this->assignType . '_simple::getSku'] = array($this, 'productProvider');
         $this->_placeholders[$this->assignType . '_simple::getName'] = array($this, 'productProvider');
-        $this->_placeholders[$this->assignType . '_configurable::getProductSku'] = array($this, 'productProvider');
+        $this->_placeholders[$this->assignType . '_configurable::getSku'] = array($this, 'productProvider');
         $this->_placeholders[$this->assignType . '_configurable::getName'] = array($this, 'productProvider');
     }
 
@@ -61,11 +61,11 @@ class AssignProducts extends Product
                 $this->assignType . '_products' => array(
                     'value' => array(
                         'product_1' => array(
-                            'sku' => '%' . $this->assignType . '_simple::getProductSku%',
+                            'sku' => '%' . $this->assignType . '_simple::getSku%',
                             'name' => '%' . $this->assignType . '_simple::getName%'
                         ),
                         'product_2' => array(
-                            'sku' => '%' . $this->assignType . '_configurable::getProductSku%',
+                            'sku' => '%' . $this->assignType . '_configurable::getSku%',
                             'name' => '%' . $this->assignType . '_configurable::getName%'
                         )
                     ),
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Cart/Item.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Cart/Item.php
index ea2967a46fa..01d262eb100 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Cart/Item.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Cart/Item.php
@@ -77,9 +77,9 @@ class Item implements FixtureInterface
         $cartItem['options'] = isset($cartItem['options'])
             ? $cartItem['options'] + $checkoutCustomOptions
             : $checkoutCustomOptions;
-        $cartItem['qty'] = isset($checkoutData['options']['qty'])
-                ? $checkoutData['options']['qty']
-                : 1;
+        if (isset($checkoutData['options']['qty'])) {
+            $cartItem['qty'] = $checkoutData['options']['qty'];
+        }
 
         $this->data = $cartItem;
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.php
index 3588eb403a5..1a0b79f2d3f 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.php
@@ -496,7 +496,7 @@ class CatalogProductSimple extends InjectableFixture
         'is_required' => '0',
         'default_value' => '',
         'input' => 'text',
-        'group' => 'autosettings',
+        'group' => 'search-engine-optimization',
     ];
 
     protected $url_path = [
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
index 395b2745e59..bafc13ce22a 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
@@ -386,7 +386,7 @@
             <is_required>0</is_required>
             <default_value></default_value>
             <input>text</input>
-            <group>autosettings</group>
+            <group>search-engine-optimization</group>
         </url_key>
         <url_path>
             <attribute_code>url_path</attribute_code>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CheckoutData.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CheckoutData.php
index 9fc2f413279..1e754e93ff4 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CheckoutData.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CheckoutData.php
@@ -182,8 +182,13 @@ class CheckoutData implements FixtureInterface
                 ]
             ],
             'order_big_qty' => [
-                'options' => [
-                    'qty' => 2
+                'qty' => 900
+            ],
+            'order_custom_price' => [
+                'checkout_data' => [
+                    'qty' => 3,
+                    'use_custom_price' => "Yes",
+                    'custom_price' => 100,
                 ],
                 'cartItem' => []
             ]
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.php
index 02a73c9f117..a627caf18e3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.php
@@ -515,7 +515,7 @@ class CatalogProductVirtual extends InjectableFixture
         'is_required' => '0',
         'default_value' => '',
         'input' => 'text',
-        'group' => 'autosettings',
+        'group' => 'search-engine-optimization',
     ];
 
     protected $url_path = [
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual/CheckoutData.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual/CheckoutData.php
index 065ca948351..89095fbc193 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual/CheckoutData.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual/CheckoutData.php
@@ -54,6 +54,13 @@ class CheckoutData extends \Magento\Catalog\Test\Fixture\CatalogProductSimple\Ch
                     'subtotal' => 50
                 ]
             ],
+            'order_custom_price' => [
+                'checkout_data' => [
+                    'qty' => 3,
+                    'use_custom_price' => "Yes",
+                    'custom_price' => 100,
+                ],
+            ]
         ];
         return isset($presets[$name]) ? $presets[$name] : null;
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CrosssellProducts.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CrosssellProducts.php
index 94d0b6b3caf..5e1ffb8b8b1 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CrosssellProducts.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CrosssellProducts.php
@@ -39,25 +39,25 @@ class CrosssellProducts extends AssignProducts
     /**
      * @var array
      */
-    protected $_products = array();
+    protected $_products = [];
 
     /**
      * Init Data
      */
     protected function _initData()
     {
-        $this->_dataConfig = array(
+        $this->_dataConfig = [
             'assignType ' => $this->assignType,
-        );
+        ];
         /** @var  $type Related|Upsell */
         $type = 'Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Tab\\' . ucfirst(strtolower($this->assignType));
-        $productsArray = array();
+        $productsArray = [];
         foreach ($this->_products as $key => $product) {
             /** @var $product \Magento\Catalog\Test\Fixture\Product */
-            $productsArray['product_' . $key] = array(
-                'sku' => $product->getProductSku(),
+            $productsArray['product_' . $key] = [
+                'sku' => $product->getSku(),
                 'name' => $product->getName()
-            );
+            ];
         }
         $this->_data['fields'][$this->assignType . '_products']['value'] = $productsArray;
         $this->_data['fields'][$this->assignType . '_products']['group'] = $type::GROUP;
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product.php
index 511551329a9..b1a79bc26f6 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product.php
@@ -245,7 +245,7 @@ class Product extends DataFixture
      *
      * @return string
      */
-    public function getProductSku()
+    public function getSku()
     {
         return $this->getData('fields/sku/value');
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php
index b50bb378285..09b71b1168c 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Curl.php
@@ -145,7 +145,7 @@ class Curl extends AbstractCurl implements CatalogProductSimpleInterface
         $prefix = isset($config['input_prefix']) ? $config['input_prefix'] : null;
         $data = $this->prepareData($fixture, $prefix);
 
-        return ['id' => $this->createProduct($data, $config)];
+        return $this->createProduct($data, $config);
     }
 
     /**
@@ -342,7 +342,7 @@ class Curl extends AbstractCurl implements CatalogProductSimpleInterface
      *
      * @param array $data
      * @param array $config
-     * @return int|null
+     * @return array
      * @throws \Exception
      */
     protected function createProduct(array $data, array $config)
@@ -359,7 +359,7 @@ class Curl extends AbstractCurl implements CatalogProductSimpleInterface
         }
         preg_match("~Location: [^\s]*\/id\/(\d+)~", $response, $matches);
 
-        return isset($matches[1]) ? $matches[1] : null;
+        return ['id' => isset($matches[1]) ? $matches[1] : null];
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Ui.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Ui.php
index 386e9301881..08d1ca7fcd3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Ui.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/CatalogProductSimple/Ui.php
@@ -52,6 +52,6 @@ class Ui extends AbstractUi implements CatalogProductSimpleInterface
 
         $createProductPage->getProductForm()->fill($fixture);
         $createProductPage->getFormPageActions()->save();
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Ui/CreateProduct.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Ui/CreateProduct.php
index 1552bdb046f..50741b18552 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Ui/CreateProduct.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Handler/Ui/CreateProduct.php
@@ -52,6 +52,6 @@ class CreateProduct extends Ui
 
         $createProductPage->getProductForm()->fill($fixture);
         $createProductPage->getFormPageActions()->save();
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.php
index b6b51204c00..f42af6bc004 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.php
@@ -75,6 +75,22 @@ class CatalogProductSimple extends AbstractRepository
             'checkout_data' => ['preset' => 'order_big_qty'],
         ];
 
+        $this->_data['simple_for_sales'] = [
+            'attribute_set_id' => ['dataSet' => 'default'],
+            'name' => 'Simple Product %isolation%',
+            'sku' => 'sku_simple_product_%isolation%',
+            'weight' => 1,
+            'quantity_and_stock_status' => [
+                'qty' => 25.0000,
+                'is_in_stock' => 'In Stock',
+            ],
+            'price' => ['value' => 560.00, 'preset' => '-'],
+            'tax_class_id' => ['dataSet' => 'Taxable Goods'],
+            'website_ids' => ['Main Website'],
+            'visibility' => 'Catalog, Search',
+            'checkout_data' => ['preset' => 'order_custom_price'],
+        ];
+
         $this->_data['100_dollar_product'] = [
             'sku' => '100_dollar_product%isolation%',
             'name' => '100_dollar_product%isolation%',
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual.php
index 4727bf50ba9..9e28fdc45fe 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductVirtual.php
@@ -60,6 +60,42 @@ class CatalogProductVirtual extends AbstractRepository
             'checkout_data' => ['preset' => 'order_default'],
         ];
 
+        $this->_data['virtual_big_qty'] = [
+            'tax_class_id' => ['dataSet' => 'Taxable Goods'],
+            'status' => 'Product online',
+            'website_ids' => ['Main Website'],
+            'is_virtual' => 'Yes',
+            'url_key' => 'virtual-product%isolation%',
+            'visibility' => 'Catalog, Search',
+            'attribute_set_id' => ['dataSet' => 'default'],
+            'name' => 'Virtual product %isolation%',
+            'sku' => 'sku_virtual_product_%isolation%',
+            'quantity_and_stock_status' => [
+                'qty' => 1000.0000,
+                'is_in_stock' => 'In Stock',
+            ],
+            'price' => ['value' => 10.00, 'preset' => '-'],
+            'checkout_data' => ['preset' => 'order_big_qty'],
+        ];
+
+        $this->_data['virtual_for_sales'] = [
+            'tax_class_id' => ['dataSet' => 'Taxable Goods'],
+            'status' => 'Product online',
+            'website_ids' => ['Main Website'],
+            'is_virtual' => 'Yes',
+            'url_key' => 'virtual-product%isolation%',
+            'visibility' => 'Catalog, Search',
+            'attribute_set_id' => ['dataSet' => 'default'],
+            'name' => 'Virtual product %isolation%',
+            'sku' => 'sku_virtual_product_%isolation%',
+            'quantity_and_stock_status' => [
+                'qty' => 666.0000,
+                'is_in_stock' => 'In Stock',
+            ],
+            'price' => ['value' => 10.00, 'preset' => '-'],
+            'checkout_data' => ['preset' => 'order_custom_price'],
+        ];
+
         $this->_data['50_dollar_product'] = [
             'name' => '50_dollar_product %isolation%',
             'sku' => '50_dollar_product_%isolation%',
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/AssignProductTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/AssignProductTest.php
index 5b91970cf3e..cca1d8567c9 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/AssignProductTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/AssignProductTest.php
@@ -68,15 +68,15 @@ class AssignProductTest extends Functional
         $products = [$simple, $configurable, $bundle];
         /** @var Product $product */
         foreach ($products as $product) {
-            $categoryProductsGrid->searchAndSelect(['sku' => $product->getProductSku()]);
+            $categoryProductsGrid->searchAndSelect(['sku' => $product->getSku()]);
         }
         $actionsBlock->save();
-        $messagesBlock->assertSuccessMessage();
+        $messagesBlock->waitSuccessMessage();
         //Clean Cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertProductsOnCategory($category, $products);
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/CreateTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/CreateTest.php
index 9592b70c86b..6ceb5c58185 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/CreateTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/CreateTest.php
@@ -60,12 +60,12 @@ class CreateTest extends Functional
         $formBlock->fill($category);
         $actionsBlock->save();
         //Verifying
-        $messagesBlock->assertSuccessMessage();
+        $messagesBlock->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertCategoryOnFrontend($category);
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateProductTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateProductTest.php
index cec15ea5a64..51a5cd8a171 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateProductTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateProductTest.php
@@ -61,12 +61,12 @@ class CreateProductTest extends Functional
         $createProductPage->open(['type' => 'simple', 'set' => 4]);
         $productForm->fill($product);
         $createProductPage->getFormPageActions()->save();
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertOnGrid($product);
         $this->assertOnCategory($product);
@@ -83,7 +83,7 @@ class CreateProductTest extends Functional
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
         $productGridPage->open();
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCategoryTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCategoryTest.php
index 46941390782..07aef9e7e1c 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCategoryTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCategoryTest.php
@@ -75,7 +75,7 @@ class CreateSimpleWithCategoryTest extends Functional
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertProductOnFrontend($product);
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCustomOptionsAndCategoryTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCustomOptionsAndCategoryTest.php
index 3a5ff5ba818..ca11077153a 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCustomOptionsAndCategoryTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleWithCustomOptionsAndCategoryTest.php
@@ -66,7 +66,7 @@ class CreateSimpleWithCustomOptionsAndCategoryTest extends Functional
         $productForm->fill($product, null, $category);
         $createProductPage->getFormPageActions()->save();
         //Verifying
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         // Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
@@ -88,7 +88,7 @@ class CreateSimpleWithCustomOptionsAndCategoryTest extends Functional
         $productGridPage->open();
         /** @var \Magento\Catalog\Test\Block\Adminhtml\Product\Grid $gridBlock */
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateTest.php
index 8201bf4935b..5a4de0f34e9 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateTest.php
@@ -65,12 +65,12 @@ class CreateTest extends Functional
         $productForm->fill($product);
         $createProductPage->getFormPageActions()->save();
         //Verifying
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertOnGrid($product);
         $this->assertOnCategory($product);
@@ -88,7 +88,7 @@ class CreateTest extends Functional
         $productGridPage->open();
         /** @var \Magento\Catalog\Test\Block\Adminhtml\Product\Grid $gridBlock */
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateVirtualTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateVirtualTest.php
index 49e46187a42..c66f161a339 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateVirtualTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateVirtualTest.php
@@ -62,12 +62,12 @@ class CreateVirtualTest extends Functional
         $productForm->fill($product);
         $createProductPage->getFormPageActions()->save();
         //Verifying
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertOnGrid($product);
         $this->assertOnCategory($product);
@@ -85,7 +85,7 @@ class CreateVirtualTest extends Functional
         $productGridPage->open();
         /** @var \Magento\Catalog\Test\Block\Adminhtml\Product\Grid $gridBlock */
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/EditSimpleProductTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/EditSimpleProductTest.php
index edcfd32bd1a..5b54b2321f3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/EditSimpleProductTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/EditSimpleProductTest.php
@@ -65,11 +65,11 @@ class EditSimpleProductTest extends Functional
         $cachePage = Factory::getPageFactory()->getAdminCache();
 
         $productGridPage->open();
-        $gridBlock->searchAndOpen(['sku' => $product->getProductSku(), 'type' => 'Simple Product']);
+        $gridBlock->searchAndOpen(['sku' => $product->getSku(), 'type' => 'Simple Product']);
         $productForm->fill($editProduct);
         $editProductPage->getFormPageActions()->save();
         //Verifying
-        $editProductPage->getMessagesBlock()->assertSuccessMessage();
+        $editProductPage->getMessagesBlock()->waitSuccessMessage();
         // Flush cache
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
@@ -90,7 +90,7 @@ class EditSimpleProductTest extends Functional
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
         $productGridPage->open();
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getProductSku()]));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UnassignCategoryTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UnassignCategoryTest.php
index 89ad44368f8..bdab3e8df1e 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UnassignCategoryTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UnassignCategoryTest.php
@@ -63,12 +63,12 @@ class UnassignCategoryTest extends Functional
         $productForm->clearCategorySelect();
         $editProductPage->getFormPageActions()->save();
         //Verifying
-        $editProductPage->getMessagesBlock()->assertSuccessMessage();
+        $editProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertAbsenceOnCategory($simple);
     }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchEntityTest.php
index f4aacf5f368..5e2861cf2fc 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchEntityTest.php
@@ -96,7 +96,6 @@ class AdvancedSearchEntityTest extends Injectable
         CmsIndex $cmsIndex,
         AdvancedSearch $searchPage
     ) {
-        $this->markTestIncomplete('MAGETWO-27664');
         $cmsIndex->open();
         $cmsIndex->getSearchBlock()->clickAdvancedSearchButton();
         $searchForm = $searchPage->getForm();
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchTest.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchTest.php
index b91c88f1ed0..a4d279831fb 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchTest.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/AdvancedSearchTest.php
@@ -40,7 +40,6 @@ class AdvancedSearchTest extends Functional
      */
     public function testProductSearch()
     {
-        $this->markTestIncomplete('MAGETWO-27664');
         //Data
         $productFixture = Factory::getFixtureFactory()->getMagentoCatalogSimpleProduct();
         $productFixture->switchData('simple');
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php
index 54bb378e9ac..63acc851a48 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsBlock/Curl.php
@@ -28,7 +28,6 @@ use Mtf\System\Config;
 use Mtf\Fixture\FixtureInterface;
 use Mtf\Util\Protocol\CurlInterface;
 use Mtf\Util\Protocol\CurlTransport;
-use Magento\Backend\Test\Handler\Extractor;
 use Mtf\Util\Protocol\CurlTransport\BackendDecorator;
 use Mtf\Handler\Curl as AbstractCurl;
 
@@ -43,7 +42,7 @@ class Curl extends AbstractCurl implements CmsBlockInterface
      *
      * @var string
      */
-    protected $saveUrl = 'cms/block/save';
+    protected $saveUrl = 'cms/block/save/back/edit';
 
     /**
      * Mapping values for data
@@ -85,11 +84,10 @@ class Curl extends AbstractCurl implements CmsBlockInterface
             throw new \Exception("CMS Block entity creating by curl handler was not successful! Response: $response");
         }
 
-        $url = 'cms/block/index/sort/creation_time/dir/desc';
-        $regExpPattern = '@^.*block_id\/(\d+)\/.*' . $fixture->getTitle() . '@ms';
-        $extractor = new Extractor($url, $regExpPattern);
+        preg_match("`block_id\/(\d*?)\/`", $response, $matches);
+        $id = isset($matches[1]) ? $matches[1] : null;
 
-        return ['block_id' => $extractor->getData()[1]];
+        return ['block_id' => $id];
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php
index 24505b7d5c7..91e04bf8441 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Handler/CmsPage/Curl.php
@@ -67,7 +67,7 @@ class Curl extends Conditions implements CmsPageInterface
      *
      * @var string
      */
-    protected $url = 'cms/page/save/back/edit/active_tab/content_section/';
+    protected $url = 'admin/cms_page/save/back/edit/active_tab/main_section/';
 
     /**
      * Post request for creating a cms page
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProductInjectable/ConfigurableAttributesData.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProductInjectable/ConfigurableAttributesData.php
index 7fdf2610f35..c38fe3940ca 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProductInjectable/ConfigurableAttributesData.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProductInjectable/ConfigurableAttributesData.php
@@ -690,6 +690,7 @@ class ConfigurableAttributesData implements FixtureInterface
             foreach ($attribute['options'] as $optionKey => $option) {
                 $compositeKey = "{$attributeKey}:{$optionKey}";
                 $optionId = $this->getAttributeOptionId($compositeKey);
+                $optionId = ($optionId !== null) ? $optionId : $rowKey . $optionKey;
 
                 $row['name'] .= '-' . $optionId;
                 $row['sku'] .= '_' . $optionId;
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest/test.csv b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest/test.csv
deleted file mode 100644
index 36bcde341f1..00000000000
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest/test.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-"products";"qty";"constraint"
-"configurableProductInjectable::default";"3";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest/test.csv
index 9e539ae2153..86da61ac30d 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest/test.csv
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest/test.csv
@@ -1,5 +1,5 @@
 "product/data/configurable_attributes_data/preset";"product/data/checkout_data/preset";"product/data/name";"product/data/sku";"product/data/tax_class_id";"product/data/price/value";"product/data/special_price";"product/data/category_ids/presets";"product/data/short_description";"product/data/description";"product/data/weight";"product/data/quantity_and_stock_status/is_in_stock";"product/data/affected_attribute_set";"constraint";"issue"
-"two_new_options";"two_new_options";"Configurable Product %isolation%";"configurable_sku_%isolation%";"-";"100";"-";"default_subcategory";"Configurable short description";"Configurable Product description %isolation%";"2";"In Stock";"custom_attribute_set_%isolation%";"assertProductSaveMessage,  assertProductInGrid, assertChildProductsInGrid, assertConfigurableProductForm, assertProductInCategory, assertConfigurableProductPage, assertProductInStock, assertConfigurableProductInCart, assertChildProductIsNotDisplayedSeparately";"Bug: MAGETWO-28347"
+"two_new_options";"two_new_options";"Configurable Product %isolation%";"configurable_sku_%isolation%";"-";"100";"-";"default_subcategory";"Configurable short description";"Configurable Product description %isolation%";"2";"In Stock";"custom_attribute_set_%isolation%";"assertProductSaveMessage,  assertProductInGrid, assertChildProductsInGrid, assertConfigurableProductForm, assertProductInCategory, assertConfigurableProductPage, assertProductInStock, assertConfigurableProductInCart, assertChildProductIsNotDisplayedSeparately";""
 "two_options";"two_options";"Configurable Product %isolation%";"configurable_sku_%isolation%";"-";"100";"-";"-";"Configurable short description";"Configurable Product description %isolation%";"2";"-";"custom_attribute_set_%isolation%";"assertProductSaveMessage, assertProductInGrid, assertChildProductsInGrid, assertConfigurableProductForm, assertConfigurableProductPage, assertProductInStock, assertConfigurableProductInCart";""
-"two_new_options";"two_new_options_with_special_price";"Configurable Product %isolation%";"configurable_sku_%isolation%";"-";"100";"10";"-";"Configurable short description";"Configurable Product description %isolation%";"2";"In Stock";"custom_attribute_set_%isolation%";"assertProductSaveMessage, assertProductInGrid, assertChildProductsInGrid, assertConfigurableProductForm, assertConfigurableProductPage, assertProductInStock, assertConfigurableProductInCart, assertProductSpecialPriceOnProductPage";"Bug: MAGETWO-28347"
+"two_new_options";"two_new_options_with_special_price";"Configurable Product %isolation%";"configurable_sku_%isolation%";"-";"100";"10";"-";"Configurable short description";"Configurable Product description %isolation%";"2";"In Stock";"custom_attribute_set_%isolation%";"assertProductSaveMessage, assertProductInGrid, assertChildProductsInGrid, assertConfigurableProductForm, assertConfigurableProductPage, assertProductInStock, assertConfigurableProductInCart, assertProductSpecialPriceOnProductPage";""
 "two_options_with_assigned_product";"two_options_with_assigned_product";"Configurable Product %isolation%";"configurable_sku_%isolation%";"-";"100";"-";"-";"Configurable short description";"Configurable Product description %isolation%";"2";"In Stock";"custom_attribute_set_%isolation%";"assertProductSaveMessage, assertProductInGrid, assertConfigurableProductForm, assertConfigurableProductPage, assertProductInStock, assertConfigurableProductInCart";""
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableTest.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableTest.php
index a260c58e4c1..871319c6d01 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableTest.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableTest.php
@@ -54,12 +54,12 @@ class CreateConfigurableTest extends Functional
         $createProductPage->getProductForm()->fill($product);
         $createProductPage->getFormPageActions()->save($product);
         //Verifying
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
         //Verifying
         $this->assertOnGrid($product);
         $this->assertOnFrontend($product);
@@ -75,7 +75,7 @@ class CreateConfigurableTest extends Functional
     {
         //Search data
         $configurableSearch = [
-            'sku' => $product->getProductSku(),
+            'sku' => $product->getSku(),
             'type' => 'Configurable Product'
         ];
         $variationSkus = $product->getVariationSkus();
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateWithAttributeTest.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateWithAttributeTest.php
index a89e555204a..8e9e0aa3fdc 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateWithAttributeTest.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateWithAttributeTest.php
@@ -166,7 +166,7 @@ class CreateWithAttributeTest extends Functional
     protected function assertOnGrid(Product $product)
     {
         $configurableSearch = [
-            'sku' => $product->getProductSku(),
+            'sku' => $product->getSku(),
             'type' => 'Configurable Product',
         ];
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/EditConfigurableTest.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/EditConfigurableTest.php
index a63df3a08ee..6c40208db9a 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/EditConfigurableTest.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/EditConfigurableTest.php
@@ -45,7 +45,7 @@ class EditConfigurableTest extends CreateConfigurableTest
         $configurable = Factory::getFixtureFactory()->getMagentoConfigurableProductConfigurableProduct();
         $configurable->switchData('configurable');
         $configurable->persist();
-        $productSku = $configurable->getProductSku();
+        $productSku = $configurable->getSku();
         //Preparing Data for editing product
         $editProduct = $configurable->getEditData();
 
@@ -62,7 +62,7 @@ class EditConfigurableTest extends CreateConfigurableTest
         $productForm->fill($editProduct);
         $createProductPage->getFormPageActions()->save();
         //Verifying
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/Block/Messages.php b/dev/tests/functional/tests/app/Magento/Core/Test/Block/Messages.php
index 272bc300d5a..ebd84bab9fb 100644
--- a/dev/tests/functional/tests/app/Magento/Core/Test/Block/Messages.php
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/Block/Messages.php
@@ -69,11 +69,11 @@ class Messages extends Block
     protected $warningMessage = '[data-ui-id$=message-warning]';
 
     /**
-     * Check for success message
+     * Wait for success message
      *
      * @return bool
      */
-    public function assertSuccessMessage()
+    public function waitSuccessMessage()
     {
         return $this->waitForElementVisible($this->successMessage, Locator::SELECTOR_CSS);
     }
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/TestCase/UpdateCustomVariableEntityTest.php b/dev/tests/functional/tests/app/Magento/Core/Test/TestCase/UpdateCustomVariableEntityTest.php
index 31841881598..419b4040d6b 100644
--- a/dev/tests/functional/tests/app/Magento/Core/Test/TestCase/UpdateCustomVariableEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/TestCase/UpdateCustomVariableEntityTest.php
@@ -26,6 +26,7 @@ namespace Magento\Core\Test\TestCase;
 
 use Mtf\ObjectManager;
 use Mtf\TestCase\Injectable;
+use Mtf\Fixture\FixtureFactory;
 use Magento\Store\Test\Fixture\Store;
 use Magento\Core\Test\Fixture\SystemVariable;
 use Magento\Core\Test\Page\Adminhtml\SystemVariableNew;
@@ -79,11 +80,13 @@ class UpdateCustomVariableEntityTest extends Injectable
     /**
      * Prepare data
      *
-     * @param Store $storeOrigin
+     * @param FixtureFactory $factory
      * @return array
      */
-    public function __prepare(Store $storeOrigin)
+    public function __prepare(FixtureFactory $factory)
     {
+        /** @var Store $storeOrigin */
+        $storeOrigin = $factory->createByCode('store', ['dataSet' => 'custom']);
         $storeOrigin->persist();
         self::$storeName = $storeOrigin->getName();
 
@@ -126,9 +129,7 @@ class UpdateCustomVariableEntityTest extends Injectable
         Store $storeOrigin,
         $saveAction
     ) {
-        $filter = [
-            'code' => $customVariableOrigin->getCode(),
-        ];
+        $filter = ['code' => $customVariableOrigin->getCode()];
 
         // Steps
         $this->systemVariableIndexPage->open();
diff --git a/dev/tests/functional/tests/app/Magento/Core/Test/TestStep/SetupConfigurationStep.php b/dev/tests/functional/tests/app/Magento/Core/Test/TestStep/SetupConfigurationStep.php
new file mode 100644
index 00000000000..3885d317fb5
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Core/Test/TestStep/SetupConfigurationStep.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+ 
+namespace Magento\Core\Test\TestStep;
+
+use Mtf\TestStep\TestStepInterface;
+use Mtf\Fixture\FixtureFactory;
+
+/**
+ * Class SetupConfigurationStep
+ * Setup configuration using handler
+ */
+class SetupConfigurationStep implements TestStepInterface
+{
+    /**
+     * Factory for Fixtures
+     *
+     * @var FixtureFactory
+     */
+    protected $fixtureFactory;
+
+    /**
+     * Configuration data
+     *
+     * @var string
+     */
+    protected $configData;
+
+    /**
+     * Preparing step properties
+     *
+     * @constructor
+     * @param FixtureFactory $fixtureFactory
+     * @param string $configData
+     */
+    public function __construct(FixtureFactory $fixtureFactory, $configData)
+    {
+        $this->fixtureFactory = $fixtureFactory;
+        $this->configData = $configData;
+    }
+
+    /**
+     * Set config
+     *
+     * @return array
+     */
+    public function run()
+    {
+        $configData = array_map('trim', explode(',', $this->configData));
+        $result = [];
+
+        foreach ($configData as $configDataSet) {
+            $config = $this->fixtureFactory->createByCode('configData', ['dataSet' => $configDataSet]);
+            $config->persist();
+
+            $result[] = $config;
+        }
+
+        return ['config' => $result];
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/Tab/Addresses.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/Tab/Addresses.php
index 9bee1e823f4..2fa402172fe 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/Tab/Addresses.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/Tab/Addresses.php
@@ -33,7 +33,6 @@ use Magento\Backend\Test\Block\Widget\Tab;
 /**
  * Class Addresses
  * Customer addresses edit block
- *
  */
 class Addresses extends Tab
 {
@@ -90,6 +89,9 @@ class Addresses extends Tab
      * @param FixtureInterface|FixtureInterface[] $address
      * @return $this
      * @throws \Exception
+     *
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     public function updateAddresses($address)
     {
@@ -112,7 +114,16 @@ class Addresses extends Tab
                 $this->_fill($this->dataMapping(['country_id' => $countryId]));
                 $this->waitForElementNotVisible($this->loader, Locator::SELECTOR_XPATH);
             }
-            $this->fillFormTab($address->getData(), $this->_rootElement);
+            $defaultAddress = ['default_billing' => 'No', 'default_shipping' => 'No'];
+            $addressData = $address->getData();
+            foreach ($defaultAddress as $key => $value) {
+                if (isset($addressData[$key])) {
+                    $defaultAddress[$key] = $value;
+                }
+            }
+            $this->_fill($this->dataMapping($defaultAddress));
+
+            $this->fillFormTab(array_diff($addressData, $defaultAddress), $this->_rootElement);
         }
 
         return $this;
@@ -155,6 +166,8 @@ class Addresses extends Tab
      * @param array|null $fields
      * @param Element|null $element
      * @return array
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function getDataFormTab($fields = null, Element $element = null)
     {
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/BackendCustomerCreateTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/BackendCustomerCreateTest.php
index ba03767a5bd..b8964119048 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/BackendCustomerCreateTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/BackendCustomerCreateTest.php
@@ -59,7 +59,7 @@ class BackendCustomerCreateTest extends Functional
         $customerPage->getPageActionsBlock()->addNew();
         $customerCreatePage->getCustomerForm()->fillCustomer($customerFixture);
         $customerCreatePage->getPageActionsBlock()->saveAndContinue();
-        $customerCreatePage->getMessagesBlock()->assertSuccessMessage();
+        $customerCreatePage->getMessagesBlock()->waitSuccessMessage();
 
         //Verifying
         $customerPage->open();
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Customer/Products/ListProducts.php
similarity index 57%
rename from dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest.php
rename to dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Customer/Products/ListProducts.php
index 5c48aa0bae3..2ad161a7fe3 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Customer/Products/ListProducts.php
@@ -18,34 +18,37 @@
  * versions in the future. If you wish to customize Magento for your
  * needs please refer to http://www.magentocommerce.com for more information.
  *
+ * @spi
  * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
  */
 
-namespace Magento\GroupedProduct\Test\TestCase;
+namespace Magento\Downloadable\Test\Block\Customer\Products;
 
-use Magento\Wishlist\Test\TestCase\AddProductsToCartFromCustomerWishlistOnFrontendTest as AddProductsToCartFromWishlist;
+use Mtf\Block\Block;
+use Mtf\Client\Element\Locator;
 
 /**
- * Test Creation for Adding Grouped product from Wishlist to Cart
- *
- * Test Flow:
- *
- * Preconditions:
- * 1. Create customer and login to frontend
- * 2. Grouped product is created
- * 3. Add grouped product to customer's wishlist
- *
- * Steps:
- * 1. Navigate to My Account -> My Wishlist
- * 2. Fill qty and update wish list
- * 3. Click "Add to Cart"
- * 4. Perform asserts
- *
- * @group Wishlist_(CS)
- * @ZephyrId MAGETWO-25268
+ * Class ListProducts
+ * Downloadable Products block
  */
-class AddGroupedProductToCartFromCustomerWishlistOnFrontendTest extends AddProductsToCartFromWishlist
+class ListProducts extends Block
 {
-    //
+    /**
+     * Link selector
+     *
+     * @var string
+     */
+    protected $link = '//a[contains(text(), "%s")]';
+
+    /**
+     * Open Link by title
+     *
+     * @param string $linkTitle
+     * @return void
+     */
+    public function openLink($linkTitle)
+    {
+        $this->_rootElement->find(sprintf($this->link, $linkTitle), Locator::SELECTOR_XPATH)->click();
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.php
index d137958d3de..b6f0fc765cc 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.php
@@ -24,12 +24,7 @@
 
 namespace Magento\Downloadable\Test\Fixture;
 
-use Mtf\System\Config;
-use Mtf\Handler\HandlerFactory;
-use Mtf\Fixture\FixtureFactory;
 use Mtf\Fixture\InjectableFixture;
-use Mtf\Repository\RepositoryFactory;
-use Mtf\System\Event\EventManagerInterface;
 
 /**
  * Class DownloadableProductInjectable
@@ -52,44 +47,6 @@ class DownloadableProductInjectable extends InjectableFixture
     protected $handlerInterface = 'Magento\Downloadable\Test\Handler\DownloadableProductInjectable\DownloadableProductInjectableInterface';
     // @codingStandardsIgnoreEnd
 
-    /**
-     * Constructor
-     *
-     * @constructor
-     * @param Config $configuration
-     * @param RepositoryFactory $repositoryFactory
-     * @param FixtureFactory $fixtureFactory
-     * @param HandlerFactory $handlerFactory
-     * @param EventManagerInterface $eventManager
-     * @param array $data
-     * @param string $dataSet
-     * @param bool $persist
-     */
-    public function __construct(
-        Config $configuration,
-        RepositoryFactory $repositoryFactory,
-        FixtureFactory $fixtureFactory,
-        HandlerFactory $handlerFactory,
-        EventManagerInterface $eventManager,
-        array $data = [],
-        $dataSet = '',
-        $persist = false
-    ) {
-        if (!isset($data['url_key']) && isset($data['name'])) {
-            $data['url_key'] = trim(strtolower(preg_replace('#[^0-9a-z%]+#i', '-', $data['name'])), '-');
-        }
-        parent::__construct(
-            $configuration,
-            $repositoryFactory,
-            $fixtureFactory,
-            $handlerFactory,
-            $eventManager,
-            $data,
-            $dataSet,
-            $persist
-        );
-    }
-
     protected $dataConfig = [
         'type_id' => 'downloadable',
         'create_url_params' => [
@@ -102,6 +59,7 @@ class DownloadableProductInjectable extends InjectableFixture
     protected $defaultDataSet = [
         'name' => 'DownloadableProduct_%isolation%',
         'sku' => 'DownloadableProduct_%isolation%',
+        'url_key' => 'downloadableproduct_%isolation%',
         'price' => ['value' => 100.00],
         'tax_class_id' => ['dataSet' => 'Taxable Goods'],
         'description' => 'This is description for downloadable product',
@@ -585,7 +543,7 @@ class DownloadableProductInjectable extends InjectableFixture
         'is_required' => '0',
         'default_value' => '',
         'input' => 'text',
-        'group' => 'autosettings'
+        'group' => 'search-engine-optimization'
     ];
 
     protected $url_path = [
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.xml
index f95a61f5379..87f68c2c92c 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable.xml
@@ -400,6 +400,7 @@
             <is_required>0</is_required>
             <default_value></default_value>
             <input>text</input>
+            <group>search-engine-optimization</group>
         </url_key>
         <url_path>
             <attribute_code>url_path</attribute_code>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable/Links.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable/Links.php
index 39a0a9d5930..a97fe0769d8 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable/Links.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProductInjectable/Links.php
@@ -128,10 +128,10 @@ class Links implements FixtureInterface
                             'number_of_downloads' => 3,
                             'sample' => [
                                 'sample_type_url' => 'Yes',
-                                'sample_url' => 'http://example3.com'
+                                'sample_url' => 'http://example.net'
                             ],
                             'file_type_url' => 'Yes',
-                            'file_link_url' => 'http://example3.com',
+                            'file_link_url' => 'http://example.net',
                             'is_shareable' => 'Yes',
                             'sort_order' => 0
                         ],
@@ -163,10 +163,10 @@ class Links implements FixtureInterface
                             'is_shareable' => 'Yes',
                             'sample' => [
                                 'sample_type_url' => 'Yes',
-                                'sample_url' => 'http://example.com/sample2'
+                                'sample_url' => 'http://example.net/sample2'
                             ],
                             'file_type_url' => 'Yes',
-                            'file_link_url' => 'http://example2.com',
+                            'file_link_url' => 'http://example.net/',
                             'sort_order' => 1
                         ],
                     ]
@@ -196,10 +196,10 @@ class Links implements FixtureInterface
                             'number_of_downloads' => 3,
                             'sample' => [
                                 'sample_type_url' => 'Yes',
-                                'sample_url' => 'http://example3.com'
+                                'sample_url' => 'http://example.net'
                             ],
                             'file_type_url' => 'Yes',
-                            'file_link_url' => 'http://example3.com',
+                            'file_link_url' => 'http://example.net',
                             'is_shareable' => 'Yes',
                             'sort_order' => 1
                         ],
@@ -209,10 +209,10 @@ class Links implements FixtureInterface
                             'number_of_downloads' => 5,
                             'sample' => [
                                 'sample_type_url' => 'Yes',
-                                'sample_url' => 'http://example3.com'
+                                'sample_url' => 'http://example.net'
                             ],
                             'file_type_url' => 'Yes',
-                            'file_link_url' => 'http://example3.com',
+                            'file_link_url' => 'http://example.net',
                             'is_shareable' => 'Yes',
                             'sort_order' => 2
                         ]
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProductInjectable/Curl.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProductInjectable/Curl.php
index d71ff09faf3..e5eeda69707 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProductInjectable/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Handler/DownloadableProductInjectable/Curl.php
@@ -26,6 +26,9 @@ namespace Magento\Downloadable\Test\Handler\DownloadableProductInjectable;
 
 use Mtf\System\Config;
 use Mtf\Fixture\FixtureInterface;
+use Mtf\Util\Protocol\CurlInterface;
+use Mtf\Util\Protocol\CurlTransport;
+use Mtf\Util\Protocol\CurlTransport\BackendDecorator;
 use Magento\Catalog\Test\Handler\CatalogProductSimple\Curl as ProductCurl;
 
 /**
@@ -104,4 +107,33 @@ class Curl extends ProductCurl implements DownloadableProductInjectableInterface
 
         return $this->replaceMappingData($data);
     }
+
+    /**
+     * Create product via curl
+     *
+     * @param array $data
+     * @param array $config
+     * @return array
+     * @throws \Exception
+     */
+    protected function createProduct(array $data, array $config)
+    {
+        $url = $this->getUrl($config);
+        $curl = new BackendDecorator(new CurlTransport(), new Config());
+        $curl->addOption(CURLOPT_HEADER, 1);
+        $curl->write(CurlInterface::POST, $url, '1.0', [], $data);
+        $response = $curl->read();
+        $curl->close();
+
+        if (!strpos($response, 'data-ui-id="messages-message-success"')) {
+            throw new \Exception("Product creation by curl handler was not successful! Response: $response");
+        }
+        preg_match("~Location: [^\s]*\/id\/(\d+)~", $response, $matches);
+        foreach ($data['downloadable']['link'] as $key => $link) {
+            preg_match('`"link_id":"(\d*?)","title":"' . $link['title'] . '"`', $response, $linkId);
+            $data['product']['checkout_data']['options']['links'][$key]['id'] = $linkId[1];
+        }
+
+        return ['id' => $matches[1], 'checkout_data' => $data['product']['checkout_data']];
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Page/DownloadableCustomerProducts.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Page/DownloadableCustomerProducts.xml
new file mode 100644
index 00000000000..d278e5a14e2
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Page/DownloadableCustomerProducts.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Academic Free License (AFL 3.0)
+ * that is bundled with this package in the file LICENSE_AFL.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/afl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
+ */
+-->
+<page mca="downloadable/customer/products" module="Magento_Downloadable">
+    <blocks>
+        <mainBlock>
+            <class>Magento\Downloadable\Test\Block\Customer\Products\ListProducts</class>
+            <locator>.column.main</locator>
+            <strategy>css selector</strategy>
+        </mainBlock>
+    </blocks>
+</page>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest/test.csv b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest/test.csv
deleted file mode 100644
index 1f973a746f8..00000000000
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest/test.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-"products";"qty";"constraint"
-"downloadableProductInjectable::with_two_separately_links";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/Create/LinksPurchasedSeparatelyTest.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/Create/LinksPurchasedSeparatelyTest.php
index bbc5127ffd8..64735e875bb 100755
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/Create/LinksPurchasedSeparatelyTest.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/Create/LinksPurchasedSeparatelyTest.php
@@ -67,12 +67,12 @@ class LinksPurchasedSeparatelyTest extends Functional
         $productBlockForm->fill($this->product, null, $category);
         $createProductPageNew->getFormPageActions()->save();
 
-        $createProductPageNew->getMessagesBlock()->assertSuccessMessage();
+        $createProductPageNew->getMessagesBlock()->waitSuccessMessage();
 
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushMagentoCache();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
 
         $this->assertOnBackend();
         $this->assertOnFrontend();
@@ -88,7 +88,7 @@ class LinksPurchasedSeparatelyTest extends Functional
         $productGridPage = Factory::getPageFactory()->getCatalogProductIndex();
         $productGridPage->open();
         $gridBlock = $productGridPage->getProductGrid();
-        $this->assertTrue($gridBlock->isRowVisible(array('sku' => $this->product->getProductSku())));
+        $this->assertTrue($gridBlock->isRowVisible(['sku' => $this->product->getSku()]));
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest/testCreateDownloadableProduct.csv b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest/testCreateDownloadableProduct.csv
index 9e6d75508a7..b679a776ea2 100755
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest/testCreateDownloadableProduct.csv
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest/testCreateDownloadableProduct.csv
@@ -1,15 +1,15 @@
-"product/data/name";"product/data/sku";"product/data/price/value";"product/data/tax_class_id/dataSet";"product/data/quantity_and_stock_status/qty";"product/data/quantity_and_stock_status/is_in_stock";"product/data/is_virtual";"product/data/category";"product/data/description";"product/data/short_description";"product/data/stock_data/manage_stock";"product/data/stock_data/qty";"product/data/stock_data/use_config_min_qty";"product/data/stock_data/min_qty";"product/data/downloadable_sample/preset";"product/data/downloadable_links/preset";"product/data/custom_options/preset";"product/data/custom_options/import_products";"product/data/special_price";"product/data/group_price/preset";"product/data/tier_price/preset";"constraint"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"1";"In Stock";"Yes";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductVisibleInCategory, assertProductPage, assertProductInStock"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"1";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"default";"default";"-";"-";"-";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductVisibleInCategory, assertDownloadableSamplesData, assertDownloadableLinksData"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"33";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"default";"default";"-";"-";"-";"-";"assertProductSaveMessage, assertDownloadableProductForm, assertProductCustomOptionsOnProductPage, assertProductVisibleInCategory, assertProductPage, assertDownloadableLinksData"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"55";"Taxable Goods";"10";"In Stock";"Yes";"-";"-";"-";"-";"-";"-";"-";"with_three_samples";"with_three_links";"two_options";"-";"-";"-";"-";"assertProductSaveMessage, assertProductCustomOptionsOnProductPage, assertProductInGrid, assertDownloadableProductForm, assertProductVisibleInCategory, assertProductPage, assertDownloadableLinksData, assertProductInStock, assertProductSearchableBySku"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"50";"Out of Stock";"Yes";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"assertProductSaveMessage, assertProductOutOfStock, assertProductInGrid, assertDownloadableProductForm"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"9999";"Taxable Goods";"-";"-";"Yes";"Default Category";"-";"-";"Yes";"123";"No";"123";"-";"default";"-";"-";"-";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductOutOfStock"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"98";"None";"5";"In Stock";"Yes";"Default Category";"This is description for downloadable product";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"57";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"This is short description for downloadable product";"-";"-";"-";"-";"default";"with_three_links";"default";"catalogProductSimple::with_two_custom_option,catalogProductSimple::with_all_custom_option";"-";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductCustomOptionsOnProductPage, assertDownloadableSamplesData, assertDownloadableLinksData"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"65";"Taxable Goods";"11";"In Stock";"Yes";"category %isolation%";"This is description for downloadable product";"This is short description for downloadable product";"-";"-";"-";"-";"default";"with_three_links";"default";"-";"-";"-";"-";"assertProductSaveMessage, assertProductPage, assertProductInGrid, assertDownloadableProductForm, assertProductCustomOptionsOnProductPage, assertDownloadableSamplesData, assertDownloadableLinksData"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"65";"Taxable Goods";"11";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"default";"with_three_links";"default";"-";"-";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertDownloadableLinksData, assertProductCustomOptionsOnProductPage"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"-";"-";"Yes";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"assertProductSaveMessage, assertDownloadableProductForm, assertProductVisibleInCategory, assertProductPage"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"10";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"5";"-";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductSpecialPriceOnProductPage"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"365";"Taxable Goods";"23";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"default";"-";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductGroupedPriceOnProductPage"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"250";"Taxable Goods";"65";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"default";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductTierPriceOnProductPage"
+"product/data/name";"product/data/sku";"product/data/price/value";"product/data/tax_class_id/dataSet";"product/data/quantity_and_stock_status/qty";"product/data/quantity_and_stock_status/is_in_stock";"product/data/is_virtual";"product/data/category";"product/data/description";"product/data/short_description";"product/data/stock_data/manage_stock";"product/data/stock_data/qty";"product/data/stock_data/use_config_min_qty";"product/data/stock_data/min_qty";"product/data/downloadable_sample/preset";"product/data/downloadable_links/preset";"product/data/custom_options/preset";"product/data/custom_options/import_products";"product/data/special_price";"product/data/group_price/preset";"product/data/tier_price/preset";"product/data/url_key";"constraint"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"1";"In Stock";"Yes";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductVisibleInCategory, assertProductPage, assertProductInStock"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"1";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"default";"default";"-";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductVisibleInCategory, assertDownloadableSamplesData, assertDownloadableLinksData"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"33";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"default";"default";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertDownloadableProductForm, assertProductCustomOptionsOnProductPage, assertProductVisibleInCategory, assertProductPage, assertDownloadableLinksData"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"55";"Taxable Goods";"10";"In Stock";"Yes";"-";"-";"-";"-";"-";"-";"-";"with_three_samples";"with_three_links";"two_options";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductCustomOptionsOnProductPage, assertProductInGrid, assertDownloadableProductForm, assertProductVisibleInCategory, assertProductPage, assertDownloadableLinksData, assertProductInStock, assertProductSearchableBySku"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"50";"Out of Stock";"Yes";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductOutOfStock, assertProductInGrid, assertDownloadableProductForm"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"9999";"Taxable Goods";"-";"-";"Yes";"Default Category";"-";"-";"Yes";"123";"No";"123";"-";"default";"-";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductOutOfStock"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"98";"None";"5";"In Stock";"Yes";"Default Category";"This is description for downloadable product";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"57";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"This is short description for downloadable product";"-";"-";"-";"-";"default";"with_three_links";"default";"catalogProductSimple::with_two_custom_option,catalogProductSimple::with_all_custom_option";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductCustomOptionsOnProductPage, assertDownloadableSamplesData, assertDownloadableLinksData"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"65";"Taxable Goods";"11";"In Stock";"Yes";"category %isolation%";"This is description for downloadable product";"This is short description for downloadable product";"-";"-";"-";"-";"default";"with_three_links";"default";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductPage, assertProductInGrid, assertDownloadableProductForm, assertProductCustomOptionsOnProductPage, assertDownloadableSamplesData, assertDownloadableLinksData"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"65";"Taxable Goods";"11";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"default";"with_three_links";"default";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertDownloadableLinksData, assertProductCustomOptionsOnProductPage"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"-";"-";"Yes";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"-";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertDownloadableProductForm, assertProductVisibleInCategory, assertProductPage"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"10";"Taxable Goods";"10";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"5";"-";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductSpecialPriceOnProductPage"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"365";"Taxable Goods";"23";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"default";"-";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductGroupedPriceOnProductPage"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"250";"Taxable Goods";"65";"In Stock";"Yes";"category %isolation%";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"default";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductTierPriceOnProductPage"
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest/testUpdateDownloadableProduct.csv b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest/testUpdateDownloadableProduct.csv
index 6d2e795540d..be96bcd0189 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest/testUpdateDownloadableProduct.csv
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest/testUpdateDownloadableProduct.csv
@@ -1,8 +1,8 @@
-"product/data/name";"product/data/sku";"product/data/price/value";"product/data/tax_class_id/dataSet";"product/data/quantity_and_stock_status/qty";"product/data/quantity_and_stock_status/is_in_stock";"product/data/is_virtual";"product/data/weight";"product/data/category";"product/data/description";"product/data/short_description";"product/data/inventory_manage_stock";"product/data/inventory_qty";"product/data/stock_data_use_config_min_qty";"product/data/stock_data_min_qty";"product/data/downloadable_sample/preset";"product/data/downloadable_links/preset";"product/data/custom_options/preset";"product/data/special_price";"isRequired";"constraint"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"55";"Taxable Goods";"10";"In Stock";"Yes";"-";"-";"-";"-";"-";"-";"-";"-";"with_three_samples";"with_three_links";"two_options";"-";"No";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertDownloadableLinksData, assertProductInStock, assertProductCustomOptionsOnProductPage, assertProductSearchableBySku"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"50";"Out of Stock";"Yes";"-";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"No";"assertProductSaveMessage, assertProductOutOfStock, assertProductInGrid, assertDownloadableProductForm"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"9999";"Taxable Goods";"123";"-";"Yes";"-";"Default Category";"-";"-";"Yes";"-";"No";"123";"-";"-";"-";"-";"No";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductOutOfStock"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"48";"None";"5";"In Stock";"Yes";"-";"Default Category";"This is description for downloadable product";"-";"-";"-";"-";"-";"-";"default";"-";"-";"No";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"54";"Taxable Goods";"10";"In Stock";"Yes";"-";"category %isolation%";"-";"This is short description for downloadable product";"-";"-";"-";"-";"default";"with_three_links";"default";"-";"Yes";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductCustomOptionsOnProductPage, assertDownloadableSamplesData, assertDownloadableLinksData, assertProductInCategory"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"57";"Taxable Goods";"10";"In Stock";"No";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"No";"assertProductSaveMessage, assertProductInGrid"
-"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"43";"Taxable Goods";"10";"In Stock";"No";"10";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"40";"No";"assertProductSaveMessage, assertProductInGrid, assertProductSpecialPriceOnProductPage, assertProductPage"
+"product/data/name";"product/data/sku";"product/data/price/value";"product/data/tax_class_id/dataSet";"product/data/quantity_and_stock_status/qty";"product/data/quantity_and_stock_status/is_in_stock";"product/data/is_virtual";"product/data/weight";"product/data/category";"product/data/description";"product/data/short_description";"product/data/inventory_manage_stock";"product/data/inventory_qty";"product/data/stock_data_use_config_min_qty";"product/data/stock_data_min_qty";"product/data/downloadable_sample/preset";"product/data/downloadable_links/preset";"product/data/custom_options/preset";"product/data/special_price";"isRequired";"product/data/url_key";"constraint"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"55";"Taxable Goods";"10";"In Stock";"Yes";"-";"-";"-";"-";"-";"-";"-";"-";"with_three_samples";"with_three_links";"two_options";"-";"No";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertDownloadableLinksData, assertProductInStock, assertProductCustomOptionsOnProductPage, assertProductSearchableBySku"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"100";"Taxable Goods";"50";"Out of Stock";"Yes";"-";"Default Category";"-";"-";"-";"-";"-";"-";"-";"default";"-";"-";"No";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductOutOfStock, assertProductInGrid, assertDownloadableProductForm"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"9999";"Taxable Goods";"123";"-";"Yes";"-";"Default Category";"-";"-";"Yes";"-";"No";"123";"-";"-";"-";"-";"No";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductOutOfStock"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"48";"None";"5";"In Stock";"Yes";"-";"Default Category";"This is description for downloadable product";"-";"-";"-";"-";"-";"-";"default";"-";"-";"No";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"54";"Taxable Goods";"10";"In Stock";"Yes";"-";"category %isolation%";"-";"This is short description for downloadable product";"-";"-";"-";"-";"default";"with_three_links";"default";"-";"Yes";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertDownloadableProductForm, assertProductPage, assertProductCustomOptionsOnProductPage, assertDownloadableSamplesData, assertDownloadableLinksData, assertProductInCategory"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"57";"Taxable Goods";"10";"In Stock";"No";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"No";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid"
+"DownloadableProduct_%isolation%";"DownloadableProduct_%isolation%";"43";"Taxable Goods";"10";"In Stock";"No";"10";"-";"-";"-";"-";"-";"-";"-";"-";"-";"-";"40";"No";"downloadableproduct-%isolation%";"assertProductSaveMessage, assertProductInGrid, assertProductSpecialPriceOnProductPage, assertProductPage"
\ No newline at end of file
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/etc/page.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/etc/page.xml
new file mode 100644
index 00000000000..97ba75d1cf6
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/etc/page.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Academic Free License (AFL 3.0)
+ * that is bundled with this package in the file LICENSE_AFL.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/afl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
+ */
+-->
+<page module="Magento_Downloadable">
+    <downloadableCustomerProducts>
+        <mca>downloadable/customer/products</mca>
+        <class>Magento\Downloadable\Test\Page\DownloadableCustomerProducts</class>
+    </downloadableCustomerProducts>
+</page>
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest/test.csv b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest/test.csv
deleted file mode 100644
index 304ff5bc9fe..00000000000
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/AddGroupedProductToCartFromCustomerWishlistOnFrontendTest/test.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-"products";"qty";"constraint"
-"groupedProductInjectable::three_simple_products";"-";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/CreateGroupedTest.php b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/CreateGroupedTest.php
index b5f3d5542d1..3ba4035e448 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/CreateGroupedTest.php
+++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/TestCase/CreateGroupedTest.php
@@ -66,7 +66,7 @@ class CreateGroupedTest extends Functional
         $productForm->fill($product);
         $createProductPage->getFormPageActions()->save();
         //Verifying
-        $createProductPage->getMessagesBlock()->assertSuccessMessage();
+        $createProductPage->getMessagesBlock()->waitSuccessMessage();
         //Flush cache
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
@@ -86,7 +86,7 @@ class CreateGroupedTest extends Functional
     {
         //Search data
         $search = [
-            'sku' => $product->getProductSku(),
+            'sku' => $product->getSku(),
             'type' => 'Grouped Product'
         ];
         //Page & Block
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Product/Downloads/Grid.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Product/Downloads/Grid.php
new file mode 100644
index 00000000000..6193071c506
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Product/Downloads/Grid.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\Block\Adminhtml\Product\Downloads;
+
+/**
+ * Class Grid
+ * Downloads Report grid
+ */
+class Grid extends \Magento\Backend\Test\Block\Widget\Grid
+{
+    /**
+     * Filters array mapping
+     *
+     * @var array
+     */
+    protected $filters = [
+        'name' => [
+            'selector' => 'input[name="name"]',
+        ],
+        'link_title' => [
+            'selector' => 'input[name="link_title"]',
+        ],
+        'sku' => [
+            'selector' => 'input[name="sku"]',
+        ],
+    ];
+}
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Action.php
similarity index 56%
rename from dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest.php
rename to dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Action.php
index 65e4c5d94ea..5da3247ebd4 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Action.php
@@ -22,30 +22,30 @@
  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
  */
 
-namespace Magento\Downloadable\Test\TestCase;
+namespace Magento\Reports\Test\Block\Adminhtml\Sales\TaxRule;
 
-use Magento\Wishlist\Test\TestCase\AddProductsToCartFromCustomerWishlistOnFrontendTest as AddProductsToCartFromWishlist;
+use Magento\Backend\Test\Block\PageActions;
 
 /**
- * Test Creation for Adding Downloadable product from Wishlist to Cart
- *
- * Test Flow:
- *
- * Preconditions:
- * 1. Create customer and login to frontend
- * 2. Downloadable product is created
- * 3. Add downloadable product to customer's wishlist
- *
- * Steps:
- * 1. Navigate to My Account -> My Wishlist
- * 2. Fill qty and update wish list
- * 3. Click "Add to Cart"
- * 4. Perform asserts
- *
- * @group Wishlist_(CS)
- * @ZephyrId MAGETWO-25268
+ * Class Action
+ * Action block for Tax Report
  */
-class AddDownloadableProductToCartFromCustomerWishlistOnFrontendTest extends AddProductsToCartFromWishlist
+class Action extends PageActions
 {
-    //
+    /**
+     * Show Report button
+     *
+     * @var string
+     */
+    protected $showReportButton = '#filter_form_submit';
+
+    /**
+     * Show report button click
+     *
+     * @return void
+     */
+    public function showReport()
+    {
+        $this->_rootElement->find($this->showReportButton)->click();
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.php
similarity index 56%
rename from dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest.php
rename to dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.php
index 74578baac70..8d625f98d43 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.php
@@ -22,30 +22,25 @@
  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
  */
 
-namespace Magento\ConfigurableProduct\Test\TestCase;
+namespace Magento\Reports\Test\Block\Adminhtml\Sales\TaxRule;
 
-use Magento\Wishlist\Test\TestCase\AddProductsToCartFromCustomerWishlistOnFrontendTest as AddProductsToCartFromWishlist;
+use Mtf\ObjectManager;
+use Magento\Reports\Test\Block\Adminhtml\AbstractFilter;
 
 /**
- * Test Creation for Adding Configurable product from Wishlist to Cart
- *
- * Test Flow:
- *
- * Preconditions:
- * 1. Create customer and login to frontend
- * 2. Configurable product is created
- * 3. Add configurable product to customer's wishlist
- *
- * Steps:
- * 1. Navigate to My Account -> My Wishlist
- * 2. Fill qty and update wish list
- * 3. Click "Add to Cart"
- * 4. Perform asserts
- *
- * @group Wishlist_(CS)
- * @ZephyrId MAGETWO-25268
+ * Class Filter
+ * Filter for Tax Rule Views Report
  */
-class AddConfigurableProductToCartFromCustomerWishlistOnFrontendTest extends AddProductsToCartFromWishlist
+class Filter extends AbstractFilter
 {
-    //
+    /**
+     * Prepare data
+     *
+     * @param array $viewsReport
+     * @return array
+     */
+    protected function prepareData(array $viewsReport)
+    {
+        return parent::prepareData(array_diff($viewsReport, ['-']));
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.xml b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.xml
new file mode 100644
index 00000000000..9f253494084
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Filter.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Academic Free License (AFL 3.0)
+ * that is bundled with this package in the file LICENSE_AFL.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/afl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
+ */
+-->
+<mapping strict="0">
+    <fields>
+        <report_type>
+            <input>select</input>
+        </report_type>
+        <period_type>
+            <input>select</input>
+        </period_type>
+        <from>
+            <input>datepicker</input>
+        </from>
+        <to>
+            <input>datepicker</input>
+        </to>
+        <show_order_statuses>
+            <input>select</input>
+        </show_order_statuses>
+        <order_statuses>
+            <selector>[name="order_statuses[]"]</selector>
+            <input>multiselect</input>
+        </order_statuses>
+        <show_empty_rows>
+            <input>select</input>
+        </show_empty_rows>
+    </fields>
+</mapping>
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Grid.php
similarity index 57%
rename from dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest.php
rename to dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Grid.php
index 9ad154674ea..0feb2da8cb3 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/AddBundleProductToCartFromCustomerWishlistOnFrontendTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Block/Adminhtml/Sales/TaxRule/Grid.php
@@ -22,30 +22,13 @@
  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
  */
 
-namespace Magento\Bundle\Test\TestCase;
-
-use Magento\Wishlist\Test\TestCase\AddProductsToCartFromCustomerWishlistOnFrontendTest as AddProductsToCartFromWishlist;
+namespace Magento\Reports\Test\Block\Adminhtml\Sales\TaxRule;
 
 /**
- * Test Creation for Adding Bundle product from Wishlist to Cart
- *
- * Test Flow:
- *
- * Preconditions:
- * 1. Create customer and login to frontend
- * 2. Bundle product is created
- * 3. Add bundle product to customer's wishlist
- *
- * Steps:
- * 1. Navigate to My Account -> My Wishlist
- * 2. Fill qty and update wish list
- * 3. Click "Add to Cart"
- * 4. Perform asserts
- *
- * @group Wishlist_(CS)
- * @ZephyrId MAGETWO-25268
+ * Class Grid
+ * Tax report grid
  */
-class AddBundleProductToCartFromCustomerWishlistOnFrontendTest extends AddProductsToCartFromWishlist
+class Grid extends \Magento\Backend\Test\Block\Widget\Grid
 {
     //
 }
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertBestsellerReportResult.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertBestsellerReportResult.php
index 4be59b9b379..1bda5bb5e91 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertBestsellerReportResult.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertBestsellerReportResult.php
@@ -59,7 +59,7 @@ class AssertBestsellerReportResult extends AbstractConstraint
         $productQty = [];
         foreach ($products as $key => $product) {
             /** @var CatalogProductSimple $product*/
-            $productQty[$key] = $product->getCheckoutData()['qty'];
+            $productQty[$key] = $product->getCheckoutData()['options']['qty'];
         }
         \PHPUnit_Framework_Assert::assertEquals($productQty, $totalQuantity);
     }
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertDownloadsReportResult.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertDownloadsReportResult.php
new file mode 100644
index 00000000000..03d10894e4c
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertDownloadsReportResult.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\Constraint;
+
+use Magento\Reports\Test\Page\Adminhtml\DownloadsReport;
+use Magento\Sales\Test\Fixture\OrderInjectable;
+use Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Class AssertDownloadsReportResult
+ * Assert downloads product info in report grid
+ */
+class AssertDownloadsReportResult extends AbstractConstraint
+{
+    /**
+     * Constraint severeness
+     *
+     * @var string
+     */
+    protected $severeness = 'low';
+
+    /**
+     * Assert product info in report: product name, link title, sku, downloads number (Reports > Products > Downloads)
+     *
+     * @param OrderInjectable $order
+     * @param DownloadsReport $downloadsReport
+     * @param int $downloads
+     * @return void
+     */
+    public function processAssert(OrderInjectable $order, DownloadsReport $downloadsReport, $downloads)
+    {
+        $downloadsReport->open();
+        foreach ($order->getEntityId()['products'] as $product) {
+            foreach ($product->getDownloadableLinks()['downloadable']['link'] as $link) {
+                $filter = [
+                    'name' => $product->getName(),
+                    'link_title' => $link['title'],
+                    'sku' => $product->getSku(),
+                ];
+                $downloadsReport->getGridBlock()->search($filter);
+                $filter[] = $downloads;
+                \PHPUnit_Framework_Assert::assertTrue(
+                    $downloadsReport->getGridBlock()->isRowVisible($filter, false),
+                    "Downloads report link {$link['title']} is not present in reports grid."
+                );
+            }
+        }
+    }
+
+    /**
+     * Returns a string representation of the object
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return 'Downloads report is present in reports grid.';
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertNewAccountsReportTotalResult.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertNewAccountsReportTotalResult.php
index 15d7e847046..3e828e7a00d 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertNewAccountsReportTotalResult.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertNewAccountsReportTotalResult.php
@@ -50,7 +50,7 @@ class AssertNewAccountsReportTotalResult extends AbstractConstraint
     public function processAssert(CustomerAccounts $customerAccounts, $total)
     {
         $totalForm = $customerAccounts->getGridBlock()->getTotalResults();
-        \PHPUnit_Framework_Assert::assertEquals($totalForm, $total);
+        \PHPUnit_Framework_Assert::assertEquals($total, $totalForm);
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertOrderedProductResult.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertOrderedProductResult.php
index 5fb436aa0ab..e19cf575183 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertOrderedProductResult.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertOrderedProductResult.php
@@ -60,7 +60,7 @@ class AssertOrderedProductResult extends AbstractConstraint
         foreach ($totalQuantity as $key => $value) {
             /** @var CatalogProductSimple $product */
             $product = $products[$key];
-            $productQty[$key] = $product->getCheckoutData()['qty'];
+            $productQty[$key] = $product->getCheckoutData()['options']['qty'];
         }
         \PHPUnit_Framework_Assert::assertEquals($totalQuantity, $productQty);
     }
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReportByCustomerInGrid.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReportByCustomerInGrid.php
index a042e2db021..64ee9a5e950 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReportByCustomerInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReportByCustomerInGrid.php
@@ -66,7 +66,7 @@ class AssertProductReportByCustomerInGrid extends AbstractConstraint
         CatalogProductSimple $product = null,
         $gridStatus = ''
     ) {
-        $filter = $assertProductReviewInGrid->prepareFilter($product, $review, $gridStatus);
+        $filter = $assertProductReviewInGrid->prepareFilter($product, $review->getData(), $gridStatus);
 
         $customerReportReview->open();
         $customerReportReview->getGridBlock()->openReview($customer);
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReviewIsAvailableForProduct.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReviewIsAvailableForProduct.php
index 848d5b62176..0faf7574e77 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReviewIsAvailableForProduct.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertProductReviewIsAvailableForProduct.php
@@ -62,7 +62,7 @@ class AssertProductReviewIsAvailableForProduct extends AbstractConstraint
         $product = $review->getDataFieldConfig('entity_id')['source']->getEntity();
         $productReportReview->getGridBlock()->openReview($product->getName());
         unset($assertProductReviewInGrid->filter['visible_in']);
-        $filter = $assertProductReviewInGrid->prepareFilter($product, $review, '');
+        $filter = $assertProductReviewInGrid->prepareFilter($product, $review->getData(), '');
         \PHPUnit_Framework_Assert::assertTrue(
             $reviewIndex->getReviewGrid()->isRowVisible($filter, false),
             'Review for ' . $product->getName() . ' product is not visible in reports grid.'
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportInGrid.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportInGrid.php
new file mode 100644
index 00000000000..f262bc597cf
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportInGrid.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\Constraint;
+
+use Magento\Reports\Test\Page\Adminhtml\SalesTaxReport;
+use Magento\Sales\Test\Fixture\OrderInjectable;
+use Magento\Tax\Test\Fixture\TaxRule;
+use Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Class AssertTaxReportInGrid
+ * Check that sales info in report: Tax, Rate, Orders, Tax Amount on tax report page
+ */
+class AssertTaxReportInGrid extends AbstractConstraint
+{
+    /**
+     * Constraint severeness
+     *
+     * @var string
+     */
+    protected $severeness = 'low';
+
+    /**
+     * Assert sales info in report: Tax, Rate, Orders, Tax Amount on tax report page
+     *
+     * @param SalesTaxReport $salesTaxReport
+     * @param OrderInjectable $order
+     * @param TaxRule $taxRule
+     * @param string $taxAmount
+     * @return void
+     */
+    public function processAssert(
+        SalesTaxReport $salesTaxReport,
+        OrderInjectable $order,
+        TaxRule $taxRule,
+        $taxAmount
+    ) {
+        $filter = [
+            'tax' => $taxRule->getTaxRate()[0],
+            'rate' => $taxRule->getDataFieldConfig('tax_rate')['source']->getFixture()[0]->getRate(),
+            'orders' => count($order->getEntityId()['products']),
+            'tax_amount' => $taxAmount
+        ];
+
+        \PHPUnit_Framework_Assert::assertTrue(
+            $salesTaxReport->getGridBlock()->isRowVisible($filter, false),
+            "Tax Report is not visible in grid on tax report page."
+        );
+    }
+
+    /**
+     * Returns a string representation of the object
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return "Sales info in report: Tax, Rate, Orders, Tax Amount is correct in grid on tax report page.";
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportNotInGrid.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportNotInGrid.php
new file mode 100644
index 00000000000..4bea099f5e4
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AssertTaxReportNotInGrid.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\Constraint;
+
+use Magento\Reports\Test\Page\Adminhtml\SalesTaxReport;
+use Magento\Sales\Test\Fixture\OrderInjectable;
+use Magento\Tax\Test\Fixture\TaxRule;
+use Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Class AssertTaxReportNotInGrid
+ * Check that Tax report is absent on tax report page
+ */
+class AssertTaxReportNotInGrid extends AbstractConstraint
+{
+    /**
+     * Constraint severeness
+     *
+     * @var string
+     */
+    protected $severeness = 'low';
+
+    /**
+     * Assert Tax report is absent on tax report page
+     *
+     * @param SalesTaxReport $salesTaxReport
+     * @param OrderInjectable $order
+     * @param TaxRule $taxRule
+     * @param string $taxAmount
+     * @return void
+     */
+    public function processAssert(
+        SalesTaxReport $salesTaxReport,
+        OrderInjectable $order,
+        TaxRule $taxRule,
+        $taxAmount
+    ) {
+        $filter = [
+            'tax' => $taxRule->getTaxRate()[0],
+            'rate' => $taxRule->getDataFieldConfig('tax_rate')['source']->getFixture()[0]->getRate(),
+            'orders' => count($order->getEntityId()['products']),
+            'tax_amount' => $taxAmount
+        ];
+
+        \PHPUnit_Framework_Assert::assertFalse(
+            $salesTaxReport->getGridBlock()->isRowVisible($filter, false),
+            "Tax Report is visible in grid on tax report page."
+        );
+    }
+
+    /**
+     * Returns a string representation of the object
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return "Sales info in report: Tax, Rate, Orders, Tax Amount is incorrect in grid on tax report page.";
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/DownloadsReport.xml b/dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/DownloadsReport.xml
new file mode 100644
index 00000000000..caa658511df
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/DownloadsReport.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Academic Free License (AFL 3.0)
+ * that is bundled with this package in the file LICENSE_AFL.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/afl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
+ */
+-->
+<page mca="reports/report_product/downloads" module="Magento_Reports">
+    <blocks>
+        <gridBlock>
+            <class>Magento\Reports\Test\Block\Adminhtml\Product\Downloads\Grid</class>
+            <locator>#downloadsGrid</locator>
+            <strategy>css selector</strategy>
+        </gridBlock>
+    </blocks>
+</page>
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/SalesTaxReport.xml b/dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/SalesTaxReport.xml
new file mode 100644
index 00000000000..26ee97fc9e2
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Page/Adminhtml/SalesTaxReport.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Academic Free License (AFL 3.0)
+ * that is bundled with this package in the file LICENSE_AFL.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/afl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
+ */
+-->
+<page mca="reports/report_sales/tax" module="Magento_Reports">
+    <blocks>
+        <filterBlock>
+            <class>Magento\Reports\Test\Block\Adminhtml\Sales\TaxRule\Filter</class>
+            <locator>#filter_form</locator>
+            <strategy>css selector</strategy>
+        </filterBlock>
+        <actionBlock>
+            <class>Magento\Reports\Test\Block\Adminhtml\Sales\TaxRule\Action</class>
+            <locator>.page-main-actions</locator>
+            <strategy>css selector</strategy>
+        </actionBlock>
+        <gridBlock>
+            <class>Magento\Reports\Test\Block\Adminhtml\Sales\TaxRule\Grid</class>
+            <locator>.grid</locator>
+            <strategy>css selector</strategy>
+        </gridBlock>
+    </blocks>
+</page>
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php
new file mode 100644
index 00000000000..07d00943142
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\TestCase;
+
+use Mtf\TestCase\Injectable;
+use Magento\Sales\Test\Fixture\OrderInjectable;
+use Magento\Reports\Test\Page\Adminhtml\Bestsellers;
+
+/**
+ * Test Creation for BestsellerProductsReportEntity
+ *
+ * Test Flow:
+ * Preconditions:
+ * 1. Create customer
+ * 2. Create product
+ * 3. Place order
+ * 4. Refresh statistic
+ *
+ * Steps:
+ * 1. Open Backend
+ * 2. Go to Reports > Products > Bestsellers
+ * 3. Select time range, report period
+ * 4. Click "Show report"
+ * 5. Perform all assertions
+ *
+ * @group Reports_(MX)
+ * @ZephyrId MAGETWO-28222
+ */
+class BestsellerProductsReportEntityTest extends Injectable
+{
+    /**
+     * Bestsellers page
+     *
+     * @var Bestsellers
+     */
+    protected $bestsellers;
+
+    /**
+     * Inject pages
+     *
+     * @param Bestsellers $bestsellers
+     * @return void
+     */
+    public function __inject(Bestsellers $bestsellers)
+    {
+        $this->bestsellers = $bestsellers;
+    }
+
+    /**
+     * Bestseller Products Report
+     *
+     * @param OrderInjectable $order
+     * @param array $bestsellerReport
+     * @return void
+     */
+    public function test(OrderInjectable $order, array $bestsellerReport)
+    {
+        // Preconditions
+        $order->persist();
+        $this->bestsellers->open();
+        $this->bestsellers->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+
+        // Steps
+        $this->bestsellers->getFilterBlock()->viewsReport($bestsellerReport);
+        $this->bestsellers->getActionsBlock()->showReport();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest/test.csv
new file mode 100644
index 00000000000..78dc2381483
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest/test.csv
@@ -0,0 +1,4 @@
+"order/dataSet";"bestsellerReport/period_type";"bestsellerReport/from";"bestsellerReport/to";"bestsellerReport/show_empty_rows";"date";"constraint"
+"simple_big_qty";"Year";"m/d/Y -1 year";"m/d/Y";"No";"Y";"assertBestsellerReportResult"
+"virtual_big_qty";"Month";"m/d/Y -1 month";"m/d/Y";"Yes";"n/Y";"assertBestsellerReportResult"
+"simple_big_qty";"Day";"m/d/Y -1 day";"m/d/Y +1 day";"No";"M d, Y";"assertBestsellerReportResult"
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest.php
new file mode 100644
index 00000000000..3f3d10f02cf
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\TestCase;
+
+use Magento\Customer\Test\Page\CustomerAccountIndex;
+use Magento\Downloadable\Test\Page\DownloadableCustomerProducts;
+use Mtf\TestCase\Injectable;
+use Mtf\Client\Browser;
+use Magento\Sales\Test\Fixture\OrderInjectable;
+
+/**
+ * Test Creation for DownloadProductsReportEntity
+ *
+ * Test Flow:
+ *
+ * Preconditions:
+ * 1. Create customer.
+ * 2. Create downloadable product.
+ * 3. Place order.
+ * 4. Create invoice.
+ * 5. Go to customer account > My Downloads and click download link.
+ *
+ * Steps:
+ * 1. Open Backend.
+ * 2. Go to Reports > Products > Downloads.
+ * 3. Perform all assertions.
+ *
+ * @group Reports_(MX)
+ * @ZephyrId MAGETWO-28823
+ */
+class DownloadProductsReportEntityTest extends Injectable
+{
+    /**
+     * Browser Interface
+     *
+     * @var Browser
+     */
+    protected $browser;
+
+    /**
+     * Customer Account index page
+     *
+     * @var CustomerAccountIndex
+     */
+    protected $customerAccount;
+
+    /**
+     * Downloadable Customer Products page
+     *
+     * @var DownloadableCustomerProducts
+     */
+    protected $customerProducts;
+
+    /**
+     * Inject pages
+     *
+     * @param CustomerAccountIndex $customerAccount
+     * @param DownloadableCustomerProducts $customerProducts
+     * @return void
+     */
+    public function __inject(
+        CustomerAccountIndex $customerAccount,
+        DownloadableCustomerProducts $customerProducts,
+        Browser $browser
+    ) {
+        $this->customerAccount = $customerAccount;
+        $this->customerProducts = $customerProducts;
+        $this->browser = $browser;
+    }
+
+    /**
+     * Order downloadable product
+     *
+     * @param OrderInjectable $order
+     * @param string $downloads
+     * @return void
+     */
+    public function test(OrderInjectable $order, $downloads)
+    {
+        // Preconditions
+        $order->persist();
+        $invoice = $this->objectManager->create('Magento\Sales\Test\TestStep\CreateInvoiceStep', ['order' => $order]);
+        $invoice->run();
+        $this->openDownloadableLink($order, (int)$downloads);
+    }
+
+    /**
+     * Open Downloadable Link
+     *
+     * @param OrderInjectable $order
+     * @param int $downloads
+     * @return void
+     */
+    protected function openDownloadableLink(OrderInjectable $order, $downloads)
+    {
+        $customerLogin = $this->objectManager->create(
+            'Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep',
+            ['customer' => $order->getDataFieldConfig('customer_id')['source']->getCustomer()]
+        );
+        $customerLogin->run();
+        $this->customerAccount->getAccountMenuBlock()->openMenuItem('My Downloadable Products');
+        foreach ($order->getEntityId()['products'] as $product) {
+            foreach ($product->getDownloadableLinks()['downloadable']['link'] as $link) {
+                for ($i = 0; $i < $downloads; $i++) {
+                    $this->customerProducts->getMainBlock()->openLink($link['title']);
+                    $this->browser->selectWindow();
+                    $this->browser->closeWindow();
+                    $this->browser->selectWindow();
+                }
+            }
+        }
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest/test.csv
new file mode 100644
index 00000000000..fcb06cbea25
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/DownloadProductsReportEntityTest/test.csv
@@ -0,0 +1,4 @@
+"order/dataSet";"downloads";"constraint"
+"downloadable_product";"1";"assertDownloadsReportResult"
+"two_downloadable_product";"2";"assertDownloadsReportResult"
+"downloadable_product";"0";"assertDownloadsReportResult"
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest.php
new file mode 100644
index 00000000000..2b00e211cc4
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest.php
@@ -0,0 +1,214 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Reports\Test\TestCase;
+
+use Mtf\TestCase\Injectable;
+use Magento\Tax\Test\Fixture\TaxRule;
+use Magento\Tax\Test\Page\Adminhtml\TaxRuleNew;
+use Magento\Sales\Test\Fixture\OrderInjectable;
+use Magento\Sales\Test\Page\Adminhtml\OrderView;
+use Magento\Tax\Test\Page\Adminhtml\TaxRuleIndex;
+use Magento\Sales\Test\Page\Adminhtml\OrderIndex;
+use Magento\Reports\Test\Page\Adminhtml\Statistics;
+use Magento\Sales\Test\Page\Adminhtml\OrderInvoiceNew;
+use Magento\Reports\Test\Page\Adminhtml\SalesTaxReport;
+
+/**
+ * Test Creation for SalesTaxReportEntity
+ *
+ * Test Flow:
+ *
+ * Preconditions:
+ * 1. Product is created
+ * 2. Customer is created
+ * 3. Tax Rule is created
+ * 4. Order is placed
+ * 5. Refresh statistic
+ *
+ * Steps:
+ * 1. Login to backend
+ * 2. Go to Reports > Sales > Tax
+ * 3. Fill data from dataSet
+ * 4. Click "Show report"
+ * 5. Perform all assertions
+ *
+ * @group Reports_(MX)
+ * @ZephyrId MAGETWO-28515
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class SalesTaxReportEntityTest extends Injectable
+{
+    /**
+     * Order index page
+     *
+     * @var OrderIndex
+     */
+    protected $orderIndex;
+
+    /**
+     * Order invoice new page
+     *
+     * @var OrderInvoiceNew
+     */
+    protected $orderInvoiceNew;
+
+    /**
+     * Sales tax report page
+     *
+     * @var SalesTaxReport
+     */
+    protected $salesTaxReport;
+
+    /**
+     * Order view page
+     *
+     * @var OrderView
+     */
+    protected $orderView;
+
+    /**
+     * Report statistic page
+     *
+     * @var Statistics
+     */
+    protected $reportStatistic;
+
+    /**
+     * Tax Rule grid page
+     *
+     * @var TaxRuleIndex
+     */
+    protected $taxRuleIndexPage;
+
+    /**
+     * Tax Rule new and edit page
+     *
+     * @var TaxRuleNew
+     */
+    protected $taxRuleNewPage;
+
+    /**
+     * Tax Rule fixture
+     *
+     * @var TaxRule
+     */
+    protected $taxRule;
+
+    /**
+     * Delete all tax rules
+     *
+     * @return void
+     */
+    public function __prepare()
+    {
+        $deleteTaxRule = $this->objectManager->create('Magento\Tax\Test\TestStep\DeleteAllTaxRulesStep');
+        $deleteTaxRule->run();
+    }
+
+    /**
+     * Injection data
+     *
+     * @param OrderIndex $orderIndex
+     * @param OrderInvoiceNew $orderInvoiceNew
+     * @param OrderView $orderView
+     * @param Statistics $reportStatistic
+     * @param SalesTaxReport $salesTaxReport
+     * @param TaxRuleIndex $taxRuleIndexPage
+     * @param TaxRuleNew $taxRuleNewPage
+     * @return void
+     */
+    public function __inject(
+        OrderIndex $orderIndex,
+        OrderInvoiceNew $orderInvoiceNew,
+        OrderView $orderView,
+        Statistics $reportStatistic,
+        SalesTaxReport $salesTaxReport,
+        TaxRuleIndex $taxRuleIndexPage,
+        TaxRuleNew $taxRuleNewPage
+    ) {
+        $this->orderIndex = $orderIndex;
+        $this->orderInvoiceNew = $orderInvoiceNew;
+        $this->orderView = $orderView;
+        $this->reportStatistic = $reportStatistic;
+        $this->salesTaxReport = $salesTaxReport;
+        $this->taxRuleIndexPage = $taxRuleIndexPage;
+        $this->taxRuleNewPage = $taxRuleNewPage;
+    }
+
+    /**
+     * Create tax report entity
+     *
+     * @param OrderInjectable $order
+     * @param TaxRule $taxRule
+     * @param array $report
+     * @param string $orderStatus
+     * @param string $invoice
+     * @return void
+     */
+    public function test(
+        OrderInjectable $order,
+        TaxRule $taxRule,
+        array $report,
+        $orderStatus,
+        $invoice
+    ) {
+        // Precondition
+        $taxRule->persist();
+        $this->taxRule = $taxRule;
+        $order->persist();
+        $this->orderIndex->open();
+        $this->orderIndex->getSalesOrderGrid()->searchAndOpen(['id' => $order->getId()]);
+        if ($orderStatus !== 'Pending') {
+            $createInvoice = $this->objectManager->create(
+                'Magento\Sales\Test\TestStep\CreateInvoice',
+                ['order' => $order, 'data' => $invoice]
+            );
+            $createInvoice->run();
+        }
+        $this->reportStatistic->open();
+        $this->reportStatistic->getGridBlock()->massaction(
+            [['report' => 'Tax']],
+            'Refresh Statistics for the Last Day',
+            true
+        );
+
+        // Steps
+        $this->salesTaxReport->open();
+        $this->salesTaxReport->getFilterBlock()->viewsReport($report);
+        $this->salesTaxReport->getActionBlock()->showReport();
+    }
+
+    /**
+     * Delete all tax rules after test
+     *
+     * @return void
+     */
+    public function tearDown()
+    {
+        $deleteTaxRule = $this->objectManager->create('Magento\Tax\Test\TestStep\DeleteAllTaxRulesStep');
+        $deleteTaxRule->run();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest/test.csv
new file mode 100644
index 00000000000..733b7a871cd
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesTaxReportEntityTest/test.csv
@@ -0,0 +1,4 @@
+"taxRule/dataSet";"order/dataSet";"orderStatus";"report/report_type";"report/period_type";"report/from";"report/to";"report/show_order_statuses";"report/order_statuses";"report/show_empty_rows";"invoice/do_shipment";"taxAmount";"constraint";"issue"
+"custom_rule";"default";"Pending";"Order Created Date";"Day";"m/d/Y";"m/d/Y";"Any";"-";"-";"No";"$46.20";"assertTaxReportNotInGrid";""
+"custom_rule";"default";"Processing";"Order Created Date";"Month";"m/d/Y";"m/d/Y";"Specified";"Processing";"-";"No";"$46.20";"assertTaxReportInGrid";""
+"custom_rule";"default";"Complete";"Order Updated Date";"Year";"m/d/Y";"m/d/Y";"Specified";"Complete";"Yes";"Yes";"$46.20";"assertTaxReportInGrid";"Bug: MAGETWO-28611"
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/etc/constraint.xml b/dev/tests/functional/tests/app/Magento/Reports/Test/etc/constraint.xml
index 2b6f8a53df0..176c7b60ecc 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/etc/constraint.xml
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/etc/constraint.xml
@@ -75,4 +75,13 @@
     <assertCustomerOrderCountReportResult module="Magento_Reports">
         <severeness>low</severeness>
     </assertCustomerOrderCountReportResult>
+    <assertTaxReportInGrid module="Magento_Reports">
+        <severeness>low</severeness>
+    </assertTaxReportInGrid>
+    <assertTaxReportNotInGrid module="Magento_Reports">
+        <severeness>low</severeness>
+    </assertTaxReportNotInGrid>
+    <assertDownloadsReportResult module="Magento_Reports">
+        <severeness>low</severeness>
+    </assertDownloadsReportResult>
 </constraint>
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/etc/page.xml b/dev/tests/functional/tests/app/Magento/Reports/Test/etc/page.xml
index 6f89be33865..e100c4aaf96 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/etc/page.xml
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/etc/page.xml
@@ -89,4 +89,14 @@
         <area>adminhtml</area>
         <class>Magento\Reports\Test\Page\Adminhtml\CustomerOrdersReport</class>
     </customerOrdersReport>
+    <salesTaxReport>
+        <mca>reports/report_sales/tax</mca>
+        <area>adminhtml</area>
+        <class>Magento\Reports\Test\Page\Adminhtml\SalesTaxReport</class>
+    </salesTaxReport>
+    <downloadsReport>
+        <mca>reports/report_product/downloads</mca>
+        <area>adminhtml</area>
+        <class>Magento\Reports\Test\Page\Adminhtml\DownloadsReport</class>
+    </downloadsReport>
 </page>
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
index 8306fbd1a5b..0210a25bceb 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
@@ -162,12 +162,12 @@ class UpdateProductReviewEntityOnProductPageTest extends Injectable
         /** @var CatalogProductSimple $product */
         $product = $this->reviewInitial->getDataFieldConfig('entity_id')['source']->getEntity();
         $this->catalogProductIndex->getProductGrid()->searchAndOpen(['sku' => $product->getSku()]);
-        $this->catalogProductEdit->getForm()->openTab('product_reviews');
+        $this->catalogProductEdit->getProductForm()->openTab('product_reviews');
         $filter = [
             'title' => $this->reviewInitial->getTitle(),
             'sku' => $product->getSku()
         ];
-        $this->catalogProductEdit->getForm()->getTabElement('product_reviews')->getReviewsGrid()
+        $this->catalogProductEdit->getProductForm()->getTabElement('product_reviews')->getReviewsGrid()
             ->searchAndOpen($filter);
         $this->reviewEdit->getReviewForm()->fill($review);
         $this->reviewEdit->getPageActions()->save();
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.php b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.php
index bd8e0f574fb..6cc27c442bc 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.php
@@ -44,9 +44,10 @@ class Store extends InjectableFixture
 
     protected $defaultDataSet = [
         'group_id' => ['dataSet' => 'default'],
-        'name' => 'Custom_Store_%isolation%',
-        'code' => 'code_%isolation%',
+        'name' => 'Default Store View',
+        'code' => 'default',
         'is_active' => 'Enabled',
+        'store_id' => 1,
     ];
 
     protected $store_id = [
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Repository/Store.php b/dev/tests/functional/tests/app/Magento/Store/Test/Repository/Store.php
index 3c76d6bf812..c440550a907 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Repository/Store.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Repository/Store.php
@@ -42,6 +42,14 @@ class Store extends AbstractRepository
     public function __construct(array $defaultConfig = [], array $defaultData = [])
     {
         $this->_data['default'] = [
+            'group_id' => ['dataSet' => 'default'],
+            'name' => 'Default Store View',
+            'code' => 'base',
+            'is_active' => 'Enabled',
+            'store_id' => 1,
+        ];
+
+        $this->_data['custom'] = [
             'group_id' => ['dataSet' => 'default'],
             'name' => 'Custom_Store_%isolation%',
             'code' => 'code_%isolation%',
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/DeleteStoreEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/DeleteStoreEntityTest/test.csv
index 51721d81362..aa364f37602 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/DeleteStoreEntityTest/test.csv
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/DeleteStoreEntityTest/test.csv
@@ -1,3 +1,3 @@
 "store/dataSet";"createBackup";"constraint"
-"default";"Yes";"assertStoreSuccessDeleteAndBackupMessages, assertStoreNotInGrid, assertBackupInGrid, assertStoreNotOnFrontend"
+"custom";"Yes";"assertStoreSuccessDeleteAndBackupMessages, assertStoreNotInGrid, assertBackupInGrid, assertStoreNotOnFrontend"
 "custom";"No";"assertStoreSuccessDeleteMessage, assertStoreNotInGrid, assertStoreNotOnFrontend"
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/StoreTest.php b/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/StoreTest.php
index a4fb5a0a3ec..389e8abd8e3 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/StoreTest.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/StoreTest.php
@@ -54,7 +54,7 @@ class StoreTest extends Functional
         $newStorePage = Factory::getPageFactory()->getAdminSystemStoreNewStore();
         $newStorePage->getStoreForm()->fill($storeFixture);
         $newStorePage->getFormPageActions()->save();
-        $storeListPage->getMessagesBlock()->assertSuccessMessage();
+        $storeListPage->getMessagesBlock()->waitSuccessMessage();
         $this->assertContains(
             'The store view has been saved',
             $storeListPage->getMessagesBlock()->getSuccessMessages()
@@ -66,7 +66,7 @@ class StoreTest extends Functional
         $cachePage = Factory::getPageFactory()->getAdminCache();
         $cachePage->open();
         $cachePage->getActionsBlock()->flushCacheStorage();
-        $cachePage->getMessagesBlock()->assertSuccessMessage();
+        $cachePage->getMessagesBlock()->waitSuccessMessage();
 
         $configPage = Factory::getPageFactory()->getAdminSystemConfig();
         $configPage->open();
@@ -75,7 +75,7 @@ class StoreTest extends Functional
         $configGroup->open();
         $configGroup->setValue('select-groups-locale-fields-code-value', 'German (Germany)');
         $configPage->getPageActions()->save();
-        $configPage->getMessagesBlock()->assertSuccessMessage();
+        $configPage->getMessagesBlock()->waitSuccessMessage();
 
         $homePage = Factory::getPageFactory()->getCmsIndexIndex();
         $homePage->open();
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/UpdateStoreEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/UpdateStoreEntityTest/test.csv
index 87bfdcc36e2..618d1ed08a1 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/UpdateStoreEntityTest/test.csv
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/TestCase/UpdateStoreEntityTest/test.csv
@@ -1,2 +1,2 @@
-"store/data/group_id/dataSet";"store/data/name";"store/data/code";"store/data/is_active";"constraint"
-"default";"storename_updated%isolation%";"storecode_updated%isolation%";"Enabled";"assertStoreSuccessSaveMessage, assertStoreInGrid, assertStoreForm, assertStoreBackend, assertStoreFrontend"
+"storeInitial/dataSet";"store/data/group_id/dataSet";"store/data/name";"store/data/code";"store/data/is_active";"constraint"
+"custom";"default";"storename_updated%isolation%";"storecode_updated%isolation%";"Enabled";"assertStoreSuccessSaveMessage, assertStoreInGrid, assertStoreForm, assertStoreBackend, assertStoreFrontend"
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Block/Adminhtml/Rule/Grid.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Block/Adminhtml/Rule/Grid.php
index 97833ff1097..80f115c17cd 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Block/Adminhtml/Rule/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Block/Adminhtml/Rule/Grid.php
@@ -25,6 +25,7 @@
 namespace Magento\Tax\Test\Block\Adminhtml\Rule;
 
 use Magento\Backend\Test\Block\Widget\Grid as GridInterface;
+use Mtf\Client\Element\Locator;
 
 /**
  * Class Grid
@@ -62,6 +63,33 @@ class Grid extends GridInterface
         ],
     ];
 
+    /**
+     * First row selector
+     *
+     * @var string
+     */
+    protected $firstRowSelector = '//tr[1]/td[@data-column="code"]';
+
+    /**
+     * Check whether first row is visible
+     *
+     * @return bool
+     */
+    public function isFirstRowVisible()
+    {
+        return $this->_rootElement->find($this->firstRowSelector, Locator::SELECTOR_XPATH)->isVisible();
+    }
+
+    /**
+     * Open first item in grid
+     *
+     * @return void
+     */
+    public function openFirstRow()
+    {
+        $this->_rootElement->find($this->firstRowSelector, Locator::SELECTOR_XPATH)->click();
+    }
+
     /**
      * Check if specific row exists in grid
      *
@@ -72,7 +100,7 @@ class Grid extends GridInterface
      */
     public function isRowVisible(array $filter, $isSearchable = false, $isStrict = true)
     {
-        $this->search(array('code' => $filter['code']));
+        $this->search(['code' => $filter['code']]);
         return parent::isRowVisible($filter, $isSearchable);
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/CreateTaxRuleEntityTest/testCreateTaxRule.csv b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/CreateTaxRuleEntityTest/testCreateTaxRule.csv
index 3b880e7f96e..f9fda7a92c8 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/CreateTaxRuleEntityTest/testCreateTaxRule.csv
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/CreateTaxRuleEntityTest/testCreateTaxRule.csv
@@ -1,5 +1,5 @@
-"taxRule/data/code";"taxRule/data/tax_rate/dataSet/rate_0";"taxRule/data/tax_rate/dataSet/rate_1";"taxRule/data/tax_rate/dataSet/rate_2";"taxRule/data/tax_customer_class/dataSet/class_0";"taxRule/data/tax_customer_class/dataSet/class_1";"taxRule/data/tax_product_class/dataSet/class_0";"taxRule/data/tax_product_class/dataSet/class_1";"taxRule/data/priority";"taxRule/data/position";"constraint"
-"TaxIdentifier%isolation%";"US-CA-*-Rate 1";"-";"-";"-";"-";"-";"-";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm"
-"TaxIdentifier%isolation%";"US-CA-*-Rate 1";"US-NY-*-Rate 1";"-";"customer_tax_class";"-";"product_tax_class";"-";1;1;"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm"
-"TaxIdentifier%isolation%";"default";"US-NY-*-Rate 1";"US-CA-*-Rate 1";"Retail Customer";"customer_tax_class";"Taxable Goods";"-";"-";1;"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm"
-"TaxIdentifier%isolation%";"withZipRange";"US-CA-*-Rate 1";"-";"Retail Customer";"customer_tax_class";"Taxable Goods";"product_tax_class";1;"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm"
+"taxRule/data/code";"taxRule/data/tax_rate/dataSet/rate_0";"taxRule/data/tax_rate/dataSet/rate_1";"taxRule/data/tax_rate/dataSet/rate_2";"taxRule/data/tax_customer_class/dataSet/class_0";"taxRule/data/tax_customer_class/dataSet/class_1";"taxRule/data/tax_product_class/dataSet/class_0";"taxRule/data/tax_product_class/dataSet/class_1";"taxRule/data/priority";"taxRule/data/position";"constraint";"issue"
+"TaxIdentifier%isolation%";"US-CA-*-Rate 1";"-";"-";"-";"-";"-";"-";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm";""
+"TaxIdentifier%isolation%";"US-CA-*-Rate 1";"US-NY-*-Rate 1";"-";"customer_tax_class";"-";"product_tax_class";"-";1;1;"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm";""
+"TaxIdentifier%isolation%";"default";"US-NY-*-Rate 1";"US-CA-*-Rate 1";"Retail Customer";"customer_tax_class";"Taxable Goods";"-";"-";1;"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm";"MAGETWO-28186"
+"TaxIdentifier%isolation%";"withZipRange";"US-CA-*-Rate 1";"-";"Retail Customer";"customer_tax_class";"Taxable Goods";"product_tax_class";1;"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm";""
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/TaxRuleTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/TaxRuleTest.php
index c1d1dfd028e..4690b89159f 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/TaxRuleTest.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/TaxRuleTest.php
@@ -57,7 +57,7 @@ class TaxRuleTest extends Functional
         $newTaxRulePage->getTaxRuleForm()->fill($fixture);
         $newTaxRulePage->getFormPageActions()->saveAndContinue();
         //Verifying
-        $newTaxRulePage->getMessagesBlock()->assertSuccessMessage();
+        $newTaxRulePage->getMessagesBlock()->waitSuccessMessage();
         $this->_assertOnGrid($fixture);
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/UpdateTaxRuleEntityTest/testUpdateTaxRule.csv b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/UpdateTaxRuleEntityTest/testUpdateTaxRule.csv
index a2cf2048159..0e71541a4aa 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/UpdateTaxRuleEntityTest/testUpdateTaxRule.csv
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/UpdateTaxRuleEntityTest/testUpdateTaxRule.csv
@@ -1,5 +1,5 @@
-"initialTaxRule/dataSet";"address/data/country_id";"address/data/region_id";"address/data/postcode";"shipping/carrier";"shipping/method";"shipping/price";"taxRule/data/code";"taxRule/data/tax_rate/dataSet/rate_0";"taxRule/data/tax_customer_class/dataSet/class_0";"taxRule/data/tax_product_class/dataSet/class_0";"taxRule/data/tax_product_class/dataSet/class_1";"taxRule/data/priority";"taxRule/data/position";"constraint"
-"tax_rule_default";"-";"-";"-";"-";"-";"-";"New Tax Rule name%isolation%";"default";"customer_tax_class";"product_tax_class";"product_tax_class";"2";"2";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm"
-"tax_rule_with_custom_tax_classes";"-";"-";"-";"-";"-";"-";"-";"withZipRange";"Retail Customer";"product_tax_class";"Taxable Goods";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm"
-"tax_rule_with_custom_tax_classes";"United States";"Utah";84001;"Flat Rate";"Fixed";5;"-";"us_ut_fixed_zip_rate_20";"-";"product_tax_class";"-";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm, assertTaxRuleIsApplied"
-"tax_rule_with_custom_tax_classes";"United States";"Idaho";83201;"Flat Rate";"Fixed";5;"-";"withFixedZip";"-";"product_tax_class";"-";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm, assertTaxRuleIsNotApplied"
\ No newline at end of file
+"initialTaxRule/dataSet";"address/data/country_id";"address/data/region_id";"address/data/postcode";"shipping/carrier";"shipping/method";"shipping/price";"taxRule/data/code";"taxRule/data/tax_rate/dataSet/rate_0";"taxRule/data/tax_customer_class/dataSet/class_0";"taxRule/data/tax_product_class/dataSet/class_0";"taxRule/data/tax_product_class/dataSet/class_1";"taxRule/data/priority";"taxRule/data/position";"constraint";"issue"
+"tax_rule_default";"-";"-";"-";"-";"-";"-";"New Tax Rule name%isolation%";"default";"customer_tax_class";"product_tax_class";"product_tax_class";"2";"2";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm";"Bug: MAGETWO-28186"
+"tax_rule_with_custom_tax_classes";"-";"-";"-";"-";"-";"-";"-";"withZipRange";"Retail Customer";"product_tax_class";"Taxable Goods";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm";""
+"tax_rule_with_custom_tax_classes";"United States";"Utah";84001;"Flat Rate";"Fixed";5;"-";"us_ut_fixed_zip_rate_20";"-";"product_tax_class";"-";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm, assertTaxRuleIsApplied";""
+"tax_rule_with_custom_tax_classes";"United States";"Idaho";83201;"Flat Rate";"Fixed";5;"-";"withFixedZip";"-";"product_tax_class";"-";"-";"-";"assertTaxRuleSuccessSaveMessage, assertTaxRuleInGrid, assertTaxRuleForm, assertTaxRuleIsNotApplied";""
\ No newline at end of file
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
new file mode 100644
index 00000000000..74cd91887ac
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Tax\Test\TestStep;
+
+use Mtf\TestStep\TestStepInterface;
+use Magento\Tax\Test\Page\Adminhtml\TaxRuleNew;
+use Magento\Tax\Test\Page\Adminhtml\TaxRuleIndex;
+
+/**
+ * Class DeleteAllTaxRulesStep
+ * Delete all Tax Rule on backend
+ */
+class DeleteAllTaxRulesStep implements TestStepInterface
+{
+    /**
+     * Tax Rule grid page
+     *
+     * @var TaxRuleIndex
+     */
+    protected $taxRuleIndexPage;
+
+    /**
+     * Tax Rule new and edit page
+     *
+     * @var TaxRuleNew
+     */
+    protected $taxRuleNewPage;
+
+    /**
+     * @construct
+     * @param TaxRuleIndex $taxRuleIndexPage
+     * @param TaxRuleNew $taxRuleNewPage
+     */
+    public function __construct(
+        TaxRuleIndex $taxRuleIndexPage,
+        TaxRuleNew $taxRuleNewPage
+    ) {
+        $this->taxRuleIndexPage = $taxRuleIndexPage;
+        $this->taxRuleNewPage = $taxRuleNewPage;
+    }
+
+    /**
+     * Delete Tax Rule on backend
+     *
+     * @return array
+     */
+    public function run()
+    {
+        $this->taxRuleIndexPage->open();
+        while ($this->taxRuleIndexPage->getTaxRuleGrid()->isFirstRowVisible()) {
+            $this->taxRuleIndexPage->getTaxRuleGrid()->openFirstRow();
+            $this->taxRuleNewPage->getFormPageActions()->delete();
+        }
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteInGrid.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteInGrid.php
index 657a78cf308..6f2b70dd229 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteInGrid.php
@@ -53,7 +53,7 @@ class AssertUrlRewriteInGrid extends AbstractConstraint
         $urlRewriteIndex->open();
         $filter = ['request_path' => $urlRewrite->getRequestPath()];
         \PHPUnit_Framework_Assert::assertTrue(
-            $urlRewriteIndex->getUrlRewriteGrid()->isRowVisible($filter),
+            $urlRewriteIndex->getUrlRedirectGrid()->isRowVisible($filter),
             'URL Rewrite with request path \'' . $urlRewrite->getRequestPath() . '\' is absent in grid.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteNotInGrid.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteNotInGrid.php
index a82eb459192..8a105b3cd1b 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteNotInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteNotInGrid.php
@@ -53,7 +53,7 @@ class AssertUrlRewriteNotInGrid extends AbstractConstraint
         $urlRewriteIndex->open();
         $filter = ['request_path' => $productRedirect->getRequestPath()];
         \PHPUnit_Framework_Assert::assertFalse(
-            $urlRewriteIndex->getUrlRewriteGrid()->isRowVisible($filter),
+            $urlRewriteIndex->getUrlRedirectGrid()->isRowVisible($filter),
             'URL Rewrite with request path \'' . $productRedirect->getRequestPath() . '\' is present in grid.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.php
index 0d4c8dd0911..dfa48c422a7 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.php
@@ -51,6 +51,12 @@ class UrlRewrite extends InjectableFixture
         'backend_type' => 'virtual',
     ];
 
+    protected $id_path = [
+        'attribute_code' => 'id_path',
+        'backend_type' => 'virtual',
+        'source' => 'Magento\UrlRewrite\Test\Fixture\UrlRewrite\IdPath',
+    ];
+
     protected $store_id = [
         'attribute_code' => 'store_id',
         'backend_type' => 'varchar',
@@ -95,6 +101,11 @@ class UrlRewrite extends InjectableFixture
         return $this->getData('id');
     }
 
+    public function getIdPath()
+    {
+        return $this->getData('id_path');
+    }
+
     public function getStoreId()
     {
         return $this->getData('store_id');
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite/IdPath.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite/IdPath.php
new file mode 100644
index 00000000000..9c0905a2456
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite/IdPath.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\UrlRewrite\Test\Fixture\UrlRewrite;
+
+use Mtf\Fixture\FixtureFactory;
+use Mtf\Fixture\FixtureInterface;
+
+/**
+ * Class IdPath
+ * Prepare ID Path
+ */
+class IdPath implements FixtureInterface
+{
+    /**
+     * Resource data
+     *
+     * @var string
+     */
+    protected $data;
+
+    /**
+     * Return entity
+     *
+     * @var FixtureInterface
+     */
+    protected $entity = null;
+
+    /**
+     * Data set configuration settings
+     *
+     * @var array
+     */
+    protected $params;
+
+    /**
+     * @param FixtureFactory $fixtureFactory
+     * @param array $params
+     * @param array $data [optional]
+     */
+    public function __construct(FixtureFactory $fixtureFactory, array $params, array $data = [])
+    {
+        $this->params = $params;
+        if (!isset($data['entity']) || $data['entity'] === '-') {
+            $this->data = array_shift($data);
+            return;
+        }
+        preg_match('`%(.*?)%`', $data['entity'], $dataSet);
+        $entityConfig = isset($dataSet[1]) ? explode('::', $dataSet[1]) : [];
+        if (count($entityConfig) > 1) {
+            /** @var FixtureInterface $fixture */
+            $this->entity = $fixtureFactory->createByCode($entityConfig[0], ['dataSet' => $entityConfig[1]]);
+            $this->entity->persist();
+            $id = $this->entity->hasData('id') ? $this->entity->getId() : $this->entity->getPageId();
+            $this->data = preg_replace('`(%.*?%)`', $id, $data['entity']);
+        } else {
+            $this->data = strval($data['entity']);
+        }
+    }
+
+    /**
+     * Persist custom selections products
+     *
+     * @return void
+     */
+    public function persist()
+    {
+        //
+    }
+
+    /**
+     * Return prepared data
+     *
+     * @param string|null $key
+     * @return string
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function getData($key = null)
+    {
+        return $this->data;
+    }
+
+    /**
+     * Return data set configuration settings
+     *
+     * @return array
+     */
+    public function getDataConfig()
+    {
+        return $this->params;
+    }
+
+    /**
+     * Return entity
+     *
+     * @return FixtureInterface|null
+     */
+    public function getEntity()
+    {
+        return $this->entity;
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewriteProduct.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewriteProduct.php
index cdb1686d6f4..8957c0c0a58 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewriteProduct.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewriteProduct.php
@@ -88,7 +88,7 @@ class UrlRewriteProduct extends DataFixture
      */
     public function getProductSku()
     {
-        return $this->product->getProductSku();
+        return $this->product->getSku();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
index a1f6f3f5418..bc4565ec807 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
@@ -93,7 +93,7 @@ class DeleteCategoryUrlRewriteEntityTest extends Injectable
         } else {
             $filter = ['id_path' => $urlRewrite->getIdPath()];
         }
-        $this->urlRewriteIndex->getUrlRewriteGrid()->searchAndOpen($filter);
+        $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
index eeb9c3c4cb7..1951b270cf9 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
@@ -92,7 +92,7 @@ class DeleteProductUrlRewriteEntityTest extends Injectable
         // Steps
         $this->urlRewriteIndex->open();
         $filter = ['request_path' => $productRedirect->getRequestPath()];
-        $this->urlRewriteIndex->getUrlRewriteGrid()->searchAndOpen($filter);
+        $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateCategoryUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateCategoryUrlRewriteEntityTest.php
index 12fe1baed06..ddcba54e68e 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateCategoryUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateCategoryUrlRewriteEntityTest.php
@@ -106,11 +106,10 @@ class UpdateCategoryUrlRewriteEntityTest extends Injectable
      */
     public function test(UrlRewrite $categoryRedirect, UrlRewrite $urlRewrite)
     {
-        $this->markTestIncomplete('MAGETWO-26967');
         //Steps
         $this->urlRewriteIndex->open();
         $filter = ['request_path' => $categoryRedirect->getRequestPath()];
-        $this->urlRewriteIndex->getUrlRewriteGrid()->searchAndOpen($filter);
+        $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getFormBlock()->fill($urlRewrite);
         $this->urlRewriteEdit->getPageMainActions()->save();
     }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateProductUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateProductUrlRewriteEntityTest.php
index d8f55f58822..4053cb1c002 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateProductUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/UpdateProductUrlRewriteEntityTest.php
@@ -104,7 +104,7 @@ class UpdateProductUrlRewriteEntityTest extends Injectable
         //Steps
         $this->urlRewriteIndex->open();
         $filter = ['request_path' => $productRedirect->getRequestPath()];
-        $this->urlRewriteIndex->getUrlRewriteGrid()->searchAndOpen($filter);
+        $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getFormBlock()->fill($urlRewrite);
         $this->urlRewriteEdit->getPageMainActions()->save();
     }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.php b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.php
index 1b3ce331a49..a8c13c97a9a 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.php
@@ -54,7 +54,8 @@ class User extends InjectableFixture
         'lastname' => 'LastName%isolation%',
         'email' => 'email%isolation%@example.com',
         'password' => '123123q',
-        'password_confirmation' => '123123q'
+        'password_confirmation' => '123123q',
+        'is_active' => 'Active'
     ];
 
     protected $user_id = [
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/RoleId.php b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/RoleId.php
index 45705e1562a..454207e6d96 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/RoleId.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User/RoleId.php
@@ -62,7 +62,7 @@ class RoleId implements FixtureInterface
     {
         $this->params = $params;
         if (isset($data['dataSet']) && $data['dataSet'] !== '-') {
-                $this->role = $fixtureFactory->createByCode('adminUserRole', ['dataSet' => $data['dataSet']]);
+            $this->role = $fixtureFactory->createByCode('adminUserRole', ['dataSet' => $data['dataSet']]);
             if (!$this->role->hasData('role_id')) {
                 $this->role->persist();
             }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Handler/AdminUserRole/Curl.php b/dev/tests/functional/tests/app/Magento/User/Test/Handler/AdminUserRole/Curl.php
index e5479d2d5d5..076dd848ab7 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Handler/AdminUserRole/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Handler/AdminUserRole/Curl.php
@@ -52,7 +52,7 @@ class Curl extends AbstractCurl implements AdminUserRoleInterface
         $data = $fixture->getData();
         $data['all'] = ($data['resource_access'] == 'All') ? 1 : 0;
         if (isset($data['roles_resources'])) {
-            foreach ($data['roles_resources'] as $resource) {
+            foreach ((array)$data['roles_resources'] as $resource) {
                 $data['resource'][] = $resource;
             }
         }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php b/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php
index f83b32cd87f..3868350a95b 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Handler/User/Curl.php
@@ -52,6 +52,7 @@ class Curl extends AbstractCurl implements UserInterface
         if ($fixture->hasData('role_id')) {
             $data['roles[]'] = $fixture->getDataFieldConfig('role_id')['source']->getRole()->getRoleId();
         }
+        $data['is_active'] = (isset($data['is_active']) && ($data['is_active'] === 'Active')) ? 1 : 0;
         $url = $_ENV['app_backend_url'] . 'admin/user/save/active_tab/main_section/';
         $curl = new BackendDecorator(new CurlTransport(), new Config);
         $curl->addOption(CURLOPT_HEADER, 1);
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest.php
index 74f2144d179..fea0f88a6ec 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest.php
@@ -42,7 +42,7 @@ use Mtf\TestCase\Injectable;
  * 6. Perform assertions
  *
  * @group ACL_(MX)
- * @ZephyrId MAGETWO-23413
+ * @ZephyrId MAGETWO-25699
  */
 class CreateAdminUserEntityTest extends Injectable
 {
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest/test.csv b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest/test.csv
index 178ac7b96f4..7872c32a261 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest/test.csv
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/CreateAdminUserEntityTest/test.csv
@@ -1,7 +1,7 @@
-"user/data/username";"user/data/firstname";"user/data/lastname";"user/data/email";"user/data/password";"user/data/password_confirmation";"user/data/is_active";"user/data/role_id/dataSet";"isDuplicated";"constraint";"user/data/current_password"
-"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Active";"Administrators";"-";"assertUserSuccessSaveMessage, assertUserInGrid, assertUserSuccessLogOut, assertUserSuccessLogin"; "123123q"
-"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Inactive";"Administrators";"-";"assertUserSuccessSaveMessage, assertUserInGrid, assertUserSuccessLogOut, assertUserWrongCredentialsMessage"; "123123q"
-"-";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Active";"Administrators";"username";"assertUserDuplicateMessage"; "123123q"
-"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"-";"123123q";"123123q";"Active";"Administrators";"email";"assertUserDuplicateMessage"; "123123q"
-"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Active";"-";"-";"assertUserSuccessSaveMessage, assertUserInGrid, assertUserSuccessLogOut, assertUserWrongCredentialsMessage"; "123123q"
-"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.cim";"123123q";"123123q";"Active";"-";"-";"assertUserInvalidEmailMessage"; "123123q"
+"user/data/username";"user/data/firstname";"user/data/lastname";"user/data/email";"user/data/password";"user/data/password_confirmation";"user/data/is_active";"user/data/role_id/dataSet";"isDuplicated";"constraint";"user/data/current_password";"issue"
+"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Active";"Administrators";"-";"assertUserSuccessSaveMessage, assertUserInGrid, assertUserSuccessLogOut, assertUserSuccessLogin"; "123123q";""
+"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Inactive";"Administrators";"-";"assertUserSuccessSaveMessage, assertUserInGrid, assertUserSuccessLogOut, assertUserWrongCredentialsMessage"; "123123q";""
+"-";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Active";"Administrators";"username";"assertUserDuplicateMessage"; "123123q";""
+"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"-";"123123q";"123123q";"Active";"Administrators";"email";"assertUserDuplicateMessage"; "123123q";""
+"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.com";"123123q";"123123q";"Active";"-";"-";"assertUserSuccessSaveMessage, assertUserInGrid, assertUserSuccessLogOut, assertUserWrongCredentialsMessage"; "123123q";""
+"AdminUser%isolation%";"FirstName%isolation%";"LastName%isolation%";"email%isolation%@example.cim";"123123q";"123123q";"Active";"-";"-";"assertUserInvalidEmailMessage"; "123123q";"Bug: MAGETWO-28875"
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest.php
new file mode 100644
index 00000000000..5681cd35255
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest.php
@@ -0,0 +1,165 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\User\Test\TestCase;
+
+use Magento\User\Test\Fixture\AdminUserRole;
+use Magento\User\Test\Fixture\User;
+use Magento\User\Test\Page\Adminhtml\UserEdit;
+use Magento\User\Test\Page\Adminhtml\UserIndex;
+use Magento\User\Test\Page\Adminhtml\UserRoleEditRole;
+use Magento\User\Test\Page\Adminhtml\UserRoleIndex;
+use Mtf\Fixture\FixtureFactory;
+use Mtf\TestCase\Injectable;
+use Magento\Backend\Test\Page\Adminhtml\Dashboard;
+
+/**
+ * Test that user can login from the first attempt just after his permissions were changed.
+ *
+ * Test Flow:
+ * 1. Log in as default admin user
+ * 2. Go to System>Permissions>User Roles
+ * 3. Press "+" button to start create New Role
+ * 4. Fill in all data according to data set
+ * 5. Save role
+ * 6. Go to System-Permissions-All Users
+ * 7. Press "+" button to start create new admin user
+ * 8. Fill in all data according to data set
+ * 9. Save user
+ * 10. Go to System>Permissions>User Roles
+ * 11. Open created role, and change permissions to 'all'
+ * 12. Log out
+ * 13. Log in using new admin user (before the bug was fixed, it was impossible to log in from the first attempt)
+ * 14. Perform assertions
+ *
+ * @group ACL_(MX)
+ * @ZephyrId MAGETWO-28828
+ */
+class UserLoginAfterChangingPermissionsTest extends Injectable
+{
+    /**
+     * User edit page
+     *
+     * @var UserRoleIndex
+     */
+    protected $userRoleIndex;
+
+    /**
+     * Role edit page
+     *
+     * @var UserRoleEditRole
+     */
+    protected $userRoleEditRole;
+
+    /**
+     * User grid page
+     *
+     * @var UserIndex
+     */
+    protected $userIndexPage;
+
+    /**
+     * User new/edit page
+     *
+     * @var UserEdit
+     */
+    protected $userEditPage;
+
+    /**
+     * Dashboard panel
+     *
+     * @var Dashboard
+     */
+    protected $dashboard;
+
+    /**
+     * Factory for Fixtures
+     *
+     * @var FixtureFactory
+     */
+    protected $fixtureFactory;
+
+    /**
+     * Preconditions for test
+     *
+     * @param FixtureFactory $fixtureFactory
+     */
+    public function __prepare(FixtureFactory $fixtureFactory)
+    {
+        $this->fixtureFactory = $fixtureFactory;
+    }
+
+    /**
+     * Setup necessary data for test
+     *
+     * @param UserIndex $userIndex
+     * @param UserEdit $userEdit
+     * @param UserRoleIndex $userRoleIndex
+     * @param UserRoleEditRole $userRoleEditRole
+     * @param Dashboard $dashboard
+     * @return void
+     */
+    public function __inject(
+        UserIndex $userIndex,
+        UserEdit $userEdit,
+        UserRoleIndex $userRoleIndex,
+        UserRoleEditRole $userRoleEditRole,
+        Dashboard $dashboard
+    ) {
+        $this->userIndexPage = $userIndex;
+        $this->userEditPage = $userEdit;
+        $this->userRoleIndex = $userRoleIndex;
+        $this->userRoleEditRole = $userRoleEditRole;
+        $this->dashboard = $dashboard;
+    }
+
+    /**
+     * @param AdminUserRole $role
+     * @param AdminUserRole $updatedRole
+     * @param User $user
+     * @return void
+     */
+    public function testLoginAfterChangingPermissions(
+        AdminUserRole $role,
+        AdminUserRole $updatedRole,
+        User $user
+    ) {
+        /** Create role and a new user with this role */
+        $role->persist();
+        /** @var User $user */
+        $user = $this->fixtureFactory->create(
+            'Magento\User\Test\Fixture\User',
+            ['data' => array_merge($user->getData(), ['role_id' => ['role' => $role]])]
+        );
+        $user->persist();
+
+        /** Change the scope of resources available for the role created earlier */
+        $filter = ['rolename' => $role->getRoleName()];
+        $this->userRoleIndex->open();
+        $this->userRoleIndex->getRoleGrid()->searchAndOpen($filter);
+        $this->userRoleEditRole->getRoleFormTabs()->fill($updatedRole);
+        $this->userRoleEditRole->getPageActions()->save();
+        $this->dashboard->getAdminPanelHeader()->logOut();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest/testLoginAfterChangingPermissions.csv b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest/testLoginAfterChangingPermissions.csv
new file mode 100644
index 00000000000..5e9b09b42cc
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/UserLoginAfterChangingPermissionsTest/testLoginAfterChangingPermissions.csv
@@ -0,0 +1,2 @@
+"user/dataSet";"role/data/rolename";"role/data/resource_access";"role/data/roles_resources";"updatedRole/data/rolename";"updatedRole/data/resource_access";"constraint"
+"";AdminRole%isolation%;Custom;Sales;UpdatedAdminRole%isolation%;All;"assertUserSuccessLogin"
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist.php
index d9cde22eebd..cd36571276d 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist.php
@@ -60,6 +60,13 @@ class Wishlist extends Block
      */
     protected $updateButton = '.action.update';
 
+    /**
+     * Empty block css selector
+     *
+     * @var string
+     */
+    protected $empty = '.message.info.empty';
+
     /**
      * Click button "Share Wish List"
      *
@@ -102,4 +109,14 @@ class Wishlist extends Block
     {
         $this->_rootElement->find($this->updateButton)->click();
     }
+
+    /**
+     * Check empty block visible
+     *
+     * @return bool
+     */
+    public function isEmptyBlockVisible()
+    {
+        return $this->_rootElement->find($this->empty)->isVisible();
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items.php
index 483c564b7e7..2a07337e597 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items.php
@@ -27,6 +27,7 @@ namespace Magento\Wishlist\Test\Block\Customer\Wishlist;
 use Mtf\Block\Block;
 use Mtf\Client\Element;
 use Mtf\Client\Element\Locator;
+use Mtf\Fixture\FixtureInterface;
 use Magento\Wishlist\Test\Block\Customer\Wishlist\Items\Product;
 
 /**
@@ -42,18 +43,38 @@ class Items extends Block
      */
     protected $itemBlock = '//li[.//a[contains(.,"%s")]]';
 
+    /**
+     * Selector for 'Remove item' button
+     *
+     * @var string
+     */
+    protected $remove = '[data-role="remove"]';
+
     /**
      * Get item product block
      *
-     * @param string $productName
+     * @param FixtureInterface $product
      * @return Product
      */
-    public function getItemProductByName($productName)
+    public function getItemProduct(FixtureInterface $product)
     {
-        $productBlock = sprintf($this->itemBlock, $productName);
+        $productBlock = sprintf($this->itemBlock, $product->getName());
         return $this->blockFactory->create(
             'Magento\Wishlist\Test\Block\Customer\Wishlist\Items\Product',
             ['element' => $this->_rootElement->find($productBlock, Locator::SELECTOR_XPATH)]
         );
     }
+
+    /**
+     * Remove all products from wish list
+     *
+     * @return void
+     */
+    public function removeAllProducts()
+    {
+        while ($this->_rootElement->find($this->remove)->isVisible()) {
+            $this->_rootElement->find($this->remove)->click();
+            $this->reinitRootElement();
+        }
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php
index 55709268310..8c0ff30f8ef 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Customer/Wishlist/Items/Product.php
@@ -39,6 +39,13 @@ class Product extends Form
      */
     protected $addToCart = '.action.tocart';
 
+    /**
+     * Selector for 'Remove item' button
+     *
+     * @var string
+     */
+    protected $remove = '[data-role="remove"]';
+
     /**
      * Fill item product details
      *
@@ -60,4 +67,14 @@ class Product extends Form
     {
         $this->_rootElement->find($this->addToCart)->click();
     }
+
+    /**
+     * Remove product from wish list
+     *
+     * @return void
+     */
+    public function remove()
+    {
+        $this->_rootElement->find($this->remove)->click();
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertProductsIsAbsentInWishlist.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertProductsIsAbsentInWishlist.php
index c7e997387af..d4ee1321842 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertProductsIsAbsentInWishlist.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertProductsIsAbsentInWishlist.php
@@ -74,10 +74,9 @@ class AssertProductsIsAbsentInWishlist extends AbstractConstraint
         $itemBlock = $wishlistIndex->getWishlistBlock()->getProductItemsBlock();
 
         foreach ($products as $itemProduct) {
-            $productName = $itemProduct->getName();
             \PHPUnit_Framework_Assert::assertFalse(
-                $itemBlock->getItemProductByName($productName)->isVisible(),
-                'Product \'' . $productName . '\' is present in Wishlist on Frontend.'
+                $itemBlock->getItemProduct($itemProduct)->isVisible(),
+                'Product \'' . $itemProduct->getName() . '\' is present in Wishlist on Frontend.'
             );
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistIsEmpty.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistIsEmpty.php
index 70a9e86d12f..681d1ed9210 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistIsEmpty.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistIsEmpty.php
@@ -24,14 +24,13 @@
 
 namespace Magento\Wishlist\Test\Constraint;
 
-use Mtf\Fixture\InjectableFixture;
 use Magento\Cms\Test\Page\CmsIndex;
 use Mtf\Constraint\AbstractConstraint;
 use Magento\Wishlist\Test\Page\WishlistIndex;
 
 /**
  * Class AssertWishlistIsEmpty
- * Check that there are no Products in Wishlist
+ * Assert wish list is empty on 'My Account' page
  */
 class AssertWishlistIsEmpty extends AbstractConstraint
 {
@@ -43,22 +42,19 @@ class AssertWishlistIsEmpty extends AbstractConstraint
     protected $severeness = 'low';
 
     /**
-     * Check that there are no Products in Wishlist
+     * Assert wish list is empty
      *
-     * @param InjectableFixture[] $products
      * @param CmsIndex $cmsIndex
      * @param WishlistIndex $wishlistIndex
      * @return void
      */
-    public function processAssert(array $products, CmsIndex $cmsIndex, WishlistIndex $wishlistIndex)
+    public function processAssert(CmsIndex $cmsIndex, WishlistIndex $wishlistIndex)
     {
         $cmsIndex->getLinksBlock()->openLink("My Wish List");
-        foreach ($products as $itemProduct) {
-            \PHPUnit_Framework_Assert::assertFalse(
-                $wishlistIndex->getItemsBlock()->getItemProductByName($itemProduct->getName())->isVisible(),
-                '"' . $itemProduct->getName() . '" product is present in Wishlist.'
-            );
-        }
+        \PHPUnit_Framework_Assert::assertTrue(
+            $wishlistIndex->getWishlistBlock()->isEmptyBlockVisible(),
+            'Wish list is not empty.'
+        );
     }
 
     /**
@@ -68,6 +64,6 @@ class AssertWishlistIsEmpty extends AbstractConstraint
      */
     public function toString()
     {
-        return 'Wishlist is empty.';
+        return 'Wish list is empty.';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Page/WishlistIndex.xml b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Page/WishlistIndex.xml
index 9404f7bcfe1..8a67c020d66 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Page/WishlistIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Page/WishlistIndex.xml
@@ -35,5 +35,10 @@
             <locator>#wishlist-view-form</locator>
             <strategy>css selector</strategy>
         </wishlistBlock>
+        <itemsBlock>
+            <class>Magento\Wishlist\Test\Block\Customer\Wishlist\Items</class>
+            <locator>.products-grid.wishlist</locator>
+            <strategy>css selector</strategy>
+        </itemsBlock>
     </blocks>
 </page>
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AbstractWishlistOnFrontend.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AbstractWishlistOnFrontend.php
new file mode 100644
index 00000000000..65e05ac75bc
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AbstractWishlistOnFrontend.php
@@ -0,0 +1,155 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Wishlist\Test\TestCase;
+
+use Mtf\ObjectManager;
+use Mtf\Client\Browser;
+use Mtf\TestCase\Injectable;
+use Mtf\Fixture\FixtureFactory;
+use Magento\Cms\Test\Page\CmsIndex;
+use Magento\Wishlist\Test\Page\WishlistIndex;
+use Magento\Customer\Test\Fixture\CustomerInjectable;
+use Magento\Catalog\Test\Page\Product\CatalogProductView;
+
+/**
+ * Class AbstractWishlistOnFrontend
+ * Abstract class for wish list on frontend tests
+ */
+abstract class AbstractWishlistOnFrontend extends Injectable
+{
+    /**
+     * Object Manager
+     *
+     * @var ObjectManager
+     */
+    protected $objectManager;
+
+    /**
+     * Cms index page
+     *
+     * @var CmsIndex
+     */
+    protected $cmsIndex;
+
+    /**
+     * Product view page
+     *
+     * @var CatalogProductView
+     */
+    protected $catalogProductView;
+
+    /**
+     * Fixture factory
+     *
+     * @var FixtureFactory
+     */
+    protected $fixtureFactory;
+
+    /**
+     * Browser
+     *
+     * @var Browser
+     */
+    protected $browser;
+
+    /**
+     * Wishlist index page
+     *
+     * @var WishlistIndex
+     */
+    protected $wishlistIndex;
+
+    /**
+     * Injection data
+     *
+     * @param CmsIndex $cmsIndex
+     * @param CatalogProductView $catalogProductView
+     * @param FixtureFactory $fixtureFactory
+     * @param Browser $browser
+     * @param WishlistIndex $wishlistIndex
+     * @param ObjectManager $objectManager
+     * @return void
+     */
+    public function __inject(
+        CmsIndex $cmsIndex,
+        CatalogProductView $catalogProductView,
+        FixtureFactory $fixtureFactory,
+        Browser $browser,
+        WishlistIndex $wishlistIndex,
+        ObjectManager $objectManager
+    ) {
+        $this->cmsIndex = $cmsIndex;
+        $this->catalogProductView = $catalogProductView;
+        $this->fixtureFactory = $fixtureFactory;
+        $this->browser = $browser;
+        $this->wishlistIndex = $wishlistIndex;
+        $this->objectManager = $objectManager;
+    }
+
+    /**
+     * Login customer
+     *
+     * @param CustomerInjectable $customer
+     * @return void
+     */
+    protected function loginCustomer(CustomerInjectable $customer)
+    {
+        $loginCustomerOnFrontendStep = $this->objectManager->create(
+            'Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep',
+            ['customer' => $customer]
+        );
+        $loginCustomerOnFrontendStep->run();
+    }
+
+    /**
+     * Create products
+     *
+     * @param string $products
+     * @return array
+     */
+    protected function createProducts($products)
+    {
+        $createProductsStep = $this->objectManager->create(
+            'Magento\Catalog\Test\TestStep\CreateProductsStep',
+            ['products' => $products]
+        );
+
+        return $createProductsStep->run()['products'];
+    }
+
+    /**
+     * Add products to wish list
+     *
+     * @param array $products
+     * @return void
+     */
+    protected function addToWishlist(array $products)
+    {
+        foreach ($products as $product) {
+            $this->browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html');
+            $this->catalogProductView->getViewBlock()->addToWishlist();
+        }
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest.php
index cd9bcf388f7..7398ee2c6d7 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest.php
@@ -25,14 +25,8 @@
 namespace Magento\Wishlist\Test\TestCase;
 
 use Mtf\ObjectManager;
-use Mtf\Client\Browser;
-use Mtf\TestCase\Injectable;
-use Mtf\Fixture\FixtureFactory;
-use Magento\Cms\Test\Page\CmsIndex;
 use Magento\Checkout\Test\Fixture\Cart;
-use Magento\Wishlist\Test\Page\WishlistIndex;
 use Magento\Customer\Test\Fixture\CustomerInjectable;
-use Magento\Catalog\Test\Page\Product\CatalogProductView;
 
 /**
  * Test Creation for Adding products from Wishlist to Cart
@@ -53,77 +47,8 @@ use Magento\Catalog\Test\Page\Product\CatalogProductView;
  * @group Wishlist_(CS)
  * @ZephyrId MAGETWO-25268
  */
-class AddProductsToCartFromCustomerWishlistOnFrontendTest extends Injectable
+class AddProductsToCartFromCustomerWishlistOnFrontendTest extends AbstractWishlistOnFrontend
 {
-    /**
-     * Object Manager
-     *
-     * @var ObjectManager
-     */
-    protected $objectManager;
-
-    /**
-     * Cms index page
-     *
-     * @var CmsIndex
-     */
-    protected $cmsIndex;
-
-    /**
-     * Product view page
-     *
-     * @var CatalogProductView
-     */
-    protected $catalogProductView;
-
-    /**
-     * Fixture factory
-     *
-     * @var FixtureFactory
-     */
-    protected $fixtureFactory;
-
-    /**
-     * Browser
-     *
-     * @var Browser
-     */
-    protected $browser;
-
-    /**
-     * Wishlist index page
-     *
-     * @var WishlistIndex
-     */
-    protected $wishlistIndex;
-
-    /**
-     * Injection data
-     *
-     * @param CmsIndex $cmsIndex
-     * @param CatalogProductView $catalogProductView
-     * @param FixtureFactory $fixtureFactory
-     * @param Browser $browser
-     * @param WishlistIndex $wishlistIndex
-     * @param ObjectManager $objectManager
-     * @return void
-     */
-    public function __inject(
-        CmsIndex $cmsIndex,
-        CatalogProductView $catalogProductView,
-        FixtureFactory $fixtureFactory,
-        Browser $browser,
-        WishlistIndex $wishlistIndex,
-        ObjectManager $objectManager
-    ) {
-        $this->cmsIndex = $cmsIndex;
-        $this->catalogProductView = $catalogProductView;
-        $this->fixtureFactory = $fixtureFactory;
-        $this->browser = $browser;
-        $this->wishlistIndex = $wishlistIndex;
-        $this->objectManager = $objectManager;
-    }
-
     /**
      * Run suggest searching result test
      *
@@ -149,51 +74,6 @@ class AddProductsToCartFromCustomerWishlistOnFrontendTest extends Injectable
         return ['products' => $products, 'customer' => $customer, 'cart' => $cart];
     }
 
-    /**
-     * Login customer
-     *
-     * @param CustomerInjectable $customer
-     * @return void
-     */
-    protected function loginCustomer(CustomerInjectable $customer)
-    {
-        $loginCustomerOnFrontendStep = $this->objectManager->create(
-            'Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep',
-            ['customer' => $customer]
-        );
-        $loginCustomerOnFrontendStep->run();
-    }
-
-    /**
-     * Create products
-     *
-     * @param string $products
-     * @return array
-     */
-    protected function createProducts($products)
-    {
-        $createProductsStep = $this->objectManager->create(
-            'Magento\Catalog\Test\TestStep\CreateProductsStep',
-            ['products' => $products]
-        );
-
-        return $createProductsStep->run()['products'];
-    }
-
-    /**
-     * Add products to wish list
-     *
-     * @param array $products
-     * @return void
-     */
-    protected function addToWishlist(array $products)
-    {
-        foreach ($products as $product) {
-            $this->browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html');
-            $this->catalogProductView->getViewBlock()->addToWishlist();
-        }
-    }
-
     /**
      * Add products from wish list to cart
      *
@@ -206,11 +86,10 @@ class AddProductsToCartFromCustomerWishlistOnFrontendTest extends Injectable
         foreach ($products as $product) {
             $this->cmsIndex->getLinksBlock()->openLink("My Wish List");
             if ($qty != '-') {
-                $this->wishlistIndex->getItemsBlock()->getItemProductByName($product->getName())
-                    ->fillProduct(['qty' => $qty]);
+                $this->wishlistIndex->getItemsBlock()->getItemProduct($product)->fillProduct(['qty' => $qty]);
                 $this->wishlistIndex->getWishlistBlock()->clickUpdateWishlist();
             }
-            $this->wishlistIndex->getItemsBlock()->getItemProductByName($product->getName())->clickAddToCart();
+            $this->wishlistIndex->getItemsBlock()->getItemProduct($product)->clickAddToCart();
             if (strpos($this->browser->getUrl(), 'checkout/cart/') === false) {
                 $this->catalogProductView->getViewBlock()->addToCart($product);
             }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest/test.csv b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest/test.csv
index 3a96f1fbf2b..b40743fd363 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest/test.csv
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/AddProductsToCartFromCustomerWishlistOnFrontendTest/test.csv
@@ -2,3 +2,8 @@
 "catalogProductSimple::100_dollar_product";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
 "catalogProductVirtual::50_dollar_product";"1";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
 "catalogProductSimple::default,catalogProductVirtual::50_dollar_product,catalogProductSimple::default,catalogProductVirtual::50_dollar_product";"-";"assertProductQtyInShoppingCart, assertWishlistIsEmpty"
+"groupedProductInjectable::three_simple_products";"-";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
+"downloadableProductInjectable::with_two_separately_links";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
+"configurableProductInjectable::default";"3";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
+"bundleProduct::bundle_dynamic_product";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
+"bundleProduct::bundle_fixed_product";"2";"assertProductQtyInShoppingCart, assertProductsIsAbsentInWishlist"
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest.php
new file mode 100644
index 00000000000..82731761118
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magentocommerce.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magentocommerce.com for more information.
+ *
+ * @copyright   Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+namespace Magento\Wishlist\Test\TestCase;
+
+use Magento\Customer\Test\Fixture\CustomerInjectable;
+
+/**
+ * Test Creation for DeleteProductsFromWishlist
+ *
+ * Test Flow:
+ *
+ * Preconditions:
+ * 1. Customer registered
+ * 2. Products are created
+ *
+ * Steps:
+ * 1. Login as customer
+ * 2. Add products to Wishlist
+ * 3. Navigate to My Account -> My Wishlist
+ * 4. Click "Remove item"
+ * 5. Perform all assertions
+ *
+ * @group Wishlist_(CS)
+ * @ZephyrId MAGETWO-28874
+ */
+class DeleteProductsFromWishlistOnFrontendTest extends AbstractWishlistOnFrontend
+{
+    /**
+     * Delete products form default wish list
+     *
+     * @param CustomerInjectable $customer
+     * @param string $products
+     * @param string $removedProductsIndex [optional]
+     * @return array
+     */
+    public function test(CustomerInjectable $customer, $products, $removedProductsIndex = null)
+    {
+        // Preconditions
+        $customer->persist();
+        $this->loginCustomer($customer);
+        $products = $this->createProducts($products);
+        $this->addToWishlist($products);
+
+        // Steps
+        $this->cmsIndex->getLinksBlock()->openLink("My Wish List");
+        $removeProducts = $this->removeProducts($products, $removedProductsIndex);
+
+        return ['products' => $removeProducts, 'customer' => $customer];
+    }
+
+    /**
+     * Remove products from wish list
+     *
+     * @param array $products
+     * @param string $removedProductsIndex
+     * @return array
+     */
+    protected function removeProducts(array $products, $removedProductsIndex)
+    {
+        $removeProducts = [];
+        if ($removedProductsIndex) {
+            $removedProductsIndex = explode(',', $removedProductsIndex);
+            foreach ($removedProductsIndex as $index) {
+                $this->wishlistIndex->getItemsBlock()->getItemProduct($products[--$index])->remove();
+                $removeProducts[] = $products[$index];
+            }
+        } else {
+            $this->wishlistIndex->getItemsBlock()->removeAllProducts();
+            $removeProducts = $products;
+        }
+
+        return $removeProducts;
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest/test.csv b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest/test.csv
new file mode 100644
index 00000000000..a07c9bb3ae2
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/TestCase/DeleteProductsFromWishlistOnFrontendTest/test.csv
@@ -0,0 +1,9 @@
+"products";"removedProductsIndex";"constraint"
+"catalogProductSimple::100_dollar_product,catalogProductVirtual::50_dollar_product";"1";"assertProductsIsAbsentInWishlist"
+"catalogProductVirtual::50_dollar_product";"1";"assertWishlistIsEmpty"
+"catalogProductSimple::default,catalogProductVirtual::50_dollar_product,catalogProductSimple::default,catalogProductVirtual::50_dollar_product";"";"assertWishlistIsEmpty"
+"bundleProduct::bundle_dynamic_product";"1";"assertWishlistIsEmpty"
+"bundleProduct::bundle_fixed_product";"1";"assertWishlistIsEmpty"
+"configurableProductInjectable::default";"1";"assertWishlistIsEmpty"
+"downloadableProductInjectable::with_two_separately_links";"1";"assertWishlistIsEmpty"
+"groupedProductInjectable::three_simple_products";"1";"assertWishlistIsEmpty"
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php b/dev/tests/integration/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php
index 1d3538e9684..3ae21e32bfd 100755
--- a/dev/tests/integration/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php
@@ -29,6 +29,7 @@ use Magento\Customer\Service\V1;
 use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Service\V1\Data\SearchCriteria;
+use Magento\Framework\Exception\State\ExpiredException;
 use Magento\TestFramework\Helper\Bootstrap;
 
 /**
@@ -407,15 +408,11 @@ class CustomerAccountServiceTest extends \PHPUnit_Framework_TestCase
         $password = 'new_password';
 
         $this->setResetPasswordData($resetToken, 'Y-m-d');
-        $this->_customerAccountService->resetPassword(1, $resetToken, $password);
-        //TODO assert
+        $this->assertTrue($this->_customerAccountService->resetPassword(1, $resetToken, $password));
     }
 
-
-
     /**
      * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @expectedException \Magento\Framework\Exception\State\ExpiredException
      */
     public function testResetPasswordTokenExpired()
     {
@@ -423,7 +420,12 @@ class CustomerAccountServiceTest extends \PHPUnit_Framework_TestCase
         $password = 'new_password';
 
         $this->setResetPasswordData($resetToken, '1970-01-01');
-        $this->_customerAccountService->resetPassword(1, $resetToken, $password);
+        try {
+            $this->_customerAccountService->resetPassword(1, $resetToken, $password);
+            $this->fail('Expected exception not thrown.');
+        } catch (ExpiredException $e) {
+            $this->assertEquals('Reset password token expired.', $e->getMessage());
+        }
     }
 
     /**
diff --git a/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteServiceTest.php b/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteServiceTest.php
index feaaac019cd..f7b8fa6fd8e 100644
--- a/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteServiceTest.php
+++ b/dev/tests/unit/testsuite/Magento/ConfigurableProduct/Service/V1/Product/Option/WriteServiceTest.php
@@ -61,6 +61,11 @@ class WriteServiceTest extends \PHPUnit_Framework_TestCase
      */
     protected $optionBuilder;
 
+    /**
+     * @var \Magento\ConfigurableProduct\Service\V1\Data\Option\ValueBuilder
+     */
+    protected $optionValueBuilder;
+
     /**
      * @var \Magento\ConfigurableProduct\Service\V1\Product\Option\WriteService
      */
@@ -164,8 +169,12 @@ class WriteServiceTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->optionBuilder = $this->objectManager
-            ->getObject('Magento\ConfigurableProduct\Service\V1\Data\OptionBuilder');
+        $this->optionBuilder = $this->objectManager->getObject(
+            'Magento\ConfigurableProduct\Service\V1\Data\OptionBuilder'
+        );
+        $this->optionValueBuilder = $this->objectManager->getObject(
+            'Magento\ConfigurableProduct\Service\V1\Data\Option\ValueBuilder'
+        );
     }
 
     /**
@@ -518,9 +527,9 @@ class WriteServiceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Magento\Webapi\Exception
+     * @expectedException \Magento\Framework\Exception\InputException
      */
-    public function testRemoveWebApiException()
+    public function testRemoveInputException()
     {
         $productSku = 'productSku';
 
@@ -543,19 +552,20 @@ class WriteServiceTest extends \PHPUnit_Framework_TestCase
      */
     private function getOption()
     {
+        $optionValueData = [
+            'index' => 1,
+            'price' => 12,
+            'percent' => true
+        ];
+        $optionValue = $this->optionValueBuilder->populateWithArray($optionValueData)->create();
         $data = [
             Option::ID => 1,
             Option::ATTRIBUTE_ID => 2,
             Option::LABEL => 'Test Label',
             Option::POSITION => 1,
+            Option::TYPE => 'select',
             Option::USE_DEFAULT => true,
-            Option::VALUES => [
-                [
-                    'index' => 1,
-                    'price' => 12,
-                    'percent' => true
-                ]
-            ]
+            Option::VALUES => [$optionValue]
         ];
 
         return $this->optionBuilder->populateWithArray($data)->create();
diff --git a/dev/tests/unit/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php b/dev/tests/unit/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php
index 3064eb42201..71be3818d05 100755
--- a/dev/tests/unit/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php
+++ b/dev/tests/unit/testsuite/Magento/Customer/Service/V1/CustomerAccountServiceTest.php
@@ -907,7 +907,7 @@ class CustomerAccountServiceTest extends \PHPUnit_Framework_TestCase
 
         $customerService = $this->_createService();
 
-        $customerService->resetPassword(self::ID, $resetToken, $password);
+        $this->assertTrue($customerService->resetPassword(self::ID, $resetToken, $password));
     }
 
     public function testResetPasswordShortPassword()
diff --git a/dev/tests/unit/testsuite/Magento/Integration/Oauth/OauthTest.php b/dev/tests/unit/testsuite/Magento/Integration/Oauth/OauthTest.php
index 6464cf29a30..bc0e716f2a4 100644
--- a/dev/tests/unit/testsuite/Magento/Integration/Oauth/OauthTest.php
+++ b/dev/tests/unit/testsuite/Magento/Integration/Oauth/OauthTest.php
@@ -299,12 +299,11 @@ class OauthTest extends \PHPUnit_Framework_TestCase
     /**
      * \Magento\Framework\Oauth\OauthInterface::ERR_TIMESTAMP_REFUSED
      *
-     * @expectedException \Magento\Framework\Oauth\OauthInputException
+     * @expectedException \Magento\Framework\Oauth\Exception
      * @dataProvider dataProviderForGetRequestTokenNonceTimestampRefusedTest
      */
     public function testGetRequestTokenOauthTimestampRefused($timestamp)
     {
-        $this->markTestIncomplete('MAGETWO-19388');
         $this->_setupConsumer();
         $this->_makeValidExpirationPeriod();
 
@@ -316,7 +315,11 @@ class OauthTest extends \PHPUnit_Framework_TestCase
 
     public function dataProviderForGetRequestTokenNonceTimestampRefusedTest()
     {
-        return array(array(0), array(time() + \Magento\Integration\Model\Oauth\Nonce\Generator::TIME_DEVIATION * 2));
+        return array(
+            array(0),
+            //Adding one day deviation
+            array(time() + \Magento\Integration\Model\Oauth\Nonce\Generator::TIME_DEVIATION + 86400)
+        );
     }
 
     protected function _setupNonce($isUsed = false, $timestamp = 0)
diff --git a/dev/tests/unit/testsuite/Magento/Paypal/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/Paypal/Model/ObserverTest.php
index 4ebab2db2d6..8e7d2561c52 100644
--- a/dev/tests/unit/testsuite/Magento/Paypal/Model/ObserverTest.php
+++ b/dev/tests/unit/testsuite/Magento/Paypal/Model/ObserverTest.php
@@ -93,6 +93,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
             array('createBlock')
         )->disableOriginalConstructor()->getMock();
         $blocks = [
+            'Magento\Paypal\Block\Express\ShortcutContainer' => 'Magento\Paypal\Block\Express\Shortcut',
             'Magento\Paypal\Block\Express\Shortcut' => 'Magento\Paypal\Block\Express\Shortcut',
             'Magento\Paypal\Block\PayflowExpress\Shortcut' => 'Magento\Paypal\Block\Express\Shortcut',
             'Magento\Paypal\Block\Bml\Shortcut' => 'Magento\Paypal\Block\Bml\Shortcut',
@@ -127,10 +128,6 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
         }
         $this->_event->setContainer($shortcutButtonsMock);
         $this->_model->addPaypalShortcuts($this->_observer);
-
-        foreach ($blockInstances as $instance) {
-            $this->assertEquals(\Magento\Paypal\Model\Observer::SHORTCUT_TEMPLATE, $instance->getTemplate());
-        }
     }
 
     public function testAddBillingAgreementToSessionNoData()
diff --git a/lib/internal/Magento/Framework/AppInterface.php b/lib/internal/Magento/Framework/AppInterface.php
index 99077829922..d77e3162d14 100644
--- a/lib/internal/Magento/Framework/AppInterface.php
+++ b/lib/internal/Magento/Framework/AppInterface.php
@@ -35,7 +35,7 @@ interface AppInterface
     /**
      * Magento version
      */
-    const VERSION = '0.1.0-alpha97';
+    const VERSION = '0.1.0-alpha98';
 
     /**
      * Launch application
diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json
index 4d1fc04ca6b..3474d1778fd 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.1.0-alpha97",
+    "version": "0.1.0-alpha98",
     "require": {
         "php": "~5.4.11|~5.5.0",
         "ext-spl": "*",
-- 
GitLab