diff --git a/addons/website_event_sale/models/sale_order.py b/addons/website_event_sale/models/sale_order.py
index 055a9844b136bc9834858be9aeb7fa4cd2614b04..b99ef8577e8fd2fdf04cea66a6653a44124f47c2 100644
--- a/addons/website_event_sale/models/sale_order.py
+++ b/addons/website_event_sale/models/sale_order.py
@@ -10,7 +10,7 @@ class SaleOrder(models.Model):
 
     def _cart_find_product_line(self, product_id=None, line_id=None, **kwargs):
         self.ensure_one()
-        lines = super(SaleOrder, self)._cart_find_product_line(product_id, line_id)
+        lines = super(SaleOrder, self)._cart_find_product_line(product_id, line_id, **kwargs)
         if line_id:
             return lines
         domain = [('id', 'in', lines.ids)]
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index ca386df57251b7ded6a341a5c038dc8a1c3c8a9c..147de9d61785adbd12f99936b53ab4bdca336592 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -80,7 +80,7 @@ class SaleOrder(models.Model):
         product = self.env['product.product'].browse(product_id)
 
         # split lines with the same product if it has untracked attributes
-        if product and (product.product_tmpl_id.has_dynamic_attributes() or product.product_tmpl_id._has_no_variant_attributes()) and not line_id:
+        if product and (product.product_tmpl_id.has_dynamic_attributes() or product.product_tmpl_id._has_no_variant_attributes()) and not line_id and not kwargs.get('force_search', False):
             return self.env['sale.order.line']
 
         domain = [('order_id', '=', self.id), ('product_id', '=', product_id)]
@@ -132,7 +132,7 @@ class SaleOrder(models.Model):
         else:
             pu = product.price
             if order.pricelist_id and order.partner_id:
-                order_line = order._cart_find_product_line(product.id)
+                order_line = order._cart_find_product_line(product.id, force_search=True)
                 if order_line:
                     pu = self.env['account.tax']._fix_tax_included_price_company(pu, product.taxes_id, order_line[0].tax_id, self.company_id)
 
diff --git a/addons/website_sale/tests/test_website_sale_product_attribute_value_config.py b/addons/website_sale/tests/test_website_sale_product_attribute_value_config.py
index c18ddbd4a2ebf070d02855ace938eaec64e1656a..578d6b3d84a5fc113a52aa6fa8b11a05825a8699 100644
--- a/addons/website_sale/tests/test_website_sale_product_attribute_value_config.py
+++ b/addons/website_sale/tests/test_website_sale_product_attribute_value_config.py
@@ -205,3 +205,78 @@ class TestWebsiteSaleProductPricelist(TestSaleProductAttributeValueCommon, TestW
         with MockRequest(self.env, website=current_website, sale_order_id=so.id):
             so._cart_update(product_id=test_product.product_variant_id.id, line_id=sol.id, set_qty=1)
         self.assertEqual(round(sol.price_total), 50, "100$ with 50% discount + 0% tax (mapped from fp 10% -> 0%)")
+
+    def test_cart_update_with_fpos_no_variant_product(self):
+        # We will test that the mapping of an 10% included tax by a 0% by a fiscal position is taken into account when updating the cart for no_variant product
+        self.env.user.partner_id.country_id = False
+        current_website = self.env['website'].get_current_website()
+        pricelist = current_website.get_current_pricelist()
+        (self.env['product.pricelist'].search([]) - pricelist).write({'active': False})
+        # Add 10% tax on product
+        tax10 = self.env['account.tax'].create({'name': "Test tax 10", 'amount': 10, 'price_include': True, 'amount_type': 'percent', 'type_tax_use': 'sale'})
+        tax0 = self.env['account.tax'].create({'name': "Test tax 0", 'amount': 0, 'price_include': True, 'amount_type': 'percent', 'type_tax_use': 'sale'})
+
+        # Create fiscal position mapping taxes 10% -> 0%
+        fpos = self.env['account.fiscal.position'].create({
+            'name': 'test',
+        })
+        self.env['account.fiscal.position.tax'].create({
+            'position_id': fpos.id,
+            'tax_src_id': tax10.id,
+            'tax_dest_id': tax0.id,
+        })
+
+        product = self.env['product.product'].create({
+            'name': 'prod_no_variant',
+            'list_price': 110,
+            'taxes_id': [(6, 0, [tax10.id])],
+            'type': 'consu',
+        })
+
+        # create an attribute with one variant
+        product_attribute = self.env['product.attribute'].create({
+            'name': 'test_attr',
+            'display_type': 'radio',
+            'create_variant': 'no_variant',
+        })
+
+        # create attribute value
+        a1 = self.env['product.attribute.value'].create({
+            'name': 'pa_value',
+            'attribute_id': product_attribute.id,
+            'sequence': 1,
+        })
+
+        # set variant value to product template
+        product_template = self.env['product.template'].search(
+            [('name', '=', 'prod_no_variant')], limit=1)
+
+        product_template.attribute_line_ids = [(0, 0, {
+            'attribute_id': product_attribute.id,
+            'value_ids': [(6, 0, [a1.id])],
+        })]
+
+        # publish the product on website
+        product_template.is_published = True
+
+        # create a so for user using the fiscal position
+
+        so = self.env['sale.order'].create({
+            'partner_id': self.env.user.partner_id.id,
+        })
+        sol = self.env['sale.order.line'].create({
+            'name': product_template.name,
+            'product_id': product.id,
+            'product_uom_qty': 1,
+            'product_uom': product_template.uom_id.id,
+            'price_unit': product_template.list_price,
+            'order_id': so.id,
+            'tax_id': [(6, 0, [tax10.id])],
+        })
+        self.assertEqual(round(sol.price_total), 110.0, "110$ with 10% included tax")
+        so.pricelist_id = pricelist
+        so.fiscal_position_id = fpos
+        sol.product_id_change()
+        with MockRequest(self.env, website=current_website, sale_order_id=so.id):
+            so._cart_update(product_id=product.id, line_id=sol.id, set_qty=1)
+        self.assertEqual(round(sol.price_total), 100, "100$ with public price+ 0% tax (mapped from fp 10% -> 0%)")