Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/applicant.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/applicant.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/applicant.py	(revision 16997)
@@ -23,10 +23,9 @@
 from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
 from kofacustom.lpng.applicants.interfaces import(
-    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    ICustomApplicant,)
 
 class CustomApplicant(NigeriaApplicant):
 
-    grok.implements(ICustomApplicant, ICustomUGApplicantEdit,
-        ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    grok.implements(ICustomApplicant)
     grok.provides(ICustomApplicant)
 
Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/browser.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/browser.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/browser.py	(revision 16997)
@@ -19,28 +19,14 @@
 """
 import grok
+from zope.formlib.textwidgets import BytesDisplayWidget
+from waeup.kofa.applicants.pdf import PDFApplicationSlip
 from waeup.kofa.applicants.browser import (
-    ApplicantRegistrationPage, ApplicantsContainerPage)
-from kofacustom.nigeria.applicants.browser import (
-    NigeriaApplicantDisplayFormPage,
-    NigeriaApplicantManageFormPage,
-    NigeriaApplicantEditFormPage,
-    NigeriaPDFApplicationSlip)
+    ApplicantRegistrationPage, ApplicantsContainerPage,
+    ApplicantDisplayFormPage,
+    ApplicantManageFormPage,
+    ApplicantEditFormPage)
 
-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.lpng.applicants.interfaces import (
-    ICustomPGApplicant, ICustomUGApplicant, ICustomApplicant,
-    ICustomPGApplicantEdit, ICustomUGApplicantEdit,
+    ICustomApplicant,
     ICustomApplicantOnlinePayment,
     )
@@ -48,5 +34,40 @@
 from kofacustom.lpng.interfaces import MessageFactory as _
 
-class CustomApplicantEditFormPage(NigeriaApplicantEditFormPage):
+        
+class CustomApplicantDisplayFormPage(ApplicantDisplayFormPage):
+    """A display view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomApplicant)
+        form_fields['perm_address'].custom_widget = BytesDisplayWidget
+        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):
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomApplicant)
+        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(ICustomApplicant)
+        if not getattr(self.context, 'student_id'):
+            form_fields = form_fields.omit('student_id')
+        form_fields['applicant_id'].for_display = True
+        return form_fields
+
+class CustomApplicantEditFormPage(ApplicantEditFormPage):
     """An applicant-centered edit view for applicant data.
     """
@@ -55,2 +76,12 @@
         return True
 
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomApplicant)
+        form_fields = form_fields.omit('notice')
+        if not getattr(self.context, 'student_id'):
+            form_fields = form_fields.omit('student_id')
+        form_fields['applicant_id'].for_display = True
+        form_fields['reg_number'].for_display = True
+        return form_fields
+
Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/export.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/export.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/export.py	(revision 16997)
@@ -22,8 +22,6 @@
 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.lpng.applicants.interfaces import (
-    ICustomUGApplicant, ICustomPGApplicant)
+    ICustomApplicant,)
 
 class CustomApplicantExporter(NigeriaApplicantExporter):
@@ -32,8 +30,5 @@
 
     fields = tuple(sorted(set(
-        iface_names(ICustomUGApplicant) +
-        iface_names(ICustomPGApplicant) +
-        iface_names(INigeriaUGApplicant) +
-        iface_names(INigeriaPGApplicant) +
+        iface_names(ICustomApplicant) +
         iface_names(IApplicantBaseData)
         ))) + (
Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/interfaces.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/interfaces.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/interfaces.py	(revision 16997)
@@ -20,4 +20,5 @@
 
 from zope import schema
+from zope.interface import Interface, Attribute, implements, directlyProvides
 from waeup.kofa.applicants.interfaces import (
     IApplicantBaseData,
@@ -25,37 +26,150 @@
 from waeup.kofa.schoolgrades import ResultEntryField
 from waeup.kofa.interfaces import (
-    SimpleKofaVocabulary, academic_sessions_vocab, validate_email)
-from waeup.kofa.schema import FormattedDate, TextLineChoice
-from waeup.kofa.students.vocabularies import nats_vocab, GenderSource
+    SimpleKofaVocabulary, academic_sessions_vocab, validate_email,
+    IKofaObject)
+from waeup.kofa.schema import FormattedDate, TextLineChoice, PhoneNumber
+from waeup.kofa.students.vocabularies import (
+  nats_vocab, GenderSource,RegNumberSource)
 from waeup.kofa.applicants.interfaces import contextual_reg_num_source
-from kofacustom.nigeria.applicants.interfaces import (
-    LGASource, high_qual, high_grade, exam_types,
-    INigeriaUGApplicant, INigeriaPGApplicant,
-    INigeriaApplicantOnlinePayment,
-    INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
-    INigeriaApplicantUpdateByRegNo,
-    IPUTMEApplicantEdit,
-    )
 from kofacustom.lpng.interfaces import MessageFactory as _
 from kofacustom.lpng.payments.interfaces import ICustomOnlinePayment
-
-class ICustomUGApplicant(INigeriaUGApplicant):
-    """An undergraduate 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.
-
-    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):
+from kofacustom.nigeria.interfaces import LGASource
+from kofacustom.nigeria.applicants.interfaces import (
+    INigeriaApplicantOnlinePayment,)
+
+class IApplicantBaseData(IKofaObject):
+    """This is a base interface of an applicant with no field
+    required. For use with processors, forms, etc., please use one of
+    the derived interfaces below, which set more fields to required
+    state, depending on use-case.
+    """
+    state = Attribute('Application state of an applicant')
+    history = Attribute('Object history, a list of messages')
+    display_fullname = Attribute('The fullname of an applicant')
+    application_number = Attribute('The key under which the record is stored')
+    container_code = Attribute('Code of the parent container plus additional information if record is used or not')
+    translated_state = Attribute('Real name of the application state')
+    special = Attribute('True if special application')
+    payments = Attribute('List of payment objects stored in the applicant container')
+
+    application_date = Attribute('UTC datetime of submission, used for export only')
+    password = Attribute('Encrypted password of an applicant')
+
+
+    suspended = schema.Bool(
+        title = _(u'Account suspended'),
+        default = False,
+        required = False,
+        )
+
+    applicant_id = schema.TextLine(
+        title = _(u'Applicant Id'),
+        required = False,
+        readonly = False,
+        )
+
+    reg_number = TextLineChoice(
+        title = _(u'Registration Number'),
+        readonly = False,
+        required = False,
+        source = contextual_reg_num_source,
+        )
+
+    firstname = schema.TextLine(
+        title = _(u'First Name'),
+        required = True,
+        )
+
+    middlename = schema.TextLine(
+        title = _(u'Middle Name'),
+        required = False,
+        )
+
+    lastname = schema.TextLine(
+        title = _(u'Last Name (Surname)'),
+        required = True,
+        )
+
+    date_of_birth = FormattedDate(
+        title = _(u'Date of Birth'),
+        required = True,
+        show_year = True,
+        )
+
+    sex = schema.Choice(
+        title = _(u'Gender'),
+        source = GenderSource(),
+        required = True,
+        )
+
+    profession = schema.ASCIILine(
+        title = _(u'Profession'),
+        required = False,
+        )
+        
+    occupation = schema.ASCIILine(
+        title = _(u'Occupation'),
+        required = False,
+        )
+
+    nationality = schema.Choice(
+        source = nats_vocab,
+        title = _(u'Nationality'),
+        required = False,
+        )
+        
+    state_of_residence = schema.Choice(
+        source = nats_vocab,
+        title = _(u'State of Residence'),
+        required = False,
+        )
+
+    perm_address = schema.Text(
+        title = _(u'Residential Address'),
+        required = False,
+        )
+                
+    lga = schema.Choice(
+        source = LGASource(),
+        title = _(u'Local Government (Nigerians only)'),
+        required = False,
+        )
+        
+    ward = schema.ASCIILine(
+        title = _(u'Ward'),
+        required = False,
+        )
+
+    phone = PhoneNumber(
+        title = _(u'Phone'),
+        description = u'',
+        required = False,
+        )
+
+    email = schema.ASCIILine(
+        title = _(u'Email Address'),
+        required = True,
+        constraint=validate_email,
+        )
+
+    notice = schema.Text(
+        title = _(u'Notice'),
+        required = False,
+        )
+
+    student_id = schema.TextLine(
+        title = _(u'Student Id'),
+        required = False,
+        readonly = False,
+        )
+
+    locked = schema.Bool(
+        title = _(u'Form locked'),
+        default = False,
+        required = False,
+        )
+
+
+class ICustomApplicant(IApplicantBaseData):
     """An interface for both types of applicants.
 
@@ -76,28 +190,4 @@
         """
 
-class ICustomUGApplicantEdit(INigeriaUGApplicantEdit):
-    """An undergraduate applicant interface for edit forms.
-
-    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 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.
-    """
-
 class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
     """An applicant payment via payment gateways.
@@ -105,17 +195,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(ICustomApplicant):
     """Representation of an applicant.
 
@@ -123,2 +201,7 @@
     the applicant object.
     """
+
+    reg_number = schema.TextLine(
+        title = u'Registration Number',
+        required = False,
+        )
Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/tests/test_browser.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/tests/test_browser.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/tests/test_browser.py	(revision 16997)
@@ -80,5 +80,10 @@
         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.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.lpng/trunk/src/kofacustom/lpng/applicants/utils.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/utils.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/applicants/utils.py	(revision 16997)
@@ -29,2 +29,7 @@
     """A collection of parameters and methods subject to customization.
     """
+    
+    APP_TYPES_DICT = {
+      'app': ['Membership Application', 'APP'],
+      #'special': ['Special Application', 'SPE'],
+      }
Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/interswitch/tests.py
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/interswitch/tests.py	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/interswitch/tests.py	(revision 16997)
@@ -210,5 +210,10 @@
         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.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']
Index: main/kofacustom.lpng/trunk/src/kofacustom/lpng/locales/en/LC_MESSAGES/waeup.kofa.po
===================================================================
--- main/kofacustom.lpng/trunk/src/kofacustom/lpng/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 16994)
+++ main/kofacustom.lpng/trunk/src/kofacustom/lpng/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 16997)
@@ -48,4 +48,7 @@
 msgstr "Registration Period"
 
+msgid "Application State"
+msgstr "Registration State"
+
 msgid "Find applicants"
 msgstr "Find registrants"
@@ -70,4 +73,38 @@
 msgstr "User Name, Registrant Id or Registration Number"
 
+msgid "Admit applicant"
+msgstr "Register applicant"
+
+msgid "Applicant admitted"
+msgstr "Applicant registered"
+
+msgid "Student record created"
+msgstr "Membership record created"
+
+msgid "admitted"
+msgstr "registered"
+
+msgid "not admitted"
+msgstr "not registered"
+
+msgid ""
+"I confirm that the Passport Photograph uploaded on this form is a true "
+"picture of me."
+msgstr ""
+"I accept and subscribe to the Manifesto, Constitution and Programme of the "
+"party based on the ideology and ideals of Socio Democracy."
+
+#: waeup/kofa/interfaces.py:704
+msgid "Name of University"
+msgstr "Name of Institution"
+
+#: waeup/kofa/interfaces.py:705
+msgid "Sample University"
+msgstr "Sample Institution"
+
+#: waeup/kofa/interfaces.py:710
+msgid "Abbreviated Title of University"
+msgstr "Abbreviated Title of Institution"
+
 #. Default: "You don't have an account because you are a fresh student, or your student record has just been created? Acquire a Password Activation Code (PWD) and inititialize your student account <strong><a href=\"setpassword\"> here</a></strong>."
 msgid "login_trouble2"
