diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py
index f03549400987556c6df9f66a634964f8d92fbec5..a1ec3abcdb5ac28367a1af7138fe8eea5a9bf45e 100644
--- a/addons/account/models/partner.py
+++ b/addons/account/models/partner.py
@@ -168,11 +168,17 @@ class AccountFiscalPosition(models.Model):
         # This can be easily overridden to apply more complex fiscal rules
         PartnerObj = self.env['res.partner']
         partner = PartnerObj.browse(partner_id)
+        delivery = PartnerObj.browse(delivery_id)
 
-        # if no delivery use invoicing
-        if delivery_id:
-            delivery = PartnerObj.browse(delivery_id)
-        else:
+        company = self.env.company
+        eu_country_codes = set(self.env.ref('base.europe').country_ids.mapped('code'))
+        intra_eu = vat_exclusion = False
+        if company.vat and partner.vat:
+            intra_eu = company.vat[:2] in eu_country_codes and partner.vat[:2] in eu_country_codes
+            vat_exclusion = company.vat[:2] == partner.vat[:2]
+
+        # If company and partner have the same vat prefix (and are both within the EU), use invoicing
+        if not delivery or (intra_eu and vat_exclusion):
             delivery = partner
 
         # partner manually set fiscal position always win