Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/batching.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/batching.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/batching.py	(revision 14197)
@@ -24,5 +24,6 @@
 from ikobacustom.uniben.customers.interfaces import (
     IUnibenCustomer,
-    IUnibenCustomerDocument, IRIAAContract)
+    IUnibenCustomerPDFDocument, IUnibenCustomerJPGDocument,
+    IRIAAContract)
 from ikobacustom.uniben.interfaces import MessageFactory as _
 
@@ -43,6 +44,16 @@
     grok.name(util_name)
     name = _('Uniben Customer PDF Document Processor')
-    iface = IUnibenCustomerDocument
+    iface = IUnibenCustomerPDFDocument
     factory_name = 'waeup.UnibenCustomerPDFDocument'
+
+
+class UnibenCustomerJPGDocumentProcessor(CustomerDocumentProcessorBase):
+    """A batch processor for IUnibenCustomerDocument objects.
+    """
+    util_name = 'unibencustomerjpgdocumentprocessor'
+    grok.name(util_name)
+    name = _('Uniben Customer JPG Document Processor')
+    iface = IUnibenCustomerJPGDocument
+    factory_name = 'waeup.UnibenCustomerJPGDocument'
 
 
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/documents.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/documents.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/documents.py	(revision 14197)
@@ -27,13 +27,13 @@
 from ikobacustom.uniben.interfaces import MessageFactory as _
 from ikobacustom.uniben.customers.interfaces import (
-    IUnibenCustomerDocument, IUnibenCustomerPDFDocument)
+    IUnibenCustomerPDFDocument,
+    IUnibenCustomerJPGDocument)
 
-
-class UnibenCustomerDocument(CustomerDocumentBase):
-    """This is a sample customer document.
+class UnibenCustomerJPGDocument(CustomerDocumentBase):
+    """This is a customer jpg document.
     """
 
-    grok.implements(IUnibenCustomerDocument, ICustomerNavigation)
-    grok.provides(IUnibenCustomerDocument)
+    grok.implements(IUnibenCustomerJPGDocument, ICustomerNavigation)
+    grok.provides(IUnibenCustomerJPGDocument)
 
     # Ikoba can store any number of files per Document object.
@@ -41,25 +41,25 @@
     # only one file per Document object. Thus the following
     # tuple should contain only a single filename string.
-    filenames = ('scan',)
+    filenames = ('scan.jpg',)
 
-    form_fields_interface = IUnibenCustomerDocument
+    form_fields_interface = IUnibenCustomerJPGDocument
 
-UnibenCustomerDocument = attrs_to_fields(UnibenCustomerDocument)
+UnibenCustomerJPGDocument = attrs_to_fields(UnibenCustomerJPGDocument)
 
 
-# Customer documents must be importable. So we need a factory.
-class UnibenCustomerDocumentFactory(grok.GlobalUtility):
-    """A factory for customer documents.
+class UnibenCustomerJPGDocumentFactory(grok.GlobalUtility):
+    """A factory for customer jpg documents.
     """
     grok.implements(IFactory)
-    grok.name(u'waeup.UnibenCustomerDocument')
+    grok.name(u'waeup.UnibenCustomerJPGDocument')
     title = u"Create a new document.",
-    description = u"This factory instantiates new sample document instances."
+    description = u"This factory instantiates new document instances."
 
     def __call__(self, *args, **kw):
-        return UnibenCustomerDocument(*args, **kw)
+        return UnibenCustomerJPGDocument(*args, **kw)
 
     def getInterfaces(self):
-        return implementedBy(UnibenCustomerDocument)
+        return implementedBy(UnibenCustomerJPGDocument)
+
 
 class UnibenCustomerPDFDocument(CustomerDocumentBase):
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/export.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/export.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/export.py	(revision 14197)
@@ -22,5 +22,5 @@
     CustomerExporter, CustomerDocumentExporterBase, ContractExporterBase)
 from ikobacustom.uniben.customers.interfaces import (
-    IUnibenCustomer, IUnibenCustomerDocument, IRIAAContractProcess,
+    IUnibenCustomer, IUnibenCustomerJPGDocument, IRIAAContractProcess,
     IUnibenCustomerPDFDocument)
 from ikobacustom.uniben.interfaces import MessageFactory as _
@@ -42,4 +42,13 @@
 
 
+class UnibenCustomerJPGDocumentExporter(CustomerDocumentExporterBase):
+    """Exporter for documents.
+    """
+    grok.name('unibencustomerjpgdocuments')
+    iface = IUnibenCustomerJPGDocument
+    title = _(u'Uniben Customer JPG Documents')
+    class_name = 'UnibenCustomerJPGDocument'
+
+
 class RIAAContractExporter(ContractExporterBase):
     """Exporter for Contract instances.
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/fileviewlets.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/fileviewlets.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/fileviewlets.py	(revision 14197)
@@ -24,5 +24,6 @@
 
 from ikobacustom.uniben.customers.documents import (
-    UnibenCustomerDocument, UnibenCustomerPDFDocument)
+    UnibenCustomerPDFDocument,
+    UnibenCustomerJPGDocument)
 
 from waeup.ikoba.customers.browser import (
@@ -36,20 +37,23 @@
 # File viewlets for customer documents
 
-class SampleScanManageUpload(FileUpload):
+class JPGScanManageUpload(FileUpload):
     """Scan upload viewlet for officers.
     """
     grok.order(1)
-    grok.context(UnibenCustomerDocument)
+    grok.context(UnibenCustomerJPGDocument)
     grok.view(DocumentManageFormPage)
     grok.require('waeup.manageCustomer')
-    label = _(u'Sample Scan')
-    title = _(u'Sample Scan')
+    label = _(u'JPG File')
+    title = _(u'JPG File')
     mus = 1024 * 200
-    download_name = u'sample'
-    download_filename = download_name
+    download_name = u'scan.jpg'
     tab_redirect = '#tab2'
 
+    @property
+    def download_filename(self):
+        return u"%s.jpg" % self.context.document_id[:9]
 
-class SampleScanEditUpload(SampleScanManageUpload):
+
+class JPGScanEditUpload(JPGScanManageUpload):
     """Scan upload viewlet for customer.
     """
@@ -58,29 +62,35 @@
 
 
-class SampleScanDisplay(FileDisplay):
+class JPGScanDisplay(FileDisplay):
     """Scan display viewlet.
     """
     grok.order(1)
-    grok.context(UnibenCustomerDocument)
+    grok.context(UnibenCustomerJPGDocument)
     grok.require('waeup.viewCustomer')
     grok.view(DocumentDisplayFormPage)
-    label = _(u'Sample Scan')
-    title = _(u'Sample Scan')
-    download_name = u'sample'
-    download_filename = download_name
+    label = _(u'JPG File')
+    title = _(u'JPG File')
+    download_name = u'scan.jpg'
+
+    @property
+    def download_filename(self):
+        return u"%s.jpg" % self.context.document_id[:9]
 
 
-class SampleScanImage(Image):
+class JPGScanImage(Image):
     """Scan document.
     """
-    grok.name('sample')
-    grok.context(UnibenCustomerDocument)
+    grok.name('scan.jpg')
+    grok.context(UnibenCustomerJPGDocument)
     grok.require('waeup.viewCustomer')
-    download_name = u'sample'
-    download_filename = download_name
+    download_name = u'scan.jpg'
 
+    @property
+    def download_filename(self):
+        return u"%s.jpg" % self.context.document_id[:9]
 
-class SampleScanPDFSlip(SampleScanDisplay):
+class JPGScanPDFSlip(JPGScanDisplay):
     grok.view(PDFDocumentSlip)
+
 
 class PDFScanManageUpload(FileUpload):
@@ -115,6 +125,6 @@
     grok.require('waeup.viewCustomer')
     grok.view(DocumentDisplayFormPage)
-    label = _(u'PDF Scan')
-    title = _(u'PDF Scan')
+    label = _(u'PDF File')
+    title = _(u'PDF File')
     download_name = u'scan.pdf'
 
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/interfaces.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/interfaces.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/interfaces.py	(revision 14197)
@@ -17,7 +17,8 @@
 ##
 
+import re
 from zope import schema
 from waeup.ikoba.interfaces import IIkobaObject
-from waeup.ikoba.schema import FormattedDate
+from waeup.ikoba.schema import FormattedDate, PhoneNumber
 from waeup.ikoba.customers.interfaces import (
     ICustomer, ICustomerDocument, ICustomerPDFDocument, IContract)
@@ -27,4 +28,16 @@
 from ikobacustom.uniben.interfaces import MessageFactory as _
 
+class NotUnibenEmailAddress(schema.ValidationError):
+    __doc__ = u"Invalid Uniben email address"
+
+check_email = re.compile(
+    r"^[^@\s,]+@[^@\.\s,]+(\.[^@\.\s,]+)*$").match
+
+def validate_uniben_email(value):
+    if not check_email(value):
+        raise NotUnibenEmailAddress(value)
+    if not value.endswith('uniben.edu'):
+        raise NotUnibenEmailAddress(value)
+    return True
 
 class IUnibenCustomer(ICustomer):
@@ -36,5 +49,5 @@
 
 
-class IUnibenCustomerDocument(ICustomerDocument):
+class IUnibenCustomerJPGDocument(ICustomerDocument):
     """A customer document.
 
@@ -53,21 +66,10 @@
     """
 
-    title_rank = schema.TextLine(
+    nominator_title_rank = schema.TextLine(
         title = _(u'Title/Rank'),
         required = False,
         )
 
-    department = schema.TextLine(
-        title = _(u'Department/Faculty/Institute'),
-        required = False,
-        )
-
-    date_of_birth = FormattedDate(
-        title = _(u'Date of Birth'),
-        required = False,
-        show_year = True,
-        )
-
-    nationality = schema.Choice(
+    nominator_nationality = schema.Choice(
         vocabulary = nats_vocab,
         title = _(u'Current Nationality'),
@@ -75,6 +77,46 @@
         )
 
-    address = schema.Text(
+    nominator_address = schema.Text(
         title = _(u'Affiliation/Address'),
+        required = False,
+        )
+
+    nominee_fullname = schema.TextLine(
+        title = _(u'Name'),
+        description = u'Surname last and in capital letters',
+        required = False,
+        )
+
+    nominee_title_rank = schema.TextLine(
+        title = _(u'Title/Rank'),
+        required = False,
+        )
+
+    nominee_department = schema.TextLine(
+        title = _(u'Department/Faculty/Institute'),
+        required = False,
+        )
+
+    nominee_date_of_birth = FormattedDate(
+        title = _(u'Date of Birth'),
+        required = False,
+        show_year = True,
+        )
+
+    nominee_nationality = schema.Choice(
+        vocabulary = nats_vocab,
+        title = _(u'Current Nationality'),
+        required = False,
+        )
+
+    nominee_email = schema.ASCIILine(
+        title = _(u'Uniben Email Address'),
+        required = True,
+        constraint=validate_uniben_email,
+        )
+
+    nominee_phone = PhoneNumber(
+        title = _(u'Phone'),
+        description = u'',
         required = False,
         )
@@ -131,11 +173,4 @@
         )
 
-    vitae = schema.Text(
-        title = _(u'Curriculum Vitae'),
-        description = u'A curriculum vitae including a full list of scholarly '
-                       'publications',
-        required = False,
-        )
-
     prev_aw = schema.Text(
         title = _(u'Previous Awards'),
@@ -155,5 +190,5 @@
 
     h_index = schema.Text(
-        title = _(u'State of H-Index'),
+        title = _(u'State H-Index'),
         description = u'State the full H-index of author, i.e. nominee',
         required = False,
@@ -161,4 +196,12 @@
 
     doc1 = schema.Choice(
+        title = _(u'Curriculum Vitae'),
+        source = CustomerDocumentSource(),
+        description = u'A curriculum vitae including a full list of scholarly '
+                       'publications',
+        required = False,
+        )
+
+    doc2 = schema.Choice(
         title = _(u'Reference Letters'),
         source = CustomerDocumentSource(),
@@ -168,12 +211,25 @@
         )
 
-    doc2 = schema.Choice(
-        title = _(u'Photos and Illustrations'),
-        source = CustomerDocumentSource(),
-        description = u'Maximum of 3 photos or illustrations '
-                       'added together in a pdf document',
-        required = False,
-        )
-
+    doc3 = schema.Choice(
+        title = _(u'Photo or Illustration 1'),
+        source = CustomerDocumentSource(),
+        description = u'(optional)',
+        required = False,
+        )
+
+
+    doc4 = schema.Choice(
+        title = _(u'Photo or Illustration 2'),
+        source = CustomerDocumentSource(),
+        description = u'(optional)',
+        required = False,
+        )
+
+    doc5 = schema.Choice(
+        title = _(u'Photo or Illustration 3'),
+        source = CustomerDocumentSource(),
+        description = u'(optional)',
+        required = False,
+        )
 class IRIAAContract(IUnibenContract):
     """A Retention of Name contract.
@@ -209,124 +265,2 @@
     """
 
-    title_rank = schema.TextLine(
-        title = _(u'Title/Rank'),
-        required = True,
-        )
-
-    department = schema.TextLine(
-        title = _(u'Department/Faculty/Institute'),
-        required = True,
-        )
-
-    date_of_birth = FormattedDate(
-        title = _(u'Date of Birth'),
-        required = True,
-        show_year = True,
-        )
-
-    nationality = schema.Choice(
-        vocabulary = nats_vocab,
-        title = _(u'Current Nationality'),
-        required = True,
-        )
-
-    address = schema.Text(
-        title = _(u'Affiliation/Address'),
-        required = True,
-        )
-
-    app_dates = schema.Text(
-        title = _(u'Date of Appointment as Uniben staff'),
-        description = u'State periods nominee had a break in service from '
-                       'UNIBEN service (including leave of absence), '
-                       'but excluding training/study/sabbatical leave',
-        required = True,
-        )
-
-    bib_cit = schema.Text(
-        title = _(u'Biographical Citation'),
-        description = u'Suggested biographical citation of '
-                       'nominee (max. 200 words) in the event that the '
-                       'nominee is selected for the award.',
-        required = True,
-        )
-
-    sup_stat = schema.Text(
-        title = _(u'Supporting Statement'),
-        description = u'Supporting statement (max. 200 words) summarizing '
-                       'the research and innovative achievement of the '
-                       'candidate. It should preferably focus on one major '
-                       'achievement/innovation/accomplishment.',
-        required = True,
-        )
-
-    nar_wu = schema.Text(
-        title = _(u'Narrative Write-Up'),
-        description = u'A narrative write-up (max. 1,000 words) of the '
-                       'candidate highlighting his/her scientific/creative '
-                       'achievement and/or innovation; restrict to one major '
-                       'innovation/achievement/accomplishment. '
-                       'The national/international impact of the '
-                       'achievement/innovation should be emphasized.',
-        required = True,
-        )
-
-    item_stat = schema.Text(
-        title = _(u'Itemized Statement'),
-        description = u'Itemized statement of research leadership and '
-                        'collaboration (max. 100 words)',
-        required = True,
-        )
-
-    sign_pub = schema.Text(
-        title = _(u'Significant Publications'),
-        description = u'A list of his/her most significant publications '
-                       '(max. 10) pertaining to the achievement/innovation '
-                       'along with each publication\'s H-index',
-        required = True,
-        )
-
-    vitae = schema.Text(
-        title = _(u'Curriculum Vitae'),
-        description = u'A curriculum vitae including a full list of scholarly '
-                       'publications',
-        required = True,
-        )
-
-    prev_aw = schema.Text(
-        title = _(u'Previous Awards'),
-        description = u'List of previous awards, honours and recognition '
-                       '(max. 10) received by nominee, including awarding '
-                       'body, purpose of award, date of award, and nature '
-                       'of award (cash, certificate, plaque, etc)',
-        required = True,
-        )
-
-    lead_rol = schema.Text(
-        title = _(u'Leadership Roles'),
-        description = u'List of leadership roles in academic/professional '
-                       'societies/organizations (max. no. of 3)',
-        required = True,
-        )
-
-    h_index = schema.Text(
-        title = _(u'State of H-Index'),
-        description = u'State the full H-index of author, i.e. nominee',
-        required = True,
-        )
-
-    doc1 = schema.Choice(
-        title = _(u'Reference Letters'),
-        source = CustomerDocumentSource(),
-        description = u'Reference letters from three referees '
-                       'added together in a pdf document',
-        required = True,
-        )
-
-    doc2 = schema.Choice(
-        title = _(u'Photos and Illustrations'),
-        source = CustomerDocumentSource(),
-        description = u'Maximum of 3 photos or illustrations '
-                       'added together in a pdf document',
-        required = False,
-        )
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/tests/test_browser.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/tests/test_browser.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/tests/test_browser.py	(revision 14197)
@@ -222,9 +222,9 @@
     def setup_customizable_params(self):
         self._contract_category = u'riaa'
-        self._document_factory = 'waeup.UnibenCustomerDocument'
+        self._document_factory = 'waeup.UnibenCustomerPDFDocument'
         self._contract_factory = 'waeup.RIAAContract'
         return
 
-    def test_manage_upload_sample_file(self):
+    def test_manage_upload_pdf_file(self):
         # Managers can upload a file via the DocumentManageFormPage
         # The image is stored even if form has errors
@@ -232,69 +232,37 @@
         self.browser.open(self.customer_path + '/documents/DOC1/manage')
         # Create a pseudo image file and select it to be uploaded
-        image = open(SAMPLE_IMAGE, 'rb')
-        ctrl = self.browser.getControl(name='samplescanmanageupload')
+        image = open(SAMPLE_PDF, 'rb')
+        ctrl = self.browser.getControl(name='pdfscanmanageupload')
         file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(image, filename='my_sample_scan.jpg')
+        file_ctrl.add_file(image, filename='my_sample_scan.pdf')
         # The Save action does not upload files
         self.browser.getControl("Save").click() # submit form
         self.assertFalse(
-            'href="http://localhost/app/customers/B1000000/documents/DOC1/sample"'
+            'href="http://localhost/app/customers/B1000000/documents/DOC1/scan.pdf"'
             in self.browser.contents)
         # ... but the correct upload submit button does
-        image = open(SAMPLE_IMAGE)
-        ctrl = self.browser.getControl(name='samplescanmanageupload')
+        image = open(SAMPLE_PDF)
+        ctrl = self.browser.getControl(name='pdfscanmanageupload')
         file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(image, filename='my_sample_scan.jpg')
+        file_ctrl.add_file(image, filename='my_sample_scan.pdf')
         self.browser.getControl(
-            name='upload_samplescanmanageupload').click()
+            name='upload_pdfscanmanageupload').click()
         self.assertTrue(
-            'href="http://localhost/app/customers/B1000000/documents/DOC1/sample"'
+            'href="http://localhost/app/customers/B1000000/documents/DOC1/scan.pdf"'
             in self.browser.contents)
-        # Browsing the link shows a real image
-        self.browser.open('sample')
+        # Browsing the link shows a real pdf file
+        self.browser.open('scan.pdf')
         self.assertEqual(
-            self.browser.headers['content-type'], 'image/jpeg')
-        self.assertEqual(len(self.browser.contents), 2787)
+            self.browser.headers['content-type'], 'application/pdf')
+        self.assertEqual(len(self.browser.contents), 24241)
         # We can't reupload a file. The existing file must be deleted first.
         self.browser.open(self.customer_path + '/documents/DOC1/manage')
         self.assertFalse(
-            'upload_samplescanmanageupload' in self.browser.contents)
+            'upload_pdfscanmanageupload' in self.browser.contents)
         # File must be deleted first
-        self.browser.getControl(name='delete_samplescanmanageupload').click()
+        self.browser.getControl(name='delete_pdfscanmanageupload').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='samplescanmanageupload')
-        file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(big_image, filename='my_sample_scan.jpg')
-        self.browser.getControl(
-            name='upload_samplescanmanageupload').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='samplescanmanageupload')
-        file_ctrl = ctrl.mech_control
-        # Tell uploaded file is bmp
-        file_ctrl.add_file(image, filename='my_sample_scan.bmp')
-        self.browser.getControl(
-            name='upload_samplescanmanageupload').click()
-        self.assertTrue(
-            # jpg file was recognized
-            'File sample.jpg uploaded.' in self.browser.contents)
-        # Delete file again
-        self.browser.getControl(name='delete_samplescanmanageupload').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='samplescanmanageupload')
-        file_ctrl = ctrl.mech_control
-        file_ctrl.add_file(bmp_image, filename='my_sample_scan.bmp')
-        self.browser.getControl(
-            name='upload_samplescanmanageupload').click()
-        self.assertTrue('Only the following extensions are allowed'
-            in self.browser.contents)
+            'scan.pdf deleted' in self.browser.contents)
+
 
 class ContractUITests(CustomersFullSetup):
@@ -305,5 +273,5 @@
     def setup_customizable_params(self):
         self._contract_category = u'riaa'
-        self._document_factory = 'waeup.UnibenCustomerDocument'
+        self._document_factory = 'waeup.UnibenCustomerPDFDocument'
         self._contract_factory = 'waeup.RIAAContract'
         return
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/tests/test_document.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/tests/test_document.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/tests/test_document.py	(revision 14197)
@@ -29,6 +29,8 @@
 
 from ikobacustom.uniben.testing import (FunctionalLayer, FunctionalTestCase)
-from ikobacustom.uniben.customers.documents import UnibenCustomerDocument
-from ikobacustom.uniben.customers.interfaces import IUnibenCustomerDocument
+from ikobacustom.uniben.customers.documents import (
+    UnibenCustomerPDFDocument, UnibenCustomerJPGDocument)
+from ikobacustom.uniben.customers.interfaces import (
+    IUnibenCustomerPDFDocument, IUnibenCustomerJPGDocument)
 
 
@@ -38,17 +40,27 @@
 
     def test_interfaces(self):
-        verify.verifyClass(IUnibenCustomerDocument, UnibenCustomerDocument)
-        verify.verifyClass(ICustomerNavigation, UnibenCustomerDocument)
-        verify.verifyObject(IUnibenCustomerDocument, UnibenCustomerDocument())
-        verify.verifyObject(ICustomerNavigation, UnibenCustomerDocument())
+        verify.verifyClass(IUnibenCustomerPDFDocument, UnibenCustomerPDFDocument)
+        verify.verifyClass(ICustomerNavigation, UnibenCustomerPDFDocument)
+        verify.verifyObject(IUnibenCustomerPDFDocument, UnibenCustomerPDFDocument())
+        verify.verifyObject(ICustomerNavigation, UnibenCustomerPDFDocument())
+        verify.verifyClass(IUnibenCustomerJPGDocument, UnibenCustomerJPGDocument)
+        verify.verifyClass(ICustomerNavigation, UnibenCustomerJPGDocument)
+        verify.verifyObject(IUnibenCustomerJPGDocument, UnibenCustomerJPGDocument())
+        verify.verifyObject(ICustomerNavigation, UnibenCustomerJPGDocument())
         return
 
     def test_addDocument(self):
         container = CustomerDocumentsContainer()
-        document = createObject(u'waeup.UnibenCustomerDocument')
+        document = createObject(u'waeup.UnibenCustomerPDFDocument')
         id = document.document_id
         container.addDocument(document)
         self.assertEqual(container[id], document)
         self.assertRaises(TypeError, container.addDocument, object())
-        self.assertEqual(document.class_name, 'UnibenCustomerDocument')
+        self.assertEqual(document.class_name, 'UnibenCustomerPDFDocument')
+        document2 = createObject(u'waeup.UnibenCustomerJPGDocument')
+        id = document2.document_id
+        container.addDocument(document2)
+        self.assertEqual(container[id], document2)
+        self.assertRaises(TypeError, container.addDocument, object())
+        self.assertEqual(document2.class_name, 'UnibenCustomerJPGDocument')
         return
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/utils.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/utils.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/customers/utils.py	(revision 14197)
@@ -45,5 +45,6 @@
     DOCTYPES_DICT = {
         #'UnibenCustomerDocument': _('Uniben Document'),
-        'UnibenCustomerPDFDocument': _('Uniben PDF Document'),
+        'UnibenCustomerPDFDocument': _('PDF Document'),
+        'UnibenCustomerJPGDocument': _('JPG Document'),
         }
 
@@ -60,2 +61,8 @@
         'unibencustomerpdfdocuments',
         'riaacontracts')
+
+    SEPARATORS_DICT = {
+      'form.nominator_title_rank': _(u'Additional Registrant Data'),
+      'form.nominee_fullname': _(u'Basic Nominee Data'),
+      'form.bib_cit': _(u'Supporting Information'),
+      }
Index: main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/utils/utils.py
===================================================================
--- main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/utils/utils.py	(revision 14196)
+++ main/ikobacustom.uniben/trunk/src/ikobacustom/uniben/utils/utils.py	(revision 14197)
@@ -67,4 +67,5 @@
         'customers',
         'unibencustomerpdfdocuments',
+        'unibencustomerjpgdocuments',
         'riaacontracts')
 
@@ -72,4 +73,5 @@
         'unibencustomerprocessor',
         'unibencustomerpdfdocumentprocessor',
+        'unibencustomerjpgdocumentprocessor',
         'riaacontractprocessor',
         'unibenproductprocessor',
