Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/applicant.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/applicant.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/applicant.py	(revision 17711)
@@ -19,14 +19,12 @@
 import grok
 from zope.interface import implementedBy
-from waeup.kofa.applicants.applicant import ApplicantFactory
+from waeup.kofa.applicants.applicant import ApplicantFactory, Applicant
 from waeup.kofa.utils.helpers import attrs_to_fields
-from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
 from kofacustom.udss.applicants.interfaces import(
-    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    ICustomApplicant, ICustomUGApplicantEdit)
 
-class CustomApplicant(NigeriaApplicant):
+class CustomApplicant(Applicant):
 
-    grok.implements(ICustomApplicant, ICustomUGApplicantEdit,
-        ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    grok.implements(ICustomApplicant, ICustomUGApplicantEdit)
     grok.provides(ICustomApplicant)
 
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/batching.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/batching.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/batching.py	(revision 17711)
@@ -19,5 +19,6 @@
 """
 from kofacustom.nigeria.applicants.batching import NigeriaApplicantProcessor
-from waeup.kofa.applicants.batching import ApplicantOnlinePaymentProcessor
+from waeup.kofa.applicants.batching import (
+    ApplicantOnlinePaymentProcessor, ApplicantProcessor)
 from kofacustom.udss.applicants.interfaces import (
     ICustomApplicant,
@@ -26,5 +27,5 @@
     )
 
-class CustomApplicantProcessor(NigeriaApplicantProcessor):
+class CustomApplicantProcessor(ApplicantProcessor):
 
     iface = ICustomApplicant
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/browser.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/browser.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/browser.py	(revision 17711)
@@ -19,28 +19,23 @@
 """
 import grok
+from zope.formlib.textwidgets import BytesDisplayWidget
+from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
 from waeup.kofa.applicants.browser import (
     ApplicantRegistrationPage, ApplicantsContainerPage)
-from kofacustom.nigeria.applicants.browser import (
-    NigeriaApplicantDisplayFormPage,
-    NigeriaApplicantManageFormPage,
-    NigeriaApplicantEditFormPage,
-    NigeriaPDFApplicationSlip)
+from waeup.kofa.applicants.browser import (
+    ApplicantDisplayFormPage,
+    ApplicantManageFormPage,
+    ApplicantEditFormPage,
+    ApplicantRegistrationPage,
+    OnlinePaymentDisplayFormPage,
+    OnlinePaymentBreadcrumb,
+    ExportPDFPaymentSlipPage,
+    )
+from waeup.kofa.applicants.pdf import PDFApplicationSlip
 
-from kofacustom.nigeria.applicants.interfaces import (
-    INigeriaPGApplicant, INigeriaUGApplicant,
-    INigeriaPGApplicantEdit, INigeriaUGApplicantEdit,
-    INigeriaApplicantOnlinePayment,
-    UG_OMIT_DISPLAY_FIELDS,
-    UG_OMIT_PDF_FIELDS,
-    UG_OMIT_MANAGE_FIELDS,
-    UG_OMIT_EDIT_FIELDS,
-    PG_OMIT_DISPLAY_FIELDS,
-    PG_OMIT_PDF_FIELDS,
-    PG_OMIT_MANAGE_FIELDS,
-    PG_OMIT_EDIT_FIELDS,
-    )
 from kofacustom.udss.applicants.interfaces import (
-    ICustomPGApplicant, ICustomUGApplicant, ICustomApplicant,
-    ICustomPGApplicantEdit, ICustomUGApplicantEdit,
+    ICustomUGApplicant,
+    ICustomApplicant,
+    ICustomUGApplicantEdit,
     ICustomApplicantOnlinePayment,
     )
@@ -48,7 +43,84 @@
 from kofacustom.udss.interfaces import MessageFactory as _
 
-class CustomApplicantEditFormPage(NigeriaApplicantEditFormPage):
+OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted',
+    'result_uploaded', 'suspended', 'special_application',)
+
+UG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS + (
+    'programme_type', 'course1', 'course2', 'course_admitted')
+UG_OMIT_PDF_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('phone',)
+UG_OMIT_MANAGE_FIELDS = (
+    'special_application',
+    'programme_type', 'course1', 'course2', 'course_admitted')
+UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
+    'student_id',
+    'notice',
+    'jamb_age',
+    'jamb_subjects',
+    'jamb_score',
+    'jamb_reg_number',
+    'aggregate')
+
+class CustomApplicantDisplayFormPage(ApplicantDisplayFormPage):
+    """A display view for applicant data.
+    """
+
+    def _not_paid(self):
+        return self.context.state in ('initialized', 'started',)
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        for field in UG_OMIT_PDF_FIELDS:
+            form_fields = form_fields.omit(field)
+        form_fields['notice'].custom_widget = BytesDisplayWidget
+        if not getattr(self.context, 'student_id'):
+            form_fields = form_fields.omit('student_id')
+        return form_fields
+
+class CustomPDFApplicationSlip(PDFApplicationSlip):
+
+    def _addLoginInformation(self):
+        """ We do no longer render login information on
+        pdf application slips.
+        """
+        return
+
+    def _reduced_slip(self):
+        return getattr(self.context, 'result_uploaded', False)
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        for field in UG_OMIT_PDF_FIELDS:
+            form_fields = form_fields.omit(field)
+        if not getattr(self.context, 'student_id'):
+            form_fields = form_fields.omit('student_id')
+        return form_fields
+
+class CustomApplicantManageFormPage(ApplicantManageFormPage):
+    """A full edit view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        for field in UG_OMIT_MANAGE_FIELDS:
+            form_fields = form_fields.omit(field)
+        form_fields['student_id'].for_display = True
+        form_fields['applicant_id'].for_display = True
+        return form_fields
+
+class CustomApplicantEditFormPage(ApplicantEditFormPage):
     """An applicant-centered edit view for applicant data.
     """
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomUGApplicantEdit)
+        for field in UG_OMIT_EDIT_FIELDS:
+            form_fields = form_fields.omit(field)
+        form_fields['applicant_id'].for_display = True
+        form_fields['reg_number'].for_display = True
+        return form_fields
 
     def unremovable(self, ticket):
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/export.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/export.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/export.py	(revision 17711)
@@ -19,13 +19,11 @@
 """
 import grok
+from waeup.kofa.applicants.export import ApplicantExporter
 from waeup.kofa.applicants.interfaces import IApplicantBaseData
 from waeup.kofa.utils.helpers import iface_names
-from kofacustom.nigeria.applicants.export import NigeriaApplicantExporter
-from kofacustom.nigeria.applicants.interfaces import (
-    INigeriaUGApplicant, INigeriaPGApplicant)
 from kofacustom.udss.applicants.interfaces import (
-    ICustomUGApplicant, ICustomPGApplicant)
+    ICustomUGApplicant,)
 
-class CustomApplicantExporter(NigeriaApplicantExporter):
+class CustomApplicantExporter(ApplicantExporter):
     """Exporter for Custom Applicants.
     """
@@ -33,7 +31,4 @@
     fields = tuple(sorted(set(
         iface_names(ICustomUGApplicant) +
-        iface_names(ICustomPGApplicant) +
-        iface_names(INigeriaUGApplicant) +
-        iface_names(INigeriaPGApplicant) +
         iface_names(IApplicantBaseData)
         ))) + (
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/interfaces.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/interfaces.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/interfaces.py	(revision 17711)
@@ -28,17 +28,14 @@
 from waeup.kofa.schema import FormattedDate, TextLineChoice
 from waeup.kofa.students.vocabularies import nats_vocab, GenderSource
-from waeup.kofa.applicants.interfaces import contextual_reg_num_source
+from waeup.kofa.applicants.interfaces import (
+    contextual_reg_num_source, IApplicantBaseData, IApplicantOnlinePayment,
+    IApplicantUpdateByRegNo)
 from kofacustom.nigeria.applicants.interfaces import (
     LGASource, high_qual, high_grade, exam_types,
-    INigeriaUGApplicant, INigeriaPGApplicant,
-    INigeriaApplicantOnlinePayment,
-    INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
-    INigeriaApplicantUpdateByRegNo,
-    IPUTMEApplicantEdit,
-    )
+    INigeriaApplicantOnlinePayment)
 from kofacustom.udss.interfaces import MessageFactory as _
 from kofacustom.udss.payments.interfaces import ICustomOnlinePayment
 
-class ICustomUGApplicant(INigeriaUGApplicant):
+class ICustomUGApplicant(IApplicantBaseData):
     """An undergraduate applicant.
 
@@ -48,14 +45,6 @@
     """
 
-class ICustomPGApplicant(INigeriaPGApplicant):
-    """A postgraduate applicant.
 
-    This interface defines the least common multiple of all fields
-    in pg application forms. In customized forms, fields can be excluded by
-    adding them to the PG_OMIT* tuples.
-    """
-
-
-class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant):
+class ICustomApplicant(ICustomUGApplicant):
     """An interface for both types of applicants.
 
@@ -76,5 +65,5 @@
         """
 
-class ICustomUGApplicantEdit(INigeriaUGApplicantEdit):
+class ICustomUGApplicantEdit(ICustomUGApplicant):
     """An undergraduate applicant interface for edit forms.
 
@@ -88,15 +77,14 @@
     """
 
-class ICustomPGApplicantEdit(INigeriaPGApplicantEdit):
-    """A postgraduate applicant interface for editing.
-
-    Here we can repeat the fields from base data and set the
-    `required` and `readonly` attributes to True to further restrict
-    the data access. Or we can allow only certain certificates to be
-    selected by choosing the appropriate source.
-
-    We cannot omit fields here. This has to be done in the
-    respective form page.
-    """
+    email = schema.ASCIILine(
+        title = _(u'Email Address'),
+        required = True,
+        constraint=validate_email,
+        )
+    date_of_birth = FormattedDate(
+        title = _(u'Date of Birth'),
+        required = True,
+        show_year = True,
+        )
 
 class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
@@ -105,17 +93,5 @@
     """
 
-class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
-    """An undergraduate applicant interface for editing.
-
-    Here we can repeat the fields from base data and set the
-    `required` and `readonly` attributes to True to further restrict
-    the data access. Or we can allow only certain certificates to be
-    selected by choosing the appropriate source.
-
-    We cannot omit fields here. This has to be done in the
-    respective form page.
-    """
-
-class ICustomApplicantUpdateByRegNo(INigeriaApplicantUpdateByRegNo):
+class ICustomApplicantUpdateByRegNo(IApplicantUpdateByRegNo):
     """Representation of an applicant.
 
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/tests/test_browser.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/tests/test_browser.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/tests/test_browser.py	(revision 17711)
@@ -60,11 +60,11 @@
         applicant.email = 'anna@sample.com'
         applicant.phone = u'+234-123-12345'
-        applicant.course1 = self.certificate
-        applicant.course2 = self.certificate
-        applicant.course_admitted = self.certificate
+        #applicant.course1 = self.certificate
+        #applicant.course2 = self.certificate
+        #applicant.course_admitted = self.certificate
         applicant.notice = u'Some notice\nin lines.'
-        applicant.screening_score = 98
-        applicant.screening_venue = u'Exam Room'
-        applicant.screening_date = u'Saturday, 16th June 2012 2:00:00 PM'
+        #applicant.screening_score = 98
+        #applicant.screening_venue = u'Exam Room'
+        #applicant.screening_date = u'Saturday, 16th June 2012 2:00:00 PM'
         applicant.password = 'any password'
         return applicant
@@ -80,5 +80,11 @@
         self.browser.open(self.manage_path)
         self.assertEqual(self.browser.headers['Status'], '200 Ok')
-        self.fill_correct_values()
+        self.browser.getControl(name="form.firstname").value = 'John'
+        self.browser.getControl(name="form.middlename").value = 'Anthony'
+        self.browser.getControl(name="form.lastname").value = 'Tester'
+        #self.browser.getControl(name="form.course1").value = ['CERT1']
+        self.browser.getControl(name="form.date_of_birth").value = '09/09/1988'
+        self.browser.getControl(name="form.sex").value = ['m']
+        self.browser.getControl(name="form.email").value = 'xx@yy.zz'
         self.browser.getControl("Save").click()
         IWorkflowState(self.applicant).setState('submitted')
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/utils.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/utils.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/applicants/utils.py	(revision 17711)
@@ -29,2 +29,6 @@
     """A collection of parameters and methods subject to customization.
     """
+
+    APP_TYPES_DICT = {
+        'app': ['General Application', 'APP'],
+        }
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/interswitch/tests.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/interswitch/tests.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/interswitch/tests.py	(revision 17711)
@@ -210,7 +210,13 @@
         self.browser.open(self.manage_path)
         #IWorkflowState(self.student).setState('started')
-        super(InterswitchTestsApplicants, self).fill_correct_values()
+        self.browser.getControl(name="form.firstname").value = 'John'
+        self.browser.getControl(name="form.middlename").value = 'Anthony'
+        self.browser.getControl(name="form.lastname").value = 'Tester'
+        #self.browser.getControl(name="form.course1").value = ['CERT1']
+        self.browser.getControl(name="form.date_of_birth").value = '09/09/1988'
+        self.browser.getControl(name="form.sex").value = ['m']
+        self.browser.getControl(name="form.email").value = 'xx@yy.zz'
         self.applicantscontainer.application_fee = 1000.0
-        self.browser.getControl(name="form.nationality").value = ['NG']
+        #self.browser.getControl(name="form.nationality").value = ['NG']
         self.browser.getControl(name="transition").value = ['start']
         self.browser.getControl("Save").click()
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/utils/utils.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/utils/utils.py	(revision 17710)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/utils/utils.py	(revision 17711)
@@ -24,2 +24,11 @@
     """
 
+    STUDY_MODES_DICT = {
+        'ug_ft': 'n/a',
+        'no': 'n/a',
+        }
+
+    APP_CATS_DICT = {
+        'basic': 'General Application',
+        'no': 'No Application',
+        }
