diff --git a/facho/fe/form.py b/facho/fe/form.py
index 7f9f993..c00001c 100644
--- a/facho/fe/form.py
+++ b/facho/fe/form.py
@@ -116,11 +116,11 @@ class Invoice:
     def add_invoice_line(self, line: InvoiceLine):
         self.invoice_lines.append(line)
 
-    def validate(self, validator):
-        validator.validate_customer(self.invoice_customer)
-        validator.validate_supplier(self.invoice_supplier)
+    def accept(self, visitor):
+        visitor.visit_customer(self.invoice_customer)
+        visitor.visit_supplier(self.invoice_supplier)
         for invline in self.invoice_lines:
-            validator.validate_invoice_line(self, invline)
+            visitor.visit_invoice_line(invline)
 
     def _calculate_legal_monetary_total(self):
         for invline in self.invoice_lines:
@@ -155,13 +155,17 @@ class DianResolucion0001Validator:
         except KeyError:
             self.errors.append(('organization_code', 'not found'))
 
-    def validate_customer(self, customer):
+    def validate(self, invoice):
+        invoice.accept(self)
+        return not self.errors
+
+    def visit_customer(self, customer):
         self._validate_party(customer)
 
-    def validate_supplier(self, supplier):
+    def visit_supplier(self, supplier):
         self._validate_party(supplier)
 
-    def validate_invoice_line(self, invoice, line):
+    def visit_invoice_line(self, line):
         pass
 
     def valid(self):
diff --git a/tests/test_fe_form.py b/tests/test_fe_form.py
index a8f7b87..b538081 100644
--- a/tests/test_fe_form.py
+++ b/tests/test_fe_form.py
@@ -72,8 +72,7 @@ def simple_invoice():
 
 def test_invoicesimple_build(simple_invoice):
     invoice_validator = form.DianResolucion0001Validator()
-    simple_invoice.validate(invoice_validator)
-    assert invoice_validator.valid() == True
+    assert invoice_validator.validate(simple_invoice) == True
     xml = form.DIANInvoiceXML(simple_invoice)
 
     supplier_name = xml.get_element_text('/fe:Invoice/fe:AccountingSupplierParty/fe:Party/cac:PartyName/cbc:Name')
@@ -91,8 +90,7 @@ def test_invoicesimple_build(simple_invoice):
 
 def test_invoicesimple_build_with_cufe(simple_invoice):
     invoice_validator = form.DianResolucion0001Validator()
-    simple_invoice.validate(invoice_validator)
-    assert invoice_validator.valid() == True
+    assert invoice_validator.validate(simple_invoice) == True
     xml = form.DIANInvoiceXML(simple_invoice)
     cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice)
     xml.add_extension(cufe_extension)
@@ -102,8 +100,7 @@ def test_invoicesimple_build_with_cufe(simple_invoice):
 
 def test_invoicesimple_xml_signed(monkeypatch, simple_invoice):
     invoice_validator = form.DianResolucion0001Validator()
-    simple_invoice.validate(invoice_validator)
-    assert invoice_validator.valid() == True
+    assert invoice_validator.validate(simple_invoice) == True
     xml = form.DIANInvoiceXML(simple_invoice)
 
     signer = fe.DianXMLExtensionSigner('./tests/example.p12')