diff --git a/app/code/Magento/Catalog/Block/Product/View/Options.php b/app/code/Magento/Catalog/Block/Product/View/Options.php
index 5e4efdb8e56cbcb45dbaa32a20e54367021c05fe..befca9212fccc264c9a5af55996f474b4d60cf41 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Options.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Options.php
@@ -162,7 +162,7 @@ class Options extends \Magento\Framework\View\Element\Template
         $data = [
             'prices' => [
                 'oldPrice' => [
-                    'amount' => $this->pricingHelper->currency($option->getPrice(false), false, false),
+                    'amount' => $optionPrice,
                     'adjustments' => [],
                 ],
                 'basePrice' => [
diff --git a/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php b/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php
index 61a94b5a84887f13d8d32767fa0b57a8e82abd3d..35af16ecba53dc6f82b323786fe2f7ecf3a3e14a 100644
--- a/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php
+++ b/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php
@@ -61,7 +61,7 @@ class CheckoutTotalsJsLayoutDataProvider implements JsLayoutDataProviderInterfac
     protected function getTotalsConfig()
     {
         return [
-            'display_subtotal_incl_tax' => (int)$this->taxConfig->displayCartSubtotalInclTax(),
+            'display_cart_subtotal_incl_tax' => (int)$this->taxConfig->displayCartSubtotalInclTax(),
             'display_cart_subtotal_excl_tax' => (int)$this->taxConfig->displayCartSubtotalExclTax(),
         ];
     }
diff --git a/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php b/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
index 05bd7fd103dbf27124974334778fe7cc9b429b8b..488cba181ade7669f1267b9c3566ac4348e7570e 100644
--- a/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
+++ b/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
@@ -28,7 +28,7 @@ abstract class AbstractAggregateCalculator extends AbstractCalculator
         $priceInclTax = $this->calculationTool->round($item->getUnitPrice());
         $rowTotalInclTax = $priceInclTax * $quantity;
         if (!$this->isSameRateAsStore($rate, $storeRate)) {
-            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate);
+            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate, $round);
             $rowTotalInclTax = $priceInclTax * $quantity;
         }
         $rowTaxExact = $this->calculationTool->calcTaxAmount($rowTotalInclTax, $rate, true, false);
diff --git a/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php b/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php
index d8ab3e259b27960515c7e1f19196132023215349..8f37546c839b79f2c38bf118c636b2ca5a4d32e9 100644
--- a/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php
+++ b/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php
@@ -433,14 +433,18 @@ abstract class AbstractCalculator
      * @param float $storePriceInclTax
      * @param float $storeRate
      * @param float $customerRate
+     * @param boolean $round
      * @return float
      */
-    protected function calculatePriceInclTax($storePriceInclTax, $storeRate, $customerRate)
+    protected function calculatePriceInclTax($storePriceInclTax, $storeRate, $customerRate, $round = true)
     {
         $storeTax = $this->calculationTool->calcTaxAmount($storePriceInclTax, $storeRate, true, false);
         $priceExclTax = $storePriceInclTax - $storeTax;
         $customerTax = $this->calculationTool->calcTaxAmount($priceExclTax, $customerRate, false, false);
-        $customerPriceInclTax = $this->calculationTool->round($priceExclTax + $customerTax);
+        $customerPriceInclTax = $priceExclTax + $customerTax;
+        if ($round) {
+            $customerPriceInclTax = $this->calculationTool->round($customerPriceInclTax);
+        }
         return $customerPriceInclTax;
     }
 }
diff --git a/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php b/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php
index 37c22cf5e147c4d4c7a01420650dd39a71d3e7da..fa8fa61379295bf6304781cad377f1123471b39e 100644
--- a/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php
+++ b/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php
@@ -45,7 +45,7 @@ class UnitBaseCalculator extends AbstractCalculator
         $applyTaxAfterDiscount = $this->config->applyTaxAfterDiscount($this->storeId);
         $priceInclTax = $this->calculationTool->round($item->getUnitPrice());
         if (!$this->isSameRateAsStore($rate, $storeRate)) {
-            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate);
+            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate, $round);
         }
         $uniTax = $this->calculationTool->calcTaxAmount($priceInclTax, $rate, true, false);
         $deltaRoundingType = self::KEY_REGULAR_DELTA_ROUNDING;
diff --git a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
index c1cd2b9927c2fb1ba0db506fba2bf61a96344c05..34562754e0893aa11164945fc8e837db67c19d1b 100644
--- a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
+++ b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
@@ -88,6 +88,7 @@ class Tax extends CommonTaxCollector
      * @param ShippingAssignmentInterface $shippingAssignment
      * @param Address\Total $total
      * @return $this
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function collect(
         \Magento\Quote\Model\Quote $quote,
@@ -291,6 +292,7 @@ class Tax extends CommonTaxCollector
      * @param Address\Total $total
      * @return array|null
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
     {
@@ -298,6 +300,10 @@ class Tax extends CommonTaxCollector
         $store = $quote->getStore();
         $applied = $total->getAppliedTaxes();
         $amount = $total->getTaxAmount();
+        if ($amount == null) {
+            $this->enhanceTotalData($quote, $total);
+            $amount = $total->getTaxAmount();
+        }
         $taxAmount = $amount + $total->getTotalAmount('discount_tax_compensation');
 
         $area = null;
@@ -340,6 +346,44 @@ class Tax extends CommonTaxCollector
         return $totals;
     }
 
+    /**
+     * Adds minimal tax information to the "total" data structure
+     *
+     * @param \Magento\Quote\Model\Quote $quote
+     * @param Address\Total $total
+     * @return null
+     */
+    protected function enhanceTotalData(
+        \Magento\Quote\Model\Quote $quote,
+        \Magento\Quote\Model\Quote\Address\Total $total
+    ) {
+        $taxAmount = 0;
+        $shippingTaxAmount = 0;
+        $discountTaxCompensation = 0;
+
+        $subtotalInclTax = $total->getSubtotalInclTax();
+        $computeSubtotalInclTax = true;
+        if ($total->getSubtotalInclTax() > 0) {
+            $computeSubtotalInclTax = false;
+        }
+
+        /** @var \Magento\Quote\Model\Quote\Address $address */
+        foreach ($quote->getAllAddresses() as $address) {
+            $taxAmount += $address->getTaxAmount();
+            $shippingTaxAmount += $address->getShippingTaxAmount();
+            $discountTaxCompensation += $address->getDiscountTaxCompensationAmount();
+            if ($computeSubtotalInclTax) {
+                $subtotalInclTax += $address->getSubtotalInclTax();
+            }
+        }
+
+        $total->setTaxAmount($taxAmount);
+        $total->setShippingTaxAmount($shippingTaxAmount);
+        $total->setDiscountTaxCompensationAmount($discountTaxCompensation); // accessed via 'discount_tax_compensation'
+        $total->setSubtotalInclTax($subtotalInclTax);
+        return;
+    }
+
     /**
      * Process model configuration array.
      * This method can be used for changing totals collect sort order
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
index c4c271aef036101adb3366f5ab3588f7f65b2ed6..da0d9154d19bc7dd4be291a96537fdcde10e983f 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
@@ -20,6 +20,9 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
     const RATE = 10;
     const STORE_RATE = 11;
 
+    const UNIT_PRICE_INCL_TAX = 495.49549549545;
+    const UNIT_PRICE_INCL_TAX_ROUNDED = 495.5;
+
     const CODE = 'CODE';
     const TYPE = 'TYPE';
 
@@ -71,7 +74,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
     {
         $this->initMockItem($isTaxIncluded);
         $this->initMockConfig();
-        $this->initMockCalculationTool();
+        $this->initMockCalculationTool($isTaxIncluded);
         $this->initMockAppliedTaxDataObjectFactory();
     }
 
@@ -93,7 +96,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
         $this->mockCalculationTool = $this->getMockBuilder('\Magento\Tax\Model\Calculation')
             ->disableOriginalConstructor()
             ->setMethods(
-                ['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates', 'calcTaxAmount']
+                ['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates']
             )
             ->getMock();
         $this->mockConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
@@ -129,11 +132,12 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
 
     /**
      * @param $calculator RowBaseCalculator|TotalBaseCalculator
+     * @param boolean $round
      * @return \Magento\Tax\Api\Data\TaxDetailsItemInterface
      */
-    public function calculate($calculator)
+    public function calculate($calculator, $round = true)
     {
-        return $calculator->calculate($this->mockItem, 1);
+        return $calculator->calculate($this->mockItem, 1, $round);
     }
 
     /**
@@ -147,7 +151,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
             $this->mockItem,
             [
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getDiscountAmount',
                     self::MOCK_VALUE => 1,
                 ],
@@ -157,17 +161,17 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
                     self::MOCK_VALUE => self::CODE
                 ],
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getType',
                     self::MOCK_VALUE => self::TYPE
                 ],
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getUnitPrice',
                     self::MOCK_VALUE => self::UNIT_PRICE
                 ],
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getIsTaxIncluded',
                     self::MOCK_VALUE => $isTaxIncluded
                 ]
@@ -185,7 +189,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
             $this->mockConfig,
             [
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'applyTaxAfterDiscount',
                     self::MOCK_VALUE => true,
                 ]
@@ -196,47 +200,55 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
     /**
      * init mock calculation model
      *
+     * @param boolean $isTaxIncluded
      */
 
-    protected function initMockCalculationTool()
+    protected function initMockCalculationTool($isTaxIncluded)
     {
-        $this->mockReturnValues(
-            $this->mockCalculationTool,
+        $mockValues = [
             [
-                [
-                    self::ONCE => false,
-                    self::MOCK_METHOD_NAME => 'calcTaxAmount',
-                    self::MOCK_VALUE => 1.5,
-                ],
-                [
-                    self::ONCE => true,
-                    self::MOCK_METHOD_NAME => 'getRate',
-                    self::MOCK_VALUE => self::RATE
-                ],
-                [
-                    self::ONCE => true,
-                    self::MOCK_METHOD_NAME => 'getAppliedRates',
-                    self::MOCK_VALUE => [
-                        [
-                            'id' => 0,
-                            'percent' => 1.4,
-                            'rates' => [
-                                [
-                                    'code' => 'sku_1',
-                                    'title' => 'title1',
-                                    'percent' => 1.1,
-                                ],
+                self::ONCE => false,
+                self::MOCK_METHOD_NAME => 'getRate',
+                self::MOCK_VALUE => self::RATE
+            ],
+            [
+                self::ONCE => false,
+                self::MOCK_METHOD_NAME => 'getAppliedRates',
+                self::MOCK_VALUE => [
+                    [
+                        'id' => 0,
+                        'percent' => 1.4,
+                        'rates' => [
+                            [
+                                'code' => 'sku_1',
+                                'title' => 'title1',
+                                'percent' => 1.1,
                             ],
                         ],
-                    ]
-                ],
-                [
-                    self::ONCE => false,
-                    self::MOCK_METHOD_NAME => 'round',
-                    self::MOCK_VALUE => 1.3
+                    ],
                 ]
-            ]
+            ],
+        ];
+
+        if ($isTaxIncluded) {
+            $mockValues[] = [
+                self::ONCE => false,
+                self::MOCK_METHOD_NAME => 'getStoreRate',
+                self::MOCK_VALUE => self::STORE_RATE
+            ];
+        }
+
+        $this->mockReturnValues(
+            $this->mockCalculationTool,
+            $mockValues
         );
+        $this->mockCalculationTool->expects($this->atLeastOnce())
+            ->method('round')
+            ->willReturnCallback(
+                function ($price) {
+                    return round($price, 2);
+                }
+            );
     }
 
     /**
@@ -249,7 +261,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
             $this->appliedTaxDataObjectFactory,
             [
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'create',
                     self::MOCK_VALUE => $this->mockAppliedTax,
                 ]
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php
index 3de3c4b10ea28f0805e3598ad8bd581288339c88..ebf9239463a61ceaa05dde8fd99bb42cee6e62cf 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php
@@ -26,8 +26,15 @@ class RowBaseCalculatorTest extends RowBaseAndTotalBaseCalculatorTestCase
 
         $this->assertSame(
             $this->taxDetailsItem,
-            $this->calculate($this->rowBaseCalculator)
+            $this->calculate($this->rowBaseCalculator, true)
+        );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
+
+        $this->assertSame(
+            $this->taxDetailsItem,
+            $this->calculate($this->rowBaseCalculator, false)
         );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
     }
 
     public function testCalculateWithTaxNotInPrice()
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php
index 880b9d57c81b56cc4750fa4da8de4cd6496c0495..d5c0c0ef85c8701778a651540880d8d6f8439dd6 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php
@@ -22,6 +22,21 @@ class TotalBaseCalculatorTest extends RowBaseAndTotalBaseCalculatorTestCase
             $this->taxDetailsItem,
             $this->calculate($this->totalBaseCalculator)
         );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
+    }
+
+    public function testCalculateWithTaxInPriceNoRounding()
+    {
+        $this->initTotalBaseCalculator();
+        $this->totalBaseCalculator->expects($this->exactly(3))
+            ->method('deltaRound')->will($this->returnValue(0));
+        $this->initMocks(true);
+
+        $this->assertSame(
+            $this->taxDetailsItem,
+            $this->calculate($this->totalBaseCalculator, false)
+        );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
     }
 
     public function testCalculateWithTaxNotInPrice()
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
index 9f69f1a2035bf1f8bd629490d795f0f64c1007c3..bed813c1f188860769a2316b55ed3665781d6f8f 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
@@ -18,7 +18,10 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
 
     const CODE = 'CODE';
     const TYPE = 'TYPE';
-    const ROW_TAX = 44.954136954136;
+    const ROW_TAX = 44.958682408681;
+    const ROW_TAX_ROUNDED = 44.95;
+    const PRICE_INCL_TAX = 495.4954954955;
+    const PRICE_INCL_TAX_ROUNDED = 495.50;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $taxDetailsItemDataObjectFactoryMock;
@@ -68,7 +71,11 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $this->mockCalculationTool->expects($this->any())
             ->method('round')
             ->withAnyParameters()
-            ->will($this->returnArgument(0));
+            ->willReturnCallback(
+                function ($price) {
+                    return round($price, 2);
+                }
+            );
         $this->mockConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
             ->disableOriginalConstructor()
             ->getMock();
@@ -113,26 +120,26 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
     public function testCalculateWithTaxInPrice()
     {
         $mockItem = $this->getMockItem();
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getIsTaxIncluded')
             ->will($this->returnValue(true));
 
-        $this->mockConfig->expects($this->once())
+        $this->mockConfig->expects($this->atLeastOnce())
             ->method('crossBorderTradeEnabled')
             ->will($this->returnValue(false));
-        $this->mockConfig->expects($this->once())
+        $this->mockConfig->expects($this->atLeastOnce())
             ->method('applyTaxAfterDiscount')
             ->will($this->returnValue(true));
 
-        $this->mockCalculationTool->expects($this->once())
+        $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('getRate')
             ->with($this->addressRateRequest)
             ->will($this->returnValue(self::RATE));
-        $this->mockCalculationTool->expects($this->once())
+        $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('getStoreRate')
             ->with($this->addressRateRequest, self::STORE_ID)
             ->will($this->returnValue(self::STORE_RATE));
-        $this->mockCalculationTool->expects($this->once())
+        $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('getAppliedRates')
             ->withAnyParameters()
             ->will($this->returnValue([]));
@@ -140,7 +147,14 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY));
         $this->assertSame(self::CODE, $this->taxDetailsItem->getCode());
         $this->assertSame(self::TYPE, $this->taxDetailsItem->getType());
+        $this->assertSame(self::ROW_TAX_ROUNDED, $this->taxDetailsItem->getRowTax());
+        $this->assertEquals(self::PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
+
+        $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY, false));
+        $this->assertSame(self::CODE, $this->taxDetailsItem->getCode());
+        $this->assertSame(self::TYPE, $this->taxDetailsItem->getType());
         $this->assertSame(self::ROW_TAX, $this->taxDetailsItem->getRowTax());
+        $this->assertEquals(self::PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
     }
 
     public function testCalculateWithTaxNotInPrice()
@@ -178,16 +192,16 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $mockItem = $this->getMockBuilder('Magento\Tax\Api\Data\QuoteDetailsItemInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getDiscountAmount')
             ->will($this->returnValue(1));
         $mockItem->expects($this->atLeastOnce())
             ->method('getCode')
             ->will($this->returnValue(self::CODE));
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getType')
             ->will($this->returnValue(self::TYPE));
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getUnitPrice')
             ->will($this->returnValue(self::UNIT_PRICE));
 
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php b/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
index b5c223f0a6287acf8ad920a7b35cc6391a2a95e7..ee093ee6807bc586dc2ee41a1179d396726afc7a 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
@@ -576,7 +576,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
     /**
      * Tests the specific method
      *
-     * @param string $itemData
+     * @param string $appliedTaxesData
      * @param array $addressData
      *
      * @dataProvider dataProviderFetchArray
@@ -584,7 +584,8 @@ class TaxTest extends \PHPUnit_Framework_TestCase
      */
     public function testFetch($appliedTaxesData, $addressData)
     {
-        $methods = ['getAppliedTaxes', 'getTaxAmount', 'getTotalAmount', 'getGrandTotal', 'getSubtotalInclTax'];
+        $taxAmount = 8;
+        $methods = ['getAppliedTaxes', 'getTotalAmount', 'getGrandTotal', 'getSubtotalInclTax'];
         $totalsMock = $this->getMock('Magento\Quote\Model\Quote\Address\Total', $methods, [], '', false);
         $taxConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
             ->disableOriginalConstructor()
@@ -632,10 +633,6 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->once())
             ->method('getAppliedTaxes')
             ->will($this->returnValue($appliedTaxes));
-        $address
-            ->expects($this->any())
-            ->method('getQuote')
-            ->will($this->returnValue($quote));
         $totalsMock
             ->expects($this->any())
             ->method('getGrandTotal')
@@ -644,10 +641,17 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->any())
             ->method('getStore')
             ->will($this->returnValue($store));
+        $quote->expects($this->any())
+            ->method('getAllAddresses')
+            ->will($this->returnValue([$address]));
+        $address
+            ->expects($this->any())
+            ->method('getQuote')
+            ->will($this->returnValue($quote));
         $address
             ->expects($this->any())
             ->method('getTaxAmount')
-            ->will($this->returnValue(8));
+            ->will($this->returnValue($taxAmount));
         $address
             ->expects($this->any())
             ->method('getCustomAttributesCodes')
@@ -658,7 +662,10 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             $address->setData($key, $value);
         }
 
-        $taxTotalsCalcModel->fetch($quote, $totalsMock);
+        $this->assertNull($totalsMock->getTaxAmount());
+        $totalsArray = $taxTotalsCalcModel->fetch($quote, $totalsMock);
+        $this->assertArrayHasKey('value', $totalsArray[0]);
+        $this->assertEquals($taxAmount, $totalsArray[0]['value']);
     }
 
     /**
diff --git a/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php b/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php
index c42a28490e3442ad20d004b535abfb6994ef3262..151cd1876c40294acb1e7bd0d013b4e8955ae6f4 100644
--- a/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php
@@ -19,11 +19,19 @@ class TaxSetupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->typeConfigMock = $this->getMock('Magento\Catalog\Model\ProductTypes\ConfigInterface');
+
+        $salesSetup = $this->getMock('\Magento\Sales\Setup\SalesSetup', [], [], '', false);
+        $salesSetupFactory = $this->getMock('Magento\Sales\Setup\SalesSetupFactory', ['create'], [], '', false);
+        $salesSetupFactory->expects($this->any())->method('create')->will($this->returnValue($salesSetup));
+
+        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->taxSetup = $helper->getObject(
             'Magento\Tax\Setup\TaxSetup',
-            ['productTypeConfig' => $this->typeConfigMock]
+            [
+                'productTypeConfig' => $this->typeConfigMock,
+                'salesSetupFactory' => $salesSetupFactory,
+            ]
         );
     }
 
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
index e04ddfeeefeb8028d1d6159558ef2340b8e80c1c..22adf3c427eaad459e2e317e943f984838e8ef5b 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
@@ -88,7 +88,7 @@ require([
                         item.itemElement = that.prev();
                         $('#tax-rate-form')
                             .dialogRates({itemRate: item})
-                            .dialogRates('open');
+                            .dialogRates('openModal');
 
                     } else {
                         if (result.error_message)
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html
index c3c28a58138221e7031bc00c463df46c62a9a416..5b04ee8298480f1c9910f94d1f9897d44c91dcb7 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html
@@ -10,11 +10,11 @@
         <span class="price-wrapper" data-bind="html: cart().subtotal_excl_tax"></span>
     <!-- /ko -->
 
-    <!-- ko if: !display_cart_subtotal_excl_tax && display_subtotal_incl_tax -->
+    <!-- ko if: !display_cart_subtotal_excl_tax && display_cart_subtotal_incl_tax -->
         <span class="price-wrapper" data-bind="html: cart().subtotal_incl_tax"></span>
     <!-- /ko -->
 
-    <!-- ko if: !display_cart_subtotal_excl_tax && !display_subtotal_incl_tax -->
+    <!-- ko if: !display_cart_subtotal_excl_tax && !display_cart_subtotal_incl_tax -->
         <span class="price-wrapper price-including-tax"
               data-bind="attr: { 'data-label': $t('Incl. Tax') }, html: cart().subtotal_incl_tax">
         </span>
diff --git a/app/code/Magento/Weee/Helper/Data.php b/app/code/Magento/Weee/Helper/Data.php
index 55db9791896ecb8307b01bee407fb1bf1a84eaa9..138ae26986b5aaf112780ed64e2c8ecd5f08cb0c 100644
--- a/app/code/Magento/Weee/Helper/Data.php
+++ b/app/code/Magento/Weee/Helper/Data.php
@@ -739,12 +739,12 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * get FPT DISPLAY_INCL setting
+     * Get FPT DISPLAY_INCL setting
      *
      * @param  int|null $storeId
      * @return bool
      */
-    public function geDisplayIncl($storeId = null)
+    public function isDisplayIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_INCL,
@@ -754,12 +754,27 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * get FPT DISPLAY_EXCL_DESCR_INCL setting
+     * Get FPT DISPLAY_INCL_DESCR setting
      *
      * @param  int|null $storeId
      * @return bool
      */
-    public function geDisplayExlDescIncl($storeId = null)
+    public function isDisplayInclDesc($storeId = null)
+    {
+        return $this->typeOfDisplay(
+            WeeeDisplayConfig::DISPLAY_INCL_DESCR,
+            \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW,
+            $storeId
+        );
+    }
+
+    /**
+     * Get FPT DISPLAY_EXCL_DESCR_INCL setting
+     *
+     * @param  int|null $storeId
+     * @return bool
+     */
+    public function isDisplayExclDescIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL,
@@ -769,12 +784,12 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * get FPT DISPLAY_EXCL setting
+     * Get FPT DISPLAY_EXCL setting
      *
      * @param  int|null $storeId
      * @return bool
      */
-    public function geDisplayExcl($storeId = null)
+    public function isDisplayExcl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL,
diff --git a/app/code/Magento/Weee/Model/Config/Source/Display.php b/app/code/Magento/Weee/Model/Config/Source/Display.php
index c5408a0489f491686df9c2765677ec76f43754f3..6782463857870196fdf75b7e46bc6dd487df1889 100644
--- a/app/code/Magento/Weee/Model/Config/Source/Display.php
+++ b/app/code/Magento/Weee/Model/Config/Source/Display.php
@@ -15,16 +15,22 @@ class Display implements \Magento\Framework\Option\ArrayInterface
     public function toOptionArray()
     {
         return [
-            ['value' => \Magento\Weee\Model\Tax::DISPLAY_INCL, 'label' => __('Including FPT only')],
+            [
+                'value' => \Magento\Weee\Model\Tax::DISPLAY_INCL,
+                'label' => __('Including FPT only')
+            ],
             [
                 'value' => \Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR,
                 'label' => __('Including FPT and FPT description')
             ],
             [
                 'value' => \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL,
-                'label' => __('Excluding FPT, FPT description, final price')
+                'label' => __('Excluding FPT. Including FPT description and final price')
             ],
-            ['value' => \Magento\Weee\Model\Tax::DISPLAY_EXCL, 'label' => __('Excluding FPT')]
+            [
+                'value' => \Magento\Weee\Model\Tax::DISPLAY_EXCL,
+                'label' => __('Excluding FPT')
+            ]
         ];
     }
 }
diff --git a/app/code/Magento/Weee/Model/Tax.php b/app/code/Magento/Weee/Model/Tax.php
index 8550915d5a21d2c56d86c019e04c3361418e1ac0..a21bc4a163ff30332cc9c7b10d0bcb2506591f92 100644
--- a/app/code/Magento/Weee/Model/Tax.php
+++ b/app/code/Magento/Weee/Model/Tax.php
@@ -27,7 +27,7 @@ class Tax extends \Magento\Framework\Model\AbstractModel
     const DISPLAY_INCL_DESCR = 1;
 
     /**
-     * Excluding FPT, FPT description, final price
+     * Excluding FPT. Including FPT description and final price
      */
     const DISPLAY_EXCL_DESCR_INCL = 2;
 
diff --git a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
index 96effbb8545bfb5b54ec2fffa3e15481afd871c8..264bd13de6138459f94b6194240634b1e0bc88d5 100644
--- a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
+++ b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
@@ -142,8 +142,8 @@ class GetPriceConfigurationObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->geDisplayExcl($storeId) ||
-            $this->weeeData->geDisplayExlDescIncl($storeId) ||
+        if ($this->weeeData->isDisplayExcl($storeId) ||
+            $this->weeeData->isDisplayExclDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
index 77d022811702a4fb2ab58bb76dc1a4fe760a79dd..3619e9ae9e643b9782c1747016846b78cd125018 100644
--- a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
+++ b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
@@ -59,23 +59,28 @@ class UpdateProductOptionsObserver implements ObserverInterface
             return $this;
         }
 
-        if ($this->weeeData->isEnabled() &&
-            !$this->weeeData->geDisplayIncl($product->getStoreId()) &&
-            !$this->weeeData->geDisplayExcl($product->getStoreId())
-        ) {
-            // only do processing on bundle product
-            if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
-                if (!array_key_exists('optionTemplate', $options)) {
-                    $calcPrice = $this->getWhichCalcPriceToUse($product->getStoreId());
-                    $options['optionTemplate'] = '<%- data.label %>'
-                        . '<% if (data.' . $calcPrice . '.value) { %>'
-                        . ' +<%- data.' . $calcPrice . '.formatted %>'
-                        . '<% } %>';
-                }
+        // if the Weee module is enabled, then only do processing on bundle products
+        if ($this->weeeData->isEnabled() && $product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
+
+            if ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax()) {
+                // the Tax module might have set up a default, but we will re-decide which calcPrice field to use
+                unset($options['optionTemplate']);
+            }
+
+            if (!array_key_exists('optionTemplate', $options)) {
+                $calcPrice = $this->getWhichCalcPriceToUse($product->getStoreId());
+                $options['optionTemplate'] = '<%- data.label %>'
+                    . '<% if (data.' . $calcPrice . '.value) { %>'
+                    . ' +<%- data.' . $calcPrice . '.formatted %>'
+                    . '<% } %>';
+            }
 
+            if (!$this->weeeData->isDisplayIncl($product->getStoreId()) &&
+                !$this->weeeData->isDisplayExcl($product->getStoreId())) {
+                // we need to display the individual Weee amounts
                 foreach ($this->weeeData->getWeeeAttributesForBundle($product) as $weeeAttributes) {
                     foreach ($weeeAttributes as $weeeAttribute) {
-                        if (!preg_match('/'.$weeeAttribute->getCode().'/', $options['optionTemplate'])) {
+                        if (!preg_match('/' . $weeeAttribute->getCode() . '/', $options['optionTemplate'])) {
                             $options['optionTemplate'] .= sprintf(
                                 ' <%% if (data.weeePrice' . $weeeAttribute->getCode() . ') { %%>'
                                 . '  (' . $weeeAttribute->getName()
@@ -86,15 +91,14 @@ class UpdateProductOptionsObserver implements ObserverInterface
                         }
                     }
                 }
+            }
 
-                if ($this->weeeData->geDisplayExlDescIncl($product->getStoreId())) {
-                    $options['optionTemplate'] .= sprintf(
-                        ' <%% if (data.weeePrice) { %%>'
-                        . '<%%- data.weeePrice.formatted %%>'
-                        . '<%% } %%>'
-                    );
-                }
-
+            if ($this->weeeData->isDisplayExclDescIncl($product->getStoreId())) {
+                $options['optionTemplate'] .= sprintf(
+                    ' <%% if (data.weeePrice) { %%>'
+                    . '<%%- data.weeePrice.formatted %%>'
+                    . '<%% } %%>'
+                );
             }
         }
         $response->setAdditionalOptions($options);
@@ -102,7 +106,7 @@ class UpdateProductOptionsObserver implements ObserverInterface
     }
 
     /**
-     * Returns which product price to use as a basis for the Weee's final price
+     * Returns which product price to show (before listing the individual Weee amounts, if applicable)
      *
      * @param  int|null $storeId
      * @return string
@@ -110,10 +114,9 @@ class UpdateProductOptionsObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->geDisplayExcl($storeId) ||
-            $this->weeeData->geDisplayExlDescIncl($storeId) ||
-            ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
-        ) {
+
+        if ($this->weeeData->isDisplayExclDescIncl($storeId) ||
+            ($this->weeeData->isDisplayExcl($storeId) && $this->taxData->displayPriceExcludingTax())) {
             $calcPrice = 'basePrice';
         }
         return $calcPrice;
diff --git a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
index 8725a62d837be15e68989b1fb1eab050ab0f4968..9fa6c897807a78a8025e6cba387dcaba4eb728f4 100644
--- a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
@@ -6,25 +6,28 @@
 
 namespace Magento\Weee\Test\Unit\Observer;
 
-use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Weee\Model\Tax as WeeeDisplayConfig;
+use Magento\Tax\Model\Config as TaxConfig;
 
 class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * Tests the methods that rely on the ScopeConfigInterface object to provide their return values
      *
-     * @param array $testArray The initial array that specifies the set of additional options
+     * @param array $initialArray The initial array that specifies the set of additional options
      * @param bool $weeeEnabled Whether the Weee module is assumed to be enabled
-     * @param bool $weeeDisplayExclDescIncl Is this Weee display setting assumed to be set
+     * @param int $weeeDisplay Which Weee display is configured
+     * @param int $priceDisplay Values are: including tax, excluding tax, or both including and excluding tax
      * @param array $expectedArray The revised array of the additional options
      *
      * @dataProvider updateProductOptionsProvider
      */
-    public function testUpdateProductOptions($testArray, $weeeEnabled, $weeeDisplayExclDescIncl, $expectedArray)
+    public function testUpdateProductOptions($initialArray, $weeeEnabled, $weeeDisplay, $priceDisplay, $expectedArray)
     {
         $configObj = new \Magento\Framework\DataObject(
             [
-                'additional_options' => $testArray,
+                'additional_options' => $initialArray,
             ]
         );
 
@@ -47,12 +50,26 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
             ->method('isEnabled')
             ->will($this->returnValue($weeeEnabled));
         $weeeHelper->expects($this->any())
-            ->method('geDisplayExlDescIncl')
-            ->will($this->returnValue($weeeDisplayExclDescIncl));
+            ->method('isDisplayIncl')
+            ->will($this->returnValue($weeeDisplay == WeeeDisplayConfig::DISPLAY_INCL));
+        $weeeHelper->expects($this->any())
+            ->method('isDisplayExclDescIncl')
+            ->will($this->returnValue($weeeDisplay == WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL));
+        $weeeHelper->expects($this->any())
+            ->method('isDisplayExcl')
+            ->will($this->returnValue($weeeDisplay == WeeeDisplayConfig::DISPLAY_EXCL));
         $weeeHelper->expects($this->any())
             ->method('getWeeeAttributesForBundle')
             ->will($this->returnValue([['fpt1' => $weeeObject1], ['fpt1'=>$weeeObject1, 'fpt2'=>$weeeObject2]]));
 
+        $taxHelper=$this->getMock('Magento\Tax\Helper\Data', [], [], '', false);
+        $taxHelper->expects($this->any())
+            ->method('displayPriceExcludingTax')
+            ->will($this->returnValue($priceDisplay == TaxConfig::DISPLAY_TYPE_EXCLUDING_TAX));
+        $taxHelper->expects($this->any())
+            ->method('priceIncludesTax')
+            ->will($this->returnValue(true));
+
         $responseObject=$this->getMock('Magento\Framework\Event\Observer', ['getResponseObject'], [], '', false);
         $responseObject->expects($this->any())
             ->method('getResponseObject')
@@ -83,6 +100,7 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
             'Magento\Weee\Observer\UpdateProductOptionsObserver',
             [
                 'weeeData' => $weeeHelper,
+                'taxData' => $taxHelper,
                 'registry' => $registry,
             ]
         );
@@ -99,13 +117,30 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'weee not enabled' => [
-                'testArray' => [
+                'initialArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%= data.label %><% if (data.finalPrice.value) '
+                        . '{ %> +<%- data.finalPrice.formatted %><% } %>',
+                ],
+                'weeeEnabled' => false,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_INCL,         // has no effect for this scenario
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_EXCLUDING_TAX,  // has no effect for this scenario
+                'expectedArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%= data.label %><% if (data.finalPrice.value) '
+                        . '{ %> +<%- data.finalPrice.formatted %><% } %>',
+                ],
+            ],
+
+            'weee enabled, and display with Weee included in the price' => [
+                'initialArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %>',
                 ],
-                'weeeEnabled' => false,
-                'weeeDisplayExclDescIncl' => true,
+                'weeeEnabled' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_INCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
                 'expectedArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
@@ -113,31 +148,33 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
                 ],
             ],
 
-            'weee enabled, but not displaying ExclDescIncl' => [
-                'testArray' => [
+            'weee enabled, and display with Weee included in the price, and include the Weee descriptions' => [
+                'initialArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %>',
                 ],
                 'weeeEnabled' => true,
-                'weeeDisplayExclDescIncl' => false,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_INCL_DESCR,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
                 'expectedArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %> <% if (data.weeePricefpt1) '
-                        . '{ %>  (: <%- data.weeePricefpt1.formatted %>)<% } %>'
-                        . ' <% if (data.weeePricefpt2) { %>  (: <%- data.weeePricefpt2.formatted %>)<% } %>',
+                        . '{ %>  (: <%- data.weeePricefpt1.formatted %>)<% } %> '
+                        . '<% if (data.weeePricefpt2) { %>  (: <%- data.weeePricefpt2.formatted %>)<% } %>',
                 ],
             ],
 
             'weee enabled, and display with ExclDescIncl' => [
-                'testArray' => [
+                'initialArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %>',
                 ],
                 'weeeEnabled' => true,
-                'weeeDisplayExclDescIncl' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
                 'expectedArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
@@ -147,6 +184,34 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
                         . '<% if (data.weeePrice) { %><%- data.weeePrice.formatted %><% } %>',
                 ],
             ],
+
+            'weee enabled, and display prices including tax but without Weee' => [
+                'initialArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                ],
+                'weeeEnabled' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_EXCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
+                'expectedArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%- data.label %><% if (data.finalPrice.value) '
+                        . '{ %> +<%- data.finalPrice.formatted %><% } %>',
+                ],
+            ],
+
+            'weee enabled, and display prices excluding tax but without Weee' => [
+                'initialArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                ],
+                'weeeEnabled' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_EXCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_EXCLUDING_TAX,
+                'expectedArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%- data.label %><% if (data.basePrice.value) '
+                        . '{ %> +<%- data.basePrice.formatted %><% } %>',
+                ],
+            ],
         ];
     }
 }
diff --git a/app/code/Magento/Weee/i18n/de_DE.csv b/app/code/Magento/Weee/i18n/de_DE.csv
index 7ec820d9eb205f5c9f27ebef7b290e9a4e9d3ca9..5c64ff992a1fafd049616625934bd2feb3b6ba77 100644
--- a/app/code/Magento/Weee/i18n/de_DE.csv
+++ b/app/code/Magento/Weee/i18n/de_DE.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Lediglich einschließlich FPT"
 "Including FPT and FPT description","Einschließlich FPT und FPT-Beschreibung"
-"Excluding FPT, FPT description, final price","Ausschließlich FPT, FPT-Beschreibung, Endpreis"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Ausschließlich FPT"
 "Fixed Product Tax","Feste Produktsteuer"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/en_US.csv b/app/code/Magento/Weee/i18n/en_US.csv
index e0989690885440cf7da81d32be361a8b2814234e..668926b681505716a6eb73ed537d715559a0cf41 100644
--- a/app/code/Magento/Weee/i18n/en_US.csv
+++ b/app/code/Magento/Weee/i18n/en_US.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Including FPT only"
 "Including FPT and FPT description","Including FPT and FPT description"
-"Excluding FPT, FPT description, final price","Excluding FPT, FPT description, final price"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Excluding FPT"
 "Fixed Product Tax","Fixed Product Tax"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/es_ES.csv b/app/code/Magento/Weee/i18n/es_ES.csv
index 75afe15b65ecdf9ebdd74e2c5623116e493d9a8a..967e9d55c1650a2482c4b46460dc62581d408bfc 100644
--- a/app/code/Magento/Weee/i18n/es_ES.csv
+++ b/app/code/Magento/Weee/i18n/es_ES.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Incluir sólo FPT"
 "Including FPT and FPT description","Inlcuir impuestos y descripción de los impuestos"
-"Excluding FPT, FPT description, final price","Excluido FPT, descripción FPT, precio final"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","FPT no incluido"
 "Fixed Product Tax","Impuesto fijo del producto"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/fr_FR.csv b/app/code/Magento/Weee/i18n/fr_FR.csv
index 7570f61e26c2639aa9e0a7ed5406f320cf9a2527..3361b7bc238a1a7fa451350672cf9b3cc363eb0b 100644
--- a/app/code/Magento/Weee/i18n/fr_FR.csv
+++ b/app/code/Magento/Weee/i18n/fr_FR.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Inclure uniquement les taxes sur les produits fixes"
 "Including FPT and FPT description","Inclure les taxes sur les produits fixes et leur description"
-"Excluding FPT, FPT description, final price","Exclure les taxes sur les produits fixes, les descriptions, et le prix final"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Exclure les taxes sur les produits fixes"
 "Fixed Product Tax","Taxe sur le produit fixe"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/nl_NL.csv b/app/code/Magento/Weee/i18n/nl_NL.csv
index b86bb1920067043ab369c9e056293be0601982c1..b21a8574d6dd2e3b192d79a47700df287dc41391 100644
--- a/app/code/Magento/Weee/i18n/nl_NL.csv
+++ b/app/code/Magento/Weee/i18n/nl_NL.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Inclusief alleen FPT"
 "Including FPT and FPT description","Inclusief FPT en FPT omschrijving"
-"Excluding FPT, FPT description, final price","Met uitzondering van FPT, FPT omschrijving, definitieve prijs"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Met uitzondering van FPT"
 "Fixed Product Tax","Vaste Product Belasting"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/pt_BR.csv b/app/code/Magento/Weee/i18n/pt_BR.csv
index 7f2a0e7632ad9ef4553e6225c06ba2aa31ab0d32..881b6fe4a60aff57b39dbae4619549883f392348 100644
--- a/app/code/Magento/Weee/i18n/pt_BR.csv
+++ b/app/code/Magento/Weee/i18n/pt_BR.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Incluindo somente FPT"
 "Including FPT and FPT description","Incluindo FPT e descrição de FPT"
-"Excluding FPT, FPT description, final price","Excluindo FPT, descrição de FPT, preço final"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Excluindo FPT"
 "Fixed Product Tax","Imposto fixo do produto"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/zh_Hans_CN.csv b/app/code/Magento/Weee/i18n/zh_Hans_CN.csv
index a2c88c879992e63a8e090089d07671e0b3bc6773..55878a66c3ffbe5e528693b31e9f78ae00ed8939 100644
--- a/app/code/Magento/Weee/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Weee/i18n/zh_Hans_CN.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","仅包含 FPT"
 "Including FPT and FPT description","包含 FPT 和 FPT 描述"
-"Excluding FPT, FPT description, final price","不包含 FPT,FPT 描述,最终价格"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","不包含 FPT"
 "Fixed Product Tax",固定产品税费
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml b/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml
index 0f71192ce3985097bb36583c0f7be9463ee1d00e..2da14c7d14b5e96b7e87c2972d035324704071ee 100644
--- a/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml
@@ -9,24 +9,30 @@
 /** @var $block \Magento\Weee\Block\Item\Price\Renderer */
 
 $item = $block->getItem();
+
+// ensure we use the zone for the shopping cart / minicart
+$originalZone = $block->getZone();
+$block->setZone(\Magento\Framework\Pricing\Render::ZONE_CART);
 ?>
+
 <?php if ($block->displayPriceInclTax() || $block->displayBothPrices()): ?>
-<span class="price-including-tax" data-label="<?php echo $block->escapeHtml(__('Incl. Tax')); ?>">
-        <?php if ($block->displayPriceWithWeeeDetails()): ?>
-    <span class="minicart-tax-total">
-        <?php else: ?>
+    <span class="price-including-tax" data-label="<?php echo $block->escapeHtml(__('Incl. Tax')); ?>">
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
+        <span class="minicart-tax-total">
+    <?php else: ?>
         <span class="minicart-price">
-        <?php endif; ?>
+    <?php endif; ?>
         <?php /* @escapeNotVerified */ echo $block->formatPrice($block->getUnitDisplayPriceInclTax()); ?>
-            </span>
+        </span>
 
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
         <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($item)): ?>
-            <span class="minicart-tax-info" style="display: none">
-                <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
-                    <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
-                        <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount_incl_tax'], true, true); ?>
-                    </span>
-                <?php endforeach; ?>
+            <span class="minicart-tax-info">
+            <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
+                <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
+                    <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount_incl_tax'], true, true); ?>
+                </span>
+            <?php endforeach; ?>
             </span>
 
             <?php if ($block->displayFinalPrice()): ?>
@@ -37,35 +43,39 @@ $item = $block->getItem();
                 </span>
             <?php endif; ?>
         <?php endif; ?>
-    </span>
     <?php endif; ?>
+    </span>
+<?php endif; ?>
 
-    <?php if ($block->displayPriceExclTax() || $block->displayBothPrices()): ?>
+<?php if ($block->displayPriceExclTax() || $block->displayBothPrices()): ?>
     <span class="price-excluding-tax" data-label="<?php echo $block->escapeHtml(__('Excl. Tax')); ?>">
-        <?php if ($block->displayPriceWithWeeeDetails()): ?>
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
         <span class="minicart-tax-total">
-        <?php else: ?>
-            <span class="minicart-price">
-        <?php endif; ?>
+    <?php else: ?>
+        <span class="minicart-price">
+    <?php endif; ?>
         <?php /* @escapeNotVerified */ echo $block->formatPrice($block->getUnitDisplayPriceExclTax()); ?>
-            </span>
+        </span>
 
-            <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($item)): ?>
-                <span class="minicart-tax-info">
-                <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
-                    <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
-                        <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount'], true, true); ?>
-                    </span>
-                <?php endforeach; ?>
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
+        <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($item)): ?>
+            <span class="minicart-tax-info">
+            <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
+                <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
+                    <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount'], true, true); ?>
+                </span>
+            <?php endforeach; ?>
             </span>
 
             <?php if ($block->displayFinalPrice()): ?>
-                    <span class="minicart-tax-total">
+                <span class="minicart-tax-total">
                     <span class="weee" data-label="<?php echo $block->escapeHtml(__('Total')); ?>">
                         <?php /* @escapeNotVerified */ echo $block->formatPrice($block->getFinalUnitDisplayPriceExclTax()); ?>
                     </span>
                 </span>
-                <?php endif; ?>
             <?php endif; ?>
-    </span>
         <?php endif; ?>
+    <?php endif; ?>
+    </span>
+<?php endif; ?>
+<?php $block->setZone($originalZone); ?>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php
index 20dd5579d0e28a11fb03d5f80fffd6a078c9e0d1..7fd9a4523240ac00dc671189ce795593fa8823b6 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php
@@ -66,6 +66,7 @@ abstract class AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable extends Abs
         $actualPrices = $this->getProductPagePrices($actualPrices);
         $catalogProductView->getViewBlock()->clickAddToCart();
         $catalogProductView->getMessagesBlock()->waitSuccessMessage();
+        $checkoutCart->open();
         $actualPrices = $this->getCartPrices($product, $actualPrices);
         $actualPrices = $this->getTotals($actualPrices);
         //Prices verification
diff --git a/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml
index c78a826e8500caf6b191ff38d58a0c84d7d7c76e..95d06f6d4074a56ab81a458d552c424ab698bd47 100644
--- a/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml
@@ -92,19 +92,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -242,19 +242,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -392,19 +392,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -467,19 +467,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -542,19 +542,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
index 007c4939d78885013937f86f1424a8f2f8ab71e9..664fdee21987253770e0160a6d31e00009677cc3 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
@@ -7,6 +7,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product;
 
 /**
  * @magentoAppArea adminhtml
+ * @magentoDbIsolation enabled
  */
 class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
diff --git a/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php b/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
index cf7e2eda9be1d2ec37872b965d42ada8f75e6dbe..6140e7c2581be6d5ea2dbd15be8e352ec0eeb773 100644
--- a/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
+++ b/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
@@ -40,6 +40,7 @@ class Calculator implements CalculatorInterface
     public function getAmount($amount, SaleableInterface $saleableItem, $exclude = null, $context = [])
     {
         $baseAmount = $fullAmount = $amount;
+        $previousAdjustments = 0;
         $adjustments = [];
         foreach ($saleableItem->getPriceInfo()->getAdjustments() as $adjustment) {
             $code = $adjustment->getAdjustmentCode();
@@ -51,7 +52,7 @@ class Calculator implements CalculatorInterface
                 $adjust = $adjustment->extractAdjustment($baseAmount, $saleableItem, $context);
                 $baseAmount -= $adjust;
                 $fullAmount = $adjustment->applyAdjustment($fullAmount, $saleableItem, $context);
-                $adjust = $fullAmount - $baseAmount;
+                $adjust = $fullAmount - $baseAmount - $previousAdjustments;
                 if (!$toExclude) {
                     $adjustments[$code] = $adjust;
                 }
@@ -63,6 +64,7 @@ class Calculator implements CalculatorInterface
                 $adjust = $newAmount - $fullAmount;
                 $adjustments[$code] = $adjust;
                 $fullAmount = $newAmount;
+                $previousAdjustments += $adjust;
             }
         }
 
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php
index 9aa6eccbe0922a693cb25aab9a1a3e8195ac78ee..7865cf7db856610c537c797a992f0b68ee283710 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php
@@ -40,39 +40,30 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetAmount()
     {
-        $amount = 10;
-        $fullAmount = $amount;
-        $newAmount = 15;
-        $taxAdjustmentCode = 'tax';
+        $amountInclTax = 10;
+        $taxAdjustment = 2;
+        $weeeAdjustment = 5;
+        $totalAmount = $amountInclTax + $weeeAdjustment;
+
         $weeeAdjustmentCode = 'weee';
-        $adjustment = 5;
+        $taxAdjustmentCode = 'tax';
         $expectedAdjustments = [
-            $taxAdjustmentCode => $adjustment,
-            $weeeAdjustmentCode => $adjustment,
+            $weeeAdjustmentCode => $weeeAdjustment,
+            $taxAdjustmentCode => $taxAdjustment,
         ];
 
-        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
+        $amountBaseMock = $this->getMockBuilder('Magento\Framework\Pricing\Amount\Base')
             ->disableOriginalConstructor()
-            ->setMethods(['getPriceInfo', '__wakeup'])
             ->getMock();
+        $this->amountFactoryMock->expects($this->once())
+            ->method('create')
+            ->with($this->equalTo($totalAmount), $this->equalTo($expectedAdjustments))
+            ->will($this->returnValue($amountBaseMock));
 
-        $taxAdjustmentMock = $this->getMockBuilder('Magento\Tax\Pricing\Adjustment')
+        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
+            ->setMethods(['getPriceInfo', '__wakeup'])
             ->getMock();
-        $taxAdjustmentMock->expects($this->once())
-            ->method('getAdjustmentCode')
-            ->will($this->returnValue($taxAdjustmentCode));
-        $taxAdjustmentMock->expects($this->once())
-            ->method('isIncludedInBasePrice')
-            ->will($this->returnValue(true));
-        $taxAdjustmentMock->expects($this->once())
-            ->method('extractAdjustment')
-            ->with($this->equalTo($amount), $this->equalTo($productMock))
-            ->will($this->returnValue($adjustment));
-        $taxAdjustmentMock->expects($this->once())
-            ->method('applyAdjustment')
-            ->with($this->equalTo($fullAmount), $this->equalTo($productMock))
-            ->will($this->returnValue($amount));
 
         $weeeAdjustmentMock = $this->getMockBuilder('Magento\Weee\Pricing\Adjustment')
             ->disableOriginalConstructor()
@@ -85,15 +76,33 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(false));
         $weeeAdjustmentMock->expects($this->once())
             ->method('isIncludedInDisplayPrice')
-            ->with($this->equalTo($productMock))
             ->will($this->returnValue(true));
         $weeeAdjustmentMock->expects($this->once())
             ->method('applyAdjustment')
-            ->with($this->equalTo($fullAmount), $this->equalTo($productMock))
-            ->will($this->returnValue($newAmount));
+            ->with($this->equalTo($amountInclTax), $this->equalTo($productMock))
+            ->will($this->returnValue($weeeAdjustment + $amountInclTax));
 
-        $adjustments = [$taxAdjustmentMock, $weeeAdjustmentMock];
+        $taxAdjustmentMock = $this->getMockBuilder('Magento\Tax\Pricing\Adjustment')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $taxAdjustmentMock->expects($this->once())
+            ->method('getAdjustmentCode')
+            ->will($this->returnValue($taxAdjustmentCode));
+        $taxAdjustmentMock->expects($this->once())
+            ->method('isIncludedInBasePrice')
+            ->will($this->returnValue(true));
+        $taxAdjustmentMock->expects($this->once())
+            ->method('extractAdjustment')
+            ->with($this->equalTo($amountInclTax), $this->equalTo($productMock))
+            ->will($this->returnValue($taxAdjustment));
+        $taxAdjustmentMock->expects($this->once())
+            ->method('applyAdjustment')
+            ->with($this->equalTo($totalAmount), $this->equalTo($productMock))
+            ->will($this->returnValue($totalAmount));
+        $taxAdjustmentMock->expects($this->never())
+            ->method('isIncludedInDisplayPrice');
 
+        $adjustments = [$weeeAdjustmentMock, $taxAdjustmentMock];
         $priceInfoMock = $this->getMockBuilder('\Magento\Framework\Pricing\PriceInfo\Base')
             ->disableOriginalConstructor()
             ->getMock();
@@ -105,15 +114,7 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
             ->method('getPriceInfo')
             ->will($this->returnValue($priceInfoMock));
 
-        $amountBaseMock = $this->getMockBuilder('Magento\Framework\Pricing\Amount\Base')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $this->amountFactoryMock->expects($this->once())
-            ->method('create')
-            ->with($this->equalTo($newAmount), $this->equalTo($expectedAdjustments))
-            ->will($this->returnValue($amountBaseMock));
-        $result = $this->model->getAmount($amount, $productMock);
+        $result = $this->model->getAmount($amountInclTax, $productMock);
         $this->assertInstanceOf('Magento\Framework\Pricing\Amount\AmountInterface', $result);
     }