diff --git a/pretix_servicefees/signals.py b/pretix_servicefees/signals.py
index 884cb83..6c0cc1f 100644
--- a/pretix_servicefees/signals.py
+++ b/pretix_servicefees/signals.py
@@ -141,21 +141,26 @@ def get_fees(
         if split_taxes:
             # split taxes based on products ordered
             d = defaultdict(lambda: Decimal("0.00"))
+            trs = {}
             for p in positions:
                 if isinstance(p, CartPosition):
                     tr = p.item.tax_rule
                 else:
                     tr = p.tax_rule
-                d[tr] += p.price - p.tax_value
+                if not tr:
+                    tr = tax_rule_zero
+                # use tr.pk as key as tax_rule_zero is not hashable
+                d[tr.pk] += p.price - p.tax_value
+                trs[tr.pk] = tr
 
-            base_values = sorted([tuple(t) for t in d.items()], key=lambda t: t[0].rate)
-            sum_base = sum(t[1] for t in base_values)
+            base_values = sorted([(trs[key], value) for key, value in d.items()], key=lambda t: t[0].rate)
+            sum_base = sum(value for key, value in base_values)
             if sum_base:
                 fee_values = [
-                    (t[0], round_decimal(fee * t[1] / sum_base, event.currency))
-                    for t in base_values
+                    (key, round_decimal(fee * value / sum_base, event.currency))
+                    for key, value in base_values
                 ]
-                sum_fee = sum(t[1] for t in fee_values)
+                sum_fee = sum(value for key, value in fee_values)
 
                 # If there are rounding differences, we fix them up, but always leaning to the benefit of the tax
                 # authorities