Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/batching.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/batching.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/batching.py	(revision 12057)
@@ -376,5 +376,5 @@
     name = _('CustomerDocument Processor')
     iface = ICustomerDocument
-    factory_name = 'waeup.CustomerDocument'
+    factory_name = 'waeup.CustomerSampleDocument'
 
     location_fields = []
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/documents.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/documents.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/documents.py	(revision 12057)
@@ -59,13 +59,10 @@
 CustomerDocumentsContainer = attrs_to_fields(CustomerDocumentsContainer)
 
-class CustomerDocument(Document):
-    """This is a customer document.
+class CustomerDocumentBase(Document):
+    """This is a customer document baseclass.
     """
     grok.implements(ICustomerDocument, ICustomerNavigation)
     grok.provides(ICustomerDocument)
-
-    def __init__(self):
-        super(CustomerDocument, self).__init__()
-        return
+    grok.baseclass()
 
     @property
@@ -102,8 +99,14 @@
             return
 
-CustomerDocument = attrs_to_fields(CustomerDocument)
-
-class CustomerPDFDocument(CustomerDocument):
-    """This is a customer document for a single pdf upload file only.
+
+class CustomerSampleDocument(CustomerDocumentBase):
+    """This is a sample customer document.
+    """
+
+CustomerSampleDocument = attrs_to_fields(CustomerSampleDocument)
+
+
+class CustomerPDFDocument(CustomerDocumentBase):
+    """This is a customer document for a single pdf upload file.
     """
     grok.implements(ICustomerPDFDocument, ICustomerNavigation)
@@ -118,13 +121,13 @@
     """
     grok.implements(IFactory)
-    grok.name(u'waeup.CustomerDocument')
+    grok.name(u'waeup.CustomerSampleDocument')
     title = u"Create a new document.",
     description = u"This factory instantiates new sample document instances."
 
     def __call__(self, *args, **kw):
-        return CustomerDocument(*args, **kw)
+        return CustomerSampleDocument(*args, **kw)
 
     def getInterfaces(self):
-        return implementedBy(CustomerDocument)
+        return implementedBy(CustomerSampleDocument)
 
 # Customer documents must be importable. So we might need a factory.
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/fileviewlets.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/fileviewlets.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/fileviewlets.py	(revision 12057)
@@ -32,5 +32,9 @@
 
 from waeup.ikoba.customers.interfaces import (
-    ICustomer, ICustomersUtils, ICustomerDocument)
+    ICustomer, ICustomersUtils)
+
+from waeup.ikoba.customers.documents import (
+    CustomerSampleDocument, CustomerPDFDocument
+    )
 from waeup.ikoba.customers.browser import (
     CustomerBaseDisplayFormPage, CustomerBaseManageFormPage,
@@ -258,19 +262,19 @@
 # File viewlets for customer documents
 
-class ScanManageUpload(FileUpload):
+class SampleManageUpload(FileUpload):
     """Scan upload viewlet for officers.
     """
     grok.order(1)
-    grok.context(ICustomerDocument)
+    grok.context(CustomerSampleDocument)
     grok.view(DocumentManageFormPage)
     grok.require('waeup.manageCustomer')
-    label = _(u'Scan')
-    title = _(u'Scan')
+    label = _(u'Sample Scan')
+    title = _(u'Sample Scan')
     mus = 1024 * 50
-    download_name = u'scan'
+    download_name = u'sample'
     tab_redirect = '#tab2'
 
 
-class ScanEditUpload(ScanManageUpload):
+class SampleEditUpload(SampleManageUpload):
     """Scan upload viewlet for customer.
     """
@@ -279,21 +283,62 @@
 
 
-class ScanDisplay(FileDisplay):
+class SampleDisplay(FileDisplay):
     """Scan display viewlet.
     """
     grok.order(1)
-    grok.context(ICustomerDocument)
+    grok.context(CustomerSampleDocument)
     grok.require('waeup.viewCustomer')
     grok.view(DocumentDisplayFormPage)
-    label = _(u'Scan')
-    title = _(u'Scan')
-    download_name = u'scan'
-
-
-class ScanImage(Image):
+    label = _(u'Sample Scan')
+    title = _(u'Sample Scan')
+    download_name = u'sample'
+
+
+class SampleScanImage(Image):
     """Scan document.
     """
-    grok.name('scan')
-    grok.context(ICustomerDocument)
-    grok.require('waeup.viewCustomer')
-    download_name = u'scan'
+    grok.name('sample')
+    grok.context(CustomerSampleDocument)
+    grok.require('waeup.viewCustomer')
+    download_name = u'sample'
+
+
+class PDFManageUpload(FileUpload):
+    """Scan upload viewlet for officers.
+    """
+    grok.view(DocumentManageFormPage)
+    grok.context(CustomerPDFDocument)
+    grok.require('waeup.manageCustomer')
+    label = _(u'PDF File')
+    title = _(u'PDF File')
+    mus = 1024 * 200
+    download_name = u'pdffile'
+    tab_redirect = '#tab2'
+
+
+class PDFEditUpload(PDFManageUpload):
+    """Scan upload viewlet for customer.
+    """
+    grok.view(DocumentEditFormPage)
+    grok.require('waeup.handleCustomer')
+
+
+class PDFDisplay(FileDisplay):
+    """Scan display viewlet.
+    """
+    grok.order(1)
+    grok.context(CustomerPDFDocument)
+    grok.require('waeup.viewCustomer')
+    grok.view(DocumentDisplayFormPage)
+    label = _(u'PDF Scan')
+    title = _(u'PDF Scan')
+    download_name = u'pdf'
+
+
+class PDFScanImage(Image):
+    """Scan document.
+    """
+    grok.name('pdf')
+    grok.context(CustomerPDFDocument)
+    grok.require('waeup.viewCustomer')
+    download_name = u'pdf'
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/interfaces.py	(revision 12057)
@@ -269,6 +269,6 @@
     """
 
-    is_editable = Attribute('Document editable by customer')
-    translated_class_name = Attribute('Translatable class name')
+    #is_editable = Attribute('Document editable by customer')
+    #translated_class_name = Attribute('Translatable class name')
 
 
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/sample_document_data.csv
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/sample_document_data.csv	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/sample_document_data.csv	(revision 12057)
@@ -1,6 +1,6 @@
 class_name,document_id,reg_number,title
-CustomerDocument,d3,1,My first doc
-CustomerDocument,d4,2,My second doc
-CustomerDocument,d5,3,My third doc
-CustomerDocument,,1,My 4th doc
-CustomerDocument,d5,2,My stolen doc
+CustomerSampleDocument,d3,1,My first doc
+CustomerSampleDocument,d4,2,My second doc
+CustomerSampleDocument,d5,3,My third doc
+CustomerSampleDocument,,1,My 4th doc
+CustomerSampleDocument,d5,2,My stolen doc
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_batching.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_batching.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_batching.py	(revision 12057)
@@ -38,5 +38,5 @@
     CustomerProcessor, CustomerDocumentProcessor)
 from waeup.ikoba.customers.customer import Customer
-from waeup.ikoba.customers.documents import CustomerDocument
+from waeup.ikoba.customers.documents import CustomerSampleDocument
 from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
 
@@ -117,5 +117,5 @@
         customer.nationality = u'NG'
 
-        document = CustomerDocument()
+        document = CustomerSampleDocument()
         document.title = u'My Document'
         customer['documents'].addDocument(document)
@@ -262,5 +262,5 @@
         self.app['customers'].addCustomer(customer)
         self.customer = self.app['customers'][customer.customer_id]
-        document = createObject(u'waeup.CustomerDocument')
+        document = createObject(u'waeup.CustomerSampleDocument')
         document.document_id = 'd120'
         self.customer['documents'][document.document_id] = document
@@ -306,5 +306,5 @@
     def test_addEntry(self):
         self.assertEqual(len(self.customer['documents'].keys()),1)
-        document1 = createObject(u'waeup.CustomerDocument')
+        document1 = createObject(u'waeup.CustomerSampleDocument')
         document1.document_id = 'p234'
         self.processor.addEntry(
@@ -313,18 +313,18 @@
         self.assertEqual(len(self.customer['documents'].keys()),2)
         self.assertEqual(self.customer['documents']['p234'].document_id, 'p234')
-        document2 = createObject(u'waeup.CustomerDocument')
+        document2 = createObject(u'waeup.CustomerSampleDocument')
         document1.document_id = 'nonsense'
 
     def test_checkConversion(self):
         errs, inv_errs, conv_dict = self.processor.checkConversion(
-            dict(document_id='d1266236341955', class_name='CustomerDocument'))
+            dict(document_id='d1266236341955', class_name='CustomerSampleDocument'))
         self.assertEqual(len(errs),0)
         errs, inv_errs, conv_dict = self.processor.checkConversion(
-            dict(document_id='nonsense', class_name='CustomerDocument'))
+            dict(document_id='nonsense', class_name='CustomerSampleDocument'))
         self.assertEqual(len(errs),1)
         timestamp = ("%d" % int(time()*10000))[1:]
         document_id = "d%s" % timestamp
         errs, inv_errs, conv_dict = self.processor.checkConversion(
-            dict(document_id=document_id, class_name='CustomerDocument'))
+            dict(document_id=document_id, class_name='CustomerSampleDocument'))
         self.assertEqual(len(errs),0)
         errs, inv_errs, conv_dict = self.processor.checkConversion(
@@ -340,5 +340,5 @@
         self.assertEqual(fail_file,
             'class_name,reg_number,document_id,title,--ERRORS--\r\n'
-            'CustomerDocument,2,d5,My stolen doc,document_id: id exists\r\n')
+            'CustomerSampleDocument,2,d5,My stolen doc,document_id: id exists\r\n')
         document = self.processor.getEntry(dict(reg_number='1',
             document_id='d3'), self.app)
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_browser.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_browser.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_browser.py	(revision 12057)
@@ -103,5 +103,5 @@
         self.customer_id = customer.customer_id
         self.customer = self.app['customers'][self.customer_id]
-        document = createObject('waeup.CustomerDocument')
+        document = createObject('waeup.CustomerSampleDocument')
         document.title = u'My first document'
         self.customer['documents'].addDocument(document)
@@ -800,5 +800,5 @@
 
 class DocumentUITests(CustomersFullSetup):
-    # Tests for CustomerDocument relates views and pages
+    # Tests for CustomerSampleDocument relates views and pages
 
     def test_manage_document(self):
@@ -871,5 +871,5 @@
         self.browser.getLink("Documents").click()
         self.browser.getLink("Add document").click()
-        self.browser.getControl(name="doctype").value = ['CustomerDocument']
+        self.browser.getControl(name="doctype").value = ['CustomerSampleDocument']
         self.browser.getControl("Create document").click()
         self.assertTrue('Sample Document created.' in self.browser.contents)
@@ -892,12 +892,12 @@
         # Costumer can upload a document.
         self.browser.getLink("Edit").click()
-        ctrl = self.browser.getControl(name='scaneditupload')
+        ctrl = self.browser.getControl(name='sampleeditupload')
         file_obj = open(SAMPLE_IMAGE, 'rb')
         file_ctrl = ctrl.mech_control
         file_ctrl.add_file(file_obj, filename='my_document.jpg')
         self.browser.getControl(
-            name='upload_scaneditupload').click()
-        self.assertTrue(
-            'href="http://localhost/app/customers/K1000000/documents/d102/scan"'
+            name='upload_sampleeditupload').click()
+        self.assertTrue(
+            'href="http://localhost/app/customers/K1000000/documents/d102/sample"'
             in self.browser.contents)
         # Costumer can submit the form. The form is also saved.
@@ -918,24 +918,24 @@
         # Create a pseudo image file and select it to be uploaded 
         image = open(SAMPLE_IMAGE, 'rb')
-        ctrl = self.browser.getControl(name='scanmanageupload')
+        ctrl = self.browser.getControl(name='samplemanageupload')
         file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(image, filename='my_scan.jpg')
+        file_ctrl.add_file(image, filename='my_sample_scan.jpg')
         # The Save action does not upload files
         self.browser.getControl("Save").click() # submit form
         self.assertFalse(
-            'href="http://localhost/app/customers/K1000000/documents/d101/scan"'
+            'href="http://localhost/app/customers/K1000000/documents/d101/sample"'
             in self.browser.contents)
         # ... but the correct upload submit button does
         image = open(SAMPLE_IMAGE)
-        ctrl = self.browser.getControl(name='scanmanageupload')
+        ctrl = self.browser.getControl(name='samplemanageupload')
         file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(image, filename='my_scan.jpg')
-        self.browser.getControl(
-            name='upload_scanmanageupload').click()
-        self.assertTrue(
-            'href="http://localhost/app/customers/K1000000/documents/d101/scan"'
+        file_ctrl.add_file(image, filename='my_sample_scan.jpg')
+        self.browser.getControl(
+            name='upload_samplemanageupload').click()
+        self.assertTrue(
+            'href="http://localhost/app/customers/K1000000/documents/d101/sample"'
             in self.browser.contents)
         # Browsing the link shows a real image
-        self.browser.open('scan')
+        self.browser.open('sample')
         self.assertEqual(
             self.browser.headers['content-type'], 'image/jpeg')
@@ -944,40 +944,40 @@
         self.browser.open(self.customer_path + '/documents/d101/manage')
         self.assertFalse(
-            'upload_scanmanageupload' in self.browser.contents)
+            'upload_samplemanageupload' in self.browser.contents)
         # File must be deleted first
-        self.browser.getControl(name='delete_scanmanageupload').click()
-        self.assertTrue(
-            'scan deleted' in self.browser.contents)
+        self.browser.getControl(name='delete_samplemanageupload').click()
+        self.assertTrue(
+            'sample deleted' in self.browser.contents)
         # Uploading a file which is bigger than 150k will raise an error
         big_image = StringIO(open(SAMPLE_IMAGE, 'rb').read() * 75)
-        ctrl = self.browser.getControl(name='scanmanageupload')
+        ctrl = self.browser.getControl(name='samplemanageupload')
         file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(big_image, filename='my_scan.jpg')
-        self.browser.getControl(
-            name='upload_scanmanageupload').click()
+        file_ctrl.add_file(big_image, filename='my_sample_scan.jpg')
+        self.browser.getControl(
+            name='upload_samplemanageupload').click()
         self.assertTrue(
             'Uploaded file is too big' in self.browser.contents)
         # we do not rely on filename extensions given by uploaders
         image = open(SAMPLE_IMAGE, 'rb') # a jpg-file
-        ctrl = self.browser.getControl(name='scanmanageupload')
+        ctrl = self.browser.getControl(name='samplemanageupload')
         file_ctrl = ctrl.mech_control
         # tell uploaded file is bmp
-        file_ctrl.add_file(image, filename='my_scan.bmp')
-        self.browser.getControl(
-            name='upload_scanmanageupload').click()
+        file_ctrl.add_file(image, filename='my_sample_scan.bmp')
+        self.browser.getControl(
+            name='upload_samplemanageupload').click()
         self.assertTrue(
             # jpg file was recognized
-            'File scan.jpg uploaded.' in self.browser.contents)
+            'File sample.jpg uploaded.' in self.browser.contents)
         # Delete file again
-        self.browser.getControl(name='delete_scanmanageupload').click()
-        self.assertTrue(
-            'scan deleted' in self.browser.contents)
+        self.browser.getControl(name='delete_samplemanageupload').click()
+        self.assertTrue(
+            'sample deleted' in self.browser.contents)
         # File names must meet several conditions
         bmp_image = open(SAMPLE_IMAGE_BMP, 'rb')
-        ctrl = self.browser.getControl(name='scanmanageupload')
+        ctrl = self.browser.getControl(name='samplemanageupload')
         file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(bmp_image, filename='my_scan.bmp')
-        self.browser.getControl(
-            name='upload_scanmanageupload').click()
+        file_ctrl.add_file(bmp_image, filename='my_sample_scan.bmp')
+        self.browser.getControl(
+            name='upload_samplemanageupload').click()
         self.assertTrue('Only the following extensions are allowed'
             in self.browser.contents)
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_document.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_document.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_document.py	(revision 12057)
@@ -27,5 +27,5 @@
 from waeup.ikoba.interfaces import IObjectHistory
 from waeup.ikoba.customers.documents import (
-    CustomerDocumentsContainer, CustomerDocument)
+    CustomerDocumentsContainer, CustomerSampleDocument)
 from waeup.ikoba.testing import (FunctionalLayer, FunctionalTestCase)
 
@@ -46,9 +46,9 @@
         self.assertTrue(
             verifyClass(
-                ICustomerDocument, CustomerDocument)
+                ICustomerDocument, CustomerSampleDocument)
             )
         self.assertTrue(
             verifyObject(
-                ICustomerDocument, CustomerDocument())
+                ICustomerDocument, CustomerSampleDocument())
             )
         return
@@ -56,14 +56,14 @@
     def test_addDocument(self):
         container = CustomerDocumentsContainer()
-        document = createObject(u'waeup.CustomerDocument')
+        document = createObject(u'waeup.CustomerSampleDocument')
         id = document.document_id
         container.addDocument(document)
         self.assertEqual(container[id], document)
         self.assertRaises(TypeError, container.addDocument, object())
-        self.assertEqual(document.class_name, 'CustomerDocument')
+        self.assertEqual(document.class_name, 'CustomerSampleDocument')
         return
 
     def test_document_workflow(self):
-        document = createObject(u'waeup.CustomerDocument')
+        document = createObject(u'waeup.CustomerSampleDocument')
         IWorkflowInfo(document).fireTransition('create')
         self.assertEqual(IWorkflowState(document).getState(), 'created')
@@ -82,5 +82,5 @@
 
     def test_document_history(self):
-        doc = createObject(u'waeup.CustomerDocument')
+        doc = createObject(u'waeup.CustomerSampleDocument')
         IWorkflowInfo(doc).fireTransition('create')
         messages = ' '.join(doc.history.messages)
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 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_export.py	(revision 12057)
@@ -13,5 +13,5 @@
 from waeup.ikoba.customers.interfaces import ICSVCustomerExporter
 from waeup.ikoba.customers.customer import Customer
-from waeup.ikoba.customers.documents import CustomerDocument
+from waeup.ikoba.customers.documents import CustomerSampleDocument
 from waeup.ikoba.customers.tests.test_batching import CustomerImportExportSetup
 from waeup.ikoba.testing import FunctionalLayer
@@ -132,5 +132,5 @@
     def test_export_empty(self):
         # we can export a nearly empty document
-        document = CustomerDocument()
+        document = CustomerSampleDocument()
         exporter = CustomerDocumentsExporter()
         exporter.export([document], self.outfile)
@@ -139,5 +139,5 @@
             result,
             'class_name,document_id,history,last_transition_date,state,title,customer_id\r\n'
-            'CustomerDocument,d101,[],,,,\r\n'
+            'CustomerSampleDocument,d101,[],,,,\r\n'
             )
         return
@@ -156,5 +156,5 @@
             )
         self.assertMatches(
-            '...CustomerDocument,d101,[u\'2014-11-25 06:57:24 UTC - '
+            '...CustomerSampleDocument,d101,[u\'2014-11-25 06:57:24 UTC - '
             'Document created by system\'],2014-11-25 06:57:24.990308#,'
             'created,My Document,A111111...',
@@ -174,5 +174,5 @@
             in result)
         self.assertMatches(
-            '...CustomerDocument,d101,[u\'2014-11-25 06:57:24 UTC - '
+            '...CustomerSampleDocument,d101,[u\'2014-11-25 06:57:24 UTC - '
             'Document created by system\'],2014-11-25 06:57:24.990308#,'
             'created,My Document,A111111...',
@@ -192,5 +192,5 @@
             in result)
         self.assertMatches(
-            '...CustomerDocument,d101,[u\'2014-11-25 06:57:24 UTC - '
+            '...CustomerSampleDocument,d101,[u\'2014-11-25 06:57:24 UTC - '
             'Document created by system\'],2014-11-25 06:57:24.990308#,'
             'created,My Document,A111111...',
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py	(revision 12056)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py	(revision 12057)
@@ -289,5 +289,5 @@
 
     DOCTYPES_DICT = {
-        'CustomerDocument': 'Sample Document',
+        'CustomerSampleDocument': 'Sample Document',
         'CustomerPDFDocument': 'PDF Document',
         }
