Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py	(revision 12278)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py	(revision 12279)
@@ -27,6 +27,6 @@
 from waeup.ikoba.customers.catalog import CustomersQuery
 from waeup.ikoba.customers.interfaces import (
-    ICustomer, ICSVCustomerExporter, ICustomerDocument,
-    ISampleContract)
+    ICustomer, ICSVCustomerExporter,
+    ICustomerSampleDocument, ISampleContract)
 from waeup.ikoba.utils.batching import ExporterBase
 from waeup.ikoba.utils.helpers import iface_names, to_timezone
@@ -34,5 +34,5 @@
 #: A tuple containing all exporter names referring to customers or
 #: subobjects thereof.
-EXPORTER_NAMES = ('customers', 'customerdocuments')
+EXPORTER_NAMES = ('customers', 'customersampledocuments', 'samplecontracts')
 
 
@@ -42,5 +42,5 @@
     return cust_filter.query()
 
-def get_documents(customers):
+def get_documents(customers, class_name):
     """Get all documents of `customers`.
     """
@@ -48,8 +48,9 @@
     for customer in customers:
         for document in customer.get('documents', {}).values():
-            documents.append(document)
+            if document.class_name == class_name:
+                documents.append(document)
     return documents
 
-def get_contracts(customers):
+def get_contracts(customers, class_name):
     """Get all contracts of `customers`.
     """
@@ -57,5 +58,6 @@
     for customer in customers:
         for contract in customer.get('contracts', {}).values():
-            contracts.append(contract)
+            if contract.class_name == class_name:
+                contracts.append(contract)
     return contracts
 
@@ -151,13 +153,13 @@
 
 
-class CustomerDocumentExporter(grok.GlobalUtility, CustomerExporterBase):
-    """Exporter for CustomerDocument instances.
-    """
-    grok.name('customerdocuments')
-
-    iface = ICustomerDocument
-
-    #: The title under which this exporter will be displayed
-    title = _(u'Customer Documents')
+class CustomerDocumentExporterBase(grok.GlobalUtility, CustomerExporterBase):
+    """Exporter for Customer Document instances.
+
+    This is a baseclass.
+    """
+    grok.baseclass()
+    iface = None
+    class_name = None
+    title = None
 
     #: Fieldnames considered by this exporter
@@ -177,5 +179,5 @@
 
     def filter_func(self, x, **kw):
-        return get_documents(x)
+        return get_documents(x, self.class_name)
 
     def mangle_value(self, value, name, context=None):
@@ -184,17 +186,27 @@
             value = value.messages
         return super(
-            CustomerDocumentExporter, self).mangle_value(
+            CustomerDocumentExporterBase, self).mangle_value(
             value, name, context=context)
 
 
-class ContractExporter(grok.GlobalUtility, CustomerExporterBase):
+class CustomerSampleDocumentExporter(CustomerDocumentExporterBase):
+    """Exporter for CustomerSampleDocument instances.
+    """
+    grok.name('customersampledocuments')
+
+    iface = ICustomerSampleDocument
+    class_name = 'CustomerSampleDocument'
+    title = _(u'Customer Sample Documents')
+
+
+class SampleContractExporterBase(grok.GlobalUtility, CustomerExporterBase):
     """Exporter for Contract instances.
-    """
-    grok.name('contracts')
-
-    iface = ISampleContract
-
-    #: The title under which this exporter will be displayed
-    title = _(u'Contracts')
+
+    This is a baseclass.
+    """
+    grok.baseclass()
+    iface = None
+    class_name = None
+    title = None
 
     #: Fieldnames considered by this exporter
@@ -211,5 +223,5 @@
 
     def filter_func(self, x, **kw):
-        return get_contracts(x)
+        return get_contracts(x, self.class_name)
 
     def mangle_value(self, value, name, context=None):
@@ -225,4 +237,13 @@
                 return mangled_value
         return super(
-            ContractExporter, self).mangle_value(
+            SampleContractExporterBase, self).mangle_value(
             value, name, context=context)
+
+
+class SampleContractExporter(SampleContractExporterBase):
+    """Exporter for sample contracts.
+    """
+    grok.name('samplecontracts')
+    iface = ISampleContract
+    class_name = 'SampleContract'
+    title = _(u'Sample Contracts')
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py	(revision 12278)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py	(revision 12279)
@@ -251,6 +251,12 @@
 
 
+class ICustomerSampleDocument(ICustomerDocument):
+    """A customer sample document object.
+
+    """
+
+
 class ICustomerPDFDocument(ICustomerDocument):
-    """A customer document.
+    """A customer pdf document object.
 
     """
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_export.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_export.py	(revision 12278)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_export.py	(revision 12279)
@@ -31,5 +31,5 @@
 from waeup.ikoba.customers.catalog import CustomersQuery
 from waeup.ikoba.customers.export import (
-    CustomerExporter, CustomerDocumentExporter, ContractExporter,
+    CustomerExporter, CustomerSampleDocumentExporter, SampleContractExporter,
     get_customers)
 from waeup.ikoba.customers.interfaces import ICSVCustomerExporter
@@ -131,10 +131,10 @@
         return
 
-class CustomerDocumentExporterTest(CustomerImportExportSetup):
+class CustomerSampleDocumentExporterTest(CustomerImportExportSetup):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(CustomerDocumentExporterTest, self).setUp()
+        super(CustomerSampleDocumentExporterTest, self).setUp()
         self.setup_for_export()
         return
@@ -142,12 +142,12 @@
     def test_ifaces(self):
         # make sure we fullfill interface contracts
-        obj = CustomerDocumentExporter()
+        obj = CustomerSampleDocumentExporter()
         verifyObject(ICSVCustomerExporter, obj)
-        verifyClass(ICSVCustomerExporter, CustomerDocumentExporter)
+        verifyClass(ICSVCustomerExporter, CustomerSampleDocumentExporter)
         return
 
     def test_get_as_utility(self):
         # we can get a documents exporter as utility
-        result = queryUtility(ICSVExporter, name="customerdocuments")
+        result = queryUtility(ICSVExporter, name="customersampledocuments")
         self.assertTrue(result is not None)
         return
@@ -157,5 +157,5 @@
         document = CustomerSampleDocument()
         document.document_id = u'DOC1'
-        exporter = CustomerDocumentExporter()
+        exporter = CustomerSampleDocumentExporter()
         exporter.export([document], self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -172,5 +172,5 @@
         self.setup_customer(self.customer)
         document = self.customer['documents']['DOC1']
-        exporter = CustomerDocumentExporter()
+        exporter = CustomerSampleDocumentExporter()
         exporter.export([document], self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -191,5 +191,5 @@
         # set values we can expect in export file
         self.setup_customer(self.customer)
-        exporter = CustomerDocumentExporter()
+        exporter = CustomerSampleDocumentExporter()
         exporter.export_all(self.app, self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -209,5 +209,5 @@
         # set values we can expect in export file
         self.setup_customer(self.customer)
-        exporter = CustomerDocumentExporter()
+        exporter = CustomerSampleDocumentExporter()
         exporter.export_customer(self.customer, self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -224,10 +224,10 @@
 
 
-class ContractExporterTest(CustomerImportExportSetup):
+class SampleContractExporterTest(CustomerImportExportSetup):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(ContractExporterTest, self).setUp()
+        super(SampleContractExporterTest, self).setUp()
         self.setup_for_export()
         return
@@ -235,12 +235,12 @@
     def test_ifaces(self):
         # make sure we fullfill interface contracts
-        obj = ContractExporter()
+        obj = SampleContractExporter()
         verifyObject(ICSVCustomerExporter, obj)
-        verifyClass(ICSVCustomerExporter, ContractExporter)
+        verifyClass(ICSVCustomerExporter, SampleContractExporter)
         return
 
     def test_get_as_utility(self):
         # we can get a contracts exporter as utility
-        result = queryUtility(ICSVExporter, name="contracts")
+        result = queryUtility(ICSVExporter, name="samplecontracts")
         self.assertTrue(result is not None)
         return
@@ -250,5 +250,5 @@
         contract = SampleContract()
         contract.contract_id = u'CON1'
-        exporter = ContractExporter()
+        exporter = SampleContractExporter()
         exporter.export([contract], self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -267,5 +267,5 @@
         # set values we can expect in export file
         self.setup_customer(self.customer)
-        exporter = ContractExporter()
+        exporter = SampleContractExporter()
         exporter.export([self.contract], self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -286,5 +286,5 @@
         # set values we can expect in export file
         self.setup_customer(self.customer)
-        exporter = ContractExporter()
+        exporter = SampleContractExporter()
         exporter.export_all(self.app, self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -305,5 +305,5 @@
         # set values we can expect in export file
         self.setup_customer(self.customer)
-        exporter = ContractExporter()
+        exporter = SampleContractExporter()
         exporter.export_customer(self.customer, self.outfile)
         result = open(self.outfile, 'rb').read()
