Index: stoq/domain/person.py
===================================================================
--- stoq/domain/person.py	(revision 2356)
+++ stoq/domain/person.py	(working copy)
@@ -154,6 +154,8 @@
         if self.street and self.number and self.district:
             return '%s %s, %s' % (self.street, self.number, self.district)
 
+        # TODO: Try to return a better string if all fields aren't set
+        return ''
 
 class Liaison(Domain):
     """Base class to store the person's contact informations."""
@@ -236,6 +238,12 @@
             raise DatabaseInconsistency, msg
         return address[0]
 
+    def get_address_string(self):
+        address = self.get_main_address()
+        if not address:
+            return ''
+        return address.get_address_string()
+
     #
     # Auxiliary methods
     #
Index: stoq/domain/base.py
===================================================================
--- stoq/domain/base.py	(revision 2356)
+++ stoq/domain/base.py	(working copy)
@@ -321,6 +321,18 @@
                               (adaptable, self))
         return adapter
 
+    def providedBy(self, adaptable):
+        """
+        @param adaptable:
+        @returns: If the adaptable object can be adaptable to our interface
+        """
+
+        if super(ConnMetaInterface, self).providedBy(adaptable):
+            return True
+        if self(adaptable) is not None:
+            return True
+        return False
+
 ConnInterface = ConnMetaInterface('ConnInterface',
                                   __module__='stoq.domain.base')
 
Index: stoq/lib/drivers.py
===================================================================
--- stoq/lib/drivers.py	(revision 2356)
+++ stoq/lib/drivers.py	(working copy)
@@ -275,18 +275,19 @@
     #
 
     def identify_customer(self, person):
-        person.check_individual_or_company_facets()
-        if not person.get_main_address():
-            address = ''
-        else:
-            address = person.get_main_address().get_address_string()
-        individual = IIndividual(person, connection=person.get_connection())
-        if individual is None:
+        if IIndividual.providedBy(person):
+            individual = IIndividual(person, connection=person.get_connection())
+            document = individual.cpf
+        elif ICompany.providedBy(person):
             company = ICompany(person, connection=person.get_connection())
             document = company.cnpj
         else:
-            document = individual.cpf
-        self.printer.identify_customer(person.name, address, document)
+            raise TypeError(
+                "identify_customer needs an object implementing "
+                "IIndividual or ICompany")
+        self.printer.identify_customer(person.name,
+                                       person.get_address_string(),
+                                       document)
 
     def open(self):
         while True:
