diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js
index 075a1fdaf1fc118f42832fa438762715420a585a..2d5e0b3a270b71991a48e526aaa8248c9a60c87b 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js
@@ -296,7 +296,7 @@ define([
         getShippingAddress: function () {
             var address = quote.shippingAddress();
 
-            if (address.postcode === null) {
+            if (_.isNull(address.postcode) || _.isUndefined(address.postcode)) {
 
                 return {};
             }
diff --git a/dev/tests/functional/credentials.xml.dist b/dev/tests/functional/credentials.xml.dist
index 88794d183e8781d5cea1c9199370c67daae1585c..78186091a568ddba7368126c4b9217714e35d127 100644
--- a/dev/tests/functional/credentials.xml.dist
+++ b/dev/tests/functional/credentials.xml.dist
@@ -32,10 +32,15 @@
     <field path="payment/authorizenet_directpost/trans_key" value="" />
     <field path="payment/authorizenet_directpost/trans_md5" value="" />
 
-    <field path="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" value="" />
-    <field path="payment/braintree_section/braintree/braintree_required/merchant_id" value="" />
-    <field path="payment/braintree_section/braintree/braintree_required/public_key" value="" />
-    <field path="payment/braintree_section/braintree/braintree_required/private_key" value="" />
+    <field replace="braintree_enabled_fraud_merchant_account_id" value="" />
+    <field replace="braintree_enabled_fraud_merchant_id" value="" />
+    <field replace="braintree_enabled_fraud_public_key" value="" />
+    <field replace="braintree_enabled_fraud_private_key" value="" />
+
+    <field replace="braintree_disabled_fraud_merchant_account_id" value="" />
+    <field replace="braintree_disabled_fraud_merchant_id" value="" />
+    <field replace="braintree_disabled_fraud_public_key" value="" />
+    <field replace="braintree_disabled_fraud_private_key" value="" />
 
     <field path="payment/paypal_group_all_in_one/wpp_usuk/wpp_required_settings/wpp_and_express_checkout/business_account" value="" />
     <field path="payment/paypal_group_all_in_one/wpp_usuk/wpp_required_settings/wpp_and_express_checkout/api_username" value="" />
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml
index 7f01e4f46106c020c10457a8f3e0fb0a7f1de8d7..12e27758eff4f0ae8d5c867ab89381311cee6124 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml
@@ -11,26 +11,26 @@
             <field name="payment/braintree_section/braintree/braintree_required/merchant_id" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ID</item>
-                <item name="value" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ID</item>
+                <item name="label" xsi:type="string">Merchant ID</item>
+                <item name="value" xsi:type="string">%braintree_disabled_fraud_merchant_id%</item>
             </field>
             <field name="payment/braintree_section/braintree/braintree_required/public_key" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">PAYMENT_PAYMENT_BRAINTREE_PUBLIC_KEY</item>
-                <item name="value" xsi:type="string">PAYMENT_PAYMENT_BRAINTREE_PUBLIC_KEY</item>
+                <item name="label" xsi:type="string">Public Key</item>
+                <item name="value" xsi:type="string">%braintree_disabled_fraud_public_key%</item>
             </field>
             <field name="payment/braintree_section/braintree/braintree_required/private_key" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">PAYMENT_BRAINTREE_PRIVATE_KEY</item>
-                <item name="value" xsi:type="string">PAYMENT_BRAINTREE_PRIVATE_KEY</item>
+                <item name="label" xsi:type="string">Private Key</item>
+                <item name="value" xsi:type="string">%braintree_disabled_fraud_private_key%</item>
             </field>
             <field name="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ACCOUNT_ID</item>
-                <item name="value" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ACCOUNT_ID</item>
+                <item name="label" xsi:type="string">Merchant Account ID</item>
+                <item name="value" xsi:type="string">%braintree_disabled_fraud_merchant_account_id%</item>
             </field>
             <field name="payment/braintree_section/braintree/braintree_required/payment_action" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -51,6 +51,7 @@
                 <item name="value" xsi:type="number">1</item>
             </field>
         </dataset>
+
         <dataset name="braintree_rollback">
             <field name="payment/braintree/active" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -59,6 +60,16 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
+        <dataset name="braintree_incorrect_merchant_account_id">
+            <field name="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Merchant Account ID</item>
+                <item name="value" xsi:type="string">incorrect</item>
+            </field>
+        </dataset>
+
         <dataset name="braintree_sale">
             <field name="payment/braintree/payment_action" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -67,6 +78,7 @@
                 <item name="value" xsi:type="string">authorize_capture</item>
             </field>
         </dataset>
+
         <dataset name="braintree_3d_secure">
             <field name="payment/braintree_section/braintree/braintree_3dsecure/verify_3dsecure" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -75,6 +87,7 @@
                 <item name="value" xsi:type="number">1</item>
             </field>
         </dataset>
+
         <dataset name="braintree_3d_secure_rollback">
             <field name="payment/braintree_section/braintree/braintree_3dsecure/verify_3dsecure" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -83,6 +96,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_3d_secure_uk">
             <field name="payment/braintree/verify_3dsecure" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -107,6 +121,7 @@
                 </item>
             </field>
         </dataset>
+
         <dataset name="braintree_3d_secure_uk_rollback">
             <field name="payment/braintree_section/braintree/braintree_3dsecure/verify_3dsecure" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -121,6 +136,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_3d_secure_not_triggered_due_threshold">
             <field name="payment/braintree/verify_3dsecure" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -135,6 +151,7 @@
                 <item name="value" xsi:type="number">300</item>
             </field>
         </dataset>
+
         <dataset name="braintree_3d_secure_not_triggered_due_threshold_rollback">
             <field name="payment/braintree/verify_3dsecure" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -143,6 +160,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_use_vault">
             <field name="payment/braintree_section/braintree/braintree_cc_vault_active" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -151,6 +169,7 @@
                 <item name="value" xsi:type="number">1</item>
             </field>
         </dataset>
+
         <dataset name="braintree_use_vault_rollback">
             <field name="payment/braintree_section/braintree/braintree_cc_vault_active" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -159,6 +178,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal">
             <field name="payment/braintree_section/braintree/active_braintree_paypal" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -173,6 +193,7 @@
                 <item name="value" xsi:type="string">authorize</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal_rollback">
             <field name="payment/braintree_section/braintree/active_braintree_paypal" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -181,6 +202,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal_sale">
             <field name="payment/braintree_section/braintree/braintree_paypal/payment_action" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -189,6 +211,7 @@
                 <item name="value" xsi:type="string">authorize_capture</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal_skip_order_review">
             <field name="payment/braintree_section/braintree/braintree_paypal/skip_order_review" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -197,6 +220,7 @@
                 <item name="value" xsi:type="number">1</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal_skip_order_review_rollback">
             <field name="payment/braintree_section/braintree/braintree_paypal/skip_order_review" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -205,6 +229,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal_use_vault">
             <field name="payment/braintree_section/braintree/braintree_paypal/braintree_paypal_vault_active" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -213,6 +238,7 @@
                 <item name="value" xsi:type="number">1</item>
             </field>
         </dataset>
+
         <dataset name="braintree_paypal_use_vault_rollback">
             <field name="payment/braintree_section/braintree/braintree_paypal/braintree_paypal_vault_active" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -221,6 +247,7 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
         <dataset name="braintree_fraudprotection">
             <field name="payment/braintree/fraudprotection" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -229,6 +256,7 @@
                 <item name="value" xsi:type="number">1</item>
             </field>
         </dataset>
+
         <dataset name="braintree_fraudprotection_rollback">
             <field name="payment/braintree/fraudprotection" xsi:type="array">
                 <item name="scope" xsi:type="string">payment</item>
@@ -237,5 +265,59 @@
                 <item name="value" xsi:type="number">0</item>
             </field>
         </dataset>
+
+        <dataset name="braintree_fraud_tool_enabled_account">
+            <field name="payment/braintree_section/braintree/braintree_required/merchant_id" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Merchant ID</item>
+                <item name="value" xsi:type="string">%braintree_enabled_fraud_merchant_id%</item>
+            </field>
+            <field name="payment/braintree_section/braintree/braintree_required/public_key" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Public Key</item>
+                <item name="value" xsi:type="string">%braintree_enabled_fraud_public_key%</item>
+            </field>
+            <field name="payment/braintree_section/braintree/braintree_required/private_key" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Private Key</item>
+                <item name="value" xsi:type="string">%braintree_enabled_fraud_private_key%</item>
+            </field>
+            <field name="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Merchant Account ID</item>
+                <item name="value" xsi:type="string">%braintree_enabled_fraud_merchant_account_id%</item>
+            </field>
+            <field name="payment/braintree_section/braintree/braintree_required/payment_action" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Authorize</item>
+                <item name="value" xsi:type="string">authorize</item>
+            </field>
+            <field name="payment/braintree_section/braintree/braintree_advanced/debug" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Yes</item>
+                <item name="value" xsi:type="number">1</item>
+            </field>
+            <field name="payment/braintree_section/braintree/active" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">Yes</item>
+                <item name="value" xsi:type="number">1</item>
+            </field>
+        </dataset>
+
+        <dataset name="braintree_fraud_tool_enabled_account_rollback">
+            <field name="payment/braintree/active" xsi:type="array">
+                <item name="scope" xsi:type="string">payment</item>
+                <item name="scope_id" xsi:type="number">1</item>
+                <item name="label" xsi:type="string">No</item>
+                <item name="value" xsi:type="number">0</item>
+            </field>
+        </dataset>
     </repository>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml
index e750aa9cb423444e2cc17b8e269a7a62b9289f20..6aa9383ff2bd1051364b1498d799ebb681714aca 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml
@@ -13,17 +13,26 @@
             <field name="credit_card_exp_year" xsi:type="string">2020</field>
             <field name="cvv" xsi:type="string">123</field>
         </dataset>
+
         <dataset name="visa_braintree_3dsecure">
             <field name="credit_card_number" xsi:type="string">4000000000000002</field>
             <field name="credit_card_exp_month" xsi:type="string">01</field>
             <field name="credit_card_exp_year" xsi:type="string">20</field>
             <field name="cvv" xsi:type="string">123</field>
         </dataset>
+
         <dataset name="visa_braintree_3dsecure_failed">
             <field name="credit_card_number" xsi:type="string">4000000000000028</field>
             <field name="credit_card_exp_month" xsi:type="string">01</field>
             <field name="credit_card_exp_year" xsi:type="string">2020</field>
             <field name="cvv" xsi:type="string">123</field>
         </dataset>
+
+        <dataset name="visa_braintree_fraud_rejected">
+            <field name="credit_card_number" xsi:type="string">4000111111111511</field>
+            <field name="credit_card_exp_month" xsi:type="string">01</field>
+            <field name="credit_card_exp_year" xsi:type="string">2020</field>
+            <field name="cvv" xsi:type="string">123</field>
+        </dataset>
     </repository>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml
index 9614923691c6c097702c3a222bfc52edfcd2489a..083bd33feca7b133903b9f83eb12c4d5b3f1fcfa 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml
@@ -64,5 +64,28 @@
             <constraint name="Magento\Sales\Test\Constraint\AssertCaptureInCommentsHistory" />
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
         </variation>
+        <variation name="CreateOrderBackendTestBraintreeVariation3" summary="Checkout with Braintree Credit Card from Admin (Basic Fraud Protection)" ticketId="MAGETWO-46470">
+            <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S0</data>
+            <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
+            <data name="products/1" xsi:type="string">configurableProduct::with_one_option</data>
+            <data name="products/2" xsi:type="string">bundleProduct::bundle_fixed_100_dollar_product</data>
+            <data name="customer/dataset" xsi:type="string">default</data>
+            <data name="taxRule" xsi:type="string">us_ca_ny_rule</data>
+            <data name="billingAddress/dataset" xsi:type="string">US_address_1_without_email</data>
+            <data name="saveAddress" xsi:type="string">No</data>
+            <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
+            <data name="shipping/shipping_method" xsi:type="string">Fixed</data>
+            <data name="prices" xsi:type="array">
+                <item name="grandTotal" xsi:type="string">145.98</item>
+            </data>
+            <data name="payment/method" xsi:type="string">braintree</data>
+            <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
+            <data name="creditCard/dataset" xsi:type="string">visa_braintree_fraud_rejected</data>
+            <data name="configData" xsi:type="string">braintree</data>
+            <data name="status" xsi:type="string">Processing</data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutDeclinedTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutDeclinedTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a2aa551a18170002045f821de2d492ddb7a2082
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutDeclinedTest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+ -->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
+    <testCase name="Magento\Checkout\Test\TestCase\OnePageCheckoutDeclinedTest" summary="Error message during OnePageCheckout">
+        <variation name="OnePageCheckoutBraintreeDeclinedTestVariation1" summary="Registered Checkout with Braintree Credit Card from Storefront with Advanced Fraud Protection failed" ticketId="MAGETWO-46469">
+            <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
+            <data name="customer/dataset" xsi:type="string">default</data>
+            <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data>
+            <data name="checkoutMethod" xsi:type="string">login</data>
+            <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
+            <data name="shipping/shipping_method" xsi:type="string">Fixed</data>
+            <data name="payment/method" xsi:type="string">braintree</data>
+            <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
+            <data name="creditCard/dataset" xsi:type="string">visa_braintree_fraud_rejected</data>
+            <data name="expectedErrorMessage" xsi:type="string">Transaction has been declined. Please try again later.</data>
+            <data name="configData" xsi:type="string">braintree_fraud_tool_enabled_account, braintree_fraudprotection</data>
+            <data name="status" xsi:type="string">Processing</data>
+            <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
+            <constraint name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage" />
+        </variation>
+        <variation name="OnePageCheckoutBraintreeDeclinedTestVariation2" summary="Checkout with Braintree Credit Card configured with incorrect credentials" ticketId="MAGETWO-46244">
+            <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
+            <data name="customer/dataset" xsi:type="string">default</data>
+            <data name="shippingAddress/dataset" xsi:type="string">US_address_1</data>
+            <data name="checkoutMethod" xsi:type="string">guest</data>
+            <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
+            <data name="shipping/shipping_method" xsi:type="string">Fixed</data>
+            <data name="payment/method" xsi:type="string">braintree</data>
+            <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
+            <data name="creditCard/dataset" xsi:type="string">visa_braintree</data>
+            <data name="expectedErrorMessage" xsi:type="string">Sorry, but something went wrong</data>
+            <data name="configData" xsi:type="string">braintree, braintree_incorrect_merchant_account_id</data>
+            <data name="status" xsi:type="string">Processing</data>
+            <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
+            <constraint name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage" />
+        </variation>
+    </testCase>
+</config>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml
index 920047e7037e135115424a192b9c9cb3267982d5..54fdfc96dc947db330c37b701132bfc0e3fcbeb0 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml
@@ -23,7 +23,7 @@
             <data name="payment/method" xsi:type="string">braintree</data>
             <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
             <data name="creditCard/dataset" xsi:type="string">visa_braintree_3dsecure</data>
-            <data name="isVaultEnabled" xsi:type="boolean">false</data>
+            <data name="isVaultPresent" xsi:type="boolean">false</data>
             <data name="configData" xsi:type="string">braintree, braintree_3d_secure_not_triggered_due_threshold</data>
             <data name="status" xsi:type="string">Processing</data>
             <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
@@ -47,7 +47,7 @@
             <data name="payment/method" xsi:type="string">braintree</data>
             <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
             <data name="creditCard/dataset" xsi:type="string">visa_braintree_3dsecure</data>
-            <data name="isVaultEnabled" xsi:type="boolean">false</data>
+            <data name="isVaultPresent" xsi:type="boolean">false</data>
             <data name="configData" xsi:type="string">braintree, braintree_3d_secure_uk</data>
             <data name="status" xsi:type="string">Processing</data>
             <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
@@ -71,7 +71,7 @@
             <data name="payment/method" xsi:type="string">braintree</data>
             <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
             <data name="creditCard/dataset" xsi:type="string">visa_braintree</data>
-            <data name="isVaultEnabled" xsi:type="boolean">false</data>
+            <data name="isVaultPresent" xsi:type="boolean">false</data>
             <data name="configData" xsi:type="string">braintree</data>
             <data name="status" xsi:type="string">Processing</data>
             <data name="tag" xsi:type="string">test_type:extended_acceptance_test, test_type:3rd_party_test, severity:S0</data>
@@ -99,7 +99,7 @@
             <data name="payment/method" xsi:type="string">braintree</data>
             <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
             <data name="creditCard/dataset" xsi:type="string">visa_braintree</data>
-            <data name="isVaultEnabled" xsi:type="boolean">false</data>
+            <data name="isVaultPresent" xsi:type="boolean">false</data>
             <data name="configData" xsi:type="string">braintree, braintree_sale</data>
             <data name="status" xsi:type="string">Processing</data>
             <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S0</data>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0f21b8f219cb13dd426c1aad3cdb0f6ba24b06a6
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Braintree\Test\TestCase;
+
+use Magento\Mtf\TestCase\Scenario;
+
+/**
+ * Preconditions:
+ * 1. Configure payment method.
+ * 2. Create products.
+ *
+ * Steps:
+ * 1. Log in Storefront.
+ * 2. Add products to the Shopping Cart.
+ * 5. Click the 'Proceed to Checkout' button.
+ * 6. Fill shipping information.
+ * 7. Select shipping method.
+ * 8. Select payment method.
+ * 9. Verify order total on review step.
+ * 10. Click 'Place Order' button.
+ * 11. Specify password in 3D Secure popup.
+ * 12. Click 'Submit'.
+ * 13. Perform assertions.
+ *
+ * @group Braintree
+ * @ZephyrId MAGETWO-46477
+ */
+class OnePageCheckoutWith3dSecureFailedTest extends Scenario
+{
+    /* tags */
+    const MVP = 'yes';
+    const TEST_TYPE = '3rd_party_test';
+    const SEVERITY = 'S1';
+    /* end tags */
+
+    /**
+     * Verifies error message on Onepage Checkout if 3d secure validation is failed.
+     *
+     * @return void
+     */
+    public function test()
+    {
+        $this->executeScenario();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a17d1496a72dfb1bb63073ccd982abf3522ca9f
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+ -->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
+    <testCase name="Magento\Braintree\Test\TestCase\OnePageCheckoutWith3dSecureFailedTest" summary="Onepage checkout with Braintree payment method with 3D Secure enabled.">
+        <variation name="OnePageCheckoutBraintree3dSecureFailedTestVariation1" summary="Guest Checkout with Braintree Credit Card from Storefront with  3D Secure verification failed" ticketId="MAGETWO-46477">
+            <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
+            <data name="customer/dataset" xsi:type="string">default</data>
+            <data name="shippingAddress/dataset" xsi:type="string">US_address_1</data>
+            <data name="checkoutMethod" xsi:type="string">guest</data>
+            <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
+            <data name="shipping/shipping_method" xsi:type="string">Fixed</data>
+            <data name="payment/method" xsi:type="string">braintree</data>
+            <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
+            <data name="creditCard/dataset" xsi:type="string">visa_braintree_3dsecure_failed</data>
+            <data name="secure3d/dataset" xsi:type="string">secure3d_braintree</data>
+            <data name="configData" xsi:type="string">braintree, braintree_3d_secure</data>
+            <data name="expectedErrorMessage" xsi:type="string">Please try again with another form of payment.</data>
+            <data name="status" xsi:type="string">Processing</data>
+            <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
+            <constraint name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage" />
+        </variation>
+    </testCase>
+</config>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml
index 7e38e6f0303b64e55ce6e126a2653f0ce7420df7..7bc8fe883dc2df1945871e039d9d67d52ab40516 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml
@@ -50,5 +50,21 @@
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" />
             <constraint name="Magento\Sales\Test\Constraint\AssertCaptureInCommentsHistory" />
         </variation>
+        <variation name="OnePageCheckoutWithBraintreePaypalTestVariation3" summary="Guest Checkout virtual quote with Braintree PayPal from Cart" ticketId="MAGETWO-41559">
+            <data name="products/0" xsi:type="string">catalogProductVirtual::product_50_dollar</data>
+            <data name="customer/dataset" xsi:type="string">default</data>
+            <data name="checkoutMethod" xsi:type="string">guest</data>
+            <data name="prices" xsi:type="array">
+                <item name="grandTotal" xsi:type="string">50.00</item>
+            </data>
+            <data name="payment/method" xsi:type="string">braintree_paypal</data>
+            <data name="configData" xsi:type="string">braintree, braintree_paypal, braintree_paypal_skip_order_review</data>
+            <data name="status" xsi:type="string">Processing</data>
+            <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S2</data>
+            <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertAuthorizationInCommentsHistory" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml
index ad4d5cc06e92e260aed4c90e6f534f2540d25034..66d912d77bba7836ab2f747757f32f2a82cf02ec 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml
@@ -20,6 +20,7 @@
             </data>
             <data name="payment/method" xsi:type="string">braintree</data>
             <data name="vault/method" xsi:type="string">braintree_cc_vault</data>
+            <data name="isVaultPresent" xsi:type="boolean">false</data>
             <data name="creditCardClass" xsi:type="string">credit_card_braintree</data>
             <data name="creditCard/dataset" xsi:type="string">visa_braintree</data>
             <data name="configData" xsi:type="string">braintree, braintree_use_vault</data>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWith3dSecureFailedStep.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWith3dSecureFailedStep.php
new file mode 100644
index 0000000000000000000000000000000000000000..00a8fce571617e5cd643d9b05bd914dc24e3eb43
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWith3dSecureFailedStep.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Braintree\Test\TestStep;
+
+use Magento\Checkout\Test\Page\CheckoutOnepage;
+use Magento\Mtf\TestStep\TestStepInterface;
+use Magento\Braintree\Test\Fixture\Secure3dBraintree;
+
+/**
+ * Click 'Place order' button and submit 3D secure verification step.
+ */
+class PlaceOrderWith3dSecureFailedStep implements TestStepInterface
+{
+    /**
+     * Onepage checkout page.
+     *
+     * @var CheckoutOnepage
+     */
+    private $checkoutOnepage;
+
+    /**
+     * 3D Secure fixture.
+     *
+     * @var Secure3dBraintree
+     */
+    private $secure3d;
+
+    /**
+     * @param CheckoutOnepage $checkoutOnepage
+     * @param Secure3dBraintree $secure3d
+     */
+    public function __construct(
+        CheckoutOnepage $checkoutOnepage,
+        Secure3dBraintree $secure3d
+    ) {
+        $this->checkoutOnepage = $checkoutOnepage;
+        $this->secure3d = $secure3d;
+    }
+
+    /**
+     * Click 'Place order' button and submit 3D secure verification.
+     *
+     * @return array
+     */
+    public function run()
+    {
+        $this->checkoutOnepage->getPaymentBlock()->getSelectedPaymentMethodBlock()->clickPlaceOrder();
+
+        $this->checkoutOnepage->getBraintree3dSecureBlock()->fill($this->secure3d);
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php
index 0ff7f164b0996108ab332343b8b6528e0af54630..d61e2fff6337a4ddc3c616bd9dbc1ad2c8e0540e 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php
@@ -6,6 +6,7 @@
 namespace Magento\Braintree\Test\TestStep;
 
 use Magento\Checkout\Test\Constraint\AssertGrandTotalOrderReview;
+use Magento\Checkout\Test\Constraint\AssertBillingAddressAbsentInPayment;
 use Magento\Checkout\Test\Page\CheckoutOnepage;
 use Magento\Checkout\Test\Page\CheckoutOnepageSuccess;
 use Magento\Mtf\Fixture\FixtureFactory;
@@ -26,6 +27,11 @@ class PlaceOrderWithPaypalStep implements TestStepInterface
      */
     private $assertGrandTotalOrderReview;
 
+    /**
+     * @var AssertBillingAddressAbsentInPayment
+     */
+    private $assertBillingAddressAbsentInPayment;
+
     /**
      * @var CheckoutOnepageSuccess
      */
@@ -49,6 +55,7 @@ class PlaceOrderWithPaypalStep implements TestStepInterface
     /**
      * @param CheckoutOnepage $checkoutOnepage
      * @param AssertGrandTotalOrderReview $assertGrandTotalOrderReview
+     * @param AssertBillingAddressAbsentInPayment $assertBillingAddressAbsentInPayment
      * @param CheckoutOnepageSuccess $checkoutOnepageSuccess
      * @param FixtureFactory $fixtureFactory
      * @param array $products
@@ -57,6 +64,7 @@ class PlaceOrderWithPaypalStep implements TestStepInterface
     public function __construct(
         CheckoutOnepage $checkoutOnepage,
         AssertGrandTotalOrderReview $assertGrandTotalOrderReview,
+        AssertBillingAddressAbsentInPayment $assertBillingAddressAbsentInPayment,
         CheckoutOnepageSuccess $checkoutOnepageSuccess,
         FixtureFactory $fixtureFactory,
         array $products,
@@ -64,6 +72,7 @@ class PlaceOrderWithPaypalStep implements TestStepInterface
     ) {
         $this->checkoutOnepage = $checkoutOnepage;
         $this->assertGrandTotalOrderReview = $assertGrandTotalOrderReview;
+        $this->assertBillingAddressAbsentInPayment = $assertBillingAddressAbsentInPayment;
         $this->checkoutOnepageSuccess = $checkoutOnepageSuccess;
         $this->fixtureFactory = $fixtureFactory;
         $this->products = $products;
@@ -78,6 +87,9 @@ class PlaceOrderWithPaypalStep implements TestStepInterface
         if (isset($this->prices['grandTotal'])) {
             $this->assertGrandTotalOrderReview->processAssert($this->checkoutOnepage, $this->prices['grandTotal']);
         }
+
+        $this->assertBillingAddressAbsentInPayment->processAssert($this->checkoutOnepage);
+
         $parentWindow = $this->checkoutOnepage->getPaymentBlock()
             ->getSelectedPaymentMethodBlock()
             ->clickPayWithPaypal();
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml
index 12aa92d35064d457cef4a544daace01314723d99..6ad46774f0f765b01761f6227465c63b695535d6 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml
@@ -21,6 +21,19 @@
         <step name="fillBillingInformation" module="Magento_Checkout" next="placeOrderWith3dSecure" />
         <step name="placeOrderWith3dSecure" module="Magento_Braintree" />
     </scenario>
+    <scenario name="OnePageCheckoutWith3dSecureFailedTest" firstStep="setupConfiguration">
+        <step name="setupConfiguration" module="Magento_Config" next="createProducts" />
+        <step name="createProducts" module="Magento_Catalog" next="addProductsToTheCart" />
+        <step name="addProductsToTheCart" module="Magento_Checkout" next="proceedToCheckout" />
+        <step name="proceedToCheckout" module="Magento_Checkout" next="createCustomer" />
+        <step name="createCustomer" module="Magento_Customer" next="selectCheckoutMethod" />
+        <step name="selectCheckoutMethod" module="Magento_Checkout" next="fillShippingAddress" />
+        <step name="fillShippingAddress" module="Magento_Checkout" next="fillShippingMethod" />
+        <step name="fillShippingMethod" module="Magento_Checkout" next="selectPaymentMethod" />
+        <step name="selectPaymentMethod" module="Magento_Checkout" next="fillBillingInformation" />
+        <step name="fillBillingInformation" module="Magento_Checkout" next="placeOrderWith3dSecureFailed" />
+        <step name="placeOrderWith3dSecureFailed" module="Magento_Braintree" />
+    </scenario>
     <scenario name="UseVaultWith3dSecureOnCheckoutTest" firstStep="setupConfiguration">
         <step name="setupConfiguration" module="Magento_Config" next="createProducts" />
         <step name="createProducts" module="Magento_Catalog" next="addProductsToTheCart" />
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php
index 789069299d22c62342e65d46c8492d37d7600692..49b900e4eedce313df7809a574e150f3c63c4787 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php
@@ -90,6 +90,19 @@ class Login extends Form
         $this->waitForElementNotVisible($this->loadingMask);
     }
 
+    /**
+     * Fill required fields for guest checkout.
+     *
+     * @param FixtureInterface $customer
+     * @return void
+     */
+    public function fillGuestFields(FixtureInterface $customer)
+    {
+        $mapping = $this->dataMapping();
+        $this->_rootElement->find($mapping['email']['selector'], $mapping['email']['strategy'])
+            ->setValue($customer->getEmail());
+    }
+
     /**
      * Click continue on checkout method block.
      *
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertBillingAddressAbsentInPayment.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertBillingAddressAbsentInPayment.php
new file mode 100644
index 0000000000000000000000000000000000000000..62fd88e98eed4b4ee9d19393525d55be898ca248
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertBillingAddressAbsentInPayment.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Checkout\Test\Constraint;
+
+use Magento\Checkout\Test\Page\CheckoutOnepage;
+use Magento\Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Assert billing address is not present in selected payment method.
+ */
+class AssertBillingAddressAbsentInPayment extends AbstractConstraint
+{
+    /**
+     * Assert billing address is not present in selected payment method.
+     *
+     * @param CheckoutOnepage $checkoutOnepage
+     * @return void
+     */
+    public function processAssert(CheckoutOnepage $checkoutOnepage)
+    {
+        \PHPUnit_Framework_Assert::assertFalse(
+            $checkoutOnepage->getPaymentBlock()
+                ->getSelectedPaymentMethodBlock()
+                ->getBillingBlock()
+                ->isVisible(),
+            'Billing address is present in payment method'
+        );
+    }
+
+    /**
+     * Returns string representation of successful assertion
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return 'Billing address is absent in payment method';
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCheckoutErrorMessage.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCheckoutErrorMessage.php
new file mode 100644
index 0000000000000000000000000000000000000000..24fc2419721b51e3b16c4bcc25e88d13497591c2
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCheckoutErrorMessage.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Checkout\Test\Constraint;
+
+use Magento\Checkout\Test\Page\CheckoutOnepage;
+use Magento\Mtf\Constraint\AbstractConstraint;
+
+/**
+ * Assert that error message is correct.
+ */
+class AssertCheckoutErrorMessage extends AbstractConstraint
+{
+    /**
+     * Assert that error message is correct.
+     *
+     * @param CheckoutOnepage $checkoutOnepage
+     * @param string $expectedErrorMessage
+     * @return void
+     */
+    public function processAssert(CheckoutOnepage $checkoutOnepage, $expectedErrorMessage)
+    {
+        \PHPUnit_Framework_Assert::assertEquals(
+            $expectedErrorMessage,
+            $checkoutOnepage->getMessagesBlock()->getErrorMessage(),
+            'Wrong error message is displayed.'
+        );
+    }
+
+    /**
+     * Returns string representation of successful assertion.
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return 'Error message on Checkout onepage page is correct.';
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml
index f8dcf95b0c16d87d6f7a241d1f0980b86c5c08d5..fc81df1bd7a807f5f25516ab62813ba3d810d76b 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml
@@ -14,6 +14,6 @@
         <block name="paymentBlock" class="Magento\Checkout\Test\Block\Onepage\Payment" locator="#checkout-step-payment" strategy="css selector" />
         <block name="discountCodesBlock" class="Magento\Checkout\Test\Block\Onepage\Payment\DiscountCodes" locator=".discount-code" strategy="css selector" />
         <block name="reviewBlock" class="Magento\Checkout\Test\Block\Onepage\Review" locator=".opc-block-summary" strategy="css selector" />
-        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator=".page.messages" strategy="css selector" />
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="//*[@id='checkout']//div[@data-role='checkout-messages' and .//div]" strategy="xpath" />
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutDeclinedTest.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutDeclinedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..990c3df13e9b1f00e6a2171dfb8f2216b38f0ec3
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutDeclinedTest.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Checkout\Test\TestCase;
+
+use Magento\Mtf\TestCase\Scenario;
+
+/**
+ * Preconditions:
+ * 1. Configure payment method.
+ * 2. Create products.
+ *
+ * Steps:
+ * 1. Log in Storefront.
+ * 2. Add products to the Shopping Cart.
+ * 3. Click the 'Proceed to Checkout' button.
+ * 4. Fill shipping information.
+ * 5. Select shipping method.
+ * 6. Select payment method.
+ * 7. Click 'Place Order' button.
+ * 8. Perform assertions.
+ *
+ * @group Checkout
+ * @ZephyrId MAGETWO-46469
+ */
+class OnePageCheckoutDeclinedTest extends Scenario
+{
+    /* tags */
+    const MVP = 'yes';
+    const TEST_TYPE = '3rd_party_test';
+    const SEVERITY = 'S1';
+    /* end tags */
+
+    /**
+     * Verifies error message on Onepage Checkout.
+     *
+     * @return void
+     */
+    public function test()
+    {
+        $this->executeScenario();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/ClickPlaceOrderButtonStep.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/ClickPlaceOrderButtonStep.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf086e55d5a305f716f4b64513190b32c7708cba
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/ClickPlaceOrderButtonStep.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Checkout\Test\TestStep;
+
+use Magento\Checkout\Test\Page\CheckoutOnepage;
+use Magento\Mtf\TestStep\TestStepInterface;
+
+/**
+ * Click 'Place order' button.
+ */
+class ClickPlaceOrderButtonStep implements TestStepInterface
+{
+    /**
+     * Onepage checkout page.
+     *
+     * @var CheckoutOnepage
+     */
+    private $checkoutOnepage;
+
+    /**
+     * @param CheckoutOnepage $checkoutOnepage
+     */
+    public function __construct(CheckoutOnepage $checkoutOnepage)
+    {
+        $this->checkoutOnepage = $checkoutOnepage;
+    }
+
+    /**
+     * Click 'Place order' button.
+     *
+     * @return array
+     */
+    public function run()
+    {
+        $this->checkoutOnepage->getPaymentBlock()->getSelectedPaymentMethodBlock()->clickPlaceOrder();
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php
index 444b98adb7f836b140a52d6c3644b6ee9e7c3c72..eef5f2fbdd03a9b7325b01aa8b5d4293e566ffbb 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php
@@ -51,6 +51,13 @@ class SelectCheckoutMethodStep implements TestStepInterface
      */
     private $clickProceedToCheckoutStep;
 
+    /**
+     * Shipping carrier and method.
+     *
+     * @var array
+     */
+    protected $shipping;
+
     /**
      * @constructor
      * @param CheckoutOnepage $checkoutOnepage
@@ -58,19 +65,22 @@ class SelectCheckoutMethodStep implements TestStepInterface
      * @param LogoutCustomerOnFrontendStep $logoutCustomerOnFrontend
      * @param ClickProceedToCheckoutStep $clickProceedToCheckoutStep
      * @param string $checkoutMethod
+     * @param array $shipping
      */
     public function __construct(
         CheckoutOnepage $checkoutOnepage,
         Customer $customer,
         LogoutCustomerOnFrontendStep $logoutCustomerOnFrontend,
         ClickProceedToCheckoutStep $clickProceedToCheckoutStep,
-        $checkoutMethod
+        $checkoutMethod,
+        array $shipping = []
     ) {
         $this->checkoutOnepage = $checkoutOnepage;
         $this->customer = $customer;
         $this->logoutCustomerOnFrontend = $logoutCustomerOnFrontend;
         $this->clickProceedToCheckoutStep = $clickProceedToCheckoutStep;
         $this->checkoutMethod = $checkoutMethod;
+        $this->shipping = $shipping;
     }
 
     /**
@@ -87,6 +97,10 @@ class SelectCheckoutMethodStep implements TestStepInterface
             } else {
                 $this->checkoutOnepage->getLoginBlock()->loginCustomer($this->customer);
             }
+        } elseif ($this->checkoutMethod === 'guest') {
+            if (empty($this->shipping)) {
+                $this->checkoutOnepage->getLoginBlock()->fillGuestFields($this->customer);
+            }
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml
index 2f20c20f6e87f2f0df2f8e4991d4d3d5a0b26970..d7a61b0eaaa2fece41b7d1f464f0e56bdb80d159 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml
@@ -12,9 +12,19 @@
             <argument name="severity" xsi:type="string">middle</argument>
         </arguments>
     </type>
+    <type name="Magento\Checkout\Test\Constraint\AssertBillingAddressAbsentInPayment">
+        <arguments>
+            <argument name="severity" xsi:type="string">S2</argument>
+        </arguments>
+    </type>
     <type name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage">
         <arguments>
             <argument name="severity" xsi:type="string">S0</argument>
         </arguments>
     </type>
+    <type name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage">
+        <arguments>
+            <argument name="severity" xsi:type="string">S1</argument>
+        </arguments>
+    </type>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml
index 24eb96c0a9347741384ffd6718bf349eeb452c85..e9b49babbba1936aae49b20339a56732b5b2531b 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml
@@ -28,4 +28,17 @@
         <step name="addProductsToTheCart" module="Magento_Checkout" next="ProceedToCheckout" />
         <step name="ProceedToCheckout" module="Magento_Checkout" />
     </scenario>
+    <scenario name="OnePageCheckoutDeclinedTest" firstStep="setupConfiguration">
+        <step name="setupConfiguration" module="Magento_Config" next="createProducts" />
+        <step name="createProducts" module="Magento_Catalog" next="addProductsToTheCart" />
+        <step name="addProductsToTheCart" module="Magento_Checkout" next="proceedToCheckout" />
+        <step name="proceedToCheckout" module="Magento_Checkout" next="createCustomer" />
+        <step name="createCustomer" module="Magento_Customer" next="selectCheckoutMethod" />
+        <step name="selectCheckoutMethod" module="Magento_Checkout" next="fillShippingAddress" />
+        <step name="fillShippingAddress" module="Magento_Checkout" next="fillShippingMethod" />
+        <step name="fillShippingMethod" module="Magento_Checkout" next="selectPaymentMethod" />
+        <step name="selectPaymentMethod" module="Magento_Checkout" next="fillBillingInformation" />
+        <step name="fillBillingInformation" module="Magento_Checkout" next="clickPlaceOrderButton" />
+        <step name="clickPlaceOrderButton" module="Magento_Checkout" />
+    </scenario>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml b/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml
index f6c93407a0ccdb42eed3c22519c9d3b109e648a8..8e742ab30ba960dd022870fea86e08c74d71c3fd 100644
--- a/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml
+++ b/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml
@@ -14,6 +14,13 @@
             <field name="cc_cid" xsi:type="string">123</field>
         </dataset>
 
+        <dataset name="visa_alt">
+            <field name="cc_number" xsi:type="string">4012888888881881</field>
+            <field name="cc_exp_month" xsi:type="string">02 - February</field>
+            <field name="cc_exp_year" xsi:type="string">2021</field>
+            <field name="cc_cid" xsi:type="string">123</field>
+        </dataset>
+
         <dataset name="amex_default">
             <field name="cc_number" xsi:type="string">378282246310005</field>
             <field name="cc_exp_month" xsi:type="string">02 - February</field>
diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml
index f6ac4ac4f0a3c4591c12de7215600010c5fb857c..11f9d9d5270e679df9cd5237b4a51139cb51475e 100644
--- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml
@@ -21,7 +21,7 @@
             </data>
             <data name="creditCardClass" xsi:type="string">credit_card</data>
             <data name="creditCard/dataset" xsi:type="string">visa_default</data>
-            <data name="isVaultEnabled" xsi:type="boolean">false</data>
+            <data name="isVaultPresent" xsi:type="boolean">false</data>
             <data name="configData" xsi:type="string">payflowpro</data>
             <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
             <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" />
diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml b/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml
index ac69bfb9f47e4550e6ab4592cccbdf56cf682da3..2cafc815fed1dfc1865d1f2627f536d1ba909563 100644
--- a/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml
@@ -26,7 +26,7 @@
                     <item name="method" xsi:type="string">payflowpro</item>
                     <item name="creditCardClass" xsi:type="string">credit_card</item>
                     <item name="creditCard" xsi:type="array">
-                        <item name="dataset" xsi:type="string">amex_default</item>
+                        <item name="dataset" xsi:type="string">visa_alt</item>
                     </item>
                 </item>
                 <item name="2" xsi:type="array">
@@ -43,7 +43,7 @@
                     <item name="method" xsi:type="string">payflowpro</item>
                     <item name="creditCardClass" xsi:type="string">credit_card</item>
                     <item name="creditCard" xsi:type="array">
-                        <item name="dataset" xsi:type="string">amex_default</item>
+                        <item name="dataset" xsi:type="string">visa_alt</item>
                     </item>
                     <item name="vault" xsi:type="array">
                         <item name="method" xsi:type="string">payflowpro_cc_vault</item>
diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php b/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php
index b0f33872103f27ffe00e2b1323574fa0fdc6b88a..eee0f1be86ef79198a7864df8be90e8a225ea840 100644
--- a/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php
+++ b/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php
@@ -36,28 +36,28 @@ class CheckSaveCreditCardOptionStep implements TestStepInterface
     private $payment;
 
     /**
-     * If vault is enabled for payment method.
+     * If 'Save for later use' checkbox is present in credit card form.
      *
      * @var null|bool
      */
-    private $isVaultEnabled;
+    private $isVaultPresent;
 
     /**
      * @param CheckoutOnepage $checkoutOnepage
      * @param AssertSaveCreditCardOptionNotPresent $assertSaveCreditCardOptionNotPresent
      * @param array $payment
-     * @param null|bool $isVaultEnabled
+     * @param null|bool $isVaultPresent
      */
     public function __construct(
         CheckoutOnepage $checkoutOnepage,
         AssertSaveCreditCardOptionNotPresent $assertSaveCreditCardOptionNotPresent,
         array $payment,
-        $isVaultEnabled = null
+        $isVaultPresent = null
     ) {
         $this->checkoutOnepage = $checkoutOnepage;
         $this->assertSaveCreditCardOptionNotPresent = $assertSaveCreditCardOptionNotPresent;
         $this->payment = $payment;
-        $this->isVaultEnabled = $isVaultEnabled;
+        $this->isVaultPresent = $isVaultPresent;
     }
 
     /**
@@ -67,7 +67,7 @@ class CheckSaveCreditCardOptionStep implements TestStepInterface
      */
     public function run()
     {
-        if ($this->isVaultEnabled === false) {
+        if ($this->isVaultPresent === false) {
             $this->assertSaveCreditCardOptionNotPresent->processAssert(
                 $this->checkoutOnepage,
                 $this->payment['method']
diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml
index 6289a8392ee7544777959e8afffe9fd999388713..ee55d7ef5ba905973cbbfb38effab1ccc7f750e0 100644
--- a/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml
+++ b/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml
@@ -56,7 +56,8 @@
         <step name="selectCheckoutMethod" module="Magento_Checkout" next="fillShippingAddress" />
         <step name="fillShippingAddress" module="Magento_Checkout" next="fillShippingMethod" />
         <step name="fillShippingMethod" module="Magento_Checkout" next="selectPaymentMethod" />
-        <step name="selectPaymentMethod" module="Magento_Checkout" next="fillBillingInformation" />
+        <step name="selectPaymentMethod" module="Magento_Checkout" next="checkSaveCreditCardOption" />
+        <step name="checkSaveCreditCardOption" module="Magento_Vault" next="fillBillingInformation" />
         <step name="fillBillingInformation" module="Magento_Checkout" next="placeOrder" />
         <step name="placeOrder" module="Magento_Checkout" next="openOrder" />
         <step name="openOrder" module="Magento_Sales" next="reorder" />