Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/applicant.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/applicant.py	(revision 8531)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/applicant.py	(revision 8532)
@@ -22,9 +22,10 @@
 from waeup.kofa.utils.helpers import attrs_to_fields
 from waeup.aaue.applicants.interfaces import(
-    ICustomApplicant, IUGApplicantEdit, IPGApplicantEdit)
+    ICustomApplicant, IUGApplicantEdit, IPGApplicantEdit, IPUTMEApplicantEdit)
 
 class CustomApplicant(Applicant):
 
-    grok.implements(ICustomApplicant, IUGApplicantEdit, IPGApplicantEdit)
+    grok.implements(ICustomApplicant, IUGApplicantEdit,
+        IPGApplicantEdit, IPUTMEApplicantEdit)
     grok.provides(ICustomApplicant)
 
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser.py	(revision 8531)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser.py	(revision 8532)
@@ -37,8 +37,8 @@
 from waeup.aaue.applicants.interfaces import (
     IPGApplicant, IUGApplicant, IPGApplicantEdit, IUGApplicantEdit,
-    ICustomApplicantOnlinePayment,
+    ICustomApplicantOnlinePayment, IPUTMEApplicantEdit,
     UG_OMIT_DISPLAY_FIELDS, PG_OMIT_DISPLAY_FIELDS,
     UG_OMIT_MANAGE_FIELDS, PG_OMIT_MANAGE_FIELDS,
-    UG_OMIT_EDIT_FIELDS, PG_OMIT_EDIT_FIELDS)
+    UG_OMIT_EDIT_FIELDS, PG_OMIT_EDIT_FIELDS, PUTME_OMIT_EDIT_FIELDS)
 from waeup.aaue.interfaces import MessageFactory as _
 
@@ -124,4 +124,8 @@
             for field in PG_OMIT_EDIT_FIELDS:
                 form_fields = form_fields.omit(field)
+        elif target is not None and target.startswith('putme'):
+            form_fields = grok.AutoFields(IPUTMEApplicantEdit)
+            for field in PUTME_OMIT_EDIT_FIELDS:
+                form_fields = form_fields.omit(field)
         else:
             form_fields = grok.AutoFields(IUGApplicantEdit)
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py	(revision 8531)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py	(revision 8532)
@@ -24,7 +24,9 @@
     AppCatCertificateSource, CertificateSource)
 from waeup.kofa.schoolgrades import ResultEntryField
-from waeup.kofa.interfaces import SimpleKofaVocabulary, academic_sessions_vocab
-from waeup.kofa.schema import FormattedDate
-from waeup.kofa.students.vocabularies import nats_vocab
+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
+from waeup.kofa.applicants.interfaces import contextual_reg_num_source
 from waeup.aaue.interfaces import (
     LGASource, high_qual, high_grade, exam_types)
@@ -36,8 +38,12 @@
 UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + ('locked', 'course_admitted',
     'student_id', 'screening_score', 'screening_venue')
+PUTME_OMIT_EDIT_FIELDS = UG_OMIT_EDIT_FIELDS + (
+    'firstname', 'middlename', 'lastname', 'sex',
+    'course1', 'lga', 'jambscore')
 
 PG_OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted', 'password')
 PG_OMIT_MANAGE_FIELDS = ()
-PG_OMIT_EDIT_FIELDS = PG_OMIT_MANAGE_FIELDS + ('locked', 'course_admitted',
+PG_OMIT_EDIT_FIELDS = PG_OMIT_MANAGE_FIELDS + (
+    'locked', 'course_admitted',
     'student_id', 'screening_score', 'screening_venue')
 
@@ -60,11 +66,53 @@
         required = False,
         )
-
-# This ordering doesn't work properly.
-IUGApplicant[
-    'nationality'].order =  IApplicantBaseData['sex'].order
-IUGApplicant[
-    'lga'].order =  IUGApplicant['nationality'].order
-
+    perm_address = schema.Text(
+        title = _(u'Permanent Address'),
+        required = False,
+        )
+    course1 = schema.Choice(
+        title = _(u'1st Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = True,
+        )
+    course2 = schema.Choice(
+        title = _(u'2nd Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+    jambscore = schema.Int(
+        title = _(u'JAMB Score'),
+        required = False,
+        )
+
+
+# More fields
+
+
+    notice = schema.Text(
+        title = _(u'Notice'),
+        required = False,
+        )
+    screening_venue = schema.TextLine(
+        title = _(u'Screening Venue'),
+        required = False,
+        )
+    screening_score = schema.Int(
+        title = _(u'Screening Score'),
+        required = False,
+        )
+    student_id = schema.TextLine(
+        title = _(u'Student Id'),
+        required = False,
+        readonly = False,
+        )
+    course_admitted = schema.Choice(
+        title = _(u'Admitted Course of Study'),
+        source = CertificateSource(),
+        required = False,
+        )
+    locked = schema.Bool(
+        title = _(u'Form locked'),
+        default = False,
+        )
 
 class IPGApplicant(IApplicantBaseData):
@@ -227,4 +275,9 @@
         readonly = False,
         )
+    student_id = schema.TextLine(
+        title = _(u'Student Id'),
+        required = False,
+        readonly = False,
+        )
     course_admitted = schema.Choice(
         title = _(u'Admitted Course of Study'),
@@ -233,14 +286,8 @@
         readonly = False,
         )
-
-
-# This ordering doesn't work properly.
-IPGApplicant[
-    'nationality'].order =  IApplicantBaseData['sex'].order
-IPGApplicant[
-    'lga'].order =  IPGApplicant['nationality'].order
-IPGApplicant[
-    'student_id'].order =  IPGApplicant['notice'].order
-
+    locked = schema.Bool(
+        title = _(u'Form locked'),
+        default = False,
+        )
 
 class ICustomApplicant(IUGApplicant,IPGApplicant):
@@ -286,2 +333,22 @@
 
     """
+
+class IPUTMEApplicantEdit(IUGApplicant):
+    """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.
+    """
+    email = schema.ASCIILine(
+        title = _(u'Email Address'),
+        required = True,
+        constraint=validate_email,
+        )
+
+IPUTMEApplicantEdit[
+    'email'].order =  IUGApplicant['email'].order
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/tests.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/tests.py	(revision 8531)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/tests.py	(revision 8532)
@@ -254,11 +254,12 @@
             'emp_reason,emp_start,employer,employer2,firstname,history,'
             'hq_degree,hq_disc,hq_matric_no,hq_school,hq_session,hq_type,'
-            'lastname,lga,locked,middlename,nationality,notice,nysc_lga,'
+            'jambscore,lastname,lga,locked,middlename,nationality,notice,nysc_lga,'
             'nysc_year,password,perm_address,phone,pp_school,presently_inst,'
-            'reg_number,screening_score,screening_venue,sex,state,student_id'
+            'reg_number,screening_score,screening_venue,sex,state,student_id,'
+            'container_code'
             in result)
         self.assertTrue(
-            'Application initialized by system\'],,,,,,,Tester,,0,M.,,'
+            'Application initialized by system\'],,,,,,,,Tester,,0,M.,,'
             '"Some notice\nin lines.",,,any password,,+234-123-12345,,,'
-            '123456,98,Exam Room,f,initialized,' in result)
-        return
+            '123456,98,Exam Room,f,initialized,,dp2011' in result)
+        return
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/utils.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/utils.py	(revision 8531)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/utils.py	(revision 8532)
@@ -53,4 +53,5 @@
         'form.nysc_year': _(u'NYSC Information'),
         'form.employer': _(u'Employment History'),
+        'form.jambscore': _(u'JAMB Data'),
         'form.notice': _(u'Application Process Information'),
         'form.pp_school': _(u'Post Primary School Qualification'),
