diff --git a/l10n_mx_facturae/models/account_move.py b/l10n_mx_facturae/models/account_move.py
index 4faaff9983442724a7d824a63dc8d1106afa2709..8bd86a8a42ce2841fdcfc91a075b85fa135319ae 100644
--- a/l10n_mx_facturae/models/account_move.py
+++ b/l10n_mx_facturae/models/account_move.py
@@ -50,7 +50,7 @@ class AccountMove(models.Model):
             self.subtotal
             - self.descuento
             + self.impuestos["total_traslados"]
-            + self.impuestos["total_retenciones"]
+            - self.impuestos["total_retenciones"]
             + self.impuestos["total_locales"]
         )
 
@@ -86,16 +86,17 @@ class AccountMove(models.Model):
         # Classify taxes for CFDI
         for dummy, tax in tax_grouped.items():
             if tax.group in ["IVA", "IEPS", "ISR"]:
-                tax.xml_amount = "{0:.2f}".format(tax.amount)
+                tax.xml_amount = "{0:.2f}".format(abs(tax.amount))
                 if tax.amount >= 0:
                     taxes["traslados"].append(tax)
                     taxes["total_traslados"] += tax.amount
                 else:
                     taxes["retenciones"].append(tax)
-                    taxes["total_retenciones"] += tax.amount
+                    taxes["total_retenciones"] += abs(tax.amount)
             else:
                 taxes["locales"].append(tax)
                 taxes["total_locales"] += tax.amount
+
         return taxes
 
     # pylint: disable=W0212
@@ -708,7 +709,7 @@ class AccountMoveLine(models.Model):
                 "002" if tax_group.name == "IVA" else "003"
             )
             tax["type"] = tax_record.l10n_mx_tax_type
-            tax["xml_amount"] = "{0:.2f}".format(tax["amount"])
+            tax["xml_amount"] = "{0:.2f}".format(abs(tax["amount"]))
             tax["TasaOCuota"] = "{0:.6f}".format(abs(tax_record.amount)/100)
             return tax