diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml
index 1ab29f9fc75994705eab61414a270eca9e953b51..6d003c6cb6810ee05982625e3b67bf6652b65ca2 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml
@@ -37,7 +37,7 @@ CountryModel.prototype = {
             var showMethodElement  = $(applyCountryElement.id.replace(/sallowspecific/, 'showmethod'));
             //var specifErrMsgElement  = $(applyCountryElement.id.replace(/sallowspecific/, 'specificerrmsg'));
             if (specifCountryElement) {
-                if (applyCountryElement.value == 1) {
+                if (applyCountryElement.value == 1 && !specifCountryElement.hasAttribute('disabled')) {
                    //if specific country element selected
                    specifCountryElement.enable();
                    if (showMethodElement) {
diff --git a/app/code/Magento/Braintree/Model/Report/Row/TransactionMap.php b/app/code/Magento/Braintree/Model/Report/Row/TransactionMap.php
index 0abae8af89fbca4664c7b35568cf16e61533a3fe..c914b21893e253feb3a04fabe0f4a274d10deb1a 100644
--- a/app/code/Magento/Braintree/Model/Report/Row/TransactionMap.php
+++ b/app/code/Magento/Braintree/Model/Report/Row/TransactionMap.php
@@ -115,9 +115,13 @@ class TransactionMap implements DocumentInterface
      */
     public function getCustomAttributes()
     {
+        $shouldBeLocalized = ['paymentInstrumentType', 'type', 'status'];
         $output = [];
         foreach ($this->getMappedValues() as $key => $value) {
             $attribute = $this->attributeValueFactory->create();
+            if(in_array($key, $shouldBeLocalized)) {
+                $value = __($value);
+            }
             $output[] = $attribute->setAttributeCode($key)->setValue($value);
         }
         return $output;
diff --git a/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php b/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php
index d720b748ba819cce5515d052acde4bfda50c29db..cea02f249cbed4a6da6d7426c0ab20e27fe9cbc9 100644
--- a/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php
+++ b/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php
@@ -79,7 +79,6 @@ final class ConfigProvider implements ConfigProviderInterface
             'payment' => [
                 self::CODE => [
                     'isActive' => $this->config->isActive(),
-                    'isSingleUse' => !$isPayPalActive,
                     'clientToken' => $this->getClientToken(),
                     'ccTypesMapper' => $this->config->getCctypesMapper(),
                     'sdkUrl' => $this->config->getSdkUrl(),
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionMapTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionMapTest.php
index c44a67b2c61d92cabe3087e9a47f20f1b94f9250..34c607c88784d7c270d75937cadfb550216744b1 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionMapTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionMapTest.php
@@ -11,6 +11,8 @@ use DateTime;
 use Magento\Braintree\Model\Report\Row\TransactionMap;
 use Magento\Framework\Api\AttributeValue;
 use Magento\Framework\Api\AttributeValueFactory;
+use Magento\Framework\Phrase;
+use Magento\Framework\Phrase\RendererInterface;
 use Magento\Store\Model\StoreManagerInterface;
 
 /**
@@ -30,6 +32,16 @@ class TransactionMapTest extends \PHPUnit_Framework_TestCase
      */
     private $attributeValueFactoryMock;
 
+    /**
+     * @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $defaultRenderer;
+
+    /**
+     * @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $rendererMock;
+
     /**
      * Setup
      */
@@ -39,6 +51,9 @@ class TransactionMapTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
+        $this->defaultRenderer = Phrase::getRenderer();
+        $this->rendererMock = $this->getMockBuilder(RendererInterface::class)
+            ->getMock();
     }
 
     /**
@@ -65,6 +80,8 @@ class TransactionMapTest extends \PHPUnit_Framework_TestCase
             $this->transactionStub
         );
 
+        Phrase::setRenderer($this->rendererMock);
+
         /** @var AttributeValue[] $result */
         $result = $map->getCustomAttributes();
 
@@ -77,6 +94,31 @@ class TransactionMapTest extends \PHPUnit_Framework_TestCase
             $result[6]->getValue()
         );
         $this->assertEquals(implode(', ', $transaction['refundIds']), $result[11]->getValue());
+        $this->assertEquals($transaction['merchantAccountId'], $result[1]->getValue());
+        $this->assertEquals($transaction['orderId'], $result[2]->getValue());
+        $this->assertEquals($transaction['amount'], $result[7]->getValue());
+        $this->assertEquals($transaction['processorSettlementResponseCode'], $result[8]->getValue());
+        $this->assertEquals($transaction['processorSettlementResponseText'], $result[10]->getValue());
+        $this->assertEquals($transaction['settlementBatchId'], $result[12]->getValue());
+        $this->assertEquals($transaction['currencyIsoCode'], $result[13]->getValue());
+
+        $this->rendererMock->expects($this->at(0))
+            ->method('render')
+            ->with([$transaction['paymentInstrumentType']])
+            ->willReturn('Credit card');
+        $this->assertEquals('Credit card', $result[3]->getValue()->render());
+
+        $this->rendererMock->expects($this->at(0))
+            ->method('render')
+            ->with([$transaction['type']])
+            ->willReturn('Sale');
+        $this->assertEquals('Sale', $result[5]->getValue()->render());
+
+        $this->rendererMock->expects($this->at(0))
+            ->method('render')
+            ->with([$transaction['status']])
+            ->willReturn('Pending for settlement');
+        $this->assertEquals('Pending for settlement', $result[9]->getValue()->render());
     }
 
     /**
@@ -90,9 +132,27 @@ class TransactionMapTest extends \PHPUnit_Framework_TestCase
                     'id' => 1,
                     'createdAt' => new \DateTime(),
                     'paypalDetails' => new PayPalDetails(['paymentId' => 10]),
-                    'refundIds' => [1, 2, 3, 4, 5]
+                    'refundIds' => [1, 2, 3, 4, 5],
+                    'merchantAccountId' => 'MerchantId',
+                    'orderId' => 1,
+                    'paymentInstrumentType' => 'credit_card',
+                    'type' => 'sale',
+                    'amount' => '$19.99',
+                    'processorSettlementResponseCode' => 1,
+                    'status' => 'pending_for_settlement',
+                    'processorSettlementResponseText' => 'sample text',
+                    'settlementBatchId' => 2,
+                    'currencyIsoCode' => 'USD'
                 ]
             ]
         ];
     }
+
+    /**
+     * @return void
+     */
+    protected function tearDown()
+    {
+        Phrase::setRenderer($this->defaultRenderer);
+    }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php
index 50488df2600c64f1267755b0da98cee69c993789..6024141280a021e443ad100eca65627a4728976c 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php
@@ -184,4 +184,42 @@ class TransactionsCollectionTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT, count($items));
         $this->assertInstanceOf(DocumentInterface::class, $items[1]);
     }
+
+    /**
+     * Add fields to filter
+     * 
+     * @dataProvider addToFilterDataProvider
+     */
+    public function testAddToFilter($field, $condition, $filterMapperCall, $expectedCondition)
+    {
+        $this->filterMapperMock->expects(static::exactly($filterMapperCall))
+            ->method('getFilter')
+            ->with($field, $expectedCondition)
+            ->willReturn(new BraintreeSearchNodeStub());
+
+        $collection = new TransactionsCollection(
+            $this->entityFactoryMock,
+            $this->braintreeAdapterMock,
+            $this->filterMapperMock
+        );
+
+        static::assertInstanceOf(
+            TransactionsCollection::class,
+            $collection->addFieldToFilter($field, $condition)
+        );
+    }
+
+    /**
+     * addToFilter DataProvider
+     * 
+     * @return array
+     */
+    public function addToFilterDataProvider()
+    {
+        return [
+            ['orderId', ['like' => 1], 1, ['like' => 1]],
+            ['type', 'sale', 1, ['eq' => 'sale']],
+            [['type', 'orderId'], [], 0, []],
+        ];
+    }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php
index a787111fa93aa383f6ec11b77f3cb2e623bc228e..ad9f99b39afb0820b3b0bcbdca10fbe4837e9a5e 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php
@@ -154,7 +154,6 @@ class ConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'payment' => [
                         ConfigProvider::CODE => [
                             'isActive' => true,
-                            'isSingleUse' => false,
                             'clientToken' => self::CLIENT_TOKEN,
                             'ccTypesMapper' => ['visa' => 'VI', 'american-express' => 'AE'],
                             'sdkUrl' => self::SDK_URL,
diff --git a/app/code/Magento/Braintree/Test/Unit/Ui/Component/Report/Filters/Type/DateRangeTest.php b/app/code/Magento/Braintree/Test/Unit/Ui/Component/Report/Filters/Type/DateRangeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b81dbe2fb036f66912c35f7cdf59a88deee6dd51
--- /dev/null
+++ b/app/code/Magento/Braintree/Test/Unit/Ui/Component/Report/Filters/Type/DateRangeTest.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Braintree\Test\Unit\Ui\Component\Report\Filters\Type;
+
+use Magento\Framework\Api\Filter;
+use Magento\Framework\Api\FilterBuilder;
+use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
+use Magento\Framework\View\Element\UiComponentFactory;
+use Magento\Ui\Component\Filters\FilterModifier;
+use Magento\Braintree\Ui\Component\Report\Filters\Type\DateRange;
+use Magento\Framework\View\Element\UiComponent\ContextInterface;
+use Magento\Ui\Component\Form\Element\DataType\Date as FormDate;
+
+/**
+ * Class DateRangeTest
+ */
+class DateRangeTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $contextMock;
+
+    /**
+     * @var UiComponentFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $uiComponentFactory;
+
+    /**
+     * @var FilterBuilder|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filterBuilderMock;
+
+    /**
+     * @var FilterModifier|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filterModifierMock;
+
+
+    /**
+     * @var DataProviderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $dataProviderMock;
+
+    /**
+     * Set up
+     */
+    protected function setUp()
+    {
+        $this->contextMock = $this->getMockForAbstractClass(ContextInterface::class);
+        $processor = $this->getMockBuilder(\Magento\Framework\View\Element\UiComponent\Processor::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects(static::any())
+            ->method('getProcessor')
+            ->willReturn($processor);
+        $this->uiComponentFactory = $this->getMockBuilder(UiComponentFactory::class)
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->filterBuilderMock = $this->getMockBuilder(FilterBuilder::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->filterModifierMock = $this->getMockBuilder(FilterModifier::class)
+            ->setMethods(['applyFilterModifier'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        
+        $this->dataProviderMock = $this->getMockForAbstractClass(DataProviderInterface::class);
+    }
+
+    /**
+     * Run test prepare method
+     *
+     * @param string $name
+     * @param array $filterData
+     * @param array|null $expectedCondition
+     * @dataProvider getPrepareDataProvider
+     * @return void
+     */
+    public function testPrepare($name, $filterData, $expectedCondition)
+    {
+        /** @var FormDate PHPUnit_Framework_MockObject_MockObject|$uiComponent */
+        $uiComponent = $this->getMockBuilder(FormDate::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $uiComponent->expects($this->any())
+            ->method('getContext')
+            ->willReturn($this->contextMock);
+
+        $this->contextMock->expects($this->any())
+            ->method('getNamespace')
+            ->willReturn(DateRange::NAME);
+        $this->contextMock->expects($this->any())
+            ->method('addComponentDefinition')
+            ->with(DateRange::NAME, ['extends' => DateRange::NAME]);
+
+        $this->contextMock->expects($this->any())
+            ->method('getFiltersParams')
+            ->willReturn($filterData);
+        
+        $this->contextMock->expects($this->any())
+            ->method('getDataProvider')
+            ->willReturn($this->dataProviderMock);
+
+        if ($expectedCondition !== null) {
+            if (is_string($filterData[$name])) {
+                $uiComponent->expects(static::once())
+                    ->method('convertDate')
+                    ->with($filterData[$name])
+                    ->willReturn(new \DateTime($filterData[$name], new \DateTimeZone('UTC')));
+            } else {
+                $uiComponent->method('convertDate')
+                    ->willReturnMap([
+                        [
+                            $filterData[$name]['from'], 0, 0, 0,
+                            new \DateTime($filterData[$name]['from'], new \DateTimeZone('UTC'))
+                        ],
+                        [
+                            $filterData[$name]['to'], 23, 59, 59,
+                            new \DateTime($filterData[$name]['to'] . ' 23:59:00', new \DateTimeZone('UTC'))
+                        ],
+                    ]);
+            }
+
+            $i=0;
+            switch (true) {
+                case is_string($filterData[$name]):
+                case isset($filterData[$name]['from']) && !isset($filterData[$name]['to']):
+                case !isset($filterData[$name]['from']) && isset($filterData[$name]['to']):
+                    $filterMock = $this->getFilterMock(
+                        $name,
+                        $expectedCondition['type'],
+                        $expectedCondition['date'],
+                        $i
+                    );
+                    $this->dataProviderMock->expects(static::once())
+                        ->method('addFilter')
+                        ->with($filterMock);
+                    break;
+                case isset($filterData[$name]['from']) && isset($filterData[$name]['to']):
+                    $this->getFilterMock(
+                        $name,
+                        $expectedCondition['type_from'],
+                        $expectedCondition['date_from'],
+                        $i
+                    );
+                    $filterMock = $this->getFilterMock(
+                        $name,
+                        $expectedCondition['type_to'],
+                        $expectedCondition['date_to'],
+                        $i
+                    );
+                    $this->dataProviderMock->expects(static::exactly(2))
+                        ->method('addFilter')
+                        ->with($filterMock);
+                    break;
+            }
+        }
+
+        $this->uiComponentFactory->expects($this->any())
+            ->method('create')
+            ->with($name, DateRange::COMPONENT, ['context' => $this->contextMock])
+            ->willReturn($uiComponent);
+
+        $date = new DateRange(
+            $this->contextMock,
+            $this->uiComponentFactory,
+            $this->filterBuilderMock,
+            $this->filterModifierMock,
+            [],
+            ['name' => $name]
+        );
+        $date->prepare();
+    }
+
+    /**
+     * Gets Filter mock
+     * 
+     * @param string $name
+     * @param string $expectedType
+     * @param string $expectedDate
+     * @param int $i
+     * 
+     * @return Filter|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getFilterMock($name, $expectedType, $expectedDate, &$i)
+    {
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('setConditionType')
+            ->with($expectedType)
+            ->willReturnSelf();
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('setField')
+            ->with($name)
+            ->willReturnSelf();
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('setValue')
+            ->with($expectedDate)
+            ->willReturnSelf();
+        
+        $filterMock = $this->getMock(Filter::class);
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('create')
+            ->willReturn($filterMock);
+
+        return $filterMock;
+    }
+
+    /**
+     * @return array
+     */
+    public function getPrepareDataProvider()
+    {
+        return [
+            [
+                'test_date',
+                ['test_date' => ['from' => '11-05-2015', 'to' => null]],
+                ['date' => '2015-05-11T00:00:00+0000', 'type' => 'gteq'],
+            ],
+            [
+                'test_date',
+                ['test_date' => ['from' => null, 'to' => '11-05-2015']],
+                ['date' => '2015-05-11T23:59:00+0000', 'type' => 'lteq'],
+            ],
+            [
+                'test_date',
+                ['test_date' => ['from' => '11-05-2015', 'to' => '11-05-2015']],
+                [
+                    'date_from' => '2015-05-11T00:00:00+0000', 'type_from' => 'gteq',
+                    'date_to' => '2015-05-11T23:59:00+0000', 'type_to' => 'lteq'
+                ],
+            ],
+            [
+                'test_date',
+                ['test_date' => '11-05-2015'],
+                ['date' => '2015-05-11T00:00:00+0000', 'type' => 'eq'],
+            ],
+            [
+                'test_date',
+                ['test_date' => ['from' => '', 'to' => '']],
+                null,
+            ]
+        ];
+    }
+}
diff --git a/app/code/Magento/Braintree/Ui/Component/Report/Filters/Type/DateRange.php b/app/code/Magento/Braintree/Ui/Component/Report/Filters/Type/DateRange.php
new file mode 100644
index 0000000000000000000000000000000000000000..adbb3b78cb663d92a46e7abdd9c41d70f63e3145
--- /dev/null
+++ b/app/code/Magento/Braintree/Ui/Component/Report/Filters/Type/DateRange.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Braintree\Ui\Component\Report\Filters\Type;
+
+/**
+ * Class DateRange
+ */
+class DateRange extends \Magento\Ui\Component\Filters\Type\Date
+{
+    /**
+     * Braintree date format
+     *
+     * @var string
+     */
+    protected static $dateFormat = 'Y-m-d\TH:i:00O';
+}
diff --git a/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/PaymentType.php b/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/PaymentType.php
index df6c2ffcd229dd244c8f39a8191ac0955fd936c6..489c0d4cd1e49cd5b788b6927ee09515285b049c 100644
--- a/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/PaymentType.php
+++ b/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/PaymentType.php
@@ -44,12 +44,12 @@ class PaymentType implements OptionSourceInterface
     private function getAvailablePaymentTypes()
     {
         return [
-            PaymentInstrumentType::PAYPAL_ACCOUNT => __('Paypal account'),
-            PaymentInstrumentType::COINBASE_ACCOUNT => __('Coinbase account'),
-            PaymentInstrumentType::EUROPE_BANK_ACCOUNT => __('Europe bank account'),
-            PaymentInstrumentType::CREDIT_CARD => __('Credit card'),
-            PaymentInstrumentType::APPLE_PAY_CARD => __('Apple pay card'),
-            PaymentInstrumentType::ANDROID_PAY_CARD => __('Android pay card')
+            PaymentInstrumentType::PAYPAL_ACCOUNT => __(PaymentInstrumentType::PAYPAL_ACCOUNT),
+            PaymentInstrumentType::COINBASE_ACCOUNT => __(PaymentInstrumentType::COINBASE_ACCOUNT),
+            PaymentInstrumentType::EUROPE_BANK_ACCOUNT => __(PaymentInstrumentType::EUROPE_BANK_ACCOUNT),
+            PaymentInstrumentType::CREDIT_CARD => __(PaymentInstrumentType::CREDIT_CARD),
+            PaymentInstrumentType::APPLE_PAY_CARD => __(PaymentInstrumentType::APPLE_PAY_CARD),
+            PaymentInstrumentType::ANDROID_PAY_CARD => __(PaymentInstrumentType::ANDROID_PAY_CARD)
         ];
     }
 }
diff --git a/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/Status.php b/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/Status.php
index f5424c6dd9b7f1a1c30b761fe6b3041017191c7e..ca6d6522990b42e11fb4e8230d2c4fee2a64d68e 100644
--- a/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/Status.php
+++ b/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/Status.php
@@ -44,20 +44,20 @@ class Status implements OptionSourceInterface
     private function getAvailableStatuses()
     {
         return [
-            Transaction::AUTHORIZATION_EXPIRED => __('Authorization expired'),
-            Transaction::AUTHORIZING => __('Authorizing'),
-            Transaction::AUTHORIZED => __('Authorized'),
-            Transaction::GATEWAY_REJECTED => __('Gateway rejected'),
-            Transaction::FAILED => __('Failed'),
-            Transaction::PROCESSOR_DECLINED => __('Processor declined'),
-            Transaction::SETTLED => __('Settled'),
-            Transaction::SETTLING => __('Settling'),
-            Transaction::SUBMITTED_FOR_SETTLEMENT => __('Submitted for settlement'),
-            Transaction::VOIDED => __('Voided'),
-            Transaction::UNRECOGNIZED => __('Unrecognized'),
-            Transaction::SETTLEMENT_DECLINED => __('Settlement declined'),
-            Transaction::SETTLEMENT_PENDING => __('Settlement pending'),
-            Transaction::SETTLEMENT_CONFIRMED => __('Settlement confirmed')
+            Transaction::AUTHORIZATION_EXPIRED => __(Transaction::AUTHORIZATION_EXPIRED),
+            Transaction::AUTHORIZING => __(Transaction::AUTHORIZING),
+            Transaction::AUTHORIZED => __(Transaction::AUTHORIZED),
+            Transaction::GATEWAY_REJECTED => __(Transaction::GATEWAY_REJECTED),
+            Transaction::FAILED => __(Transaction::FAILED),
+            Transaction::PROCESSOR_DECLINED => __(Transaction::PROCESSOR_DECLINED),
+            Transaction::SETTLED => __(Transaction::SETTLED),
+            Transaction::SETTLING => __(Transaction::SETTLING),
+            Transaction::SUBMITTED_FOR_SETTLEMENT => __(Transaction::SUBMITTED_FOR_SETTLEMENT),
+            Transaction::VOIDED => __(Transaction::VOIDED),
+            Transaction::UNRECOGNIZED => __(Transaction::UNRECOGNIZED),
+            Transaction::SETTLEMENT_DECLINED => __(Transaction::SETTLEMENT_DECLINED),
+            Transaction::SETTLEMENT_PENDING => __(Transaction::SETTLEMENT_PENDING),
+            Transaction::SETTLEMENT_CONFIRMED => __(Transaction::SETTLEMENT_CONFIRMED)
         ];
     }
 }
diff --git a/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/TransactionType.php b/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/TransactionType.php
index 312b2f518b4644a3ba5165b877d0bba5b0ed9e4b..0fe752d423277f58c6ee79354541d910a00eb8a8 100644
--- a/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/TransactionType.php
+++ b/app/code/Magento/Braintree/Ui/Component/Report/Listing/Column/TransactionType.php
@@ -44,8 +44,8 @@ class TransactionType implements OptionSourceInterface
     private function getAvailableTransactionTypes()
     {
         return [
-            Transaction::SALE => __('Sale'),
-            Transaction::CREDIT => __('Credit')
+            Transaction::SALE => __(Transaction::SALE),
+            Transaction::CREDIT => __(Transaction::CREDIT)
         ];
     }
 }
diff --git a/app/code/Magento/Braintree/composer.json b/app/code/Magento/Braintree/composer.json
index fb833f763f370daf493eaf1a16e6791fca7e4f2a..9a86aec7a7d9dd391096b7ae8bd390ef39ec6dad 100644
--- a/app/code/Magento/Braintree/composer.json
+++ b/app/code/Magento/Braintree/composer.json
@@ -17,6 +17,7 @@
         "magento/module-quote": "100.2.*",
         "magento/module-paypal": "100.2.*",
         "magento/module-theme": "100.2.*",
+        "magento/module-ui": "100.2.*",
         "braintree/braintree_php": "3.7.0"
     },
     "suggest": {
diff --git a/app/code/Magento/Braintree/etc/adminhtml/system.xml b/app/code/Magento/Braintree/etc/adminhtml/system.xml
index 3668cd7779fdac701547ecb4d3b7471471943453..765260ce382917554a27b840c27e98ed2c1d8d6a 100644
--- a/app/code/Magento/Braintree/etc/adminhtml/system.xml
+++ b/app/code/Magento/Braintree/etc/adminhtml/system.xml
@@ -18,6 +18,7 @@
                     <label><![CDATA[&nbsp;]]></label>
                     <frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Payment</frontend_model>
                     <attribute type="activity_path">payment/braintree/active</attribute>
+                    <more_url>https://articles.braintreepayments.com/guides/magento/configuration</more_url>
                     <field id="active" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="0">
                         <label>Enable this Solution</label>
                         <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
@@ -43,7 +44,7 @@
                         </requires>
                     </field>
                     <group id="braintree_required" translate="label" showInDefault="1" showInWebsite="1" sortOrder="5">
-                        <comment><![CDATA[<a href="https://www.braintreegateway.com/login" target="_blank">Click here to login to your existing Braintree account</a>. Or to setup a new account and accept payments on your website, <a href="https://apply.braintreegateway.com/signup/us" target="_blank">click here to signup for a Braintree account</a>.]]></comment>
+                        <comment><![CDATA[<a href="https://www.braintreegateway.com/login" target="_blank">Click here to login to your existing Braintree account</a>. Or to setup a new account and accept payments on your website, <a href="https://apply.braintreegateway.com/signup/us" target="_blank">click here to signup for a Braintree account</a>.<br><br>Powered by <a href="https://www.braintreepayments.com/features/hosted-fields" target="_blank">Braintree v.zero with Hosted Fields</a> latest technology. Hosted Fields are small, transparent iframes that replace the sensitive credit card inputs in your checkout flow - helping you meet the latest data security requirements while ensuring your customization doesn't suffer. <a href="https://www.braintreepayments.com/features/hosted-fields" target="_blank">Find out more</a>.]]></comment>
                         <label>Basic Braintree Settings</label>
                         <attribute type="expanded">1</attribute>
                         <frontend_model>Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
diff --git a/app/code/Magento/Braintree/i18n/en_US.csv b/app/code/Magento/Braintree/i18n/en_US.csv
index f912e59c2edac48bc7da882f692c57802f07b54e..4cdb8538c3abf53b759b94d2adf78178654b9972 100644
--- a/app/code/Magento/Braintree/i18n/en_US.csv
+++ b/app/code/Magento/Braintree/i18n/en_US.csv
@@ -140,6 +140,28 @@ Debug,Debug
 "liabilityShifted", "Liability Shifted"
 "liabilityShiftPossible", "Liability Shift Possible"
 "riskDataId", "Risk ID"
-"riskDataDecision", "Risk Decision",
-"paymentId", "Payment Id",
-"payerEmail", "Payer Email",
+"riskDataDecision", "Risk Decision"
+"paymentId", "Payment Id"
+"payerEmail", "Payer Email"
+"sale","Sale"
+"credit","Credit"
+"authorization_expired","Authorization expired"
+"authorizing","Authorizing"
+"authorized","Authorized"
+"gateway_rejected","Gateway rejected"
+"failed","Failed"
+"processor_declined","Processor declined"
+"settled","Settled"
+"settling","Settling"
+"submitted_for_settlement","Submitted for settlement"
+"voided","Voided"
+"unrecognized","Unrecognized"
+"settlement_declined","Settlement declined"
+"settlement_pending","Settlement pending"
+"settlement_confirmed","Settlement confirmed"
+"paypal_account","Paypal account"
+"coinbase_account","Coinbase account"
+"europe_bank_accout","Europe bank account"
+"credit_card","Credit card"
+"apple_pay_card","Apple pay card"
+"android_pay_card","Android pay card"
\ No newline at end of file
diff --git a/app/code/Magento/Braintree/view/adminhtml/ui_component/braintree_report.xml b/app/code/Magento/Braintree/view/adminhtml/ui_component/braintree_report.xml
index d1b661b2c3ecdf0d6bb92ffc03e3a235e090cb5f..031ddca7a87070ccad2a53a204aec84c67e62f1b 100644
--- a/app/code/Magento/Braintree/view/adminhtml/ui_component/braintree_report.xml
+++ b/app/code/Magento/Braintree/view/adminhtml/ui_component/braintree_report.xml
@@ -109,7 +109,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            <!--
             <filterSelect name="paymentInstrumentType">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Braintree\Ui\Component\Report\Listing\Column\PaymentType</argument>
@@ -126,7 +125,6 @@
                     </item>
                 </argument>
             </filterSelect>
-            -->
             <filterInput name="paypalDetails_paymentId">
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
@@ -135,6 +133,22 @@
                     </item>
                 </argument>
             </filterInput>
+            <filterRange name="createdAt" class="Magento\Braintree\Ui\Component\Report\Filters\Type\DateRange">
+                <argument name="data" xsi:type="array">
+                    <item name="config" xsi:type="array">
+                        <item name="provider" xsi:type="string">${ $.parentName }</item>
+                        <item name="imports" xsi:type="array">
+                            <item name="visible" xsi:type="string">componentType = column, index = ${ $.index }:visible</item>
+                        </item>
+                        <item name="parent" xsi:type="string">braintree_report.braintree_report.listing_top.listing_filters</item>
+                        <item name="template" xsi:type="string">ui/grid/filters/elements/group</item>
+                        <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/range</item>
+                        <item name="rangeType" xsi:type="string">date</item>
+                        <item name="dataScope" xsi:type="string">createdAt</item>
+                        <item name="label" xsi:type="string" translate="true">Created At</item>
+                    </item>
+                </argument>
+            </filterRange>
         </filters>
     </container>
     <columns name="braintree_report_columns">
@@ -216,7 +230,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="sorting" xsi:type="string">desc</item>
-                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="label" xsi:type="string" translate="true">Created At</item>
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/braintree.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/braintree.js
index cb0b46a25327e10a54a771c887f60dd3b4817cc3..3cec7f1fb8ccc83ad21c7605918ffaca50d78387 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/braintree.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/braintree.js
@@ -7,26 +7,19 @@
 define(
     [
         'uiComponent',
-        'uiRegistry',
-        'Magento_Braintree/js/view/payment/adapter',
         'Magento_Checkout/js/model/payment/renderer-list'
     ],
     function (
         Component,
-        Registry,
-        Braintree,
         rendererList
     ) {
         'use strict';
 
         var config = window.checkoutConfig.payment,
             braintreeType = 'braintree',
-            payPalType = 'braintree_paypal',
-            path = 'checkout.steps.billing-step.payment.payments-list.',
-            components = [];
+            payPalType = 'braintree_paypal';
 
         if (config[braintreeType].isActive) {
-            components.push(path + braintreeType);
             rendererList.push(
                 {
                     type: braintreeType,
@@ -44,13 +37,6 @@ define(
             );
         }
 
-        // setup Braintree SDK with merged configuration from all related components
-        if (components.length) {
-            Registry.get(components, function () {
-                Braintree.setup();
-            });
-        }
-
         /** Add view logic here if needed */
         return Component.extend({});
     }
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
index 6990c1e2e5a0bb78c52e0075f94995bb0da390ae..af71eb29a158d9c1573eb4dca60026f567afe796 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
@@ -61,11 +61,22 @@ define(
                         this.beforePlaceOrder(response);
                     },
 
+                    /**
+                     * Device data initialization
+                     *
+                     * @param {Object} checkout
+                     */
+                    onReady: function (checkout) {
+                        braintree.checkout = checkout;
+                    },
+
                     /**
                      * Triggers on any Braintree error
+                     * @param {Object} response
                      */
-                    onError: function () {
-                        this.paymentMethodNonce = null;
+                    onError: function (response) {
+                        braintree.showError($t('Payment ' + this.getTitle() + ' can\'t be initialized'));
+                        throw response.message;
                     },
 
                     /**
@@ -90,7 +101,7 @@ define(
                 this._super()
                     .observe(['active']);
                 this.validatorManager.initialize();
-                this.initBraintree();
+                this.initClientConfig();
 
                 return this;
             },
@@ -122,11 +133,11 @@ define(
              * @param {Boolean} isActive
              */
             onActiveChange: function (isActive) {
-                if (!isActive || this.isSingleUse()) {
+                if (!isActive) {
                     return;
                 }
 
-                this.reInitBraintree();
+                this.initBraintree();
             },
 
             /**
@@ -146,17 +157,9 @@ define(
             },
 
             /**
-             * Create Braintree configuration
+             * Init Braintree configuration
              */
             initBraintree: function () {
-                this.initClientConfig();
-                braintree.config = _.extend(braintree.config, this.clientConfig);
-            },
-
-            /**
-             * Re-init Braintree configuration
-             */
-            reInitBraintree: function () {
                 var intervalId = setInterval(function () {
                     // stop loader when frame will be loaded
                     if ($('#braintree-hosted-field-number').length) {
@@ -165,6 +168,12 @@ define(
                     }
                 }, 500);
 
+                if (braintree.checkout) {
+                    braintree.checkout.teardown(function () {
+                        braintree.checkout = null;
+                    });
+                }
+
                 fullScreenLoader.startLoader();
                 braintree.setConfig(this.clientConfig);
                 braintree.setup();
@@ -309,14 +318,6 @@ define(
                 });
 
                 return false;
-            },
-
-            /**
-             * Check if Braintree configured without PayPal
-             * @returns {Boolean}
-             */
-            isSingleUse: function () {
-                return window.checkoutConfig.payment[this.getCode()].isSingleUse;
             }
         });
     }
diff --git a/app/code/Magento/Payment/Model/MethodList.php b/app/code/Magento/Payment/Model/MethodList.php
index df0ddb9ed4b0c5490db8813f028998f2d69e6a4f..d547fe42f332ca4c49f0ff51ac16c0b59e538556 100644
--- a/app/code/Magento/Payment/Model/MethodList.php
+++ b/app/code/Magento/Payment/Model/MethodList.php
@@ -61,6 +61,7 @@ class MethodList
     {
         return $this->methodSpecificationFactory->create(
             [
+                AbstractMethod::CHECK_USE_CHECKOUT,
                 AbstractMethod::CHECK_USE_FOR_COUNTRY,
                 AbstractMethod::CHECK_USE_FOR_CURRENCY,
                 AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
diff --git a/app/code/Magento/Payment/Test/Unit/Model/MethodListTest.php b/app/code/Magento/Payment/Test/Unit/Model/MethodListTest.php
index b1e5bedb5a250e4daf48d8107eb421c305397d69..241f3fc4fcf532ff283d0a2afcdee833beb6e211 100644
--- a/app/code/Magento/Payment/Test/Unit/Model/MethodListTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Model/MethodListTest.php
@@ -8,8 +8,8 @@
 
 namespace Magento\Payment\Test\Unit\Model;
 
-use Magento\Payment\Model\Method\Free;
-use \Magento\Payment\Model\MethodList;
+use Magento\Payment\Model\MethodList;
+use Magento\Payment\Model\Method\AbstractMethod;
 
 class MethodListTest extends \PHPUnit_Framework_TestCase
 {
@@ -68,6 +68,12 @@ class MethodListTest extends \PHPUnit_Framework_TestCase
 
         $this->specificationFactoryMock->expects($this->atLeastOnce())
             ->method('create')
+            ->with([
+                AbstractMethod::CHECK_USE_CHECKOUT,
+                AbstractMethod::CHECK_USE_FOR_COUNTRY,
+                AbstractMethod::CHECK_USE_FOR_CURRENCY,
+                AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX
+            ])
             ->will($this->returnValue($compositeMock));
 
         $storeMethods = [$methodMock];
diff --git a/app/code/Magento/Paypal/Setup/InstallSchema.php b/app/code/Magento/Paypal/Setup/InstallSchema.php
index d55782be8627915e7458874c5e6cc9fddd60224c..d0a07242ad75e03b334d7d23f289e7e9847546bd 100644
--- a/app/code/Magento/Paypal/Setup/InstallSchema.php
+++ b/app/code/Magento/Paypal/Setup/InstallSchema.php
@@ -165,7 +165,7 @@ class InstallSchema implements InstallSchemaInterface
             'Report Id'
         )->addColumn(
             'report_date',
-            \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
+            \Magento\Framework\DB\Ddl\Table::TYPE_DATE,
             null,
             [],
             'Report Date'
diff --git a/app/code/Magento/Paypal/etc/adminhtml/rules/payment_ca.xml b/app/code/Magento/Paypal/etc/adminhtml/rules/payment_ca.xml
index fb2b7456fb7c591431fd89af3b8973110d4c8eca..fc0ca6ebb6e9da5170061678910a1ac620d7fc03 100644
--- a/app/code/Magento/Paypal/etc/adminhtml/rules/payment_ca.xml
+++ b/app/code/Magento/Paypal/etc/adminhtml/rules/payment_ca.xml
@@ -143,9 +143,13 @@
             <rule type="paypalExpressDisable" event="activate-rule"/>
             <rule type="paypalExpressLockConfiguration" event="activate-rule"/>
             <rule type="paypalExpressMarkDisable" event="deactivate-rule">
+                <argument name="wpp_ca">wpp_ca</argument>
+                <argument name="paypal_payflowpro_ca">paypal_payflowpro_ca</argument>
                 <argument name="payflow_link_ca">payflow_link_ca</argument>
             </rule>
             <rule type="paypalExpressUnlockConfiguration" event="deactivate-rule">
+                <argument name="wpp_ca">wpp_ca</argument>
+                <argument name="paypal_payflowpro_ca">paypal_payflowpro_ca</argument>
                 <argument name="payflow_link_ca">payflow_link_ca</argument>
             </rule>
         </relation>
diff --git a/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml b/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml
index dfbb68283daa971c0db56b80252816bdc3b919c3..554b459d3c45a0db6cfe4c11bba36528ae4361d5 100644
--- a/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml
+++ b/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml
@@ -351,6 +351,7 @@
             <rule type="payflowExpressEnable" event="activate-rule"/>
             <rule type="payflowBmlEnable" event="activate-rule"/>
             <rule type="payflowShowSortOrder" event="activate-rule"/>
+            <rule type="payflowShowSortOrder" event="activate-express"/>
             <rule type="simpleDisable" event="deactivate-rule"/>
             <rule type="payflowExpressEnableConditional" event="deactivate-rule">
                 <argument name="payflow_advanced">payflow_advanced</argument>
@@ -363,6 +364,7 @@
                 <argument name="paypal_payflowpro_with_express_checkout">paypal_payflowpro_with_express_checkout</argument>
             </rule>
             <rule type="payflowHideSortOrder" event="deactivate-rule"/>
+            <rule type="payflowHideSortOrder" event="deactivate-express"/>
             <rule type="payflowBmlDisableConditionalExpress" event="deactivate-express"/>
             <rule type="payflowBmlDisableConditionalExpress" event=":load"/>
             <rule type="payflowBmlEnable" event="activate-express"/>
diff --git a/app/code/Magento/Shipping/view/adminhtml/web/order/packaging.js b/app/code/Magento/Shipping/view/adminhtml/web/order/packaging.js
index 2ad2ff596a7077f92c91623fef98d374449480b1..b3a7ea2e2495657efcf2de1fcfc5a00eb8939f7b 100644
--- a/app/code/Magento/Shipping/view/adminhtml/web/order/packaging.js
+++ b/app/code/Magento/Shipping/view/adminhtml/web/order/packaging.js
@@ -353,7 +353,7 @@ Packaging.prototype = {
                     var response = transport.responseText;
                     if (response) {
                         packagePrapareGrid.update(response);
-                        this._processPackagePrapare(packagePrapareGrid);
+                        this.processPackagePrepare(packagePrapareGrid);
                         if (packagePrapareGrid.select('.grid tbody tr').length) {
                             packageBlock.select('[data-action=package-add-items]')[0].hide();
                             packageBlock.select('[data-action=package-save-items]')[0].show();
@@ -692,22 +692,27 @@ Packaging.prototype = {
         }
     },
 
-    _processPackagePrapare: function(packagePrapare) {
-        var itemsAll = [];
-        packagePrapare.select('.grid tbody tr').each(function(item) {
-            var qty  = item.select('[name="qty"]')[0];
-            var itemId = item.select('[type="checkbox"]')[0].value;
-            var qtyValue = 0;
+    processPackagePrepare: function(packagePrepare) {
+        var itemsAll = [],
+            qty,
+            itemId,
+            qtyValue = 0,
+            value = 1;
+
+        packagePrepare.select('.grid tbody tr').each(function(item) {
+            qty = item.select('[name="qty"]')[0],
+                itemId = item.select('[type="checkbox"]')[0].value,
+                qtyValue = parseFloat(qty.value);
+
             if (Object.isFunction(this.itemQtyCallback)) {
-                var value = this.itemQtyCallback(itemId);
-                qtyValue = ((typeof value == 'string') && (value.length == 0)) ? 0 : parseFloat(value);
-                if (isNaN(qtyValue) || qtyValue < 0) {
-                    qtyValue = 1;
+                value = this.itemQtyCallback(itemId);
+                if (typeof value !== 'undefined') {
+                    qtyValue = parseFloat(value);
+                    qtyValue = this.validateItemQty(itemId, qtyValue);
+                    qty.value = qtyValue;
                 }
-                qtyValue = this.validateItemQty(itemId, qtyValue);
-                qty.value = qtyValue;
             } else {
-                var value = item.select('[name="qty"]')[0].value;
+                value = item.select('[name="qty"]')[0].value;
                 qtyValue = ((typeof value == 'string') && (value.length == 0)) ? 0 : parseFloat(value);
                 if (isNaN(qtyValue) || qtyValue < 0) {
                     qtyValue = 1;
@@ -737,10 +742,10 @@ Packaging.prototype = {
             this.itemsAll = itemsAll;
         }
 
-        packagePrapare.select('tbody input[type="checkbox"]').each(function(item){
+        packagePrepare.select('tbody input[type="checkbox"]').each(function(item){
             $(item).observe('change', this._observeQty);
             this._observeQty.call(item);
-        }.bind(this))
+        }.bind(this));
     },
 
     _observeQty: function() {
diff --git a/app/code/Magento/Ui/Component/Filters/Type/Date.php b/app/code/Magento/Ui/Component/Filters/Type/Date.php
index f670f826e4e20965c1312db80d14f4e9c52e7e09..f5d392ea5136565797ae7306b870c07399043d68 100644
--- a/app/code/Magento/Ui/Component/Filters/Type/Date.php
+++ b/app/code/Magento/Ui/Component/Filters/Type/Date.php
@@ -23,6 +23,13 @@ class Date extends AbstractFilter
      */
     protected $wrappedComponent;
 
+    /**
+     * Date format
+     *
+     * @var string
+     */
+    protected static $dateFormat = 'Y-m-d H:i:s';
+
     /**
      * Prepare component configuration
      *
@@ -96,7 +103,7 @@ class Date extends AbstractFilter
         if (!empty($value)) {
             $filter = $this->filterBuilder->setConditionType($type)
                 ->setField($this->getName())
-                ->setValue($value->format('Y-m-d H:i:s'))
+                ->setValue($value->format(static::$dateFormat))
                 ->create();
 
             $this->getContext()->getDataProvider()->addFilter($filter);
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
index 7000d9e091139a08199a6d23059f4bcd3220ff21..af53b71f18414f8c0f16f27e32b13ba354d29567 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
@@ -5,9 +5,11 @@
  */
 namespace Magento\Ui\Test\Unit\Component\Filters\Type;
 
-use Magento\Framework\View\Element\UiComponent\ContextInterface as UiContext;
+use Magento\Framework\Api\Filter;
+use Magento\Framework\Api\FilterBuilder;
 use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
 use Magento\Framework\View\Element\UiComponentFactory;
+use Magento\Ui\Component\Filters\FilterModifier;
 use Magento\Ui\Component\Filters\Type\Date;
 use Magento\Framework\View\Element\UiComponent\ContextInterface;
 use Magento\Ui\Component\Form\Element\DataType\Date as FormDate;
@@ -20,61 +22,55 @@ class DateTest extends \PHPUnit_Framework_TestCase
     /**
      * @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $contextMock;
+    private $contextMock;
 
     /**
      * @var UiComponentFactory|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $uiComponentFactory;
+    private $uiComponentFactory;
 
     /**
-     * @var \Magento\Framework\Api\FilterBuilder|\PHPUnit_Framework_MockObject_MockObject
+     * @var FilterBuilder|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $filterBuilderMock;
+    private $filterBuilderMock;
 
     /**
-     * @var \Magento\Ui\Component\Filters\FilterModifier|\PHPUnit_Framework_MockObject_MockObject
+     * @var FilterModifier|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $filterModifierMock;
+    private $filterModifierMock;
+
+
+    /**
+     * @var DataProviderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $dataProviderMock;
 
     /**
      * Set up
      */
     protected function setUp()
     {
-        $this->contextMock = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
-        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+        $this->contextMock = $this->getMockForAbstractClass(ContextInterface::class);
+        $processor = $this->getMockBuilder(\Magento\Framework\View\Element\UiComponent\Processor::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects(static::any())
+            ->method('getProcessor')
+            ->willReturn($processor);
+        $this->uiComponentFactory = $this->getMockBuilder(UiComponentFactory::class)
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->filterBuilderMock = $this->getMockBuilder(FilterBuilder::class)
             ->disableOriginalConstructor()
             ->getMock();
-        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
-        $this->uiComponentFactory = $this->getMock(
-            'Magento\Framework\View\Element\UiComponentFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->filterBuilderMock = $this->getMock(
-            'Magento\Framework\Api\FilterBuilder',
-            [],
-            [],
-            '',
-            false
-        );
-
-        $this->filterModifierMock = $this->getMock(
-            'Magento\Ui\Component\Filters\FilterModifier',
-            ['applyFilterModifier'],
-            [],
-            '',
-            false
-        );
 
+        $this->filterModifierMock = $this->getMockBuilder(FilterModifier::class)
+            ->setMethods(['applyFilterModifier'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        
+        $this->dataProviderMock = $this->getMockForAbstractClass(DataProviderInterface::class);
     }
 
     /**
@@ -92,7 +88,7 @@ class DateTest extends \PHPUnit_Framework_TestCase
             []
         );
 
-        $this->assertTrue($date->getComponentName() === Date::NAME);
+        static::assertTrue($date->getComponentName() === Date::NAME);
     }
 
     /**
@@ -107,13 +103,9 @@ class DateTest extends \PHPUnit_Framework_TestCase
     public function testPrepare($name, $filterData, $expectedCondition)
     {
         /** @var FormDate $uiComponent */
-        $uiComponent = $this->getMock(
-            'Magento\Ui\Component\Form\Element\DataType\Date',
-            [],
-            [],
-            '',
-            false
-        );
+        $uiComponent = $this->getMockBuilder(FormDate::class)
+            ->disableOriginalConstructor()
+            ->getMock();
 
         $uiComponent->expects($this->any())
             ->method('getContext')
@@ -125,30 +117,62 @@ class DateTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->any())
             ->method('addComponentDefinition')
             ->with(Date::NAME, ['extends' => Date::NAME]);
+
         $this->contextMock->expects($this->any())
-            ->method('getRequestParam')
-            ->with(UiContext::FILTER_VAR)
+            ->method('getFiltersParams')
             ->willReturn($filterData);
-        $dataProvider = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface',
-            [],
-            '',
-            false
-        );
+        
         $this->contextMock->expects($this->any())
             ->method('getDataProvider')
-            ->willReturn($dataProvider);
+            ->willReturn($this->dataProviderMock);
+
         if ($expectedCondition !== null) {
-            $dataProvider->expects($this->any())
-                ->method('addFilter')
-                ->with($expectedCondition, $name);
-
-            $uiComponent->expects($this->any())
-                ->method('getLocale')
-                ->willReturn($expectedCondition['locale']);
-            $uiComponent->expects($this->any())
-                ->method('convertDate')
-                ->willReturnArgument(0);
+            if (is_string($filterData[$name])) {
+                $uiComponent->expects(static::once())
+                    ->method('convertDate')
+                    ->with($filterData[$name])
+                    ->willReturn(new \DateTime($filterData[$name]));
+            } else {
+                $uiComponent->method('convertDate')
+                    ->willReturnMap([
+                        [$filterData[$name]['from'], 0, 0, 0, new \DateTime($filterData[$name]['from'])],
+                        [$filterData[$name]['to'], 23, 59, 59, new \DateTime($filterData[$name]['to'] . ' 23:59:59')],
+                    ]);
+            }
+
+            $i=0;
+            switch (true) {
+                case is_string($filterData[$name]):
+                case isset($filterData[$name]['from']) && !isset($filterData[$name]['to']):
+                case !isset($filterData[$name]['from']) && isset($filterData[$name]['to']):
+                    $filterMock = $this->getFilterMock(
+                        $name,
+                        $expectedCondition['type'],
+                        $expectedCondition['date'],
+                        $i
+                    );
+                    $this->dataProviderMock->expects(static::once())
+                        ->method('addFilter')
+                        ->with($filterMock);
+                    break;
+                case isset($filterData[$name]['from']) && isset($filterData[$name]['to']):
+                    $this->getFilterMock(
+                        $name,
+                        $expectedCondition['type_from'],
+                        $expectedCondition['date_from'],
+                        $i
+                    );
+                    $filterMock = $this->getFilterMock(
+                        $name,
+                        $expectedCondition['type_to'],
+                        $expectedCondition['date_to'],
+                        $i
+                    );
+                    $this->dataProviderMock->expects(static::exactly(2))
+                        ->method('addFilter')
+                        ->with($filterMock);
+                    break;
+            }
         }
 
         $this->uiComponentFactory->expects($this->any())
@@ -167,6 +191,39 @@ class DateTest extends \PHPUnit_Framework_TestCase
         $date->prepare();
     }
 
+    /**
+     * Gets Filter mock
+     * 
+     * @param string $name
+     * @param string $expectedType
+     * @param string $expectedDate
+     * @param int $i
+     * 
+     * @return Filter|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getFilterMock($name, $expectedType, $expectedDate, &$i)
+    {
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('setConditionType')
+            ->with($expectedType)
+            ->willReturnSelf();
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('setField')
+            ->with($name)
+            ->willReturnSelf();
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('setValue')
+            ->with($expectedDate)
+            ->willReturnSelf();
+        
+        $filterMock = $this->getMock(Filter::class);
+        $this->filterBuilderMock->expects(static::at($i++))
+            ->method('create')
+            ->willReturn($filterMock);
+
+        return $filterMock;
+    }
+
     /**
      * @return array
      */
@@ -175,26 +232,27 @@ class DateTest extends \PHPUnit_Framework_TestCase
         return [
             [
                 'test_date',
-                ['test_date' => ['from' => '11-05-2015', 'to' => '']],
-                ['from' => '11-05-2015', 'orig_from' => '11-05-2015', 'datetime' => true, 'locale' => 'en_US'],
+                ['test_date' => ['from' => '11-05-2015', 'to' => null]],
+                ['date' => '2015-05-11 00:00:00', 'type' => 'gteq'],
             ],
             [
                 'test_date',
-                ['test_date' => ['from' => '', 'to' => '11-05-2015']],
-                ['to' => '11-05-2015', 'orig_to' => '11-05-2015', 'datetime' => true, 'locale' => 'en_US'],
+                ['test_date' => ['from' => null, 'to' => '11-05-2015']],
+                ['date' => '2015-05-11 23:59:59', 'type' => 'lteq'],
             ],
             [
                 'test_date',
-                ['test_date' => ['from' => '10-05-2015', 'to' => '11-05-2015']],
+                ['test_date' => ['from' => '11-05-2015', 'to' => '11-05-2015']],
                 [
-                    'from' => '10-05-2015',
-                    'orig_from' => '10-05-2015',
-                    'to' => '11-05-2015',
-                    'orig_to' => '11-05-2015',
-                    'datetime' => true,
-                    'locale' => 'en_US'
+                    'date_from' => '2015-05-11 00:00:00', 'type_from' => 'gteq',
+                    'date_to' => '2015-05-11 23:59:59', 'type_to' => 'lteq'
                 ],
             ],
+            [
+                'test_date',
+                ['test_date' => '11-05-2015'],
+                ['date' => '2015-05-11 00:00:00', 'type' => 'eq'],
+            ],
             [
                 'test_date',
                 ['test_date' => ['from' => '', 'to' => '']],
diff --git a/app/code/Magento/Vault/Model/Method/Vault.php b/app/code/Magento/Vault/Model/Method/Vault.php
index 3457bc6a0a61f52adf2c86f68752e9df653ab2f0..aa0bead2327eabfb0414fcdcd21d46121553d9ff 100644
--- a/app/code/Magento/Vault/Model/Method/Vault.php
+++ b/app/code/Magento/Vault/Model/Method/Vault.php
@@ -576,7 +576,8 @@ final class Vault implements VaultPaymentInterface
      */
     public function isAvailable(\Magento\Quote\Api\Data\CartInterface $quote = null)
     {
-        return $this->getVaultProvider()->isAvailable($quote);
+        return $this->getVaultProvider()->isAvailable($quote)
+            && $this->config->getValue(self::$activeKey, $this->getStore() ?: $quote->getStoreId());
     }
 
     /**
diff --git a/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php b/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php
index 2dcece98e770a4958f15eac057acf24df3a96531..32e783278e1301f3bf45a085edb7b81d72801cd7 100644
--- a/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php
+++ b/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php
@@ -8,8 +8,10 @@ namespace Magento\Vault\Test\Unit\Model\Method;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Payment\Gateway\Command\CommandManagerInterface;
 use Magento\Payment\Gateway\Command\CommandManagerPoolInterface;
+use Magento\Payment\Gateway\ConfigInterface;
 use Magento\Payment\Model\InfoInterface;
 use Magento\Payment\Model\MethodInterface;
+use Magento\Quote\Api\Data\CartInterface;
 use Magento\Sales\Api\Data\OrderPaymentExtensionInterface;
 use Magento\Sales\Api\Data\TransactionInterface;
 use Magento\Sales\Model\Order\Payment;
@@ -18,6 +20,10 @@ use Magento\Vault\Api\PaymentTokenManagementInterface;
 use Magento\Vault\Model\Method\Vault;
 use Magento\Vault\Model\VaultPaymentInterface;
 
+/**
+ * Class VaultTest
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class VaultTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -209,4 +215,52 @@ class VaultTest extends \PHPUnit_Framework_TestCase
         $model = $this->objectManager->getObject(Vault::class);
         $model->capture($paymentModel, 0);
     }
+
+    /**
+     * @covers \Magento\Vault\Model\Method\Vault::isAvailable
+     * @dataProvider isAvailableDataProvider
+     */
+    public function testIsAvailable($isAvailableProvider, $isActive, $expected)
+    {
+        $storeId = 1;
+        $quote = $this->getMockForAbstractClass(CartInterface::class);
+        $vaultProvider = $this->getMockForAbstractClass(MethodInterface::class);
+        $config = $this->getMockForAbstractClass(ConfigInterface::class);
+
+        $vaultProvider->expects(static::once())
+            ->method('isAvailable')
+            ->with($quote)
+            ->willReturn($isAvailableProvider);
+
+        $config->expects(static::any())
+            ->method('getValue')
+            ->with('active', $storeId)
+            ->willReturn($isActive);
+
+        $quote->expects(static::any())
+            ->method('getStoreId')
+            ->willReturn($storeId);
+
+        /** @var Vault $model */
+        $model = $this->objectManager->getObject(Vault::class, [
+            'config' => $config,
+            'vaultProvider' => $vaultProvider
+        ]);
+        $actual = $model->isAvailable($quote);
+        static::assertEquals($expected, $actual);
+    }
+
+    /**
+     * List of variations for testing isAvailable method
+     * @return array
+     */
+    public function isAvailableDataProvider()
+    {
+        return [
+            ['isAvailableProvider' => true, 'isActiveVault' => false, 'expected' => false],
+            ['isAvailableProvider' => false, 'isActiveVault' => false, 'expected' => false],
+            ['isAvailableProvider' => false, 'isActiveVault' => true, 'expected' => false],
+            ['isAvailableProvider' => true, 'isActiveVault' => true, 'expected' => true],
+        ];
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml
index 2ea4873f454a3cbdada0b94c96b90f6c5271b91c..c8cbd35427d288174ce64f0ea5df6474219444c4 100644
--- a/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Authorizenet/Test/TestCase/OnePageCheckoutTest.xml
@@ -26,8 +26,7 @@
                 <item name="isClosed" xsi:type="string">No</item>
                 <item name="transactionType" xsi:type="string">Authorization</item>
             </data>
-            <data name="tag" xsi:type="string">test_type:3rd_party_test_deprecated</data>
-            <constraint name="Magento\Sales\Test\Constraint\AssertTransactionDetails" />
+            <data name="tag" xsi:type="string">test_type:3rd_party_test</data>
             <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" />
             <constraint name="Magento\Checkout\Test\Constraint\AssertMinicartEmpty" />
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal" />
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/History.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/History.php
index b3b0f4eafa74cc44467414cb127b08d099b7d7dd..2235122955a723ccc0cafcafc51d24934405e896 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/History.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/History.php
@@ -21,6 +21,13 @@ class History extends Block
      */
     protected $commentHistory = '.note-list-comment';
 
+    /**
+     * Authorized Amount.
+     *
+     * @var string
+     */
+    protected $authorizedAmount = '//div[@class="note-list-comment"][contains(text(), "Authorized amount of")]';
+
     /**
      * Captured Amount from IPN.
      *
@@ -53,6 +60,17 @@ class History extends Block
         return $this->_rootElement->find($this->commentHistory, Locator::SELECTOR_CSS)->getText();
     }
 
+    /**
+     * Get the authorized amount from the comments history.
+     *
+     * @return string
+     */
+    public function getAuthorizedAmount()
+    {
+        $this->waitCommentsHistory();
+        return $this->_rootElement->find($this->authorizedAmount, Locator::SELECTOR_XPATH)->getText();
+    }
+
     /**
      * Get the captured amount from the comments history.
      *
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertAuthorizationInCommentsHistory.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertAuthorizationInCommentsHistory.php
index 7495855d5351fac31be919a13d3bb604c486d8bb..a6b8e8983d2b617953b93490dc4c3a3e1079cec2 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertAuthorizationInCommentsHistory.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertAuthorizationInCommentsHistory.php
@@ -38,7 +38,7 @@ class AssertAuthorizationInCommentsHistory extends AbstractConstraint
         $salesOrder->open();
         $salesOrder->getSalesOrderGrid()->searchAndOpen(['id' => $orderId]);
 
-        $actualAuthorizedAmount = $salesOrderView->getOrderHistoryBlock()->getCommentsHistory();
+        $actualAuthorizedAmount = $salesOrderView->getOrderHistoryBlock()->getAuthorizedAmount();
 
         \PHPUnit_Framework_Assert::assertContains(
             self::AUTHORIZED_AMOUNT . $prices['grandTotal'],
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertTransactionDetails.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertTransactionDetails.php
deleted file mode 100644
index f793d57df1108988f5a629fd90f5a20bea6935fa..0000000000000000000000000000000000000000
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertTransactionDetails.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Sales\Test\Constraint;
-
-use Magento\Sales\Test\Block\Adminhtml\Order\View\Tab\Transactions\Grid;
-use Magento\Sales\Test\Fixture\OrderInjectable;
-use Magento\Sales\Test\Page\Adminhtml\OrderIndex;
-use Magento\Sales\Test\Page\Adminhtml\SalesOrderView;
-use Magento\Mtf\Constraint\AbstractConstraint;
-
-/**
- * Assert that transaction is present in the Transactions tab of the order with corresponding status
- */
-class AssertTransactionDetails extends AbstractConstraint
-{
-    /**
-     * Message about authorized amount in order.
-     */
-    const AUTHORIZED_AMOUNT = 'Authorized amount of $';
-
-    /**
-     * Assert that comment about authorized amount exist in Comments History section on order page in Admin.
-     *
-     * @param SalesOrderView $salesOrderView
-     * @param OrderIndex $salesOrder
-     * @param string $orderId
-     * @param array $transactionDetails
-     * @throws \Exception
-     */
-    public function processAssert(
-        SalesOrderView $salesOrderView,
-        OrderIndex $salesOrder,
-        $orderId,
-        array $transactionDetails
-    ) {
-        $transactionId = '';
-        $salesOrder->open();
-        $salesOrder->getSalesOrderGrid()->searchAndOpen(['id' => $orderId]);
-        $comment = $salesOrderView->getOrderHistoryBlock()->getCommentsHistory();
-        preg_match('/(ID: ")(\w+-*\w+)(")/', $comment, $matches);
-        if (!empty($matches[2])) {
-            $transactionId = $matches[2];
-        }
-        \PHPUnit_Framework_Assert::assertNotEmpty($transactionId);
-        $orderForm = $salesOrderView->getOrderForm()->openTab('transactions');
-        /** @var Grid $grid */
-        $grid = $orderForm->getTab('transactions')->getGridBlock();
-        $actualTxnIds = $grid->getIds();
-        \PHPUnit_Framework_Assert::assertEquals(
-            $transactionDetails,
-            $actualTxnIds[$transactionId],
-            'Incorrect transaction details for the order #' . $orderId
-        );
-    }
-
-    /**
-     * Returns string representation of successful assertion.
-     *
-     * @return string
-     */
-    public function toString()
-    {
-        return "Message about transaction details are present in Transactions tab.";
-    }
-}
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml
index 9a8f26a0505ba37a65bed0d0728b9594d6f29185..ea687be19d3c34b0eeb5093690e54243731543ff 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml
@@ -36,9 +36,4 @@
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Test\Constraint\AssertTransactionDetails">
-        <arguments>
-            <argument name="severity" xsi:type="string">high</argument>
-        </arguments>
-    </type>
 </config>
diff --git a/dev/tests/functional/testsuites/Magento/Mtf/TestSuite/InjectableTests/acceptance_unstable.xml b/dev/tests/functional/testsuites/Magento/Mtf/TestSuite/InjectableTests/acceptance_unstable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ac37fc159b40d5e8574117b3e347bd730cbec983
--- /dev/null
+++ b/dev/tests/functional/testsuites/Magento/Mtf/TestSuite/InjectableTests/acceptance_unstable.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * 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/Magento/Mtf/TestRunner/etc/testRunner.xsd">
+    <rule scope="testcase">
+        <allow>
+            <tag group="test_type" value="acceptance_test" />
+        </allow>
+    </rule>
+    <rule scope="variation">
+        <allow>
+            <tag group="test_type" value="acceptance_test" />
+            <tag group="stable" value="no" />
+        </allow>
+    </rule>
+</config>