Index: /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/applicant.py
===================================================================
--- /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/applicant.py	(revision 10793)
+++ /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/applicant.py	(revision 10794)
@@ -21,12 +21,11 @@
 from waeup.kofa.applicants.applicant import ApplicantFactory
 from waeup.kofa.utils.helpers import attrs_to_fields
-from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
+from waeup.kofa.applicants.applicant import Applicant
 from kofacustom.ekodisco.applicants.interfaces import(
-    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    ICustomApplicant, ICustomApplicantEdit)
 
-class CustomApplicant(NigeriaApplicant):
+class CustomApplicant(Applicant):
 
-    grok.implements(ICustomApplicant, ICustomUGApplicantEdit,
-        ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    grok.implements(ICustomApplicant, ICustomApplicantEdit)
     grok.provides(ICustomApplicant)
 
Index: /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser.py
===================================================================
--- /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser.py	(revision 10793)
+++ /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser.py	(revision 10794)
@@ -19,7 +19,9 @@
 """
 import grok
+from zope.formlib.textwidgets import BytesDisplayWidget
 from waeup.kofa.applicants.browser import (
     ApplicantRegistrationPage, ApplicantsContainerPage)
-from waeup.kofa.applicants.interfaces import IApplicant, IApplicantEdit
+from kofacustom.ekodisco.applicants.interfaces import (
+    ICustomApplicant, ICustomApplicantEdit)
 from kofacustom.nigeria.applicants.browser import (
     NigeriaApplicantDisplayFormPage,
@@ -36,7 +38,10 @@
     grok.template('applicantdisplaypage')
 
-    form_fields = grok.AutoFields(IApplicant).omit(
+    form_fields = grok.AutoFields(ICustomApplicant).omit(
         'locked', 'course_admitted', 'password', 'suspended',
-        'course2', 'notice', 'student_id')
+        'course2', 'notice', 'student_id', 'sex')
+
+    form_fields['perm_address'].custom_widget = BytesDisplayWidget
+    form_fields['service_address'].custom_widget = BytesDisplayWidget
 
 class CustomApplicantManageFormPage(ApplicantManageFormPage):
@@ -45,5 +50,6 @@
     grok.template('applicanteditpage')
 
-    form_fields = grok.AutoFields(IApplicant).omit('course2', 'notice', 'student_id')
+    form_fields = grok.AutoFields(ICustomApplicant).omit(
+        'course2', 'notice', 'student_id', 'sex')
     form_fields['applicant_id'].for_display = True
 
@@ -53,7 +59,7 @@
     grok.template('applicanteditpage')
 
-    form_fields = grok.AutoFields(IApplicantEdit).omit(
+    form_fields = grok.AutoFields(ICustomApplicantEdit).omit(
         'locked', 'course_admitted', 'student_id',
-        'suspended', 'course2', 'notice'
+        'suspended', 'course2', 'notice', 'sex'
         )
     form_fields['applicant_id'].for_display = True
Index: /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/interfaces.py
===================================================================
--- /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/interfaces.py	(revision 10793)
+++ /main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/interfaces.py	(revision 10794)
@@ -28,54 +28,46 @@
 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,
+    IApplicant, IApplicantEdit, IApplicantUpdateByRegNo)
 from kofacustom.nigeria.applicants.interfaces import (
     LGASource, high_qual, high_grade, exam_types,
-    INigeriaUGApplicant, INigeriaPGApplicant,
     INigeriaApplicantOnlinePayment,
-    INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
-    INigeriaApplicantUpdateByRegNo,
-    IPUTMEApplicantEdit,
     )
 from kofacustom.ekodisco.interfaces import MessageFactory as _
 from kofacustom.ekodisco.payments.interfaces import ICustomOnlinePayment
 
-class ICustomUGApplicant(INigeriaUGApplicant):
-    """An undergraduate applicant.
+class ICustomApplicant(IApplicant):
+    """An applicant.
 
-    This interface defines the least common multiple of all fields
-    in ug application forms. In customized forms, fields can be excluded by
-    adding them to the UG_OMIT* tuples.
     """
 
-class ICustomPGApplicant(INigeriaPGApplicant):
-    """A postgraduate applicant.
+    course1 = schema.Choice(
+        title = _(u'Desired Contract'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+    course2 = schema.Choice(
+        title = _(u'Not applicable'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+    course_admitted = schema.Choice(
+        title = _(u'Assigned Contract'),
+        source = CertificateSource(),
+        required = False,
+        readonly = False,
+        )
+    perm_address = schema.Text(
+        title = _(u'Customer Address'),
+        required = False,
+        )
+    service_address = schema.Text(
+        title = _(u'Service Address'),
+        required = False,
+        )
 
-    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):
-    """An interface for both types of applicants.
-
-    Attention: The ICustomPGApplicant field seetings will be overwritten
-    by ICustomPGApplicant field settings. If a field is defined
-    in both interfaces zope.schema validates only against the
-    constraints in ICustomUGApplicant. This does not affect the forms
-    since they are build on either ICustomUGApplicant or ICustomPGApplicant.
-    """
-
-    def writeLogMessage(view, comment):
-        """Adds an INFO message to the log file
-        """
-
-    def createStudent():
-        """Create a student object from applicant data
-        and copy applicant object.
-        """
-
-class ICustomUGApplicantEdit(INigeriaUGApplicantEdit):
-    """An undergraduate applicant interface for edit forms.
+class ICustomApplicantEdit(IApplicantEdit):
+    """An applicant interface for edit forms.
 
     Here we can repeat the fields from base data and set the
@@ -88,15 +80,28 @@
     """
 
-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.
-    """
+    course1 = schema.Choice(
+        title = _(u'Desired Contract'),
+        source = AppCatCertificateSource(),
+        required = True,
+        )
+    course2 = schema.Choice(
+        title = _(u'Not applicable'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+    course_admitted = schema.Choice(
+        title = _(u'Assigned Contract'),
+        source = CertificateSource(),
+        required = False,
+        readonly = True,
+        )
+    perm_address = schema.Text(
+        title = _(u'Customer Address'),
+        required = True,
+        )
+    service_address = schema.Text(
+        title = _(u'Service Address'),
+        required = True,
+        )
 
 class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
@@ -105,17 +110,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.
 
