Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/applicant.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/applicant.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/applicant.py	(revision 15218)
@@ -26,10 +26,11 @@
 from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
 from kofacustom.edopoly.applicants.interfaces import(
-    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit,
+    IPUTMEApplicantEdit, ICustomSpecialApplicant)
 
 class CustomApplicant(NigeriaApplicant):
 
     grok.implements(ICustomApplicant, ICustomUGApplicantEdit,
-        ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+        ICustomPGApplicantEdit, IPUTMEApplicantEdit, ICustomSpecialApplicant)
     grok.provides(ICustomApplicant)
 
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser.py	(revision 15218)
@@ -47,5 +47,5 @@
     ICustomUGApplicantEdit, ICustomUGApplicant,
     ICustomPGApplicantEdit, ICustomPGApplicant,
-    ICustomApplicant,)
+    ICustomApplicant, ICustomSpecialApplicant,)
 
 from kofacustom.edopoly.interfaces import MessageFactory as _
@@ -85,4 +85,6 @@
     def form_fields(self):
         target = getattr(self.context.__parent__, 'prefix', None)
+        if self.context.special:
+            return grok.AutoFields(ICustomSpecialApplicant)
         form_fields = grok.AutoFields(ICustomUGApplicant)
         for field in UG_OMIT_DISPLAY_FIELDS:
@@ -217,4 +219,8 @@
     @property
     def form_fields(self):
+        if self.context.special:
+            form_fields = grok.AutoFields(ICustomSpecialApplicant)
+            form_fields['applicant_id'].for_display = True
+            return form_fields
         target = getattr(self.context.__parent__, 'prefix', None)
         form_fields = grok.AutoFields(ICustomUGApplicant)
@@ -231,4 +237,9 @@
     @property
     def form_fields(self):
+        if self.context.special:
+            form_fields = grok.AutoFields(ICustomSpecialApplicant).omit(
+                'locked', 'suspended')
+            form_fields['applicant_id'].for_display = True
+            return form_fields
         target = getattr(self.context.__parent__, 'prefix', None)
         form_fields = grok.AutoFields(ICustomUGApplicantEdit)
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/interfaces.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/interfaces.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/interfaces.py	(revision 15218)
@@ -28,5 +28,6 @@
 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, ISpecialApplicant)
 from kofacustom.nigeria.applicants.interfaces import (
     LGASource, high_qual, high_grade, exam_types,
@@ -225,4 +226,7 @@
     """
 
+class ICustomSpecialApplicant(ISpecialApplicant):
+    """
+    """
 
 class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant):
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/utils.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/utils.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/utils.py	(revision 15218)
@@ -42,4 +42,5 @@
         'pre': ['Pre-Degree Studies', 'PRE'],
         'ct': ['Certificate Programmes', 'CT'],
+        'special': ['Supplementary Payment', 'SP'],
         }
 
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/interfaces.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/interfaces.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/interfaces.py	(revision 15218)
@@ -123,4 +123,22 @@
         )
 
+    medical_fee = schema.Float(
+        title = _(u'Medical Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    conv_nd_fee = schema.Float(
+        title = _(u'Convocation Fee ND'),
+        default = 0.0,
+        required = False,
+        )
+
+    conv_hnd_fee = schema.Float(
+        title = _(u'Convocation Fee ND'),
+        default = 0.0,
+        required = False,
+        )
+
     def getSessionString():
         """Returns the session string from the vocabulary.
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/interswitch/browser.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/interswitch/browser.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/interswitch/browser.py	(revision 15218)
@@ -49,4 +49,11 @@
 httplib.HTTPSConnection.debuglevel = 0
 HTTPS = True
+
+SPECIAL_PAYMENT_PARAMS = {
+
+    'conv_nd': ('101', 2000.0, '0031913976', '121'),
+    'conv_hnd': ('101', 2000.0, '0031913976', '121'),
+    }
+
 
 class CustomInterswitchPageStudent(InterswitchPageStudent):
@@ -155,4 +162,9 @@
         xmldict['institution_item_name'] = self.context.category
         xmldict['institution_name'] = INSTITUTION_NAME
+        if self.context.p_category in SPECIAL_PAYMENT_PARAMS.keys():
+            self.pay_item_id = SPECIAL_PAYMENT_PARAMS[self.context.p_category][0]
+            provider_amt = SPECIAL_PAYMENT_PARAMS[self.context.p_category][1]
+            xmldict['institution_acct'] = SPECIAL_PAYMENT_PARAMS[self.context.p_category][2]
+            xmldict['institution_bank_id'] = SPECIAL_PAYMENT_PARAMS[self.context.p_category][3]
         # Interswitch amount is not part of the xml data
         if provider_amt == 0:
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/utils/utils.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/utils/utils.py	(revision 15209)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/utils/utils.py	(revision 15218)
@@ -58,8 +58,28 @@
         'admission_checking': 'Admission Checking Fee',
         'medical': 'Medical Fee',
+        'conv_nd': 'Convocation ND',
+        'conv_hnd': 'Convocation HND',
         }
 
-    SELECTABLE_PAYMENT_CATEGORIES = deepcopy(PAYMENT_CATEGORIES)
-
+    SELECTABLE_PAYMENT_CATEGORIES = {
+        'schoolfee': 'Tuition/Exams Fee',
+        'clearance': 'Acceptance Fee',
+        'bed_allocation': 'Accommodation Booking Fee',
+        'hostel_maintenance': 'Hostel Maintenance Fee',
+        'application': 'Application Fee',
+        'ict_entre': 'ICT and Entrepreneur Fee',
+        'logbook_combo': 'Logbook Combo Fee',
+        'siwess_combo': 'SIWESS Combo Fee',
+        'transcript': 'Transcript Fee',
+        'certificate': 'Certificate Fee',
+        'certificate_confirm': 'Certificate Confirmation Fee',
+        'late_registration': 'Late Course Registration Fee',
+        'final_clearance': 'Final Clearance Fee',
+        'union': 'Student Union Dues',
+        'admission_checking': 'Admission Checking Fee',
+        'medical': 'Medical Fee',
+        #'conv_nd': 'Convocation ND',
+        #'conv_hnd': 'Convocation HND',
+        }
     PREVIOUS_PAYMENT_CATEGORIES = deepcopy(SELECTABLE_PAYMENT_CATEGORIES)
 
@@ -86,4 +106,9 @@
         }
 
+    SPECIAL_APP_DICT = {
+        'conv_nd': 'Convocation ND',
+        'conv_hnd': 'Convocation HND',
+        }
+
     STUDY_MODES_DICT = {
         'ug_ft': 'Undergraduate Full Time (not used in EdoPoly)',
