diff --git a/.htaccess b/.htaccess
index 01f8f8dd24df5bf518774b24c9843bdd0d61d73a..9f630df0ae681e1dea7bca6587f1d2e082e7a23c 100644
--- a/.htaccess
+++ b/.htaccess
@@ -65,13 +65,6 @@
     SecFilterScanPOST Off
 </IfModule>
 
-<IfModule mod_headers.c>
-############################################
-## prevent clickjacking
-
-    Header set X-Frame-Options SAMEORIGIN
-</IfModule>
-
 <IfModule mod_deflate.c>
 
 ############################################
@@ -187,4 +180,4 @@
 ## If running in cluster environment, uncomment this
 ## http://developer.yahoo.com/performance/rules.html#etags
 
-    #FileETag none
\ No newline at end of file
+    #FileETag none
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification.php
index d1657ae076abb419e0b4f71f8c26ba27dc6a6be8..cd88e551ffec3d58a639c3859e9e146fea984026 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification.php
@@ -14,26 +14,6 @@ class Notification extends \Magento\Backend\App\AbstractAction
      */
     protected function _isAllowed()
     {
-        switch ($this->getRequest()->getActionName()) {
-            case 'markAsRead':
-                $acl = 'Magento_AdminNotification::mark_as_read';
-                break;
-
-            case 'massMarkAsRead':
-                $acl = 'Magento_AdminNotification::mark_as_read';
-                break;
-
-            case 'remove':
-                $acl = 'Magento_AdminNotification::adminnotification_remove';
-                break;
-
-            case 'massRemove':
-                $acl = 'Magento_AdminNotification::adminnotification_remove';
-                break;
-
-            default:
-                $acl = 'Magento_AdminNotification::show_list';
-        }
-        return $this->_authorization->isAllowed($acl);
+        return $this->_authorization->isAllowed('Magento_AdminNotification::show_list');
     }
 }
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php
index ee93d06fc8c629f9f47b6c90c9c1bfff68b9b5e8..bcf66825edf6bdc85f27680298c2129b2cb46d02 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php
@@ -36,4 +36,12 @@ class MarkAsRead extends \Magento\AdminNotification\Controller\Adminhtml\Notific
         }
         $this->_redirect('adminhtml/*/');
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_AdminNotification::mark_as_read');
+    }
 }
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php
index ac414106f9f893989c4ea870e68d32c486961704..78090163aa6a2a7f1a8637026c19aa70ffdc5b5b 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php
@@ -38,4 +38,12 @@ class MassMarkAsRead extends \Magento\AdminNotification\Controller\Adminhtml\Not
         }
         $this->_redirect('adminhtml/*/');
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_AdminNotification::mark_as_read');
+    }
 }
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php
index 41a27163baa5269e4accd0243fe08729b67331af..4b0068520ba3e0c4f69116dc9d04de411cc0783f 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php
@@ -33,4 +33,12 @@ class MassRemove extends \Magento\AdminNotification\Controller\Adminhtml\Notific
         }
         $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl($this->getUrl('*')));
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_AdminNotification::adminnotification_remove');
+    }
 }
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php
index 53fc0bee4bfb89104418f3bf5b50365072dd0d72..b4fe7e0e29596d2bd81fae0ec3430e1a3f545e77 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php
@@ -35,4 +35,12 @@ class Remove extends \Magento\AdminNotification\Controller\Adminhtml\Notificatio
         }
         $this->_redirect('adminhtml/*/');
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_AdminNotification::adminnotification_remove');
+    }
 }
diff --git a/app/code/Magento/Backend/etc/adminhtml/di.xml b/app/code/Magento/Backend/etc/adminhtml/di.xml
index 553d30e85541f36dbd0a50834d1d146d99b84d5d..cccd487a9f5662ca3ee4ec187ecb4a4942ce8f9e 100644
--- a/app/code/Magento/Backend/etc/adminhtml/di.xml
+++ b/app/code/Magento/Backend/etc/adminhtml/di.xml
@@ -122,4 +122,9 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\App\Response\XFrameOptPlugin">
+        <arguments>
+            <argument name="xFrameOpt" xsi:type="const">Magento\Framework\App\Response\XFrameOptPlugin::BACKEND_X_FRAME_OPT</argument>
+        </arguments>
+    </type>
 </config>
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order.php b/app/code/Magento/Sales/Controller/Adminhtml/Order.php
index 4685341ddef97abe8fb366fb3eaa6c50dd351d30..0bf5c59a46e1c4b5b5fd50b90fc951e7059960a9 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order.php
@@ -124,47 +124,10 @@ class Order extends \Magento\Backend\App\Action
     }
 
     /**
-     * Acl check for admin
-     *
      * @return bool
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
     protected function _isAllowed()
     {
-        $action = strtolower($this->getRequest()->getActionName());
-        switch ($action) {
-            case 'hold':
-                $aclResource = 'Magento_Sales::hold';
-                break;
-            case 'unhold':
-                $aclResource = 'Magento_Sales::unhold';
-                break;
-            case 'email':
-                $aclResource = 'Magento_Sales::email';
-                break;
-            case 'cancel':
-                $aclResource = 'Magento_Sales::cancel';
-                break;
-            case 'view':
-                $aclResource = 'Magento_Sales::actions_view';
-                break;
-            case 'addcomment':
-                $aclResource = 'Magento_Sales::comment';
-                break;
-            case 'creditmemos':
-                $aclResource = 'Magento_Sales::creditmemo';
-                break;
-            case 'reviewpayment':
-                $aclResource = 'Magento_Sales::review_payment';
-                break;
-            case 'address':
-            case 'addresssave':
-                $aclResource = 'Magento_Sales::actions_edit';
-                break;
-            default:
-                $aclResource = 'Magento_Sales::sales_order';
-                break;
-        }
-        return $this->_authorization->isAllowed($aclResource);
+        return $this->_authorization->isAllowed('Magento_Sales::sales_order');
     }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php
index c313dc7d25f84541ccb0db5a026420865e1896fe..29729f850bb64f28e2975694d24893c6eb428f66 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php
@@ -57,4 +57,12 @@ class AddComment extends \Magento\Sales\Controller\Adminhtml\Order
         }
         return $this->resultRedirectFactory->create()->setPath('sales/*/');
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::comment');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php
index 0b5697e7c48df8dde275940d77a5f396f0f223e9..18fdf29cf80249ca881eee3e90267467492e7627 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php
@@ -31,4 +31,12 @@ class Address extends \Magento\Sales\Controller\Adminhtml\Order
             return $this->resultRedirectFactory->create()->setPath('sales/*/');
         }
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::actions_edit');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
index fc174f97b8bb03acb0059906f484c74770064cdd..e3d15fd93cdd6765c1c3aa3739603db07ac23f95 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
@@ -35,4 +35,12 @@ class AddressSave extends \Magento\Sales\Controller\Adminhtml\Order
             return $resultRedirect->setPath('sales/*/');
         }
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::actions_edit');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
index 54b3294c89d0d9ee6b67b402a3857874e3d2e3e4..263edb51310c26e05ee7d0284f5e776df89ca6a8 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
@@ -31,4 +31,12 @@ class Cancel extends \Magento\Sales\Controller\Adminhtml\Order
         }
         return $resultRedirect->setPath('sales/*/');
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::cancel');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php
index 47634d33a81630d3a05cc467e1e8e7eecbd5f89c..46571b222f35c858a46f05b4f39f9abca3524cab 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php
@@ -18,4 +18,12 @@ class Creditmemos extends \Magento\Sales\Controller\Adminhtml\Order
         $resultLayout = $this->resultLayoutFactory->create();
         return $resultLayout;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::creditmemo');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php
index df614ba7c4494775193d89d000b8caa933b18cf3..e2dce6e111b8e8f20ae63957db473560fffbfc6e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php
@@ -29,4 +29,12 @@ class Email extends \Magento\Sales\Controller\Adminhtml\Order
         }
         return $this->resultRedirectFactory->create()->setPath('sales/*/');
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::email');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
index 3f295b391bd4f56ce4b1502114297d80727b7d53..58a54b87f0ed9820b4a98acbaa5ca16692118603 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
@@ -31,4 +31,12 @@ class Hold extends \Magento\Sales\Controller\Adminhtml\Order
         $resultRedirect->setPath('sales/*/');
         return $resultRedirect;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::hold');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php
index 67c5924940a8c505e5dc6b5c792c145be77c3fbe..5373f40402736e30b617017e230aad9e391caba0 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php
@@ -53,4 +53,12 @@ class ReviewPayment extends \Magento\Sales\Controller\Adminhtml\Order
         $resultRedirect->setPath('sales/order/view', ['order_id' => $order->getId()]);
         return $resultRedirect;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::review_payment');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
index 6ea9cd78e3bb6d341d785e7238450ccd3a636901..c57f4ca425146c72d93c3bc4741d6bf335cba1de 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
@@ -31,4 +31,12 @@ class Unhold extends \Magento\Sales\Controller\Adminhtml\Order
         $resultRedirect->setPath('sales/*/');
         return $resultRedirect;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::unhold');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
index 2242f7a6360b94bf22af7faba152f06e86f7d941..e4881766b1b0489afe81dd7329921dbe6b14976c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
@@ -34,4 +34,12 @@ class View extends \Magento\Sales\Controller\Adminhtml\Order
         $resultRedirect->setPath('sales/*/');
         return $resultRedirect;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::actions_view');
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php
index 49b910be6a862ff0379be9adf7b365ba3babd40f..f3d31df87ac4b83298162ba337a60af65723285a 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions.php
@@ -86,13 +86,6 @@ class Transactions extends \Magento\Backend\App\Action
      */
     protected function _isAllowed()
     {
-        switch ($this->getRequest()->getActionName()) {
-            case 'fetch':
-                return $this->_authorization->isAllowed('Magento_Sales::transactions_fetch');
-                break;
-            default:
-                return $this->_authorization->isAllowed('Magento_Sales::transactions');
-                break;
-        }
+        return $this->_authorization->isAllowed('Magento_Sales::transactions');
     }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
index 2afac87db489d6ab464ecf2bc1dfe291818d9899..6b2af6cc1dd5f22ccbecc355f71ccff08dde7957 100755
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
@@ -38,4 +38,12 @@ class Fetch extends \Magento\Sales\Controller\Adminhtml\Transactions
 
         return $resultRedirect->setPath('sales/transactions/view', ['_current' => true]);
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_Sales::transactions_fetch');
+    }
 }
diff --git a/app/code/Magento/Store/etc/di.xml b/app/code/Magento/Store/etc/di.xml
index 320253c316b88638328936cb3b273f3972a2ec22..c47f73ec9012bd91e4218009b662d754d6905645 100644
--- a/app/code/Magento/Store/etc/di.xml
+++ b/app/code/Magento/Store/etc/di.xml
@@ -9,6 +9,14 @@
     <preference for="Magento\Framework\App\Request\PathInfoProcessorInterface" type="Magento\Store\App\Request\PathInfoProcessor" />
     <preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />
     <preference for="Magento\Framework\App\Response\RedirectInterface" type="Magento\Store\App\Response\Redirect" />
+    <type name="Magento\Framework\App\Response\Http">
+        <plugin name="xFrameOptionsHeader" type="Magento\Framework\App\Response\XFrameOptPlugin"/>
+    </type>
+    <type name="Magento\Framework\App\Response\XFrameOptPlugin">
+        <arguments>
+            <argument name="xFrameOpt" xsi:type="init_parameter">Magento\Framework\App\Response\XFrameOptPlugin::DEPLOYMENT_CONFIG_X_FRAME_OPT</argument>
+        </arguments>
+    </type>
     <type name="Magento\Framework\App\Config\ScopePool">
         <arguments>
             <argument name="readerPool" xsi:type="object">Magento\Store\Model\Config\Reader\ReaderPool\Proxy</argument>
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate.php
index ba316fd6f734908c6cbd8f1d3cc6c444fa6c6c4c..3a09ea4b4744c31230e5ab2818f8ff0d678f9a28 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate.php
@@ -32,18 +32,6 @@ class Rate extends \Magento\Backend\App\Action
      */
     protected function _isAllowed()
     {
-        switch ($this->getRequest()->getActionName()) {
-            case 'importExport':
-                return $this->_authorization->isAllowed('Magento_TaxImportExport::import_export');
-            case 'importPost':
-            case 'exportPost':
-                return $this->_authorization->isAllowed(
-                    'Magento_Tax::manage_tax'
-                ) || $this->_authorization->isAllowed(
-                    'Magento_TaxImportExport::import_export'
-                );
-            default:
-                return $this->_authorization->isAllowed('Magento_Tax::manage_tax');
-        }
+        return $this->_authorization->isAllowed('Magento_Tax::manage_tax');
     }
 }
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
index 1d5685802882b5ed3703222f7318511712493605..92e825650f804d4b0475e193b89b0d44cf66205e 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
@@ -83,4 +83,17 @@ class ExportPost extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
         }
         return $this->fileFactory->create('tax_rates.csv', $content, DirectoryList::VAR_DIR);
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed(
+            'Magento_Tax::manage_tax'
+        ) || $this->_authorization->isAllowed(
+            'Magento_TaxImportExport::import_export'
+        );
+
+    }
 }
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php
index 5ba0b3e87da0e7727e89aa3747d34916e2d0123a..b37520a99f870106a31e6e6ee93b7e1ae9f82345 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php
@@ -30,4 +30,12 @@ class ImportExport extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
         $resultPage->getConfig()->getTitle()->prepend(__('Import and Export Tax Rates'));
         return $resultPage;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('Magento_TaxImportExport::import_export');
+    }
 }
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php
index 663a0183b1e86cba8e888c9a9b194e24e99c9519..eb5efff3d5e9be912e0d5f50129187dec9646ba2 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php
@@ -36,4 +36,17 @@ class ImportPost extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
         $resultRedirect->setUrl($this->_redirect->getRedirectUrl());
         return $resultRedirect;
     }
+
+    /**
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed(
+            'Magento_Tax::manage_tax'
+        ) || $this->_authorization->isAllowed(
+            'Magento_TaxImportExport::import_export'
+        );
+
+    }
 }
diff --git a/app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml b/app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml
index f81d5ae8386c690c113ed59a1ed5fef74a7ed333..1b984b454f0a535088d61127e9cf02cfc8f74add 100644
--- a/app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml
+++ b/app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml
@@ -10,5 +10,4 @@
        target="_blank">
         <?php echo __('Report All Bugs') ?>
     </a>
-    <strong><?php echo __('(ver. %1)', \Magento\Framework\AppInterface::VERSION) ?></strong>
 </small>
diff --git a/app/code/Magento/Theme/view/frontend/templates/html/footer.phtml b/app/code/Magento/Theme/view/frontend/templates/html/footer.phtml
index d5e3ef7851329e5893cbf7ad15fe45fdf7cf8efb..f158afa5e9c95d49f2cd9c044a8af6f4bca4a7fa 100644
--- a/app/code/Magento/Theme/view/frontend/templates/html/footer.phtml
+++ b/app/code/Magento/Theme/view/frontend/templates/html/footer.phtml
@@ -12,7 +12,7 @@
         <?php echo $block->getChildHtml() ?>
         <p class="bugs"><?php echo __('Help Us Keep Magento Healthy') ?> - <a
             href="http://www.magentocommerce.com/bug-tracking"
-            target="_blank"><strong><?php echo __('Report All Bugs') ?></strong></a> <?php echo __('(ver. %1)', \Magento\Framework\AppInterface::VERSION) ?>
+            target="_blank"><strong><?php echo __('Report All Bugs') ?></strong></a>
         </p>
         <address><?php echo $block->getCopyright() ?></address>
     </div>
diff --git a/app/code/Magento/Version/Controller/Index/Index.php b/app/code/Magento/Version/Controller/Index/Index.php
index 687e3d3d5163512fb83214e04961b43d359ba1ba..0fe6235bc6ca091e830b184ffa73b3be57875e58 100644
--- a/app/code/Magento/Version/Controller/Index/Index.php
+++ b/app/code/Magento/Version/Controller/Index/Index.php
@@ -9,6 +9,7 @@ namespace Magento\Version\Controller\Index;
 use Magento\Framework\App\Action\Action;
 use Magento\Framework\App\Action\Context;
 use Magento\Framework\App\ProductMetadataInterface;
+use Magento\Framework\Exception\StateException;
 
 /**
  * Magento Version controller
@@ -31,15 +32,21 @@ class Index extends Action
     }
 
     /**
-     * Sets the response body with ProductName/Version (Edition). E.g.: Magento/0.42.0-beta3 (Community)
+     * Sets the response body to ProductName/Major.MinorVersion (Edition). E.g.: Magento/0.42 (Community). Omits patch
+     * version from response
      *
      * @return void
      */
     public function execute()
     {
+        $versionParts = explode('.', $this->productMetadata->getVersion());
+        if (!isset($versionParts[0]) || !isset($versionParts[1])) {
+            return ; // Major and minor version are not set - return empty response
+        }
+        $majorMinorVersion = $versionParts[0] . '.' . $versionParts[1];
         $this->getResponse()->setBody(
             $this->productMetadata->getName() . '/' .
-            $this->productMetadata->getVersion() . ' (' .
+            $majorMinorVersion . ' (' .
             $this->productMetadata->getEdition() . ')'
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Utility/Controller.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractBackendController.php
similarity index 63%
rename from dev/tests/integration/testsuite/Magento/Backend/Utility/Controller.php
rename to dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractBackendController.php
index 1100934f8dc0362d7f12fa44c5e677975f819e0d..8ae817b42cee2324f68f264a50fa17ae9e5b265b 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Utility/Controller.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractBackendController.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Backend\Utility;
+namespace Magento\TestFramework\TestCase;
 
 /**
  * A parent class for backend controllers - contains directives for admin user creation and authentication
  * @SuppressWarnings(PHPMD.NumberOfChildren)
  * @SuppressWarnings(PHPMD.numberOfChildren)
  */
-class Controller extends \Magento\TestFramework\TestCase\AbstractController
+abstract class AbstractBackendController extends \Magento\TestFramework\TestCase\AbstractController
 {
     /**
      * @var \Magento\Backend\Model\Auth\Session
@@ -22,6 +22,20 @@ class Controller extends \Magento\TestFramework\TestCase\AbstractController
      */
     protected $_auth;
 
+    /**
+     * The resource used to authorize action
+     *
+     * @var string
+     */
+    protected $resource = null;
+
+    /**
+     * The uri at which to access the controller
+     *
+     * @var string
+     */
+    protected $uri = null;
+
     protected function setUp()
     {
         parent::setUp();
@@ -70,4 +84,27 @@ class Controller extends \Magento\TestFramework\TestCase\AbstractController
     ) {
         parent::assertSessionMessages($constraint, $messageType, $messageManagerClass);
     }
+
+
+    public function testAclHasAccess()
+    {
+        if ($this->uri === null) {
+            $this->markTestIncomplete('AclHasAccess test is not complete');
+        }
+        $this->dispatch($this->uri);
+        $this->assertNotSame(403, $this->getResponse()->getHttpResponseCode());
+        $this->assertNotSame(404, $this->getResponse()->getHttpResponseCode());
+    }
+
+    public function testAclNoAccess()
+    {
+        if ($this->resource === null) {
+            $this->markTestIncomplete('Acl test is not complete');
+        }
+        $this->_objectManager->get('Magento\Framework\Acl\Builder')
+            ->getAcl()
+            ->deny(null, $this->resource);
+        $this->dispatch($this->uri);
+        $this->assertSame(403, $this->getResponse()->getHttpResponseCode());
+    }
 }
diff --git a/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsReadTest.php b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsReadTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..06b47f04772a56f81a2c1cfbc1e633233ada3c35
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsReadTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\AdminNotification\Controller\Adminhtml\Notification;
+
+class MarkAsReadTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_AdminNotification::mark_as_read';
+        $this->uri = 'backend/admin/notification/markasread';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsReadTest.php b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsReadTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..18f3604e29d1b0aee4043a4ae100e9164ebe2b97
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsReadTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\AdminNotification\Controller\Adminhtml\Notification;
+
+class MassMarkAsReadTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_AdminNotification::mark_as_read';
+        $this->uri = 'backend/admin/notification/massmarkasread';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemoveTest.php b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemoveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..780e716c5ab7627a83e62ed91db2d9f3fac52475
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemoveTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\AdminNotification\Controller\Adminhtml\Notification;
+
+class MassRemoveTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_AdminNotification::adminnotification_remove';
+        $this->uri = 'backend/admin/notification/massremove';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/RemoveTest.php b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/RemoveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..240b91ea122e4f19576ee1a719cfe35f7c2c051f
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/AdminNotification/Controller/Adminhtml/Notification/RemoveTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\AdminNotification\Controller\Adminhtml\Notification;
+
+class RemoveTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_AdminNotification::adminnotification_remove';
+        $this->uri = 'backend/admin/notification/remove';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Backend/App/AbstractActionTest.php b/dev/tests/integration/testsuite/Magento/Backend/App/AbstractActionTest.php
index 4578a476df3ae6d78e9c813050a9be3f7fd9024b..e5362e3496e73a2be9cee990f518d4fa408c5c84 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/App/AbstractActionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/App/AbstractActionTest.php
@@ -9,7 +9,7 @@ namespace Magento\Backend\App;
  * Test class for \Magento\Backend\Controller\AbstractAction.
  * @magentoAppArea adminhtml
  */
-class AbstractActionTest extends \Magento\Backend\Utility\Controller
+class AbstractActionTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Check redirection to startup page for logged user
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Cache/MassActionTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Cache/MassActionTest.php
index 0c6d65b52543fa3dac3c9d6de3434a940184cfbb..e122d906f21866c9b532841472bfc792675ef033 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Cache/MassActionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Cache/MassActionTest.php
@@ -11,7 +11,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 use Magento\Framework\Config\File\ConfigFilePool;
 use Magento\Framework\App\Filesystem\DirectoryList;
 
-class MassActionTest extends \Magento\Backend\Utility\Controller
+class MassActionTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Configuration of cache types
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/CacheTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/CacheTest.php
index 071967d1e5fcc6598c1bcbfbfe08ee169e403e1e..7229d95e579e929d7fd758deacbba47a61caadfe 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/CacheTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/CacheTest.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class CacheTest extends \Magento\Backend\Utility\Controller
+class CacheTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/Backend/controllers/_files/cache/application_cache.php
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewedTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewedTest.php
index 72f68982f89d60c0b4bebe7ffd383d4d4722e601..c9749a5aab2ba7812ec5482ccc01898fc82c930b 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewedTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewedTest.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Backend\Controller\Adminhtml\Dashboard;
 
-class ProductsViewedTest extends \Magento\Backend\Utility\Controller
+class ProductsViewedTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/Reports/_files/viewed_products.php
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/DashboardTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/DashboardTest.php
index f83c3bb77a83b50daa1a74ae35544e4b1fd531d4..20b193ee77d292d9d46cd0e2a12f32e55b3c8658 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/DashboardTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/DashboardTest.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class DashboardTest extends \Magento\Backend\Utility\Controller
+class DashboardTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testAjaxBlockAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php
index 795c1f2b9271705e6318f404ae2aa098058d6b18..6575448913a4f7344c1d018423f20c9acd733bf3 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class IndexTest extends \Magento\Backend\Utility\Controller
+class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Check not logged state
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/AccountTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/AccountTest.php
index a4edd2510d3d8f6fed9ef24683bc78f2fb703e34..983e3dae2d465f35cf20407e86b5ef36374da9f3 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/AccountTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/AccountTest.php
@@ -10,7 +10,7 @@ use Magento\TestFramework\Bootstrap;
 /**
  * @magentoAppArea adminhtml
  */
-class AccountTest extends \Magento\Backend\Utility\Controller
+class AccountTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @dataProvider saveDataProvider
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/DesignTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/DesignTest.php
index be0bd223c23ed48b27afed77d97b21f522bc17ec..5c6a9c49ef209f654995cafe4d6039f6a122e288 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/DesignTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/DesignTest.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Controller\Adminhtml\System;
 /**
  * @magentoAppArea adminhtml
  */
-class DesignTest extends \Magento\Backend\Utility\Controller
+class DesignTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @covers \Magento\Backend\App\Action::_addLeft
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/StoreTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/StoreTest.php
index b84193fcd61625c1a2fce585b09b1a49a1ff3a03..7ce98d848e5eae77afe711e243fe813fd6178f6e 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/StoreTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/StoreTest.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Controller\Adminhtml\System;
 /**
  * @magentoAppArea adminhtml
  */
-class StoreTest extends \Magento\Backend\Utility\Controller
+class StoreTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testIndexAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/UrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/UrlRewriteTest.php
index 51db66afe941fde1c1614c0eb7d1f1f6b807c4db..23e50b082be7cb56b6603e4057d109c46aa9983e 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/UrlRewriteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/UrlRewriteTest.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class UrlRewriteTest extends \Magento\Backend\Utility\Controller
+class UrlRewriteTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Check save cms page rewrite
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php
index 02ba93db4c6fd567be8d46e25fbfcbbb2230100f..5965cc529be88816377e712e097bb3bf180706cc 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class CategoryTest extends \Magento\Backend\Utility\Controller
+class CategoryTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php
index cb8f0d7354b76faf0c082ac59f31d1de59ca42a9..276f752779f224cedd35b06359147952c5961d69 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product\Action;
 /**
  * @magentoAppArea adminhtml
  */
-class AttributeTest extends \Magento\Backend\Utility\Controller
+class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @covers \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute\Save::execute
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
index 4b64142851618d123c4f3a6011146cccd1863692..07b5cac6bb2689cec5c86e56399947798dc28763 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product;
 /**
  * @magentoAppArea adminhtml
  */
-class AttributeTest extends \Magento\Backend\Utility\Controller
+class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @return void
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/NewActionTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/NewActionTest.php
index 1af4fd36b8f494e3005f00b50ed0609d290c5e55..b87d11c2c90a3ba8a11a11479bcd7f6369b460c2 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/NewActionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/NewActionTest.php
@@ -11,7 +11,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product;
 /**
  * @magentoAppArea adminhtml
  */
-class NewActionTest extends \Magento\Backend\Utility\Controller
+class NewActionTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @TODO: Remove this test when corresponding functional tests become mandatory:
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/ReviewTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/ReviewTest.php
index 54c2a94c9e5a884c2977a6958e2a48f817baf7ad..b684ee4cebf63ad2a719a51d05e06a56f0ab9a71 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/ReviewTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/ReviewTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product;
 /**
  * @magentoAppArea adminhtml
  */
-class ReviewTest extends \Magento\Backend\Utility\Controller
+class ReviewTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/Review/_files/review_xss.php
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php
index 062f0b5d71bcc0f93749fe8d812d854f1b7a1f9f..6fdab58458c5d43ee1840d57a5d6e120487d090f 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php
@@ -7,7 +7,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product\Set;
 
 use Magento\Framework\Message\MessageInterface;
 
-class DeleteTest extends \Magento\Backend\Utility\Controller
+class DeleteTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/Eav/_files/empty_attribute_set.php
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php
index 0ab3f897f2b90307ddbaefec4e41fd642b624d7b..6cefed9c36b43e37763bec0f686a8f47d6629459 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/ProductTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class ProductTest extends \Magento\Backend\Utility\Controller
+class ProductTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testSaveActionWithDangerRequest()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/IndexTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/IndexTest.php
index 2dc7211134a9ab4275fdfe365aa1a7a676af70c9..db421e962fe1b6e91443645cf17fc3611f9234f5 100644
--- a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/IndexTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Cms\Controller\Adminhtml\Wysiwyg\Images;
 
-class IndexTest extends \Magento\Backend\Utility\Controller
+class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testViewAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php
index 17507214f58ce960622fe170a94e079f0eb1f863..93300ebe991c14b95c33ead08ea1a8b5ae73f948 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Config/Controller/Adminhtml/System/ConfigTest.php
@@ -13,7 +13,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 /**
  * @magentoAppArea adminhtml
  */
-class ConfigTest extends \Magento\Backend\Utility\Controller
+class ConfigTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testEditAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/MatrixTest.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/MatrixTest.php
index 73ad1be033ce7020a1cf14fa24322c05a4b241b3..a878e83de053fdf216a97dda9a3c59c1995d13c8 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/MatrixTest.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/MatrixTest.php
@@ -9,7 +9,7 @@ namespace Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Con
 /**
  * @magentoAppArea adminhtml
  */
-class MatrixTest extends \Magento\Backend\Utility\Controller
+class MatrixTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     const ATTRIBUTE_LABEL = 'New Attribute Label';
     const ATTRIBUTE_POSITION = 42;
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/ConfigTest.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/ConfigTest.php
index b3c492d07d29ce2d775ca328f070d90ccb5be646..e05edee57e832c8a02083b32fa7d43ec224f0528 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/ConfigTest.php
@@ -13,7 +13,7 @@ use Magento\Catalog\Model\Resource\Eav\Attribute;
 /**
  * @magentoAppArea adminhtml
  */
-class ConfigTest extends \Magento\Backend\Utility\Controller
+class ConfigTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     const ATTRIBUTE_LABEL = 'New Attribute Label';
     const ATTRIBUTE_POSITION = 42;
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Controller/Adminhtml/ProductTest.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Controller/Adminhtml/ProductTest.php
index 3bfa19d422aef293af99f7de84e0433cc364ddd4..0f4b46261fa9f49790b36b330a6461b5fda2080f 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Controller/Adminhtml/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Controller/Adminhtml/ProductTest.php
@@ -8,7 +8,7 @@ namespace Magento\ConfigurableProduct\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class ProductTest extends \Magento\Backend\Utility\Controller
+class ProductTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/ConfigurableProduct/_files/product_configurable.php
diff --git a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php
index 823a2adf5a524721e3865db62b9df44555fcd580..f170ad50089fcf44ae3add9c1ff078f0fb027e06 100644
--- a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php
+++ b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CurrencySymbol\Controller\Adminhtml\System\Currency;
 
-class FetchRatesTest extends \Magento\Backend\Utility\Controller
+class FetchRatesTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Test fetch action without service
diff --git a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/IndexTest.php b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/IndexTest.php
index 668d08345f155e186f8b4aa5f5498b190fa00615..66a0af3bc948c85b8d15491232cd98664af72476 100644
--- a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/IndexTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CurrencySymbol\Controller\Adminhtml\System\Currency;
 
-class IndexTest extends \Magento\Backend\Utility\Controller
+class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Test index action
diff --git a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRatesTest.php b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRatesTest.php
index 2b7a4fb020953a5997336ec6f6d0d5786e67fb78..0cece519e3355a7900a0a2c91af7e43efcaa0ad2 100644
--- a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRatesTest.php
+++ b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRatesTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CurrencySymbol\Controller\Adminhtml\System\Currency;
 
-class SaveRatesTest extends \Magento\Backend\Utility\Controller
+class SaveRatesTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
 
     /** @var \Magento\Directory\Model\Currency $currencyRate */
diff --git a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/IndexTest.php b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/IndexTest.php
index cb6cb168ad59333d8038a39fcb46b04189d2a500..525dcdfb697e8a4efc8cdf71bf732e4941bcee29 100644
--- a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/IndexTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CurrencySymbol\Controller\Adminhtml\System\Currencysymbol;
 
-class IndexTest extends \Magento\Backend\Utility\Controller
+class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Test index action
diff --git a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/SaveTest.php b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/SaveTest.php
index 2f738452630c8506fb0eb8a23bbe527687552aa1..b5fdfc9fc965e2272aabaddd0ed9eecf5238c287 100644
--- a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/SaveTest.php
+++ b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/SaveTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CurrencySymbol\Controller\Adminhtml\System\Currencysymbol;
 
-class SaveTest extends \Magento\Backend\Utility\Controller
+class SaveTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php
index e68f3c496b63b31bacd8ac68f309e14e6d05a869..482e0d7f7c59ee70bddf6fad3cc8051b78757e44 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php
@@ -8,7 +8,7 @@ namespace Magento\Customer\Controller\Adminhtml\Cart\Product\Composite;
 /**
  * @magentoAppArea adminhtml
  */
-class CartTest extends \Magento\Backend\Utility\Controller
+class CartTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @var \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/GroupTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/GroupTest.php
index 3ae1f6ed77cdf8de30eb055694af236f80bc6cb6..87b52cbf40c2ab2feb03bc8951ec1d1474627ecb 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/GroupTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/GroupTest.php
@@ -11,7 +11,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 /**
  * @magentoAppArea adminhtml
  */
-class GroupTest extends \Magento\Backend\Utility\Controller
+class GroupTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     const TAX_CLASS_ID = 3;
     const TAX_CLASS_NAME = 'Retail Customer';
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php
index d2a3d0a770a28ef9ce1b3175a07eb59dbe1d0a17..9126bb17030bb111e807a8170e6eaabca8c3b2be 100755
--- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php
@@ -15,7 +15,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 /**
  * @magentoAppArea adminhtml
  */
-class IndexTest extends \Magento\Backend\Utility\Controller
+class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Base controller URL
diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php
index ae89b49fb049bd33e40df44fc2ff57d3a709326c..7e2b343e043ba53630faaa163eacb1749d4eba72 100644
--- a/dev/tests/integration/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php
+++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php
@@ -8,7 +8,7 @@ namespace Magento\DesignEditor\Controller\Adminhtml\System\Design;
 /**
  * @magentoAppArea adminhtml
  */
-class EditorTest extends \Magento\Backend\Utility\Controller
+class EditorTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testIndexAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php b/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php
index 0060e0c30419b26866322a09d0a8c70d4cf833f0..81268a5d9d3ae0098d49e5e0e9538d2018e0c139 100644
--- a/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php
+++ b/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php
@@ -8,7 +8,7 @@ namespace Magento\Downloadable\Controller\Adminhtml\Downloadable;
  * See COPYING.txt for license details.
  * @magentoAppArea adminhtml
  */
-class FileTest extends \Magento\Backend\Utility\Controller
+class FileTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testUploadAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php
index 510e10103042213cc42e20bc54500cb146d3bcd9..1e7a3ac5d75bb07ac96af5a9beb570ef4cee0901 100644
--- a/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Controller/Adminhtml/Email/TemplateTest.php
@@ -8,7 +8,7 @@ namespace Magento\Email\Controller\Adminhtml\Email;
 /**
  * @magentoAppArea adminhtml
  */
-class TemplateTest extends \Magento\Backend\Utility\Controller
+class TemplateTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testDefaultTemplateAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/ItemsTest.php b/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/ItemsTest.php
index 9862cb8df11b4c20e4463d4a12cce7e3fb6a9b9c..1a6e527bb5176f886f11b8d9dc302bddb2095cc6 100644
--- a/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/ItemsTest.php
+++ b/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/ItemsTest.php
@@ -8,7 +8,7 @@ namespace Magento\GoogleShopping\Controller\Adminhtml\GoogleShopping;
 /**
  * @magentoAppArea adminhtml
  */
-class ItemsTest extends \Magento\Backend\Utility\Controller
+class ItemsTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testIndexAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/TypesTest.php b/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/TypesTest.php
index 6cdcb47a2c486ebf08c36294581cc75ddb8ee839..945d5c45c9d345b2e353a2c255b33eee580be5b5 100644
--- a/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/TypesTest.php
+++ b/dev/tests/integration/testsuite/Magento/GoogleShopping/Controller/Adminhtml/GoogleShopping/TypesTest.php
@@ -8,7 +8,7 @@ namespace Magento\GoogleShopping\Controller\Adminhtml\GoogleShopping;
 /**
  * @magentoAppArea adminhtml
  */
-class TypesTest extends \Magento\Backend\Utility\Controller
+class TypesTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testIndexAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ExportTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ExportTest.php
index 02a60876b9dba091db31a101a434475a96374d2e..f001fae69deb741567a4844449d48838b9e9484f 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ExportTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ExportTest.php
@@ -8,7 +8,7 @@ namespace Magento\ImportExport\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class ExportTest extends \Magento\Backend\Utility\Controller
+class ExportTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Set value of $_SERVER['HTTP_X_REQUESTED_WITH'] parameter here
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/Import/ValidateTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/Import/ValidateTest.php
index 22b1348b79c4a10573a9dd61624fffa83c1f751a..6f25434d61bf56e11c13b47c60c5bc60219b41b6 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/Import/ValidateTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/Import/ValidateTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\Filesystem\DirectoryList;
 /**
  * @magentoAppArea adminhtml
  */
-class ValidateTest extends \Magento\Backend\Utility\Controller
+class ValidateTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @backupGlobals enabled
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ImportTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ImportTest.php
index 36e888a964d0115c7597f07fc509f8ed1b15f6ce..75f0021126bf7b00f8e01dac0ade173eb5a543c4 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ImportTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Controller/Adminhtml/ImportTest.php
@@ -8,7 +8,7 @@ namespace Magento\ImportExport\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class ImportTest extends \Magento\Backend\Utility\Controller
+class ImportTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testGetFilterAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Indexer/Controller/Adminhtml/IndexerTest.php b/dev/tests/integration/testsuite/Magento/Indexer/Controller/Adminhtml/IndexerTest.php
index 827606d2109cc98040774d98805329fe5ca57594..a2c49175f5378afa4ae9972aa15ad9f03151dbf5 100644
--- a/dev/tests/integration/testsuite/Magento/Indexer/Controller/Adminhtml/IndexerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Indexer/Controller/Adminhtml/IndexerTest.php
@@ -8,7 +8,7 @@ namespace Magento\Indexer\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class IndexerTest extends \Magento\Backend\Utility\Controller
+class IndexerTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Assert that current page is index management page and that it has indexers mode selector
diff --git a/dev/tests/integration/testsuite/Magento/Integration/Controller/Adminhtml/IntegrationTest.php b/dev/tests/integration/testsuite/Magento/Integration/Controller/Adminhtml/IntegrationTest.php
index eec5ee556e9cdf481f3c3420bd624ee7a94e9b94..5c281c22a5fe425acb0cd5197ea7aab06ec02149 100644
--- a/dev/tests/integration/testsuite/Magento/Integration/Controller/Adminhtml/IntegrationTest.php
+++ b/dev/tests/integration/testsuite/Magento/Integration/Controller/Adminhtml/IntegrationTest.php
@@ -13,7 +13,7 @@ namespace Magento\Integration\Controller\Adminhtml;
  * @magentoAppArea adminhtml
  * @magentoDbIsolation enabled
  */
-class IntegrationTest extends \Magento\Backend\Utility\Controller
+class IntegrationTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /** @var \Magento\Integration\Model\Integration  */
     private $_integration;
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterQueueTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterQueueTest.php
index facea396ed4e6b97dcb293b3e888ede732396580..5da58b332295708127c6560f6d701574dd2d560d 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterQueueTest.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterQueueTest.php
@@ -8,7 +8,7 @@ namespace Magento\Newsletter\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class NewsletterQueueTest extends \Magento\Backend\Utility\Controller
+class NewsletterQueueTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @var \Magento\Newsletter\Model\Template
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterTemplateTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterTemplateTest.php
index 3922013af5d5b74accd1b8a8aaeae5937c4f1ce6..a626b60004c8a7b8c90d72e17a483788ebb1e694 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterTemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/Controller/Adminhtml/NewsletterTemplateTest.php
@@ -8,7 +8,7 @@ namespace Magento\Newsletter\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class NewsletterTemplateTest extends \Magento\Backend\Utility\Controller
+class NewsletterTemplateTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @var \Magento\Newsletter\Model\Template
diff --git a/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php b/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php
index f5a343241c2e834a4ad7ae2b794ea979b9d31f61..695ae56b1f7205a938b1f112c6808cc5855548ed 100644
--- a/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php
+++ b/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php
@@ -8,7 +8,7 @@ namespace Magento\PageCache\Block\System\Config\Form\Field;
 /**
  * @magentoAppArea adminhtml
  */
-class ExportTest extends \Magento\Backend\Utility\Controller
+class ExportTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Check Varnish export buttons
diff --git a/dev/tests/integration/testsuite/Magento/Reports/Controller/Adminhtml/Report/Product/ViewedTest.php b/dev/tests/integration/testsuite/Magento/Reports/Controller/Adminhtml/Report/Product/ViewedTest.php
index 44035ad0d3a55cf049c412e06d190f5cf85ed445..c75c03e7a6a025e29a47af6361d794b756ba1881 100644
--- a/dev/tests/integration/testsuite/Magento/Reports/Controller/Adminhtml/Report/Product/ViewedTest.php
+++ b/dev/tests/integration/testsuite/Magento/Reports/Controller/Adminhtml/Report/Product/ViewedTest.php
@@ -11,7 +11,7 @@ namespace Magento\Reports\Controller\Adminhtml\Report\Product;
 /**
  * @magentoAppArea adminhtml
  */
-class ViewedTest extends \Magento\Backend\Utility\Controller
+class ViewedTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testExecute()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Adminhtml/Order/View/InfoTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Adminhtml/Order/View/InfoTest.php
index 3995996455974b9767dd32cc470c48791ae39c7d..94ffd027c1da562d790911641b6edf193152e412 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Block/Adminhtml/Order/View/InfoTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Adminhtml/Order/View/InfoTest.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Block\Adminhtml\Order\View;
 /**
  * Test class for \Magento\Sales\Block\Adminhtml\Order\View\Info
  */
-class InfoTest extends \Magento\Backend\Utility\Controller
+class InfoTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Value for the user defined custom attribute, which is created by attribute_user_defined_customer.php fixture.
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddCommentTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddCommentTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..be01007ab3885041af5aed43372d17f3682c532d
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddCommentTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class AddCommentTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::comment';
+        $this->uri = 'backend/sales/order/addcomment';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressSaveTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressSaveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8859a8453c410d83771630c74a6ada661941b006
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressSaveTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class AddressSaveTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::actions_edit';
+        $this->uri = 'backend/sales/order/addresssave';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a986a948e8235b029335310a844a71a3235c9865
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/AddressTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class AddressTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::actions_edit';
+        $this->uri = 'backend/sales/order/address';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CancelTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CancelTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f37712982a85bd8ff37aaf68469d4aa63bc8786
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CancelTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class CancelTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::cancel';
+        $this->uri = 'backend/sales/order/cancel';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php
index 9514e649404e054dcfc4ba7d1a3eaf3c55006859..edc7f00ce5e217727707a2ebf3adbc5672d8d1ef 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreateTest.php
@@ -9,7 +9,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
  * @magentoAppArea adminhtml
  * @magentoDbIsolation enabled
  */
-class CreateTest extends \Magento\Backend\Utility\Controller
+class CreateTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testLoadBlockAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreditmemoTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreditmemoTest.php
index 5e33aac4557c9475b3f17ddc19cddf2b8fef8070..1f9834830161845426de0bbd59b2937762a9dc07 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreditmemoTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/CreditmemoTest.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 /**
  * @magentoAppArea adminhtml
  */
-class CreditmemoTest extends \Magento\Backend\Utility\Controller
+class CreditmemoTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoConfigFixture current_store cataloginventory/item_options/auto_return 1
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/EmailTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/EmailTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..406511061d4fe5bbec957b2e7710bb75353babd6
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/EmailTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class EmailTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::email';
+        $this->uri = 'backend/sales/order/email';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/HoldTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/HoldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c85de19064010eab3a6aad6113291c63666310a
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/HoldTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class HoldTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::hold';
+        $this->uri = 'backend/sales/order/hold';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/ReviewPaymentTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/ReviewPaymentTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..042d5b7b2e237c518128de0e4792b86c3add07a5
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/ReviewPaymentTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class ReviewPaymentTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::review_payment';
+        $this->uri = 'backend/sales/order/reviewpayment';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/UnholdTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/UnholdTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..33e83893556e43de5098d2dc1b8e22953d78a096
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/UnholdTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class UnholdTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::unhold';
+        $this->uri = 'backend/sales/order/unhold';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/ViewTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/ViewTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f61a32c5080268239e440d8659f3a3a323fbc539
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/ViewTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Order;
+
+class ViewTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::actions_view';
+        $this->uri = 'backend/sales/order/view';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php
index 8b19d20b99d621bbc038d18b5708617594b519e0..7198676eaf45c6ee1a25e8072a78f106280417c1 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/OrderTest.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class OrderTest extends \Magento\Backend\Utility\Controller
+class OrderTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testIndexAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Transactions/FetchTest.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Transactions/FetchTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d1191b8fdce496f4fb678811106cab3eb579f8b3
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Transactions/FetchTest.php
@@ -0,0 +1,18 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Controller\Adminhtml\Transactions;
+
+use Magento\TestFramework\TestCase\AbstractBackendController;
+
+class FetchTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::transactions_fetch';
+        $this->uri = 'backend/sales/transactions/fetch';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/RateTest.php b/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/RateTest.php
index f91ac38ec5effe8a65f465a36f0d99ae0a27df30..d308c6834ef1a827e99c30000b7adb68c32af82e 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/RateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/RateTest.php
@@ -8,7 +8,7 @@ namespace Magento\Tax\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class RateTest extends \Magento\Backend\Utility\Controller
+class RateTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @dataProvider ajaxSaveActionDataProvider
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/TaxTest.php b/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/TaxTest.php
index f2c5c66bac73725a19539c16a0335537eea75a57..deaef7f6999809fa4a887f3c532c111275c75320 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/TaxTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/TaxTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\Exception\NoSuchEntityException;
 /**
  * @magentoAppArea adminhtml
  */
-class TaxTest extends \Magento\Backend\Utility\Controller
+class TaxTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @dataProvider ajaxActionDataProvider
diff --git a/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPostTest.php b/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPostTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d49cdc7ec840b1a6106a4c5fa14c759816a9d752
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPostTest.php
@@ -0,0 +1,16 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\TaxImportExport\Controller\Adminhtml\Rate;
+
+class ExportPostTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::transactions_fetch';
+        $this->uri = 'backend/sales/transactions/fetch';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExportTest.php b/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExportTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..34e08d3848b77f2a9cafe6fd69169abe4b0d0675
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExportTest.php
@@ -0,0 +1,18 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\TaxImportExport\Controller\Adminhtml\Rate;
+
+use Magento\TestFramework\TestCase\AbstractBackendController;
+
+class ImportExportTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::transactions_fetch';
+        $this->uri = 'backend/sales/transactions/fetch';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPostTest.php b/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPostTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7034236c8cc598a5f78d109ab7fd7d3c24ea678b
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPostTest.php
@@ -0,0 +1,18 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\TaxImportExport\Controller\Adminhtml\Rate;
+
+use Magento\TestFramework\TestCase\AbstractBackendController;
+
+class ImportPostTest extends \Magento\TestFramework\TestCase\AbstractBackendController
+{
+    public function setUp()
+    {
+        $this->resource = 'Magento_Sales::transactions_fetch';
+        $this->uri = 'backend/sales/transactions/fetch';
+        parent::setUp();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php b/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php
index e33d95da85e615e36efc3d908bf6eedbba91a8ad..a11f0ed5aeeb5ba700872f9fff971d9d54ee83d3 100644
--- a/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php
@@ -11,7 +11,7 @@ use Magento\Framework\Filesystem\DirectoryList;
 /**
  * @magentoAppArea adminhtml
  */
-class ThemeControllerTest extends \Magento\Backend\Utility\Controller
+class ThemeControllerTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testUploadJsAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/User/Block/User/Edit/Tab/MainTest.php b/dev/tests/integration/testsuite/Magento/User/Block/User/Edit/Tab/MainTest.php
index 27f28a4d6f77ecc636b1f41091068f6a7bbb6d15..79a1ba4425db6ea83f91cf3e6d9d6d9c4873a3d1 100644
--- a/dev/tests/integration/testsuite/Magento/User/Block/User/Edit/Tab/MainTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Block/User/Edit/Tab/MainTest.php
@@ -8,7 +8,7 @@ namespace Magento\User\Block\User\Edit\Tab;
 /**
  * @magentoAppArea adminhtml
  */
-class MainTest extends \Magento\Backend\Utility\Controller
+class MainTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @var \Magento\User\Block\User\Edit\Tab\Main
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php
index 5b9c0f3f53801ac13305994e4cbbc96970a2f8e5..052030a1552fdea8b931479d501192c0873f738b 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php
@@ -10,7 +10,7 @@ namespace Magento\User\Controller\Adminhtml;
  *
  * @magentoAppArea adminhtml
  */
-class AuthTest extends \Magento\Backend\Utility\Controller
+class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Test form existence
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php
index 72df2422c7b55c972ef57947688f790530e5bf36..58f4fc2dabea0bfdb31047a52dceb25460a16076 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php
@@ -14,7 +14,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 /**
  * Test class for Magento\User\Controller\Adminhtml\User\InvalidateToken.
  */
-class InvalidateTokenTest extends \Magento\Backend\Utility\Controller
+class InvalidateTokenTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @magentoDataFixture Magento/User/_files/user_with_role.php
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php
index 1683937313c4057dd0f36f9b92f4836607c669e8..932351fb427b712787c64a420f9c86e428f0f5d1 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php
@@ -10,7 +10,7 @@ namespace Magento\User\Controller\Adminhtml\User;
  *
  * @magentoAppArea adminhtml
  */
-class RoleTest extends \Magento\Backend\Utility\Controller
+class RoleTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testEditRoleAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php
index f6fa8857422203c5e92a27aad738964eb44c3077..6755a354da484e993a537a47c5a91556e9ba1c22 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/UserTest.php
@@ -10,7 +10,7 @@ use Magento\TestFramework\Bootstrap;
 /**
  * @magentoAppArea adminhtml
  */
-class UserTest extends \Magento\Backend\Utility\Controller
+class UserTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     public function testIndexAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Variable/Controller/Adminhtml/System/VariableTest.php b/dev/tests/integration/testsuite/Magento/Variable/Controller/Adminhtml/System/VariableTest.php
index 9b50fdcbc477ec4eae68ad518f8e071600e26867..f7601ddca76d98124e3190b78afec7c51174b9b0 100644
--- a/dev/tests/integration/testsuite/Magento/Variable/Controller/Adminhtml/System/VariableTest.php
+++ b/dev/tests/integration/testsuite/Magento/Variable/Controller/Adminhtml/System/VariableTest.php
@@ -8,7 +8,7 @@ namespace Magento\Variable\Controller\Adminhtml\System;
 /**
  * @magentoAppArea adminhtml
  */
-class VariableTest extends \Magento\Backend\Utility\Controller
+class VariableTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * @covers \Magento\Backend\App\Action::_addLeft
diff --git a/dev/tests/integration/testsuite/Magento/Version/Controller/Index/IndexTest.php b/dev/tests/integration/testsuite/Magento/Version/Controller/Index/IndexTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3fcd52372495618c34abe710326e17066c4d704f
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Version/Controller/Index/IndexTest.php
@@ -0,0 +1,34 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Version\Controller\Index;
+
+class IndexTest extends \Magento\TestFramework\TestCase\AbstractController
+{
+    public function testIndexAction()
+    {
+        // Execute controller to get version response
+        $this->dispatch('magento_version/index/index');
+        $body = $this->getResponse()->getBody();
+
+        $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+        /** @var \Magento\Framework\App\ProductMetadataInterface $productMetadata */
+        $productMetadata = $objectManager->get('Magento\Framework\App\ProductMetadataInterface');
+        $name = $productMetadata->getName();
+        $edition = $productMetadata->getEdition();
+
+        $fullVersion = $productMetadata->getVersion();
+        $versionParts = explode('.', $fullVersion);
+        $majorMinor = $versionParts[0] . '.' . $versionParts[1];
+
+        // Response must contain Major.Minor version, product name, and edition
+        $this->assertContains($majorMinor, $body);
+        $this->assertContains($name, $body);
+        $this->assertContains($edition, $body);
+
+        // Response must not contain full version including patch version
+        $this->assertNotContains($fullVersion, $body);
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php b/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php
index 2f72dcf52197624a6fd609175e58ceb289538508..30dbf0cf1816b31252c76fb8936fff6084d1f9c4 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php
@@ -8,7 +8,7 @@ namespace Magento\Widget\Controller\Adminhtml\Widget;
 /**
  * @magentoAppArea adminhtml
  */
-class InstanceTest extends \Magento\Backend\Utility\Controller
+class InstanceTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     protected function setUp()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/WidgetTest.php b/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/WidgetTest.php
index 0b36d7cd5b35d7aee117d90cdfd01b9dbf5bf08d..90f1d482a23dc7c2c2603adb46e100371b759a19 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/WidgetTest.php
+++ b/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/WidgetTest.php
@@ -8,7 +8,7 @@ namespace Magento\Widget\Controller\Adminhtml;
 /**
  * @magentoAppArea adminhtml
  */
-class WidgetTest extends \Magento\Backend\Utility\Controller
+class WidgetTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Partially covers \Magento\Widget\Block\Adminhtml\Widget\Options::_addField()
diff --git a/lib/internal/Magento/Framework/App/Resource.php b/lib/internal/Magento/Framework/App/Resource.php
index d76a3a68bdcafbc35eda2c73dc8b1868fb39ee61..fae3cdb761c5fc502aef804db2f7b59f492ef335 100644
--- a/lib/internal/Magento/Framework/App/Resource.php
+++ b/lib/internal/Magento/Framework/App/Resource.php
@@ -85,6 +85,7 @@ class Resource
      *
      * @param string $resourceName
      * @return \Magento\Framework\DB\Adapter\AdapterInterface|false
+     * @codeCoverageIgnore
      */
     public function getConnection($resourceName)
     {
@@ -152,12 +153,26 @@ class Resource
         return $this->getConnection($connectionName)->getTableName($tableName);
     }
 
+    /**
+     * Build a trigger name
+     *
+     * @param string $tableName  The table that is the subject of the trigger
+     * @param string $time  Either "before" or "after"
+     * @param string $event  The DB level event which activates the trigger, i.e. "update" or "insert"
+     * @return string
+     */
+    public function getTriggerName($tableName, $time, $event)
+    {
+        return $this->getConnection(self::DEFAULT_READ_RESOURCE)->getTriggerName($tableName, $time, $event);
+    }
+
     /**
      * Set mapped table name
      *
      * @param string $tableName
      * @param string $mappedName
      * @return $this
+     * @codeCoverageIgnore
      */
     public function setMappedTableName($tableName, $mappedName)
     {
@@ -193,13 +208,12 @@ class Resource
         $fields,
         $indexType = \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_INDEX
     ) {
-        return $this->getConnection(
-            self::DEFAULT_READ_RESOURCE
-        )->getIndexName(
-            $this->getTableName($tableName),
-            $fields,
-            $indexType
-        );
+        return $this->getConnection(self::DEFAULT_READ_RESOURCE)
+            ->getIndexName(
+                $this->getTableName($tableName),
+                $fields,
+                $indexType
+            );
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/App/Response/Http.php b/lib/internal/Magento/Framework/App/Response/Http.php
index 55cda163252ab018807cc5d3323fc134e27146f0..3f419b71acf21f335ce6b1e99d3252f46a8d4689 100644
--- a/lib/internal/Magento/Framework/App/Response/Http.php
+++ b/lib/internal/Magento/Framework/App/Response/Http.php
@@ -21,6 +21,9 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
     /** Format for expiration timestamp headers */
     const EXPIRATION_TIMESTAMP_FORMAT = 'D, d M Y H:i:s T';
 
+    /** X-FRAME-OPTIONS Header name */
+    const HEADER_X_FRAME_OPT = 'X-Frame-Options';
+
     /** @var \Magento\Framework\Stdlib\CookieManagerInterface */
     protected $cookieManager;
 
@@ -51,6 +54,17 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
         $this->dateTime = $dateTime;
     }
 
+    /**
+     * Sends the X-FRAME-OPTIONS header to protect against click-jacking
+     *
+     * @param string $value
+     * @return void
+     */
+    public function setXFrameOptions($value)
+    {
+        $this->setHeader(self::HEADER_X_FRAME_OPT, $value);
+    }
+
     /**
      * Send Vary cookie
      *
@@ -109,6 +123,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
      * Set headers for no-cache responses
      *
      * @return void
+     * @codeCoverageIgnore
      */
     public function setNoCacheHeaders()
     {
@@ -122,6 +137,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
      *
      * @param string $content String in JSON format
      * @return \Magento\Framework\App\Response\Http
+     * @codeCoverageIgnore
      */
     public function representJson($content)
     {
@@ -131,6 +147,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
 
     /**
      * @return string[]
+     * @codeCoverageIgnore
      */
     public function __sleep()
     {
@@ -141,6 +158,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
      * Need to reconstruct dependencies when being de-serialized.
      *
      * @return void
+     * @codeCoverageIgnore
      */
     public function __wakeup()
     {
@@ -154,6 +172,7 @@ class Http extends \Magento\Framework\HTTP\PhpEnvironment\Response
      *
      * @param string $time
      * @return string
+     * @codeCoverageIgnore
      */
     protected function getExpirationHeader($time)
     {
diff --git a/lib/internal/Magento/Framework/App/Response/XFrameOptPlugin.php b/lib/internal/Magento/Framework/App/Response/XFrameOptPlugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..a108b754893e0ecc1eed081e0e0fe47dcb0f4790
--- /dev/null
+++ b/lib/internal/Magento/Framework/App/Response/XFrameOptPlugin.php
@@ -0,0 +1,43 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\App\Response;
+
+/**
+ * Adds an X-FRAME-OPTIONS header to HTTP responses to safeguard against click-jacking.
+ */
+class XFrameOptPlugin
+{
+    /** Deployment config key for frontend x-frame-options header value */
+    const DEPLOYMENT_CONFIG_X_FRAME_OPT = 'x-frame-options';
+
+    /** Always send SAMEORIGIN in backend x-frame-options header */
+    const BACKEND_X_FRAME_OPT = 'SAMEORIGIN';
+
+    /**
+     *The header value
+     * @var string
+     */
+    private $xFrameOpt;
+
+    /**
+     * @param string $xFrameOpt
+     */
+    public function __construct($xFrameOpt)
+    {
+        $this->xFrameOpt = $xFrameOpt;
+    }
+
+    /**
+     * @param \Magento\Framework\App\Response\Http $subject
+     * @return void
+     * @codeCoverageIgnore
+     */
+    public function beforeSendResponse(\Magento\Framework\App\Response\Http $subject)
+    {
+        $subject->setXFrameOptions($this->xFrameOpt);
+    }
+}
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php
index a92a9eb73432db63d22a8b28c104da5ec28360f4..86fc5bf7ac92bcbd89d423311a0fd3fc9be8cfbe 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php
@@ -14,7 +14,7 @@ use Magento\Framework\Config\ConfigOptionsListConstants;
 class ResourceTest extends \PHPUnit_Framework_TestCase
 {
     const RESOURCE_NAME = \Magento\Framework\App\Resource::DEFAULT_READ_RESOURCE;
-    const CONNECTION_NAME = 'Connection Name';
+    const CONNECTION_NAME = 'connection-name';
     const TABLE_PREFIX = 'prefix_';
 
     /**
@@ -197,4 +197,21 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals('fkName', $this->resource->getFkName($table, $columnName, $refTable, $refColumnName));
     }
+
+    public function testGetTriggerName()
+    {
+        $tableName = 'subject_table';
+        $time = 'before';
+        $event = 'insert';
+        $triggerName = 'trg_subject_table_before_insert';
+
+        $this->_connectionFactory->expects($this->once())
+            ->method('create')
+            ->will($this->returnValue($this->connection));
+        $this->connection->expects($this->once())
+            ->method('getTriggerName')
+            ->with($tableName, $time, $event)
+            ->willReturn($triggerName);
+        $this->assertSame($triggerName, $this->resource->getTriggerName($tableName, $time, $event));
+    }
 }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php
index 3fb38007f0a56a0152d2caabd4e0f3109551e0dd..bcc51a53e3e9dc4b1b1c4aeb2110a9f83e60de38 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Response/HttpTest.php
@@ -271,4 +271,11 @@ class HttpTest extends \PHPUnit_Framework_TestCase
         \Magento\Framework\App\ObjectManager::setInstance($objectManagerMock);
         $this->model->__wakeup();
     }
+
+    public function testSetXFrameOptions()
+    {
+        $value = 'DENY';
+        $this->model->setXFrameOptions($value);
+        $this->assertSame($value, $this->model->getHeader(Http::HEADER_X_FRAME_OPT)->getFieldValue());
+    }
 }
diff --git a/lib/internal/Magento/Framework/Config/ConfigOptionsListConstants.php b/lib/internal/Magento/Framework/Config/ConfigOptionsListConstants.php
index f6de3f89043da2b1ce6eddc60dc635fb45a1d2cb..3148109e53938eaabe116b2340b9a5ac2cd4e350 100644
--- a/lib/internal/Magento/Framework/Config/ConfigOptionsListConstants.php
+++ b/lib/internal/Magento/Framework/Config/ConfigOptionsListConstants.php
@@ -22,6 +22,7 @@ class ConfigOptionsListConstants
     const CONFIG_PATH_DB_CONNECTION_DEFAULT = 'db/connection/default';
     const CONFIG_PATH_DB_CONNECTIONS = 'db/connection';
     const CONFIG_PATH_DB_PREFIX = 'db/table_prefix';
+    const CONFIG_PATH_X_FRAME_OPT = 'x-frame-options';
     /**#@-*/
 
     /**#@+
@@ -67,7 +68,7 @@ class ConfigOptionsListConstants
     const KEY_INIT_STATEMENTS = 'initStatements';
     const KEY_ACTIVE = 'active';
     /**#@-*/
-    
+
     /**
      * Db config key
      */
diff --git a/lib/internal/Magento/Framework/DB/Adapter/AdapterInterface.php b/lib/internal/Magento/Framework/DB/Adapter/AdapterInterface.php
index 8bee03a383ef497ade430b261df56d493f6790f3..c2068fe188cde418899fcebaf5ddcc340259e89c 100644
--- a/lib/internal/Magento/Framework/DB/Adapter/AdapterInterface.php
+++ b/lib/internal/Magento/Framework/DB/Adapter/AdapterInterface.php
@@ -928,6 +928,17 @@ interface AdapterInterface
      */
     public function getTableName($tableName);
 
+
+    /**
+     * Build a trigger name based on table name and trigger details
+     *
+     * @param string $tableName  The table that is the subject of the trigger
+     * @param string $time  Either "before" or "after"
+     * @param string $event  The DB level event which activates the trigger, i.e. "update" or "insert"
+     * @return string
+     */
+    public function getTriggerName($tableName, $time, $event);
+
     /**
      * Retrieve valid index name
      * Check index name length and allowed symbols
diff --git a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
index 94cbf428fd0d3022b596922cbd5196b8da8d9584..21db76cc7545bd52760186d17b04ef6f9dbc0f8c 100644
--- a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
+++ b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php
@@ -19,6 +19,7 @@ use Magento\Framework\DB\Profiler;
 use Magento\Framework\DB\Select;
 use Magento\Framework\DB\Statement\Parameter;
 use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Mview\View\Subscription;
 use Magento\Framework\Phrase;
 use Magento\Framework\Stdlib\DateTime;
 use Magento\Framework\Stdlib\String;
@@ -2732,14 +2733,11 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
             'to'            => "{{fieldName}} <= ?",
             'seq'           => null,
             'sneq'          => null,
+            'ntoa'          => "INET_NTOA({{fieldName}}) LIKE ?",
         ];
 
         $query = '';
         if (is_array($condition)) {
-            if (isset($condition['field_expr'])) {
-                $fieldName = str_replace('#?', $this->quoteIdentifier($fieldName), $condition['field_expr']);
-                unset($condition['field_expr']);
-            }
             $key = key(array_intersect_key($condition, $conditionKeyMap));
 
             if (isset($condition['from']) || isset($condition['to'])) {
@@ -3137,47 +3135,31 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
     }
 
     /**
-     * Minus superfluous characters from hash.
+     * Returns a compressed version of the table name if it is too long
      *
-     * @param  string $hash
-     * @param  string $prefix
-     * @param  int $maxCharacters
+     * @param string $tableName
      * @return string
+     * @codeCoverageIgnore
      */
-    protected function _minusSuperfluous($hash, $prefix, $maxCharacters)
+    public function getTableName($tableName)
     {
-        $diff        = strlen($hash) + strlen($prefix) -  $maxCharacters;
-        $superfluous = $diff / 2;
-        $odd         = $diff % 2;
-        $hash        = substr($hash, $superfluous, - ($superfluous + $odd));
-        return $hash;
+        return ExpressionConverter::shortenEntityName($tableName, 't_');
     }
 
     /**
-     * Retrieve valid table name
-     * Check table name length and allowed symbols
+     * Build a trigger name based on table name and trigger details
      *
-     * @param string $tableName
+     * @param string $tableName  The table which is the subject of the trigger
+     * @param string $time  Either "before" or "after"
+     * @param string $event  The DB level event which activates the trigger, i.e. "update" or "insert"
      * @return string
+     * @codeCoverageIgnore
      */
-    public function getTableName($tableName)
-    {
-        $prefix = 't_';
-        if (strlen($tableName) > self::LENGTH_TABLE_NAME) {
-            $shortName = ExpressionConverter::shortName($tableName);
-            if (strlen($shortName) > self::LENGTH_TABLE_NAME) {
-                $hash = md5($tableName);
-                if (strlen($prefix . $hash) > self::LENGTH_TABLE_NAME) {
-                    $tableName = $this->_minusSuperfluous($hash, $prefix, self::LENGTH_TABLE_NAME);
-                } else {
-                    $tableName = $prefix . $hash;
-                }
-            } else {
-                $tableName = $shortName;
-            }
-        }
 
-        return $tableName;
+    public function getTriggerName($tableName, $time, $event)
+    {
+        $triggerName = 'trg_' . $tableName . '_' . $time . '_' . $event;
+        return ExpressionConverter::shortenEntityName($triggerName, 'trg_');
     }
 
     /**
@@ -3198,35 +3180,15 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
         switch (strtolower($indexType)) {
             case AdapterInterface::INDEX_TYPE_UNIQUE:
                 $prefix = 'unq_';
-                $shortPrefix = 'u_';
                 break;
             case AdapterInterface::INDEX_TYPE_FULLTEXT:
                 $prefix = 'fti_';
-                $shortPrefix = 'f_';
                 break;
             case AdapterInterface::INDEX_TYPE_INDEX:
             default:
                 $prefix = 'idx_';
-                $shortPrefix = 'i_';
         }
-
-        $hash = $tableName . '_' . $fields;
-
-        if (strlen($hash) + strlen($prefix) > self::LENGTH_INDEX_NAME) {
-            $short = ExpressionConverter::shortName($prefix . $hash);
-            if (strlen($short) > self::LENGTH_INDEX_NAME) {
-                $hash = md5($hash);
-                if (strlen($hash) + strlen($shortPrefix) > self::LENGTH_INDEX_NAME) {
-                    $hash = $this->_minusSuperfluous($hash, $shortPrefix, self::LENGTH_INDEX_NAME);
-                }
-            } else {
-                $hash = $short;
-            }
-        } else {
-            $hash = $prefix . $hash;
-        }
-
-        return strtoupper($hash);
+        return strtoupper(ExpressionConverter::shortenEntityName($tableName . '_' . $fields, $prefix));
     }
 
     /**
@@ -3238,28 +3200,12 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
      * @param string $refTableName
      * @param string $refColumnName
      * @return string
+     * @codeCoverageIgnore
      */
     public function getForeignKeyName($priTableName, $priColumnName, $refTableName, $refColumnName)
     {
-        $prefix = 'fk_';
-        $hash = sprintf('%s_%s_%s_%s', $priTableName, $priColumnName, $refTableName, $refColumnName);
-        if (strlen($prefix . $hash) > self::LENGTH_FOREIGN_NAME) {
-            $short = ExpressionConverter::shortName($prefix . $hash);
-            if (strlen($short) > self::LENGTH_FOREIGN_NAME) {
-                $hash = md5($hash);
-                if (strlen($prefix . $hash) > self::LENGTH_FOREIGN_NAME) {
-                    $hash = $this->_minusSuperfluous($hash, $prefix, self::LENGTH_FOREIGN_NAME);
-                } else {
-                    $hash = $prefix . $hash;
-                }
-            } else {
-                $hash = $short;
-            }
-        } else {
-            $hash = $prefix . $hash;
-        }
-
-        return strtoupper($hash);
+        $fkName = sprintf('%s_%s_%s_%s', $priTableName, $priColumnName, $refTableName, $refColumnName);
+        return strtoupper(ExpressionConverter::shortenEntityName($fkName, 'fk_'));
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/DB/ExpressionConverter.php b/lib/internal/Magento/Framework/DB/ExpressionConverter.php
index 2df91ab77991222d8f1814134020df7e3d45dc1e..9a9b2d7eacf4797821fded20bf885edb7367ea00 100644
--- a/lib/internal/Magento/Framework/DB/ExpressionConverter.php
+++ b/lib/internal/Magento/Framework/DB/ExpressionConverter.php
@@ -10,7 +10,12 @@ namespace Magento\Framework\DB;
 class ExpressionConverter
 {
     /**
-     * Dictionary for generate short name
+     * Maximum length for many MySql identifiers, including database, table, trigger, and column names
+     */
+    const MYSQL_IDENTIFIER_LEN = 64;
+
+    /**
+     * Dictionary maps common words in identifiers to abbreviations
      *
      * @var array
      */
@@ -62,7 +67,7 @@ class ExpressionConverter
     ];
 
     /**
-     * Convert name using dictionary
+     * Shorten name by abbreviating words
      *
      * @param string $name
      * @return string
@@ -73,7 +78,7 @@ class ExpressionConverter
     }
 
     /**
-     * Add or replace translate to dictionary
+     * Add an abbreviation to the dictionary, or replace if it already exists
      *
      * @param string $from
      * @param string $to
@@ -83,4 +88,47 @@ class ExpressionConverter
     {
         self::$_translateMap[$from] = $to;
     }
+
+    /**
+     * Shorten the name of a MySql identifier, by abbreviating common words and hashing if necessary. Prepends the
+     * given prefix to clarify what kind of entity the identifier represents, in case hashing is used.
+     *
+     * @param string $entityName
+     * @param string $prefix
+     * @return string
+     */
+    public static function shortenEntityName($entityName, $prefix)
+    {
+        if (strlen($entityName) > self::MYSQL_IDENTIFIER_LEN) {
+            $shortName = ExpressionConverter::shortName($entityName);
+            if (strlen($shortName) > self::MYSQL_IDENTIFIER_LEN) {
+                $hash = md5($entityName);
+                if (strlen($prefix . $hash) > self::MYSQL_IDENTIFIER_LEN) {
+                    $entityName = self::trimHash($hash, $prefix, self::MYSQL_IDENTIFIER_LEN);
+                } else {
+                    $entityName = $prefix . $hash;
+                }
+            } else {
+                $entityName = $shortName;
+            }
+        }
+        return $entityName;
+    }
+
+    /**
+     * Remove superfluous characters from hash
+     *
+     * @param  string $hash
+     * @param  string $prefix
+     * @param  int $maxCharacters
+     * @return string
+     */
+    private static function trimHash($hash, $prefix, $maxCharacters)
+    {
+        $diff        = strlen($hash) + strlen($prefix) -  $maxCharacters;
+        $superfluous = $diff / 2;
+        $odd         = $diff % 2;
+        $hash        = substr($hash, $superfluous, - ($superfluous + $odd));
+        return $hash;
+    }
 }
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php
index b7c080064bc969890c42c8ca983025f89548738c..4d7bfa42ed2eab83d5f1d5e67b31ca022cf1e8b1 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/Adapter/Pdo/MysqlTest.php
@@ -11,6 +11,8 @@
  */
 namespace Magento\Framework\DB\Test\Unit\Adapter\Pdo;
 
+use Magento\Framework\DB\Adapter\AdapterInterface;
+
 class MysqlTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -149,7 +151,7 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
         } catch (\Exception $e) {
             $this->assertNotContains(
                 $e->getMessage(),
-                \Magento\Framework\DB\Adapter\AdapterInterface::ERROR_DDL_MESSAGE
+                AdapterInterface::ERROR_DDL_MESSAGE
             );
         }
 
@@ -160,7 +162,7 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
         } catch (\Exception $e) {
             $this->assertNotContains(
                 $e->getMessage(),
-                \Magento\Framework\DB\Adapter\AdapterInterface::ERROR_DDL_MESSAGE
+                AdapterInterface::ERROR_DDL_MESSAGE
             );
         }
     }
@@ -226,7 +228,7 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             throw new \Exception('Test Failed!');
         } catch (\Exception $e) {
             $this->assertEquals(
-                \Magento\Framework\DB\Adapter\AdapterInterface::ERROR_ASYMMETRIC_ROLLBACK_MESSAGE,
+                AdapterInterface::ERROR_ASYMMETRIC_ROLLBACK_MESSAGE,
                 $e->getMessage()
             );
         }
@@ -242,7 +244,7 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             throw new \Exception('Test Failed!');
         } catch (\Exception $e) {
             $this->assertEquals(
-                \Magento\Framework\DB\Adapter\AdapterInterface::ERROR_ASYMMETRIC_COMMIT_MESSAGE,
+                AdapterInterface::ERROR_ASYMMETRIC_COMMIT_MESSAGE,
                 $e->getMessage()
             );
         }
@@ -354,7 +356,7 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             throw new \Exception('Test Failed!');
         } catch (\Exception $e) {
             $this->assertEquals(
-                \Magento\Framework\DB\Adapter\AdapterInterface::ERROR_ROLLBACK_INCOMPLETE_MESSAGE,
+                AdapterInterface::ERROR_ROLLBACK_INCOMPLETE_MESSAGE,
                 $e->getMessage()
             );
             $this->_adapter->rollBack();
@@ -377,7 +379,7 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             throw new \Exception('Test Failed!');
         } catch (\Exception $e) {
             $this->assertEquals(
-                \Magento\Framework\DB\Adapter\AdapterInterface::ERROR_ROLLBACK_INCOMPLETE_MESSAGE,
+                AdapterInterface::ERROR_ROLLBACK_INCOMPLETE_MESSAGE,
                 $e->getMessage()
             );
             $this->_adapter->rollBack();
@@ -549,4 +551,28 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             ]
         ];
     }
+
+    /**
+     * @dataProvider getIndexNameDataProvider
+     */
+    public function testGetIndexName($name, $fields, $indexType, $expectedName)
+    {
+        $resultIndexName = $this->_mockAdapter->getIndexName($name, $fields, $indexType);
+        $this->assertTrue(
+            strpos($resultIndexName, $expectedName) === 0,
+            "Index name '$resultIndexName' did not begin with expected value '$expectedName'"
+        );
+    }
+
+    public function getIndexNameDataProvider()
+    {
+        // 65 characters long - will be compressed
+        $longTableName = '__________________________________________________long_table_name';
+        return [
+            [$longTableName, [], AdapterInterface::INDEX_TYPE_UNIQUE, 'UNQ_'],
+            [$longTableName, [], AdapterInterface::INDEX_TYPE_FULLTEXT, 'FTI_'],
+            [$longTableName, [], AdapterInterface::INDEX_TYPE_INDEX, 'IDX_'],
+            ['short_table_name', ['field1', 'field2'], '', 'SHORT_TABLE_NAME_FIELD1_FIELD2'],
+        ];
+    }
 }
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/ExpressionConverterTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/ExpressionConverterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c122c497cfc314731d38c2a81c0cf67fb25d171
--- /dev/null
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/ExpressionConverterTest.php
@@ -0,0 +1,57 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\DB\Test\Unit;
+
+
+use Magento\Framework\DB\ExpressionConverter;
+
+class ExpressionConverterTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider shortenEntityNameDataProvider
+     */
+    public function testShortenEntityName($in, $prefix, $expectedOut)
+    {
+        $resultEntityName = ExpressionConverter::shortenEntityName($in, $prefix);
+        $this->assertTrue(
+            strpos($resultEntityName, $expectedOut) === 0,
+            "Entity name '$resultEntityName' did not begin with expected value '$expectedOut'"
+        );
+    }
+
+    public function shortenEntityNameDataProvider()
+    {
+        $length64 = '________________________________________________________________';
+        $length40 = '________________________________________';
+        return [
+            'Short identifier' => [
+                'already_short',
+                'pre_',
+                'already_short'
+            ],
+            'Hashed identifer' => [
+                $length64 . '_cannotBeAbbreviated',
+                'pre_',
+                'pre_'
+            ],
+            'Abbreviated identifier' => [
+                $length40 . 'downloadable_notification_index',
+                'pre_',
+                $length40 . 'dl_ntfc_idx'
+            ],
+        ];
+    }
+
+    public function testShortenEntityNameReducedHash()
+    {
+        /** Length of 64 characters, to go over max MySql identifier length */
+        $length64 = '________________________________________________________________';
+        $longPrefix = 'pre_____________________________________';
+        $shortenedName = ExpressionConverter::shortenEntityName($length64 . '_cannotBeAbbreviated', $longPrefix);
+        $this->assertNotSame(0, strpos($shortenedName, 'pre'), 'Entity name not supposed to with long prefix');
+    }
+}
diff --git a/lib/internal/Magento/Framework/Filesystem/Driver/Http.php b/lib/internal/Magento/Framework/Filesystem/Driver/Http.php
index 89bce57069683331d4854c04ea6a7871909cb6f2..fc82bbdbc46e223f3f9b37e82b88275e0011c6ad 100644
--- a/lib/internal/Magento/Framework/Filesystem/Driver/Http.php
+++ b/lib/internal/Magento/Framework/Filesystem/Driver/Http.php
@@ -167,8 +167,7 @@ class Http extends File
             'Host: ' .
             $hostname .
             "\r\n" .
-            'User-Agent: Magento ver/' .
-            \Magento\Framework\AppInterface::VERSION .
+            'User-Agent: Magento' .
             "\r\n" .
             'Connection: close' .
             "\r\n" .
diff --git a/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php b/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php
index 8b36902a699e2f0f56c397a9e787651c07faeb06..f9b642136422dd229deebd9762f183742646c698 100644
--- a/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php
+++ b/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php
@@ -12,11 +12,6 @@ use \Magento\Framework\Mview\View\Subscription;
 
 class SubscriptionTest extends \PHPUnit_Framework_TestCase
 {
-    /**
-     * @var \Magento\Framework\Mview\View\Subscription
-     */
-    protected $model;
-
     /**
      * Mysql PDO DB adapter mock
      *
@@ -24,34 +19,37 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
      */
     protected $connectionMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Resource
-     */
+    /** @var \Magento\Framework\Mview\View\Subscription */
+    protected $model;
+
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Resource */
     protected $resourceMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\DB\Ddl\TriggerFactory
-     */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\DB\Ddl\TriggerFactory */
     protected $triggerFactoryMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Mview\View\CollectionInterface
-     */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Mview\View\CollectionInterface */
     protected $viewCollectionMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Mview\ViewInterface
-     */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Mview\ViewInterface */
     protected $viewMock;
 
+    /** @var  string */
+    private $tableName;
+
     protected function setUp()
     {
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false, false);
+
+        $this->connectionMock->expects($this->any())
+            ->method('quoteIdentifier')
+            ->will($this->returnArgument(0));
+
+        $this->resourceMock->expects($this->atLeastOnce())
+            ->method('getConnection')
+            ->willReturn($this->connectionMock);
 
-        $this->resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource', ['getConnection', 'getTableName'], [], '', false, false
-        );
-        $this->mockGetConnection($this->connectionMock);
         $this->triggerFactoryMock = $this->getMock(
             'Magento\Framework\DB\Ddl\TriggerFactory', [], [], '', false, false
         );
@@ -62,16 +60,16 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\Mview\ViewInterface', [], '', false, false, true, []
         );
 
-        $this->connectionMock->expects($this->any())
-            ->method('quoteIdentifier')
-            ->will($this->returnArgument(0));
+        $this->resourceMock->expects($this->any())
+            ->method('getTableName')
+            ->willReturn($this->tableName);
 
         $this->model = new Subscription(
             $this->resourceMock,
             $this->triggerFactoryMock,
             $this->viewCollectionMock,
             $this->viewMock,
-            'tableName',
+            $this->tableName,
             'columnName'
         );
     }
@@ -83,7 +81,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
 
     public function testGetTableName()
     {
-        $this->assertEquals('tableName', $this->model->getTableName());
+        $this->assertEquals($this->tableName, $this->model->getTableName());
     }
 
     public function testGetColumnName()
@@ -93,11 +91,14 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
 
     public function testCreate()
     {
-        $this->mockGetTableName();
-
-        $triggerMock = $this->getMock('Magento\Framework\DB\Ddl\Trigger', [], [], '', false, false);
+        $triggerName = 'trigger_name';
+        $this->resourceMock->expects($this->atLeastOnce())->method('getTriggerName')->willReturn($triggerName);
+        $triggerMock = $this->getMockBuilder('Magento\Framework\DB\Ddl\Trigger')
+            ->disableOriginalConstructor()
+            ->getMock();
         $triggerMock->expects($this->exactly(3))
             ->method('setName')
+            ->with($triggerName)
             ->will($this->returnSelf());
         $triggerMock->expects($this->exactly(3))
             ->method('getName')
@@ -111,7 +112,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnSelf());
         $triggerMock->expects($this->exactly(3))
             ->method('setTable')
-            ->with('tableName')
+            ->with($this->tableName)
             ->will($this->returnSelf());
         $triggerMock->expects($this->exactly(6))
             ->method('addStatement')
@@ -153,7 +154,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('other_id'));
         $otherViewMock->expects($this->exactly(1))
             ->method('getSubscriptions')
-            ->will($this->returnValue([['name' => 'tableName'], ['name' => 'otherTableName']]));
+            ->will($this->returnValue([['name' => $this->tableName], ['name' => 'otherTableName']]));
         $otherViewMock->expects($this->exactly(3))
             ->method('getChangelog')
             ->will($this->returnValue($otherChangelogMock));
@@ -182,8 +183,6 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
 
     public function testRemove()
     {
-        $this->mockGetTableName();
-
         $triggerMock = $this->getMock('Magento\Framework\DB\Ddl\Trigger', [], [], '', false, false);
         $triggerMock->expects($this->exactly(3))
             ->method('setName')
@@ -200,7 +199,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnSelf());
         $triggerMock->expects($this->exactly(3))
             ->method('setTable')
-            ->with('tableName')
+            ->with($this->tableName)
             ->will($this->returnSelf());
         $triggerMock->expects($this->exactly(3))
             ->method('addStatement')
@@ -228,7 +227,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('other_id'));
         $otherViewMock->expects($this->exactly(1))
             ->method('getSubscriptions')
-            ->will($this->returnValue([['name' => 'tableName'], ['name' => 'otherTableName']]));
+            ->will($this->returnValue([['name' => $this->tableName], ['name' => 'otherTableName']]));
         $otherViewMock->expects($this->exactly(3))
             ->method('getChangelog')
             ->will($this->returnValue($otherChangelogMock));
@@ -259,21 +258,4 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
 
         $this->model->remove();
     }
-
-    /**
-     * @param $connection
-     */
-    protected function mockGetConnection($connection)
-    {
-        $this->resourceMock->expects($this->once())
-            ->method('getConnection')
-            ->will($this->returnValue($connection));
-    }
-
-    protected function mockGetTableName()
-    {
-        $this->resourceMock->expects($this->any())
-            ->method('getTableName')
-            ->will($this->returnArgument(0));
-    }
 }
diff --git a/lib/internal/Magento/Framework/Mview/View/Subscription.php b/lib/internal/Magento/Framework/Mview/View/Subscription.php
index 498cb0e147801ef8709a89a13def616677662be3..e72c255d750ac85df31a1d4a9a1e8eb6e30d3c53 100644
--- a/lib/internal/Magento/Framework/Mview/View/Subscription.php
+++ b/lib/internal/Magento/Framework/Mview/View/Subscription.php
@@ -8,13 +8,11 @@
 
 namespace Magento\Framework\Mview\View;
 
+use Magento\Framework\App\Resource;
+use Magento\Framework\DB\Ddl\Trigger;
+
 class Subscription implements SubscriptionInterface
 {
-    /**
-     * Trigger name qualifier
-     */
-    const TRIGGER_NAME_QUALIFIER = 'trg';
-
     /**
      * Database write connection
      *
@@ -23,7 +21,7 @@ class Subscription implements SubscriptionInterface
     protected $write;
 
     /**
-     * @var \Magento\Framework\DB\Ddl\Trigger
+     * @var \Magento\Framework\DB\Ddl\TriggerFactory
      */
     protected $triggerFactory;
 
@@ -55,12 +53,12 @@ class Subscription implements SubscriptionInterface
     protected $linkedViews = [];
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var Resource
      */
     protected $resource;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param Resource $resource
      * @param \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory
      * @param \Magento\Framework\Mview\View\CollectionInterface $viewCollection
      * @param \Magento\Framework\Mview\ViewInterface $view
@@ -68,7 +66,7 @@ class Subscription implements SubscriptionInterface
      * @param string $columnName
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        Resource $resource,
         \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory,
         \Magento\Framework\Mview\View\CollectionInterface $viewCollection,
         \Magento\Framework\Mview\ViewInterface $view,
@@ -91,23 +89,14 @@ class Subscription implements SubscriptionInterface
      */
     public function create()
     {
-        foreach (\Magento\Framework\DB\Ddl\Trigger::getListOfEvents() as $event) {
-            $triggerName = $this->getTriggerName(
-                $this->resource->getTableName($this->getTableName()),
-                \Magento\Framework\DB\Ddl\Trigger::TIME_AFTER,
-                $event
-            );
-
-            /** @var \Magento\Framework\DB\Ddl\Trigger $trigger */
-            $trigger = $this->triggerFactory->create()->setName(
-                $triggerName
-            )->setTime(
-                \Magento\Framework\DB\Ddl\Trigger::TIME_AFTER
-            )->setEvent(
-                $event
-            )->setTable(
-                $this->resource->getTableName($this->getTableName())
-            );
+        foreach (Trigger::getListOfEvents() as $event) {
+            $triggerName = $this->getAfterEventTriggerName($event);
+            /** @var Trigger $trigger */
+            $trigger = $this->triggerFactory->create()
+                ->setName($triggerName)
+                ->setTime(Trigger::TIME_AFTER)
+                ->setEvent($event)
+                ->setTable($this->resource->getTableName($this->tableName));
 
             $trigger->addStatement($this->buildStatement($event, $this->getView()->getChangelog()));
 
@@ -131,23 +120,14 @@ class Subscription implements SubscriptionInterface
      */
     public function remove()
     {
-        foreach (\Magento\Framework\DB\Ddl\Trigger::getListOfEvents() as $event) {
-            $triggerName = $this->getTriggerName(
-                $this->resource->getTableName($this->getTableName()),
-                \Magento\Framework\DB\Ddl\Trigger::TIME_AFTER,
-                $event
-            );
-
-            /** @var \Magento\Framework\DB\Ddl\Trigger $trigger */
-            $trigger = $this->triggerFactory->create()->setName(
-                $triggerName
-            )->setTime(
-                \Magento\Framework\DB\Ddl\Trigger::TIME_AFTER
-            )->setEvent(
-                $event
-            )->setTable(
-                $this->resource->getTableName($this->getTableName())
-            );
+        foreach (Trigger::getListOfEvents() as $event) {
+            $triggerName = $this->getAfterEventTriggerName($event);
+            /** @var Trigger $trigger */
+            $trigger = $this->triggerFactory->create()
+                ->setName($triggerName)
+                ->setTime(Trigger::TIME_AFTER)
+                ->setEvent($event)
+                ->setTable($this->resource->getTableName($this->getTableName()));
 
             // Add statements for linked views
             foreach ($this->getLinkedViews() as $view) {
@@ -204,8 +184,8 @@ class Subscription implements SubscriptionInterface
     protected function buildStatement($event, $changelog)
     {
         switch ($event) {
-            case \Magento\Framework\DB\Ddl\Trigger::EVENT_INSERT:
-            case \Magento\Framework\DB\Ddl\Trigger::EVENT_UPDATE:
+            case Trigger::EVENT_INSERT:
+            case Trigger::EVENT_UPDATE:
                 return sprintf(
                     "INSERT IGNORE INTO %s (%s) VALUES (NEW.%s);",
                     $this->write->quoteIdentifier($this->resource->getTableName($changelog->getName())),
@@ -213,7 +193,7 @@ class Subscription implements SubscriptionInterface
                     $this->write->quoteIdentifier($this->getColumnName())
                 );
 
-            case \Magento\Framework\DB\Ddl\Trigger::EVENT_DELETE:
+            case Trigger::EVENT_DELETE:
                 return sprintf(
                     "INSERT IGNORE INTO %s (%s) VALUES (OLD.%s);",
                     $this->write->quoteIdentifier($this->resource->getTableName($changelog->getName())),
@@ -227,25 +207,26 @@ class Subscription implements SubscriptionInterface
     }
 
     /**
-     * Retrieve trigger name
+     * Build an "after" event for the given table and event
      *
-     * Build a trigger name by concatenating trigger name prefix, table name,
-     * trigger time and trigger event.
+     * @param string $event The DB level event, like "update" or "insert"
      *
-     * @param string $tableName
-     * @param string $time
-     * @param string $event
      * @return string
      */
-    protected function getTriggerName($tableName, $time, $event)
+    private function getAfterEventTriggerName($event)
     {
-        return self::TRIGGER_NAME_QUALIFIER . '_' . $tableName . '_' . $time . '_' . $event;
+        return $this->resource->getTriggerName(
+            $this->resource->getTableName($this->getTableName()),
+            Trigger::TIME_AFTER,
+            $event
+        );
     }
 
     /**
      * Retrieve View related to subscription
      *
      * @return \Magento\Framework\Mview\ViewInterface
+     * @codeCoverageIgnore
      */
     public function getView()
     {
@@ -256,6 +237,7 @@ class Subscription implements SubscriptionInterface
      * Retrieve table name
      *
      * @return string
+     * @codeCoverageIgnore
      */
     public function getTableName()
     {
@@ -266,6 +248,7 @@ class Subscription implements SubscriptionInterface
      * Retrieve table column name
      *
      * @return string
+     * @codeCoverageIgnore
      */
     public function getColumnName()
     {
diff --git a/setup/src/Magento/Setup/Model/ConfigGenerator.php b/setup/src/Magento/Setup/Model/ConfigGenerator.php
index a1a07d52e20bd78e6542f82aa6c8534913ae19b6..fba3107325ecd8175126775cbf4d5ad4eac14cf9 100644
--- a/setup/src/Magento/Setup/Model/ConfigGenerator.php
+++ b/setup/src/Magento/Setup/Model/ConfigGenerator.php
@@ -210,4 +210,18 @@ class ConfigGenerator
 
         return $configData;
     }
+
+    /**
+     * Creates x-frame-options header config data
+     *
+     * @return ConfigData
+     */
+    public function createXFrameConfig()
+    {
+        $configData = new ConfigData(ConfigFilePool::APP_ENV);
+        if ($this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT) === null) {
+            $configData->set(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT, 'SAMEORIGIN');
+        }
+        return $configData;
+    }
 }
diff --git a/setup/src/Magento/Setup/Model/ConfigOptionsList.php b/setup/src/Magento/Setup/Model/ConfigOptionsList.php
index 64f2a58515eca8addc153c5a8e6151b6b2a5bbfc..ee76fbf6d4ee9851c4b46052fbad10ea6f274a9c 100644
--- a/setup/src/Magento/Setup/Model/ConfigOptionsList.php
+++ b/setup/src/Magento/Setup/Model/ConfigOptionsList.php
@@ -158,6 +158,7 @@ class ConfigOptionsList implements ConfigOptionsListInterface
         }
         $configData[] = $this->configGenerator->createDbConfig($data);
         $configData[] = $this->configGenerator->createResourceConfig();
+        $configData[] = $this->configGenerator->createXFrameConfig();
         return $configData;
     }
 
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/ConfigGeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Model/ConfigGeneratorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..12ce5af79e7dcd35dab1954cdc71020ce1cb1502
--- /dev/null
+++ b/setup/src/Magento/Setup/Test/Unit/Model/ConfigGeneratorTest.php
@@ -0,0 +1,41 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Test\Unit\Model;
+
+
+use Magento\Framework\Config\ConfigOptionsListConstants;
+
+class ConfigGeneratorTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var  \Magento\Framework\App\DeploymentConfig | \PHPUnit_Framework_MockObject_MockObject */
+    private $deploymentConfigMock;
+    /** @var  \Magento\Setup\Model\ConfigGenerator | \PHPUnit_Framework_MockObject_MockObject */
+    private $model;
+
+    public function setUp()
+    {
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->deploymentConfigMock = $this->getMockBuilder('Magento\Framework\App\DeploymentConfig')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->model = $objectManager->getObject(
+            'Magento\Setup\Model\ConfigGenerator',
+            ['deploymentConfig' => $this->deploymentConfigMock]
+        );
+    }
+
+    public function testCreateXFrameConfig()
+    {
+        $this->deploymentConfigMock->expects($this->atLeastOnce())
+            ->method('get')
+            ->with(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT)
+            ->willReturn(null);
+        $configData = $this->model->createXFrameConfig();
+        $this->assertSame('SAMEORIGIN', $configData->getData()[ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT]);
+    }
+}
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/ConfigOptionsListTest.php b/setup/src/Magento/Setup/Test/Unit/Module/ConfigOptionsListTest.php
index f972d2e802b46b9a0bbd5b900fc421536a98b4f1..d1281f7c30c550a55188a3ebb0c3754620d8cb38 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/ConfigOptionsListTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/ConfigOptionsListTest.php
@@ -82,8 +82,9 @@ class ConfigOptionsListTest extends \PHPUnit_Framework_TestCase
         $this->generator->expects($this->once())->method('createDefinitionsConfig')->willReturn($configDataMock);
         $this->generator->expects($this->once())->method('createDbConfig')->willReturn($configDataMock);
         $this->generator->expects($this->once())->method('createResourceConfig')->willReturn($configDataMock);
+        $this->generator->expects($this->once())->method('createXFrameConfig')->willReturn($configDataMock);
         $configData = $this->object->createConfig([], $this->deploymentConfig);
-        $this->assertEquals(6, count($configData));
+        $this->assertEquals(7, count($configData));
     }
 
     public function testCreateOptionsWithOptionalNull()
@@ -95,7 +96,8 @@ class ConfigOptionsListTest extends \PHPUnit_Framework_TestCase
         $this->generator->expects($this->once())->method('createDefinitionsConfig')->willReturn(null);
         $this->generator->expects($this->once())->method('createDbConfig')->willReturn($configDataMock);
         $this->generator->expects($this->once())->method('createResourceConfig')->willReturn($configDataMock);
+        $this->generator->expects($this->once())->method('createXFrameConfig')->willReturn($configDataMock);
         $configData = $this->object->createConfig([], $this->deploymentConfig);
-        $this->assertEquals(5, count($configData));
+        $this->assertEquals(6, count($configData));
     }
 }