diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Command/Cli/Setup.php b/dev/tests/functional/lib/Magento/Mtf/Util/Command/Cli/Setup.php
new file mode 100644
index 0000000000000000000000000000000000000000..ceb84eb46acc97c590440e2f7f5e6031ddc969b4
--- /dev/null
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Command/Cli/Setup.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Mtf\Util\Command\Cli;
+
+use Magento\Mtf\Util\Command\Cli;
+
+/**
+ * Setup Magento for tests executions.
+ */
+class Setup extends Cli
+{
+    /**
+     * Parameter for uninstall Magento command.
+     */
+    const PARAM_SETUP_UNINSTALL = 'setup:uninstall';
+
+    /**
+     * Options for uninstall Magento command.
+     *
+     * @var array
+     */
+    private $options = ['-n'];
+
+    /**
+     * Uninstall Magento.
+     *
+     * @return void
+     */
+    public function uninstall()
+    {
+        parent::execute(Setup::PARAM_SETUP_UNINSTALL, $this->options);
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Attribute.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Attribute.php
deleted file mode 100644
index ca29475c03c90181f7caa0849e11a7639b023158..0000000000000000000000000000000000000000
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Attribute.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action;
-
-use Magento\Mtf\Fixture\FixtureInterface;
-use Magento\Mtf\Block\Form;
-use Magento\Mtf\Client\Element\SimpleElement;
-
-/**
- * Product attribute massaction edit page.
- */
-class Attribute extends Form
-{
-    /**
-     * Fill the root form.
-     *
-     * @param FixtureInterface $fixture
-     * @param SimpleElement|null $element
-     * @return $this
-     */
-    public function fill(FixtureInterface $fixture, SimpleElement $element = null)
-    {
-        $data = $fixture->getData();
-        $fields = [];
-        foreach ($data as $name => $dataValue) {
-            $fields['toggle_' . $name] = 'Yes';
-            $fields[$name] = $dataValue;
-        }
-        $mapping = $this->dataMapping($fields);
-        $this->_fill($mapping, $element);
-
-        return $this;
-    }
-}
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Attribute.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Attribute.xml
deleted file mode 100644
index 59b367e49bd66b8dce3cfb1e25dc4b46f9e2eff8..0000000000000000000000000000000000000000
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Attribute.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" ?>
-<!--
-/**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<mapping strict="0">
-    <wrapper>attributes</wrapper>
-    <fields>
-        <toggle_price>
-            <selector>[name='toggle_price']</selector>
-            <input>checkbox</input>
-        </toggle_price>
-        <price />
-    </fields>
-</mapping>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Tab/UpdateAttributeTab.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Tab/UpdateAttributeTab.php
new file mode 100644
index 0000000000000000000000000000000000000000..d61c2001a2096ebaedd895a0c483d5a93a9ae8bd
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/Tab/UpdateAttributeTab.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action\Tab;
+
+use Magento\Mtf\Client\Element\SimpleElement;
+use Magento\Mtf\Client\Locator;
+use Magento\Backend\Test\Block\Widget\Tab;
+
+/**
+ * Tab on Product update attributes Form.
+ */
+class UpdateAttributeTab extends Tab
+{
+    /**
+     * Change checkbox.
+     *
+     * @var string
+     */
+    private $changeCheckbox = [
+        'selector' => './/./ancestor::div[contains(@class,"control")]'
+            . '//input[@data-role="toggle-editability-all" or contains(@id, "toggle_")]',
+        'strategy' => Locator::SELECTOR_XPATH,
+        'input' => 'checkbox',
+        'value' => 'Yes',
+    ];
+
+    /**
+     * Fill data into fields in the container.
+     *
+     * @param array $fields
+     * @param SimpleElement|null $contextElement
+     * @return $this
+     */
+    public function setFieldsData(array $fields, SimpleElement $contextElement = null)
+    {
+        $context = ($contextElement === null) ? $this->_rootElement : $contextElement;
+        $mapping = $this->dataMapping($fields);
+        foreach ($mapping as $field) {
+            $this->_fill([$this->changeCheckbox], $context->find($field['selector'], $field['strategy']));
+            $this->_fill([$field], $context);
+        }
+
+        return $this;
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/UpdateAttributeForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/UpdateAttributeForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..a264c491de43aa6fdfd22eb98793316e79996054
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/UpdateAttributeForm.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action;
+
+use Magento\Backend\Test\Block\Widget\FormTabs;
+
+/**
+ * Product update Attributes Form.
+ */
+class UpdateAttributeForm extends FormTabs
+{
+    //
+}
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/UpdateAttributeForm.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/UpdateAttributeForm.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba8effd797a3dc85e92601fd7037815ef02c91a9
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Action/UpdateAttributeForm.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<tabs>
+    <product-details>
+        <class>Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action\Tab\UpdateAttributeTab</class>
+        <selector>#attributes_update_tabs_attributes</selector>
+        <fields>
+            <price>
+                <selector>#price</selector>
+            </price>
+        </fields>
+    </product-details>
+    <advanced-inventory>
+        <class>Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action\Tab\UpdateAttributeTab</class>
+        <selector>#attributes_update_tabs_inventory</selector>
+        <fields>
+            <stock_data>
+                <selector>#inventory_stock_availability</selector>
+                <input>select</input>
+            </stock_data>
+        </fields>
+    </advanced-inventory>
+</tabs>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
index d5e81ad56fd3290ef906c8cb141da8e583757c24..db73f7cc87f177fb1eb05f0184b238cb82cd47f1 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
@@ -7,6 +7,7 @@
 namespace Magento\Catalog\Test\Block\Adminhtml\Product;
 
 use Magento\Ui\Test\Block\Adminhtml\DataGrid;
+use Magento\Mtf\Fixture\FixtureInterface;
 
 /**
  * Backend catalog product grid.
@@ -72,12 +73,17 @@ class Grid extends DataGrid
     /**
      * Update attributes for selected items.
      *
-     * @param array $items [optional]
+     * @param array $items
      * @return void
      */
     public function updateAttributes(array $items = [])
     {
-        $this->massaction($items, 'Update attributes');
+        $products = [];
+        /** @var FixtureInterface $product */
+        foreach ($items as $product) {
+            $products[] = ["sku" => $product->getSku()];
+        }
+        $this->massaction($products, 'Update attributes');
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php
index 1666244802ed2e81c5375c2d41b0df0dff0a0191..df326a9ca0023a3c3fbeb45a2c960e88d9fffc32 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php
@@ -23,13 +23,12 @@ class AssertMassProductUpdateSuccessMessage extends AbstractConstraint
      * Assert that after mass update successful message appears.
      *
      * @param CatalogProductIndex $productGrid
-     * @param array $products
+     * @param int $productsCount
      * @return void
      */
-    public function processAssert(CatalogProductIndex $productGrid, $products = [])
+    public function processAssert(CatalogProductIndex $productGrid, $productsCount)
     {
-        $countProducts = count($products) ? count($products) : 1;
-        $expectedMessage = sprintf(self::SUCCESS_MESSAGE, $countProducts);
+        $expectedMessage = sprintf(self::SUCCESS_MESSAGE, $productsCount);
         $actualMessage = $productGrid->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductsInStock.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductsInStock.php
new file mode 100644
index 0000000000000000000000000000000000000000..f485076d5c018b97dfc67624d505bb617929b901
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductsInStock.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Test\Constraint;
+
+use Magento\Catalog\Test\Page\Product\CatalogProductView;
+use Magento\Mtf\Client\BrowserInterface;
+use Magento\Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Assert that all products are in stock.
+ */
+class AssertProductsInStock extends AbstractConstraint
+{
+    /**
+     * Assert that In Stock status is displayed for products.
+     *
+     * @param CatalogProductView $catalogProductView
+     * @param BrowserInterface $browser
+     * @param AssertProductInStock $assertProductInStock
+     * @param array $products
+     * @return void
+     */
+    public function processAssert(
+        CatalogProductView $catalogProductView,
+        BrowserInterface $browser,
+        AssertProductInStock $assertProductInStock,
+        array $products
+    ) {
+        foreach ($products as $product) {
+            $assertProductInStock->processAssert($catalogProductView, $browser, $product);
+        }
+    }
+
+    /**
+     * Returns a string representation of the object.
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return 'In stock control is visible for each product.';
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductActionAttributeEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductActionAttributeEdit.xml
index e875bdc0817e9bcd97b4c933de90ede7498aec7a..1ff06177a5a20b716f1a24201a785c1ff12eecd6 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductActionAttributeEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductActionAttributeEdit.xml
@@ -7,7 +7,7 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
     <page name="CatalogProductActionAttributeEdit" area="Adminhtml" mca="catalog/product_action_attribute/edit" module="Magento_Catalog">
-        <block name="attributesBlockForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action\Attribute" locator="body" strategy="css selector" />
+        <block name="attributesBlockForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action\UpdateAttributeForm" locator="body" strategy="css selector" />
         <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Action\FormPageActions" locator=".page-main-actions" strategy="css selector" />
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/TierPrice.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/TierPrice.xml
index bdfb5deabe5c2828b947130284f0308353fa6bdc..412818cbe40e71634eb1e635d8dc8e1630913b49 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/TierPrice.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/TierPrice.xml
@@ -66,5 +66,16 @@
                 </item>
             </field>
         </dataset>
+
+        <dataset name="not_logged_in">
+            <field name="0" xsi:type="array">
+                <item name="price" xsi:type="string">90</item>
+                <item name="website" xsi:type="string">All Websites [USD]</item>
+                <item name="price_qty" xsi:type="string">2</item>
+                <item name="customer_group" xsi:type="array">
+                    <item name="dataset" xsi:type="string">NOT_LOGGED_IN</item>
+                </item>
+            </field>
+        </dataset>
     </repository>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml
index 77d4ee802e1373570a77f5e136c18c5ba393ae4d..9e410c525deef720573e7c93e0de4d463b9b2ac7 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml
@@ -168,7 +168,7 @@
             <data name="product/data/url_key" xsi:type="string">simple-product-%isolation%</data>
             <data name="product/data/name" xsi:type="string">Simple Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">simple_sku_%isolation%</data>
-            <data name="product/data/price/value" xsi:type="string">10008</data>
+            <data name="product/data/price/value" xsi:type="string">10008.88</data>
             <data name="product/data/short_description" xsi:type="string">Simple Product short_description %isolation%</data>
             <data name="product/data/description" xsi:type="string">Simple Product description %isolation%</data>
             <data name="product/data/weight" xsi:type="string">58</data>
@@ -461,6 +461,28 @@
             <data name="product/data/country_of_manufacture" xsi:type="string">Antarctica</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
         </variation>
+        <variation name="CreateSimpleProductEntityTestVariation28" summary="Create product with tier price for not logged in customer">
+            <data name="product/data/url_key" xsi:type="string">simple-product-%isolation%</data>
+            <data name="product/data/name" xsi:type="string">Simple Product %isolation%</data>
+            <data name="product/data/sku" xsi:type="string">simple_sku_%isolation%</data>
+            <data name="product/data/price/value" xsi:type="string">100</data>
+            <data name="product/data/weight" xsi:type="string">50</data>
+            <data name="product/data/quantity_and_stock_status/qty" xsi:type="string">667</data>
+            <data name="product/data/tier_price/dataset" xsi:type="string">not_logged_in</data>
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTierPriceOnProductPage" />
+        </variation>
+        <variation name="CreateSimpleProductEntityTestVariation29" summary="Create Simple Product and assign it to custom website">
+            <data name="product/data/url_key" xsi:type="string">simple-product-%isolation%</data>
+            <data name="product/data/name" xsi:type="string">Simple Product %isolation%</data>
+            <data name="product/data/sku" xsi:type="string">simple_sku_%isolation%</data>
+            <data name="product/data/price/value" xsi:type="string">200.20</data>
+            <data name="product/data/weight" xsi:type="string">50</data>
+            <data name="product/data/quantity_and_stock_status/qty" xsi:type="string">668</data>
+            <data name="product/data/website_ids/0/dataset" xsi:type="string">custom_store</data>
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductOnCustomWebsite" />
+        </variation>
         <variation name="CreateSimpleProductEntityWithEmptySkuMaskTest1"  summary="Create Simple Product Entity With Empty Sku Mask" ticketId="MAGETWO-58951">
             <data name="configData" xsi:type="string">empty_product_mask_sku</data>
             <data name="description" xsi:type="string">Create product with custom options(fixed price)</data>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.php
index f7fd82e3342bfdce8760c253215ad8189ef33643..9c38ff1b479fe6a02f2217572bea170b1906f00d 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.php
@@ -6,10 +6,13 @@
 
 namespace Magento\Catalog\Test\TestCase\Product;
 
+use Magento\Mtf\Fixture\FixtureFactory;
+use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\TestCase\Injectable;
 use Magento\Catalog\Test\Fixture\CatalogProductSimple;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductActionAttributeEdit;
+use Magento\Mtf\TestStep\TestStepFactory;
 
 /**
  * Precondition:
@@ -58,35 +61,58 @@ class MassProductUpdateTest extends Injectable
      */
     protected $configData;
 
+    /**
+     * Factory for Test Steps.
+     *
+     * @var TestStepFactory
+     */
+    private $testStepFactory;
+
+    /**
+     * Factory for Fixtures.
+     *
+     * @var FixtureFactory
+     */
+    private $fixtureFactory;
+
     /**
      * Injection data.
      *
      * @param CatalogProductIndex $productGrid
      * @param CatalogProductActionAttributeEdit $attributeMassActionPage
+     * @param TestStepFactory $testStepFactory
+     * @param FixtureFactory $fixtureFactory
      * @return void
      */
     public function __inject(
         CatalogProductIndex $productGrid,
-        CatalogProductActionAttributeEdit $attributeMassActionPage
+        CatalogProductActionAttributeEdit $attributeMassActionPage,
+        TestStepFactory $testStepFactory,
+        FixtureFactory $fixtureFactory
     ) {
         $this->productGrid = $productGrid;
         $this->attributeMassActionPage = $attributeMassActionPage;
+        $this->testStepFactory = $testStepFactory;
+        $this->fixtureFactory = $fixtureFactory;
     }
 
     /**
      * Run mass update product simple entity test.
      *
-     * @param CatalogProductSimple $initialProduct
      * @param CatalogProductSimple $product
      * @param string $configData
+     * @param array $initialProducts
      * @return array
      */
-    public function test(CatalogProductSimple $initialProduct, CatalogProductSimple $product, $configData)
+    public function test(CatalogProductSimple $product, $configData, array $initialProducts)
     {
         $this->configData = $configData;
 
         // Preconditions
-        $initialProduct->persist();
+        $products = $this->testStepFactory->create(
+            \Magento\Catalog\Test\TestStep\CreateProductsStep::class,
+            ['products' => $initialProducts]
+        )->run()['products'];
 
         $this->objectManager->create(
             \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
@@ -95,19 +121,33 @@ class MassProductUpdateTest extends Injectable
 
         // Steps
         $this->productGrid->open();
-        $this->productGrid->getProductGrid()->updateAttributes([['sku' => $initialProduct->getSku()]]);
+        $this->productGrid->getProductGrid()->updateAttributes($products);
         $this->attributeMassActionPage->getAttributesBlockForm()->fill($product);
         $this->attributeMassActionPage->getFormPageActions()->save();
-        $data = array_merge($initialProduct->getData(), $product->getData());
-        $product = $this->objectManager->create(
-            \Magento\Catalog\Test\Fixture\CatalogProductSimple::class,
-            ['data' => $data]
-        );
-
-        return [
-            'category' => $initialProduct->getDataFieldConfig('category_ids')['source']->getCategories()[0],
-            'product' => $product,
-        ];
+        $updatedProducts = $this->prepareUpdatedProducts($products, $product);
+        
+        return ['products' => $updatedProducts];
+    }
+
+    /**
+     * Prepare updated products.
+     *
+     * @param array $products
+     * @param CatalogProductSimple $product
+     * @return array
+     */
+    private function prepareUpdatedProducts(array $products, CatalogProductSimple $product)
+    {
+        $productsReturn = [];
+        /** @var FixtureInterface $item */
+        foreach ($products as $item) {
+            $productsReturn[] = $this->fixtureFactory->create(
+                get_class($item),
+                ['data' => array_merge($item->getData(), $product->getData())]
+            );
+        }
+
+        return $productsReturn;
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.xml
index 6f937999f3c34cc172b3552b6280b7563d07a1d1..5435ea89669f6f1a3d0d3d98cb8e1a5bb5aabed0 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/MassProductUpdateTest.xml
@@ -9,11 +9,12 @@
     <testCase name="Magento\Catalog\Test\TestCase\Product\MassProductUpdateTest" summary="Edit Products Using Mass Actions" ticketId="MAGETWO-21128">
         <variation name="MassProductPriceUpdateTestVariation1">
             <data name="configData" xsi:type="string">product_flat</data>
-            <data name="initialProduct/dataset" xsi:type="string">simple_10_dollar</data>
+            <data name="initialProducts/0" xsi:type="string">catalogProductSimple::simple_10_dollar</data>
+            <data name="initialProducts/1" xsi:type="string">catalogProductSimple::simple_10_dollar</data>
+            <data name="productsCount" xsi:type="number">2</data>
             <data name="product/data/price/value" xsi:type="string">1.99</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertMassProductUpdateSuccessMessage" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductInGrid" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductInCategory" />
         </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UpdateSimpleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UpdateSimpleProductEntityTest.xml
index 323246949d1a55825bfe49317af6662be585d15c..0395f9f5ed8cf83c0aa570252cc5ed7df32da3c8 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UpdateSimpleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/UpdateSimpleProductEntityTest.xml
@@ -145,5 +145,19 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductInGrid" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductInCategory" />
         </variation>
+        <variation name="EditSimpleProductTestVariation11" summary="Update simple product with custom option">
+            <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
+            <data name="product/data/name" xsi:type="string">Test simple product %isolation%</data>
+            <data name="product/data/sku" xsi:type="string">test_simple_product_%isolation%</data>
+            <data name="product/data/price/value" xsi:type="string">245.00</data>
+            <data name="product/data/quantity_and_stock_status/qty" xsi:type="string">200</data>
+            <data name="product/data/custom_options/dataset" xsi:type="string">drop_down_with_one_option_percent_price</data>
+            <data name="product/data/checkout_data/dataset" xsi:type="string">simple_drop_down_with_one_option_percent_price</data>
+            <data name="product/data/url_key" xsi:type="string">test-simple-product-%isolation%</data>
+            <data name="product/data/weight" xsi:type="string">120.0000</data>
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductInCart" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
index e8178d07a1e9e26b6494d0b06551149636e4e4c1..697733fd3c33d8856f5d775452aca8ad977e77e9 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart.php
@@ -129,7 +129,7 @@ class Cart extends Block
                 Locator::SELECTOR_XPATH
             );
             $cartItem = $this->blockFactory->create(
-                \Magento\Checkout\Test\Block\Cart\CartItem::class,
+                '\\' . get_class($this) . '\CartItem',
                 ['element' => $cartItemBlock]
             );
         }
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Totals.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Totals.php
index 2cf6d5ad87dfff1d9f5c96b9ed40414abb822d44..240ae1c183201f2c479564b5dfad59a274e84b9d 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Totals.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Totals.php
@@ -240,7 +240,7 @@ class Totals extends Block
      */
     public function isVisibleShippingPriceBlock()
     {
-        return  $this->_rootElement->find($this->shippingPriceBlockSelector, Locator::SELECTOR_CSS)->isVisible();
+        return $this->_rootElement->find($this->shippingPriceBlockSelector, Locator::SELECTOR_CSS)->isVisible();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Grid.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Grid.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6fa3271ea6cd60d1f8ae7e509a3c873344e7e7d
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Grid.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\ConfigurableProduct\Test\Block\Adminhtml\Product;
+
+use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct;
+
+/**
+ * Backend catalog product grid.
+ */
+class Grid extends \Magento\Catalog\Test\Block\Adminhtml\Product\Grid
+{
+    /**
+     * Prepare data.
+     *
+     * @param ConfigurableProduct $product
+     * @return array
+     */
+    public function prepareData($product)
+    {
+        $configurableAttributesData = $product->getConfigurableAttributesData();
+        $productItems[] = ['sku' => $product->getSku()];
+        foreach ($configurableAttributesData['matrix'] as $variation) {
+            $productItems[] = ['sku' => $variation['sku']];
+        }
+
+        return $productItems;
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml
index 2a3703a10607554c2682f19b036201cc700dc477..4a69a7604bca3d74119b07bdcea3b2115a1f6648 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml
@@ -41,6 +41,35 @@
             </field>
         </dataset>
 
+        <dataset name="out_of_stock">
+            <field name="name" xsi:type="string">Test configurable product %isolation%</field>
+            <field name="sku" xsi:type="string">sku_test_configurable_product_%isolation%</field>
+            <field name="price" xsi:type="array">
+                <item name="value" xsi:type="string">40</item>
+                <item name="dataset" xsi:type="string">price_40</item>
+            </field>
+            <field name="status" xsi:type="string">Yes</field>
+            <field name="visibility" xsi:type="string">Catalog, Search</field>
+            <field name="tax_class_id" xsi:type="array">
+                <item name="dataset" xsi:type="string">taxable_goods</item>
+            </field>
+            <field name="url_key" xsi:type="string">configurable-product-%isolation%</field>
+            <field name="configurable_attributes_data" xsi:type="array">
+                <item name="dataset" xsi:type="string">two_options_with_assigned_product</item>
+            </field>
+            <field name="quantity_and_stock_status" xsi:type="array">
+                <item name="is_in_stock" xsi:type="string">Out of Stock</item>
+            </field>
+            <field name="website_ids" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="dataset" xsi:type="string">default</item>
+                </item>
+            </field>
+            <field name="attribute_set_id" xsi:type="array">
+                <item name="dataset" xsi:type="string">default</item>
+            </field>
+        </dataset>
+
         <dataset name="configurable_with_qty_1">
             <field name="name" xsi:type="string">Test configurable product %isolation%</field>
             <field name="sku" xsi:type="string">sku_test_configurable_product_%isolation%</field>
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/MassProductUpdateTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/MassProductUpdateTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3d58645d618ffe4f34beb84cd3a1d58212649148
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/MassProductUpdateTest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+ -->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
+    <testCase name="Magento\Catalog\Test\TestCase\Product\MassProductUpdateTest" summary="Edit Products Using Mass Actions" ticketId="MAGETWO-21128">
+        <variation name="MassProductUpdateTestVariation2" summary="Update stock data for simple and configurable">
+            <data name="configData" xsi:type="string">product_flat</data>
+            <data name="initialProducts/1" xsi:type="string">configurableProduct::out_of_stock</data>
+            <data name="initialProducts/0" xsi:type="string">catalogProductSimple::out_of_stock</data>
+            <data name="productsCount" xsi:type="number">2</data>
+            <data name="product/data/stock_data" xsi:type="string">In Stock</data>
+            <constraint name="Magento\Catalog\Test\Constraint\AssertMassProductUpdateSuccessMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductInGrid" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductsInStock" />
+        </variation>
+    </testCase>
+</config>
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/Block/Devdocs.php b/dev/tests/functional/tests/app/Magento/Install/Test/Block/Devdocs.php
new file mode 100644
index 0000000000000000000000000000000000000000..1be88c0bbf7b89f7dbf529456a9ee1235df1e163
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/Block/Devdocs.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Install\Test\Block;
+
+use Magento\Mtf\Block\Block;
+
+/**
+ * Developer Documentation block.
+ */
+class Devdocs extends Block
+{
+    /**
+     * Developer Documentation title.
+     *
+     * @var string
+     */
+    protected $devdocsTitle = '.page-heading';
+
+    /**
+     * Get Developer Documentation title text.
+     *
+     * @return string
+     */
+    public function getDevdocsTitle()
+    {
+        return $this->_rootElement->find($this->devdocsTitle)->getText();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/Block/Landing.php b/dev/tests/functional/tests/app/Magento/Install/Test/Block/Landing.php
index 5b92b332b26960fdfc0e285459e39b78f5c72f67..d809fb861b66c92138a3231aeae8a7bd35ea15d9 100644
--- a/dev/tests/functional/tests/app/Magento/Install/Test/Block/Landing.php
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/Block/Landing.php
@@ -14,6 +14,13 @@ use Magento\Mtf\Client\Locator;
  */
 class Landing extends Block
 {
+    /**
+     * Link by text.
+     *
+     * @var string
+     */
+    protected $linkSelector = '//a[text()="%s"]';
+
     /**
      * 'Agree and Set up Magento' button.
      *
@@ -47,4 +54,15 @@ class Landing extends Block
     {
         $this->_rootElement->find($this->termsAndAgreement, Locator::SELECTOR_CSS)->click();
     }
+    
+    /**
+     * Click on link.
+     *
+     * @param string $text
+     * @return void
+     */
+    public function clickLink($text)
+    {
+        $this->_rootElement->find(sprintf($this->linkSelector, $text), Locator::SELECTOR_XPATH)->click();
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertDevdocsLink.php b/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertDevdocsLink.php
new file mode 100644
index 0000000000000000000000000000000000000000..d397cc1882b6f39c2fa5423a9ccecbceec002aaa
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/Constraint/AssertDevdocsLink.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Install\Test\Constraint;
+
+use Magento\Install\Test\Page\DevdocsInstall;
+use Magento\Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Check Developer Documentation link.
+ */
+class AssertDevdocsLink extends AbstractConstraint
+{
+    /**
+     * Developer Documentation title.
+     */
+    const DEVDOCS_TITLE_TEXT = 'Setup Wizard installation';
+
+    /**
+     * Check Developer Documentation link.
+     *
+     * @param DevdocsInstall $devdocsInstallPage
+     * @return void
+     */
+    public function processAssert(DevdocsInstall $devdocsInstallPage)
+    {
+        \PHPUnit_Framework_Assert::assertEquals(
+            self::DEVDOCS_TITLE_TEXT,
+            $devdocsInstallPage->getDevdocsBlock()->getDevdocsTitle(),
+            'Developer Documentation link is wrong.'
+        );
+    }
+
+    /**
+     * Returns a string representation of successful assertion.
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return "Developer Documentation link is correct.";
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/Page/DevdocsInstall.xml b/dev/tests/functional/tests/app/Magento/Install/Test/Page/DevdocsInstall.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d2dc975cc2b2bd82a72b6b9e4e1d71b97fd635b4
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/Page/DevdocsInstall.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+ -->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/pages.xsd">
+    <page name="DevdocsInstall" mca="http://devdocs.magento.com/guides/v2.0/install-gde/install/web/install-web.html" module="Magento_Install">
+        <block name="devdocsBlock" class="Magento\Install\Test\Block\Devdocs" locator="body" strategy="css selector"/>
+    </page>
+</config>
diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php
index f7931b03e3def69ddb02f6c73c7c0381fd8cf0c1..ee51c4eee82271b2744d63167d56b82e526049a9 100644
--- a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.php
@@ -7,6 +7,7 @@
 namespace Magento\Install\Test\TestCase;
 
 use Magento\Install\Test\Page\Install;
+use Magento\Install\Test\Page\DevdocsInstall;
 use Magento\Install\Test\Fixture\Install as InstallConfig;
 use Magento\User\Test\Fixture\User;
 use Magento\Mtf\Fixture\FixtureFactory;
@@ -14,6 +15,9 @@ use Magento\Mtf\TestCase\Injectable;
 use Magento\Install\Test\Constraint\AssertAgreementTextPresent;
 use Magento\Install\Test\Constraint\AssertSuccessfulReadinessCheck;
 use Magento\Install\Test\Constraint\AssertAdminUriAutogenerated;
+use Magento\Install\Test\Constraint\AssertDevdocsLink;
+use Magento\Mtf\Util\Command\Cli\Setup;
+use Magento\Mtf\Client\BrowserInterface;
 
 /**
  * PLEASE ADD NECESSARY INFO BEFORE RUNNING TEST TO
@@ -24,24 +28,47 @@ use Magento\Install\Test\Constraint\AssertAdminUriAutogenerated;
  *
  * Steps:
  * 1. Go setup landing page.
- * 2. Click on "Terms and agreements" button.
- * 3. Check license agreement text.
- * 4. Return back to landing page and click "Agree and Setup" button.
- * 5. Click "Start Readiness Check" button.
- * 6. Make sure PHP Version, PHP Extensions and File Permission are ok.
- * 7. Click "Next" and fill DB credentials.
- * 8. Click "Test Connection and Authentication" and make sure connection successful.
- * 9. Click "Next" and fill store address and admin path.
- * 10. Click "Next" and leave all default values.
- * 11. Click "Next" and fill admin user info.
- * 12. Click "Next" and on the "Step 6: Install" page click "Install Now" button.
- * 13. Perform assertions.
+ * 2. Click on Developer Documentation link.
+ * 3. Check Developer Documentation title.
+ * 4. Click on "Terms and agreements" button.
+ * 5. Check license agreement text.
+ * 6. Return back to landing page and click "Agree and Setup" button.
+ * 7. Click "Start Readiness Check" button.
+ * 8. Make sure PHP Version, PHP Extensions and File Permission are ok.
+ * 9. Click "Next" and fill DB credentials.
+ * 10. Click "Test Connection and Authentication" and make sure connection successful.
+ * 11. Click "Next" and fill store address and admin path.
+ * 12. Click "Next" and leave all default values.
+ * 13. Click "Next" and fill admin user info.
+ * 14. Click "Next" and on the "Step 6: Install" page click "Install Now" button.
+ * 15. Perform assertions.
  *
  * @group Installer_and_Upgrade/Downgrade
  * @ZephyrId MAGETWO-31431
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class InstallTest extends Injectable
 {
+    /**
+     * Developer Documentation link text.
+     */
+    const DEVDOCS_LINK_TEXT = 'Getting Started';
+
+    /**
+     * Developer Documentation install page.
+     *
+     * @var DevdocsInstall
+     */
+    protected $devdocsInstallPage;
+
+    /**
+     * Terms and agreement selector.
+     *
+     * @var string
+     */
+    protected $termsLink = '.text-terms>a';
+
     /**
      * Install page.
      *
@@ -72,14 +99,16 @@ class InstallTest extends Injectable
      * Uninstall Magento.
      *
      * @param Install $installPage
+     * @param Setup $magentoSetup
+     * @param DevdocsInstall $devdocsInstallPage
      * @return void
      */
-    public function __inject(Install $installPage)
+    public function __inject(Install $installPage, Setup $magentoSetup, DevdocsInstall $devdocsInstallPage)
     {
-        $magentoBaseDir = dirname(dirname(dirname(MTF_BP)));
         // Uninstall Magento.
-        shell_exec("php -f $magentoBaseDir/bin/magento setup:uninstall -n");
+        $magentoSetup->uninstall();
         $this->installPage = $installPage;
+        $this->devdocsInstallPage = $devdocsInstallPage;
     }
 
     /**
@@ -91,6 +120,8 @@ class InstallTest extends Injectable
      * @param AssertAgreementTextPresent $assertLicense
      * @param AssertSuccessfulReadinessCheck $assertReadiness
      * @param AssertAdminUriAutogenerated $assertAdminUri
+     * @param AssertDevdocsLink $assertDevdocsLink
+     * @param BrowserInterface $browser
      * @param array $install [optional]
      * @return array
      */
@@ -101,6 +132,8 @@ class InstallTest extends Injectable
         AssertAgreementTextPresent $assertLicense,
         AssertSuccessfulReadinessCheck $assertReadiness,
         AssertAdminUriAutogenerated $assertAdminUri,
+        AssertDevdocsLink $assertDevdocsLink,
+        BrowserInterface $browser,
         array $install = []
     ) {
         $dataConfig = array_merge($install, $configData);
@@ -111,6 +144,14 @@ class InstallTest extends Injectable
         $installConfig = $fixtureFactory->create(\Magento\Install\Test\Fixture\Install::class, ['data' => $dataConfig]);
         // Steps
         $this->installPage->open();
+        // Verify Developer Documentation link.
+        $handle = $browser->getCurrentWindow();
+        $this->installPage->getLandingBlock()->clickLink(self::DEVDOCS_LINK_TEXT);
+        $this->waitTillTermsLinkNotVisible($browser);
+        $docHandle = $browser->getCurrentWindow();
+        $assertDevdocsLink->processAssert($this->devdocsInstallPage);
+        $browser->closeWindow($docHandle);
+        $browser->selectWindow($handle);
         // Verify license agreement.
         $this->installPage->getLandingBlock()->clickTermsAndAgreement();
         $assertLicense->processAssert($this->installPage);
@@ -139,4 +180,20 @@ class InstallTest extends Injectable
 
         return ['installConfig' => $installConfig];
     }
+
+    /**
+     * Wait till terms link is not visible.
+     *
+     * @param BrowserInterface $browser
+     * @return void
+     */
+    private function waitTillTermsLinkNotVisible(BrowserInterface $browser)
+    {
+        $browser->waitUntil(
+            function () use ($browser) {
+                $browser->selectWindow();
+                return $browser->find($this->termsLink)->isVisible() ? null : true;
+            }
+        );
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create.php
index ae6631eff9a24c9f323bee5bdc91b99dc355972b..b86ac18ea3dd4a70a5b3ba2530edbf89cfe1068c 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create.php
@@ -279,25 +279,40 @@ class Create extends Block
     }
 
     /**
-     * Fill addresses based on present data in customer and order fixtures.
+     * Fill Billing Address.
      *
-     * @param FixtureInterface $address
-     * @param string $saveAddress
+     * @param FixtureInterface $billingAddress
+     * @param string $saveAddress [optional]
      * @param bool $setShippingAddress [optional]
      * @return void
      */
-    public function fillAddresses(FixtureInterface $address, $saveAddress = 'No', $setShippingAddress = true)
-    {
+    public function fillBillingAddress(
+        FixtureInterface $billingAddress,
+        $saveAddress = 'No',
+        $setShippingAddress = true
+    ) {
         if ($setShippingAddress) {
             $this->getShippingAddressBlock()->uncheckSameAsBillingShippingAddress();
         }
-        $this->browser->find($this->header)->hover();
-        $this->getBillingAddressBlock()->fill($address);
+        $this->getBillingAddressBlock()->fill($billingAddress);
         $this->getBillingAddressBlock()->saveInAddressBookBillingAddress($saveAddress);
         $this->getTemplateBlock()->waitLoader();
-        if ($setShippingAddress) {
+    }
+
+    /**
+     * Fill Shipping Address.
+     *
+     * @param FixtureInterface $shippingAddress [optional]
+     * @return void
+     */
+    public function fillShippingAddress(FixtureInterface $shippingAddress = null)
+    {
+        if (!$shippingAddress) {
             $this->getShippingAddressBlock()->setSameAsBillingShippingAddress();
             $this->getTemplateBlock()->waitLoader();
+        } else {
+            $this->getShippingAddressBlock()->fill($shippingAddress);
+            $this->getTemplateBlock()->waitLoader();
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.php
index 044286ea1434a369b31074b739b8ee998b405c8f..f52d898d232d145c117911d77968431001eeba70 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.php
@@ -9,6 +9,7 @@ namespace Magento\Sales\Test\Block\Adminhtml\Order\Create\Shipping;
 use Magento\Mtf\Block\Form;
 use Magento\Mtf\Client\Locator;
 use Magento\Backend\Test\Block\Template;
+use Magento\Mtf\Client\Element\SimpleElement;
 
 /**
  * Adminhtml sales order create shipping address block.
@@ -29,6 +30,13 @@ class Address extends Form
      */
     protected $sameAsBilling = '#order-shipping_same_as_billing';
 
+    /**
+     * Wait element.
+     *
+     * @var string
+     */
+    private $waitElement = '.loading-mask';
+
     /**
      * Shipping address title selector.
      *
@@ -95,4 +103,41 @@ class Address extends Form
             ['element' => $this->_rootElement->find($this->templateBlock, Locator::SELECTOR_XPATH)]
         );
     }
+
+    /**
+     * Fill specified form data.
+     *
+     * @param array $fields
+     * @param SimpleElement $element
+     * @return void
+     * @throws \Exception
+     */
+    protected function _fill(array $fields, SimpleElement $element = null)
+    {
+        $context = ($element === null) ? $this->_rootElement : $element;
+        foreach ($fields as $name => $field) {
+            $this->waitFormLoading();
+            $element = $this->getElement($context, $field);
+            if (!$element->isDisabled()) {
+                $element->setValue($field['value']);
+            } else {
+                throw new \Exception("Unable to set value to field '$name' as it's disabled.");
+            }
+        }
+    }
+
+    /**
+     * Wait for form loading.
+     *
+     * @return void
+     */
+    private function waitFormLoading()
+    {
+        $this->_rootElement->click();
+        $this->browser->waitUntil(
+            function () {
+                return $this->browser->find($this->waitElement)->isVisible() ? null : true;
+            }
+        );
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2dc30a686c0d9c3b997f49a2998fff971b6b1b64
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Address.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<mapping strict="0">
+    <wrapper>order[shipping_address]</wrapper>
+    <fields>
+        <firstname />
+        <lastname />
+        <company />
+        <street>
+            <selector>[name='order[shipping_address][street][0]']</selector>
+        </street>
+        <city />
+        <country_id>
+            <input>select</input>
+        </country_id>
+        <region_id>
+            <input>select</input>
+        </region_id>
+        <postcode />
+        <telephone />
+    </fields>
+</mapping>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php
index 3d9673e29805dee1383ac9b3354c4905886748e8..90a75f665cbf9f95eebe2dfa26d135082d3912f4 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php
@@ -28,6 +28,13 @@ class Method extends Block
      */
     protected $shippingMethod = '//dt[contains(.,"%s")]/following-sibling::*//*[contains(text(), "%s")]';
 
+    /**
+     * Wait element.
+     *
+     * @var string
+     */
+    private $waitElement = '.loading-mask';
+
     /**
      * Select shipping method.
      *
@@ -36,6 +43,7 @@ class Method extends Block
      */
     public function selectShippingMethod(array $shippingMethod)
     {
+        $this->waitFormLoading();
         if ($this->_rootElement->find($this->shippingMethodsLink)->isVisible()) {
             $this->_rootElement->find($this->shippingMethodsLink)->click();
         }
@@ -46,4 +54,19 @@ class Method extends Block
         );
         $this->_rootElement->find($selector, Locator::SELECTOR_XPATH)->click();
     }
+
+    /**
+     * Wait for form loading.
+     *
+     * @return void
+     */
+    private function waitFormLoading()
+    {
+        $this->_rootElement->click();
+        $this->browser->waitUntil(
+            function () {
+                return $this->browser->find($this->waitElement)->isVisible() ? null : true;
+            }
+        );
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.php
index 1779ad437c76e4192fd8c9774fc5a6f0ab8ccafb..71575ffb16b858cd43353c02d82f2d496eac4a51 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.php
@@ -10,12 +10,13 @@ use Magento\Sales\Test\Fixture\OrderInjectable;
 use Magento\Sales\Test\Page\Adminhtml\OrderIndex;
 use Magento\Sales\Test\Page\Adminhtml\SalesOrderView;
 use Magento\Mtf\TestCase\Injectable;
+use Magento\Mtf\TestStep\TestStepFactory;
 
 /**
  * Preconditions:
- * 1. Enable payment method "Check/Money Order".
- * 2. Enable shipping method one of "Flat Rate".
- * 3. Create order
+ * 1. Enable payment method: "Check/Money Order/Bank Transfer/Cash on Delivery/Purchase Order/Zero Subtotal Checkout".
+ * 2. Enable shipping method one of "Flat Rate/Free Shipping".
+ * 3. Create order.
  *
  * Steps:
  * 1. Login to backend.
@@ -48,20 +49,7 @@ class CancelCreatedOrderTest extends Injectable
     protected $salesOrderView;
 
     /**
-     * Enable "Check/Money Order" and "Flat Rate" in configuration.
-     *
-     * @return void
-     */
-    public function __prepare()
-    {
-        $this->objectManager->create(
-            \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
-            ['configData' => 'checkmo, flatrate', 'rollback' => true]
-        )->run();
-    }
-
-    /**
-     * Inject pages
+     * Inject pages.
      *
      * @param OrderIndex $orderIndex
      * @param SalesOrderView $salesOrderView
@@ -77,11 +65,17 @@ class CancelCreatedOrderTest extends Injectable
      * Cancel created order.
      *
      * @param OrderInjectable $order
+     * @param TestStepFactory $stepFactory
+     * @param string $configData
      * @return array
      */
-    public function test(OrderInjectable $order)
+    public function test(OrderInjectable $order, TestStepFactory $stepFactory, $configData)
     {
         // Preconditions
+        $stepFactory->create(
+            \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
+            ['configData' => $configData]
+        )->run();
         $order->persist();
 
         // Steps
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.xml
index bcacacc57589a88806a2bcad18912ab84760ec8f..b65b9a31f72f3d7ff7290afb4393edeaf73679bc 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.xml
@@ -7,14 +7,49 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Sales\Test\TestCase\CancelCreatedOrderTest" summary="Cancel Created Order for Offline Payment Methods" ticketId="MAGETWO-28191">
-        <variation name="CancelCreatedOrderTestVariation1">
-            <data name="description" xsi:type="string">cancel order and check status on storefront</data>
+        <variation name="CancelCreatedOrderTestVariationWithCheckMoneyOrderPaymentMethod" summary="Cancel order with check/money order payment method and check status on storefront">
             <data name="order/dataset" xsi:type="string">default</data>
             <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::default,catalogProductSimple::default</data>
             <data name="status" xsi:type="string">Canceled</data>
+            <data name="configData" xsi:type="string">checkmo</data>
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderCancelSuccessMessage" />
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGrid" />
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
         </variation>
+        <variation name="CancelCreatedOrderTestVariationWithZeroSubtotalCheckout" summary="Cancel order with zero subtotal checkout payment method and check status on storefront">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">free</data>
+            <data name="order/data/shipping_method" xsi:type="string">freeshipping_freeshipping</data>
+            <data name="order/data/coupon_code/dataset" xsi:type="string">active_sales_rule_with_fixed_price_discount_coupon</data>
+            <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_10_dollar</data>
+            <data name="status" xsi:type="string">Canceled</data>
+            <data name="configData" xsi:type="string">zero_subtotal_checkout, freeshipping</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderCancelSuccessMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
+        </variation>
+        <variation name="CancelCreatedOrderTestVariationWithBankTransferPaymentMethod" summary="Cancel order with bank transfer payment method and check status on storefront">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">banktransfer</data>
+            <data name="status" xsi:type="string">Canceled</data>
+            <data name="configData" xsi:type="string">banktransfer</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderCancelSuccessMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
+        </variation>
+        <variation name="CancelCreatedOrderTestVariationWithCashOnDeliveryPaymentMethod" summary="Cancel order with cash on delivery payment method and check status on storefront">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">cashondelivery</data>
+            <data name="status" xsi:type="string">Canceled</data>
+            <data name="configData" xsi:type="string">cashondelivery</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderCancelSuccessMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
+        </variation>
+        <variation name="CancelCreatedOrderTestVariationWithPurchaseOrderPaymentMethod" summary="Cancel order with purchase order payment method and check status on storefront">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">purchaseorder</data>
+            <data name="status" xsi:type="string">Canceled</data>
+            <data name="configData" xsi:type="string">purchaseorder</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderCancelSuccessMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.php
index ed00a414bd0e689cfdb15b75ccf5d795ca40c992..9d19d10f4d40c6c3e317a97e7e83cd3c79e6f8ae 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.php
@@ -10,10 +10,11 @@ use Magento\Sales\Test\Fixture\OrderInjectable;
 use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Mtf\Fixture\FixtureInterface;
 use Magento\Mtf\TestCase\Injectable;
+use Magento\Mtf\TestStep\TestStepFactory;
 
 /**
  * Preconditions:
- * 1. Enable payment method "Check/Money Order".
+ * 1. Enable payment method one of "Check/Money Order/Bank Transfer/Cash on Delivery/Purchase Order".
  * 2. Enable shipping method one of "Flat Rate/Free Shipping".
  * 3. Create order.
  * 4. Create Invoice.
@@ -54,38 +55,34 @@ class CreateCreditMemoEntityTest extends Injectable
         'price',
     ];
 
-    /**
-     * Set up configuration.
-     *
-     * @param FixtureFactory $fixtureFactory
-     * @return void
-     */
-    public function __prepare(FixtureFactory $fixtureFactory)
-    {
-        $this->fixtureFactory = $fixtureFactory;
-
-        $setupConfigurationStep = $this->objectManager->create(
-            \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
-            ['configData' => 'checkmo, flatrate']
-        );
-        $setupConfigurationStep->run();
-    }
-
     /**
      * Create credit memo.
      *
+     * @param TestStepFactory $stepFactory
+     * @param FixtureFactory $fixtureFactory
      * @param OrderInjectable $order
      * @param array $data
+     * @param string $configData
      * @return array
      */
-    public function test(OrderInjectable $order, array $data)
-    {
+    public function test(
+        TestStepFactory $stepFactory,
+        FixtureFactory $fixtureFactory,
+        OrderInjectable $order,
+        array $data,
+        $configData
+    ) {
         // Preconditions
+        $this->fixtureFactory = $fixtureFactory;
+        $stepFactory->create(
+            \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
+            ['configData' => $configData]
+        )->run();
         $order->persist();
-        $this->objectManager->create(\Magento\Sales\Test\TestStep\CreateInvoiceStep::class, ['order' => $order])->run();
+        $stepFactory->create(\Magento\Sales\Test\TestStep\CreateInvoiceStep::class, ['order' => $order])->run();
 
         // Steps
-        $createCreditMemoStep = $this->objectManager->create(
+        $createCreditMemoStep = $stepFactory->create(
             \Magento\Sales\Test\TestStep\CreateCreditMemoStep::class,
             ['order' => $order, 'data' => $data]
         );
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.xml
index 80e1bfdf81e8f39b5547fd96def138063fa00231..02b9640acbea4159c0560e8a4727a13cc36e1199 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.xml
@@ -7,14 +7,14 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Sales\Test\TestCase\CreateCreditMemoEntityTest" summary="Create Credit Memo for Offline Payment Methods" ticketId="MAGETWO-29116">
-        <variation name="CreateCreditMemoEntityTestVariation1">
-            <data name="description" xsi:type="string">Assert items return to stock (partial refund)</data>
+        <variation name="CreateCreditMemoEntityTestVariation1" summary="Assert items return to stock (partial refund)">
             <data name="data/items_data/0/back_to_stock" xsi:type="string">Yes</data>
             <data name="data/items_data/0/qty" xsi:type="string">1</data>
             <data name="data/form_data/send_email" xsi:type="string">Yes</data>
             <data name="order/dataset" xsi:type="string">default</data>
             <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_100_dollar</data>
             <data name="order/data/price/dataset" xsi:type="string">partial_refund</data>
+            <data name="configData" xsi:type="string">checkmo</data>
             <constraint name="Magento\Sales\Test\Constraint\AssertRefundSuccessCreateMessage" />
             <constraint name="Magento\Sales\Test\Constraint\AssertCreditMemoButton" />
             <constraint name="Magento\Sales\Test\Constraint\AssertRefundInCreditMemoTab" />
@@ -25,15 +25,15 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
             <constraint name="Magento\Sales\Test\Constraint\AssertCreditMemoItems" />
         </variation>
-        <variation name="CreateCreditMemoEntityTestVariation2">
-            <data name="description" xsi:type="string">Assert 0 shipping refund</data>
+        <variation name="CreateCreditMemoEntityTestVariation2" summary="Assert 0 shipping refund">
             <data name="data/items_data/0/qty" xsi:type="string">1</data>
             <data name="data/form_data/shipping_amount" xsi:type="string">0</data>
             <data name="data/form_data/adjustment_positive" xsi:type="string">5</data>
             <data name="data/form_data/adjustment_negative" xsi:type="string">10</data>
             <data name="order/dataset" xsi:type="string">default</data>
-            <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">banktransfer</data>
             <data name="order/data/price/dataset" xsi:type="string">full_refund_with_zero_shipping_refund</data>
+            <data name="configData" xsi:type="string">banktransfer</data>
             <constraint name="Magento\Sales\Test\Constraint\AssertRefundSuccessCreateMessage" />
             <constraint name="Magento\Sales\Test\Constraint\AssertCreditMemoButton" />
             <constraint name="Magento\Sales\Test\Constraint\AssertRefundInCreditMemoTab" />
@@ -41,5 +41,29 @@
             <constraint name="Magento\Sales\Test\Constraint\AssertRefundedGrandTotalOnFrontend" />
             <constraint name="Magento\Sales\Test\Constraint\AssertCreditMemoItems" />
         </variation>
+        <variation name="CreateCreditMemoEntityTestVariationWithCashOnDeliveryPaymentMethod" summary="Assert 0 shipping refund with Cash on delivery payment method">
+            <data name="data/items_data/0/qty" xsi:type="string">1</data>
+            <data name="data/form_data/shipping_amount" xsi:type="string">0</data>
+            <data name="data/form_data/adjustment_positive" xsi:type="string">5</data>
+            <data name="data/form_data/adjustment_negative" xsi:type="string">10</data>
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">cashondelivery</data>
+            <data name="order/data/price/dataset" xsi:type="string">full_refund_with_zero_shipping_refund</data>
+            <data name="configData" xsi:type="string">cashondelivery</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertRefundSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertRefundedGrandTotalOnFrontend" />
+        </variation>
+        <variation name="CreateCreditMemoEntityTestVariationWithPurchaseOrderPaymentMethod" summary="Assert 0 shipping refund with Purchase Order payment method">
+            <data name="data/items_data/0/qty" xsi:type="string">1</data>
+            <data name="data/form_data/shipping_amount" xsi:type="string">0</data>
+            <data name="data/form_data/adjustment_positive" xsi:type="string">5</data>
+            <data name="data/form_data/adjustment_negative" xsi:type="string">10</data>
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">purchaseorder</data>
+            <data name="order/data/price/dataset" xsi:type="string">full_refund_with_zero_shipping_refund</data>
+            <data name="configData" xsi:type="string">purchaseorder</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertRefundSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertRefundedGrandTotalOnFrontend" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.php
index f62583583c3dc565579196d24ed564a14613eef9..f7cdaf74ab0f57e0544a392f6a936498bcb8efee 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.php
@@ -8,10 +8,11 @@ namespace Magento\Sales\Test\TestCase;
 
 use Magento\Sales\Test\Fixture\OrderInjectable;
 use Magento\Mtf\TestCase\Injectable;
+use Magento\Mtf\TestStep\TestStepFactory;
 
 /**
  * Preconditions:
- * 1. Enable payment method "Check/Money Order".
+ * 1. Enable payment method: "Check/Money Order/Bank Transfer/Cash on Delivery/Purchase Order/Zero Subtotal Checkout".
  * 2. Enable shipping method one of "Flat Rate/Free Shipping".
  * 3. Create order.
  *
@@ -33,16 +34,21 @@ class CreateInvoiceEntityTest extends Injectable
     /* end tags */
 
     /**
-     * Set up configuration.
+     * Factory for Test Steps.
      *
+     * @var TestStepFactory
+     */
+    protected $stepFactory;
+
+    /**
+     * Prepare data.
+     *
+     * @param TestStepFactory $stepFactory
      * @return void
      */
-    public function __prepare()
+    public function __prepare(TestStepFactory $stepFactory)
     {
-        $this->objectManager->create(
-            \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
-            ['configData' => 'checkmo, flatrate']
-        )->run();
+        $this->stepFactory = $stepFactory;
     }
 
     /**
@@ -50,15 +56,20 @@ class CreateInvoiceEntityTest extends Injectable
      *
      * @param OrderInjectable $order
      * @param array $data
+     * @param string $configData
      * @return array
      */
-    public function test(OrderInjectable $order, array $data)
+    public function test(OrderInjectable $order, array $data, $configData)
     {
         // Preconditions
+        $this->stepFactory->create(
+            \Magento\Config\Test\TestStep\SetupConfigurationStep::class,
+            ['configData' => $configData]
+        )->run();
         $order->persist();
 
         // Steps
-        $result = $this->objectManager->create(
+        $result = $this->stepFactory->create(
             \Magento\Sales\Test\TestStep\CreateInvoiceStep::class,
             ['order' => $order, 'data' => $data]
         )->run();
@@ -73,6 +84,6 @@ class CreateInvoiceEntityTest extends Injectable
      */
     public function tearDown()
     {
-        $this->objectManager->create(\Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep::class)->run();
+        $this->stepFactory->create(\Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep::class)->run();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.xml
index afc4bad5e706db538cd5957201a4a5c9347a3605..8753de91d1f4301710f15a968b7a7ea24e04d663 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.xml
@@ -10,11 +10,11 @@
         <variation name="CreateInvoiceEntityTestVariation1">
             <data name="order/dataset" xsi:type="string">default</data>
             <data name="order/data/price/dataset" xsi:type="string">full_invoice</data>
-            <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::default</data>
             <data name="order/data/total_qty_ordered/0" xsi:type="string">1</data>
             <data name="data/items_data/0/qty" xsi:type="string">-</data>
             <data name="data/form_data/do_shipment" xsi:type="string">Yes</data>
             <data name="data/form_data/comment_text" xsi:type="string">comments</data>
+            <data name="configData" xsi:type="string">checkmo</data>
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceWithShipmentSuccessMessage" />
             <constraint name="Magento\Sales\Test\Constraint\AssertNoInvoiceButton" />
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceInInvoicesTab" />
@@ -29,14 +29,57 @@
             <data name="order/data/price/dataset" xsi:type="string">partial_invoice</data>
             <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_100_dollar</data>
             <data name="order/data/total_qty_ordered/0" xsi:type="string">-</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">banktransfer</data>
             <data name="data/items_data/0/qty" xsi:type="string">1</data>
             <data name="data/form_data/do_shipment" xsi:type="string">No</data>
             <data name="data/form_data/comment_text" xsi:type="string">comments</data>
+            <data name="configData" xsi:type="string">banktransfer</data>
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceSuccessCreateMessage" />
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceInInvoicesTab" />
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceInInvoicesGrid" />
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceItems" />
             <constraint name="Magento\Sales\Test\Constraint\AssertInvoicedAmountOnFrontend" />
         </variation>
+        <variation name="CreateInvoiceEntityTestVariationWithCashOnDeliveryPaymentMethod">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/price/dataset" xsi:type="string">partial_invoice</data>
+            <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_100_dollar</data>
+            <data name="order/data/total_qty_ordered/0" xsi:type="string">-</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">cashondelivery</data>
+            <data name="data/items_data/0/qty" xsi:type="string">1</data>
+            <data name="data/form_data/do_shipment" xsi:type="string">No</data>
+            <data name="data/form_data/comment_text" xsi:type="string">comments</data>
+            <data name="configData" xsi:type="string">cashondelivery</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertInvoicedAmountOnFrontend" />
+        </variation>
+        <variation name="CreateInvoiceEntityTestVariationWithPurchaseOrderPaymentMethod">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/price/dataset" xsi:type="string">partial_invoice</data>
+            <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_100_dollar</data>
+            <data name="order/data/total_qty_ordered/0" xsi:type="string">-</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">purchaseorder</data>
+            <data name="data/items_data/0/qty" xsi:type="string">1</data>
+            <data name="data/form_data/do_shipment" xsi:type="string">No</data>
+            <data name="data/form_data/comment_text" xsi:type="string">comments</data>
+            <data name="configData" xsi:type="string">purchaseorder</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertInvoicedAmountOnFrontend" />
+        </variation>
+        <variation name="CreateInvoiceEntityTestVariationWithZeroSubtotalCheckout">
+            <data name="order/dataset" xsi:type="string">default</data>
+            <data name="order/data/price/dataset" xsi:type="string">partial_invoice</data>
+            <data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_10_dollar</data>
+            <data name="order/data/total_qty_ordered/0" xsi:type="string">-</data>
+            <data name="order/data/payment_auth_expiration/method" xsi:type="string">free</data>
+            <data name="order/data/shipping_method" xsi:type="string">freeshipping_freeshipping</data>
+            <data name="order/data/coupon_code/dataset" xsi:type="string">active_sales_rule_with_fixed_price_discount_coupon</data>
+            <data name="data/items_data/0/qty" xsi:type="string">1</data>
+            <data name="data/form_data/do_shipment" xsi:type="string">No</data>
+            <data name="data/form_data/comment_text" xsi:type="string">comments</data>
+            <data name="configData" xsi:type="string">zero_subtotal_checkout, freeshipping</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertInvoiceSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertInvoicedAmountOnFrontend" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillBillingAddressStep.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillBillingAddressStep.php
index bde5bff6de9d4e1f53969137ac86c94d8323c7fd..f6d0c8325bfc38500c4cd5a5d7289e8b3416439a 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillBillingAddressStep.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillBillingAddressStep.php
@@ -11,7 +11,7 @@ use Magento\Sales\Test\Page\Adminhtml\OrderCreateIndex;
 use Magento\Mtf\TestStep\TestStepInterface;
 
 /**
- * Fill Sales Data.
+ * Fill Billing Address.
  */
 class FillBillingAddressStep implements TestStepInterface
 {
@@ -23,7 +23,7 @@ class FillBillingAddressStep implements TestStepInterface
     protected $orderCreateIndex;
 
     /**
-     * Address.
+     * Billing Address fixture.
      *
      * @var Address
      */
@@ -37,14 +37,13 @@ class FillBillingAddressStep implements TestStepInterface
     protected $saveAddress;
 
     /**
-     * Flag for set same as billing shipping address.
+     * Flag to set 'Same as billing address' for shipping address.
      *
      * @var string
      */
     protected $setShippingAddress;
 
     /**
-     * @constructor
      * @param OrderCreateIndex $orderCreateIndex
      * @param Address $billingAddress
      * @param string $saveAddress
@@ -63,14 +62,14 @@ class FillBillingAddressStep implements TestStepInterface
     }
 
     /**
-     * Fill Sales Data.
+     * Fill Billing Address.
      *
-     * @return Address
+     * @return array
      */
     public function run()
     {
         $this->orderCreateIndex->getCreateBlock()
-            ->fillAddresses($this->billingAddress, $this->saveAddress, $this->setShippingAddress);
+            ->fillBillingAddress($this->billingAddress, $this->saveAddress, $this->setShippingAddress);
 
         return ['billingAddress' => $this->billingAddress];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillShippingAddressStep.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillShippingAddressStep.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ff05dfca95bb016b4b72e5db07f5fa2ffb139ca
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/FillShippingAddressStep.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\TestStep;
+
+use Magento\Customer\Test\Fixture\Address;
+use Magento\Sales\Test\Page\Adminhtml\OrderCreateIndex;
+use Magento\Mtf\TestStep\TestStepInterface;
+
+/**
+ * Fill Shipping Address.
+ */
+class FillShippingAddressStep implements TestStepInterface
+{
+    /**
+     * Sales order create index page.
+     *
+     * @var OrderCreateIndex
+     */
+    protected $orderCreateIndex;
+
+    /**
+     * Shipping Address fixture.
+     *
+     * @var Address
+     */
+    protected $shippingAddress;
+
+    /**
+     * @param OrderCreateIndex $orderCreateIndex
+     * @param Address $shippingAddress [optional]
+     */
+    public function __construct(
+        OrderCreateIndex $orderCreateIndex,
+        Address $shippingAddress = null
+    ) {
+        $this->orderCreateIndex = $orderCreateIndex;
+        $this->shippingAddress = $shippingAddress;
+    }
+
+    /**
+     * Fill Shipping Address.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        $this->orderCreateIndex->getCreateBlock()->fillShippingAddress($this->shippingAddress);
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml
index c48430b00e7ea4412265dfaf4d91ed85cbd2819c..ec2da3f2607b2dda7e4b375e11192f9844d839fd 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml
@@ -28,7 +28,8 @@
         <step name="addProducts" module="Magento_Sales" next="updateProductsData" />
         <step name="updateProductsData" module="Magento_Sales" next="fillAccountInformation" />
         <step name="fillAccountInformation" module="Magento_Sales" next="fillBillingAddress" />
-        <step name="fillBillingAddress" module="Magento_Sales" next="selectShippingMethodForOrder" />
+        <step name="fillBillingAddress" module="Magento_Sales" next="fillShippingAddress" />
+        <step name="fillShippingAddress" module="Magento_Sales" next="selectShippingMethodForOrder" />
         <step name="selectShippingMethodForOrder" module="Magento_Sales" next="selectPaymentMethodForOrder" />
         <step name="selectPaymentMethodForOrder" module="Magento_Sales" next="submitOrder" />
         <step name="submitOrder" module="Magento_Sales" />
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/AbstractFormContainers.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/AbstractFormContainers.php
index b6ed37af715be90fc600aa5728744ccd3a160d68..180afa8fe7ec6b3a862ef9f80e077fcca70b354e 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/AbstractFormContainers.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/AbstractFormContainers.php
@@ -158,7 +158,7 @@ abstract class AbstractFormContainers extends Form
 
     /**
      * Fill specified form with containers data.
-     * 
+     *
      * Input data in format
      * [[container => [field => [attribute_name => attribute_value, ..], ..], ..]
      * where container name can be empty if a field is not assigned to any container.
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 3fc6f044f88521794f579aa653bacd6d87e44d14..80df7e6f8c631722fb314525b2d6733e2ac605ad 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -142,7 +142,7 @@ class DataGrid extends Grid
      *
      * @var string
      */
-    protected $currentPage = '[data-ui-id="current-page-input"]';
+    protected $currentPage = ".//*[@data-ui-id='current-page-input'][not(ancestor::*[@class='sticky-header'])]";
 
     /**
      * Clear all applied Filters.
@@ -347,7 +347,7 @@ class DataGrid extends Grid
             $this->sortGridByField('ID');
         }
         foreach ($items as $item) {
-            $this->_rootElement->find($this->currentPage)->setValue('');
+            $this->_rootElement->find($this->currentPage, Locator::SELECTOR_XPATH)->setValue('');
             $this->waitLoader();
             $selectItem = $this->getRow($item)->find($this->selectItem);
             do {