Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/batching.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/batching.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/batching.py	(revision 8834)
@@ -18,5 +18,4 @@
 """Batch processing for applicants.
 """
-from waeup.kofa.interfaces import MessageFactory as _
 from waeup.kofa.utils.batching import BatchProcessor
 from waeup.kofa.applicants.batching import ApplicantProcessor
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py	(revision 8834)
@@ -29,5 +29,5 @@
 from waeup.kofa.students.vocabularies import nats_vocab, GenderSource
 from waeup.kofa.applicants.interfaces import contextual_reg_num_source
-from waeup.fceokene.interfaces import (
+from kofacustom.nigeria.interfaces import (
     LGASource, high_qual, high_grade, exam_types)
 from waeup.fceokene.interfaces import MessageFactory as _
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/utils.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/utils.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/utils.py	(revision 8834)
@@ -22,38 +22,9 @@
 import sys
 import grok
-from hurry.workflow.interfaces import IWorkflowInfo, InvalidTransitionError
-from waeup.kofa.applicants.utils import ApplicantsUtils
-from waeup.fceokene.interfaces import MessageFactory as _
+from kofacustom.nigeria.applicants.utils import NigeriaApplicantsUtils
 
 
-class ApplicantsUtils(ApplicantsUtils):
+
+class ApplicantsUtils(NigeriaApplicantsUtils):
     """A collection of parameters and methods subject to customization.
     """
-
-    APP_TYPES_DICT = {
-        'pude': ['Post UDE Screening', 'PUDE'],
-        'prence': ['Pre-NCE Programme', 'PRE'],
-        'sandwich': ['Part-Time Degree in Education', 'SAND'],
-        'pt': ['Part-Time Degree Programmes', 'PTP'],
-        'putme': ['Post-UTME Screening Exercise', 'PUTME'],
-        'app': ['General Studies', 'APP'],
-        'cest': ['Common Entry Screening Test', 'CEST'],
-        'ct': ['Certificate Programmes', 'CTP'],
-        'dp': ['Diploma Programmes', 'DPP'],
-        'pce': ['PCE Screening', 'PCE'],
-        'pgft': ['Postgraduate Full-Time Programmes', 'PG'],
-        'pgpt': ['Postgraduate Part-Time Programmes', 'PG']
-        }
-
-    SEPARATORS_DICT = {
-        'form.applicant_id': _(u'Base Data'),
-        'form.course1': _(u'Programmes/Courses Desired'),
-        'form.hq_type': _(u'Higher Education Record'),
-        'form.presently': _(u'Course or Programme Presently Attending'),
-        'form.nysc_year': _(u'NYSC Information'),
-        'form.employer': _(u'Employment History'),
-        'form.jamb_subjects': _(u'JAMB Data'),
-        'form.notice': _(u'Application Process Information'),
-        'form.pp_school': _(u'Post Primary School Qualification'),
-        'form.presently_inst': _(u'Presently attending a course or programme'),
-        }
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/interfaces.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/interfaces.py	(revision 8834)
@@ -22,70 +22,6 @@
 from waeup.kofa.interfaces import (SimpleKofaVocabulary,
     ISessionConfiguration, academic_sessions_vocab)
-from waeup.fceokene.utils.lgas import LGAS
 
-_ = MessageFactory = zope.i18nmessageid.MessageFactory('waeup.custom')
-
-high_qual = SimpleKofaVocabulary(
-    ('National Certificate of Education','nce'),
-    ('Pre Degree Programme','pre'),
-    ('Diploma Programme','dip'),
-    ('Ordinary National Diploma','ond'),
-    ('Bachelors Degree','bd'),
-    ('Masters Degree','md'),
-    ('Professional Qualification','pq'),
-    ('Other Certification','oc'),
-    ('Higher National Diploma','hnd'),
-    ('Post Graduate Diploma','pgd'),
-    ('NCE AL OTH','nce_al_oth'),
-    ('National Defence Academy','nda'),
-    ('Awaiting Results','a_rslt'),
-    ('RMC','rmc'),
-    )
-
-high_grade = SimpleKofaVocabulary(
-    ('Upper Credit','upper_credit'),
-    ('Distinction','distinction'),
-    ('Credit','credit'),
-    ('Merit','merit'),
-    ('Lower Credit','lower_credit'),
-    ('First Class','first_class'),
-    ('Second Class Upper','second_class_upper'),
-    ('Second Class Lower','second_class_lower'),
-    ('Third Class','third_class'),
-    ('Pass','pass'),
-    ('Awaiting Results','a_rslt'),
-    ('A Levels','al'),
-    )
-
-exam_types = SimpleKofaVocabulary(
-    ('SSCE','ssce'),
-    ('WAEC','waec'),
-    ('GCE O\' LEVEL','gce_o_level'),
-    ('TC II','tc_ii'),
-    ('RSA','rsa'),
-    ('NABTEB','nabteb'),
-    ('NECO','neco'),
-    ('ACE','ace'),
-    ('GCE A\' LEVEL','gce_a_level'),
-    ('IGCSE','igcse'),
-    )
-
-#lgas_vocab = SimpleKofaVocabulary(
-#    *sorted([(x[1],x[0]) for x in LGAS]))
-
-class LGASource(BasicSourceFactory):
-    """A source for school subjects used in exam documentation.
-    """
-    lga_dict = dict(LGAS)
-
-    def getValues(self):
-        return sorted(self.lga_dict.keys())
-
-    def getToken(self, value):
-        return str(value)
-
-    def getTitle(self, value):
-        return self.lga_dict.get(value,
-            _('Invalid key: ${a}', mapping = {'a':value}))
+_ = MessageFactory = zope.i18nmessageid.MessageFactory('waeup.fceokene')
 
 # It's recommended to replicate all fields from the base package here.
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/payments/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/payments/interfaces.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/payments/interfaces.py	(revision 8834)
@@ -19,5 +19,5 @@
 from zope import schema
 from waeup.kofa.payments.interfaces import IPayment
-from waeup.kofa.interfaces import MessageFactory as _
+from waeup.fceokene.interfaces import MessageFactory as _
 
 class ICustomOnlinePayment(IPayment):
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/students/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/students/interfaces.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/students/interfaces.py	(revision 8834)
@@ -29,5 +29,5 @@
 from waeup.kofa.students.vocabularies import (
     nats_vocab, contextual_reg_num_source)
-from waeup.fceokene.interfaces import (
+from kofacustom.nigeria.interfaces import (
     high_qual, high_grade, exam_types, LGASource)
 from waeup.fceokene.interfaces import MessageFactory as _
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/students/utils.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/students/utils.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/students/utils.py	(revision 8834)
@@ -20,14 +20,12 @@
 from zope.component import createObject
 from waeup.kofa.interfaces import CLEARED, RETURNING, PAID
-from waeup.kofa.students.utils import StudentsUtils
-from waeup.kofa.students.interfaces import IStudentsUtils
+from kofacustom.nigeria.students.utils import NigeriaStudentsUtils
 from waeup.kofa.accesscodes import create_accesscode
 from waeup.fceokene.interfaces import MessageFactory as _
 
-class CustomStudentsUtils(StudentsUtils):
+class CustomStudentsUtils(NigeriaStudentsUtils):
     """A collection of customized methods.
 
     """
-    grok.implements(IStudentsUtils)
 
     def getReturningData(self, student):
@@ -122,46 +120,4 @@
         return None, payment
 
-    VERDICTS_DICT = {
-        'NY': 'not yet',
-        'A': 'Successful student',
-        'B': 'Student with carryover courses',
-        'C': 'Student on probation',
-        'D': 'Withdrawn from the faculty',
-        'E': 'Student who were previously on probation',
-        'F': 'Medical case',
-        'G': 'Absent from examination',
-        'H': 'Withheld results',
-        'I': 'Expelled/rusticated/suspended student',
-        'J': 'Temporary withdrawn from the university',
-        'K': 'Unregistered student',
-        'L': 'Referred student',
-        'M': 'Reinstatement',
-        'N': 'Student on transfer',
-        'O': 'NCE-III repeater',
-        'Y': 'No previous verdict',
-        'X': 'New 300 level student',
-        'Z': 'Successful student (provisional)',
-        'A1': 'First Class',
-        'A2': 'Second Class Upper',
-        'A3': 'Second Class Lower',
-        'A4': 'Third Class',
-        'A5': 'Pass',
-        'A6': 'Distinction',
-        'A7': 'Credit',
-        'A8': 'Merit',
-        }
-
-    # FCEOkene separators
-    SEPARATORS_DICT = {
-        'form.fst_sit_fname': _(u'First Sitting Record'),
-        'form.scd_sit_fname': _(u'Second Sitting Record'),
-        'form.alr_fname': _(u'Advanced Level Record'),
-        'form.hq_type': _(u'Higher Education Record'),
-        'form.hq2_type': _(u'Second Higher Education Record'),
-        'form.nysc_year': _(u'NYSC Information'),
-        'form.employer': _(u'Employment History'),
-        'form.former_matric': _(u'Former FCEOkene Student'),
-        }
-
     # FCEOkene prefix
     STUDENT_ID_PREFIX = u'K'
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/utils/utils.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/utils/utils.py	(revision 8831)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/utils/utils.py	(revision 8834)
@@ -18,172 +18,10 @@
 """Customize general helper utilities for Kofa.
 """
-import os
-import pytz
-from waeup.kofa.utils.utils import KofaUtils, sorted_phone_prefixes
-from waeup.fceokene.interfaces import MessageFactory as _
+from kofacustom.nigeria.utils.utils import NigeriaKofaUtils
 
-INT_PHONE_PREFIXES = [
-    (1, _('Nigeria'), '234'),
-    (99, _('Germany'), '49'),
-    (99, _('United States'), '1'),
-    (99, _('Niger'), '227'),
-    (99, _('Benin'), '229'),
-    (99, _('Cameroon'), '237'),
-    (99, _('United Kingdom'), '44'),
-    (99, _('France'), '33'),
-    ]
-
-class KofaUtils(KofaUtils):
+class CustomKofaUtils(NigeriaKofaUtils):
     """A collection of methods subject to customization.
     """
-    PORTAL_LANGUAGE = 'en'
 
     PREFERRED_LANGUAGES_DICT = {
         }
-
-    #: A function to return
-    @classmethod
-    def sorted_phone_prefixes(cls, data=INT_PHONE_PREFIXES, request=None):
-        return sorted_phone_prefixes(data, request)
-
-    EXAM_SUBJECTS_DICT = {
-        'accounts': 'Accounts',
-        'add_general_science': 'Add General Science',
-        'add_maths': 'Add Maths',
-        'adv_elect_install_maint': 'Adv. Electrical Installation and Maintenance',
-        'agricultural_science': 'Agricultural Science',
-        'applied_electricity': 'Applied Electricity',
-        'arabi': 'Arabic',
-        'arithmetics': 'Arithmetics',
-        'art': 'Art',
-        'auto_mechanics': 'Auto Mechanics',
-        'basic_electricity': 'Basic Electricity',
-        'bible_knowledge': 'Bible Knowledge',
-        'biology': 'Biology',
-        'biology_alt_syl': 'Biology (Alt.Syl)',
-        'book_keeping': 'Book Keeping',
-        'building_construction': 'Building Construction',
-        'business_management': 'Business Management',
-        'business_construction_management': 'Business/Construction Management (Adv)',
-        'chemistry': 'Chemistry',
-        'chemistry_alt_syl': 'Chemistry (Alt.Syl)',
-        'christian_religious_studies': 'Christian Religious Studies',
-        'class_teaching': 'Class Teaching',
-        'clerical_office_duties': 'Clerical Office Duties',
-        'clothing_and_textiles': 'Clothing and Textiles',
-        'commerce': 'Commerce',
-        'economics': 'Economics',
-        'education': 'Education',
-        'efik': 'Efik',
-        'electronics': 'Electronics',
-        'elementary_surveying': 'Elementary Surveying',
-        'english_language': 'English Language',
-        'engineering_science': 'Engineering Science',
-        'financial_accounting': 'Financial Accounting',
-        'food_and_nutrition': 'Food and Nutrition',
-        'french': 'French',
-        'further_mathematics': 'Further Mathematics',
-        'general_science': 'General Science',
-        'geography': 'Geography',
-        'german': 'German',
-        'government': 'Government',
-        'hausa': 'Hausa',
-        'hausa_literature': 'Hausa Literature',
-        'health_science': 'Health Science',
-        'history': 'History',
-        'home_management': 'Home Management',
-        'human_biology': 'Human Biology',
-        'industrial_electrical_installation': 'Industrial Elect Installation (Adv)',
-        'intergrated_science': 'Intergrated Science',
-        'islamic_studies': 'Islamic Studies',
-        'literature_in_english': 'Literature in English',
-        'literature_in_nigerian_languages': 'Literature in Nigerian Languages',
-        'igbo': 'Igbo',
-        'igbo_literature': 'Igbo Literature',
-        'yoruba': 'Yoruba',
-        'yoruba_literature': 'Yoruba Literature',
-        'management_in_living': 'Management in Living',
-        'mathematics': 'Mathematics',
-        'metalwork': 'Metalwork',
-        'music': 'Music',
-        'nigerian_language': 'Nigerian Language',
-        'office_practice': 'Office Practice',
-        'physical_education': 'Physical Education',
-        'physical_health_education': 'Physical and Health Education',
-        'physics': 'Physics',
-        'physics_alt_syl': 'Physics (Alt.Syl)',
-        'principles_and_practice_of_education': 'Principles and Practice of Education',
-        'principles_of_cost_accounting': 'Principles of Cost Accounting',
-        'rural_science': 'Rural Science',
-        'science': 'Science',
-        'secretarial_duties': 'Secretarial Duties',
-        'shorthand': 'Shorthand',
-        'sierra_leone_studies': 'Sierra Leone Studies',
-        'sierra_leone_languages': 'Sierra Leone Languages',
-        'social_studies': 'Social Studies',
-        'statistics': 'Statistics',
-        'teaching_practice': 'Teaching Practice',
-        'technical_drawing': 'Technical Drawing',
-        'typewriting': 'Typewriting',
-        'visual_art': 'Visual Art',
-        'woodwork': 'Woodwork',
-        'winding_elect_machines': 'Winding of Elect Machines and Elect Eng Sc'
-        }
-
-    EXAM_GRADES = (
-        ('A1', 'Excellent (A1)'),
-        ('A2', 'Very Good (A2)'),
-        ('A3', 'Good (A3)'),
-        ('B2', 'Very Good (B2)'),
-        ('B3', 'Good (B3)'),
-        ('C4', 'Credit (C4)'),
-        ('C5', 'Credit (C5)'),
-        ('C6', 'Credit (C6)'),
-        ('A', 'Pass (A)'),
-        ('B', 'Pass (B)'),
-        ('C', 'Pass (C)'),
-        ('U', 'Pass (U)'),
-        ('D7', 'Pass (D7)'),
-        ('P7', 'Pass (P7)'),
-        ('P8', 'Pass (P8)'),
-        ('E8', 'Pass (E8)'),
-        ('F9', 'Fail (F9)'),
-        ('Aa', 'A (a)'),
-        ('Bb', 'B (b)'),
-        ('Cc', 'C (c)'),
-        ('Dd', 'D (d)'),
-        ('Ee', 'E (e)'),
-        ('Ff', 'F (f)'),
-        ('Gg', 'G (g)')
-        )
-
-    INST_TYPES_DICT = {
-        'none': '',
-        'faculty': 'Faculty of',
-        'department': 'Department of',
-        'school': 'School of',
-        'office': 'Office for',
-        'centre': 'Centre for',
-        'institute': 'Institute of',
-        'school_for': 'School for',
-        'college': 'College of',
-        }
-
-    STUDY_MODES_DICT = {
-        'ug_ft': 'Undergraduate Full Time',
-        'ug_sw': 'Undergraduate Sandwich',
-        'prence': 'Pre-NCE',
-        'pce': 'PCE',
-        'pd_ft': 'Professional Diploma in Education',
-        }
-
-    APP_CATS_DICT = {
-        'basic': 'PUTME, PDE, PCE, PRENCE',
-        'no': 'no application',
-        'sandwich': 'Sandwich',
-        'cest': 'Part-Time, Diploma, Certificate'
-        }
-
-    @property
-    def tzinfo(self):
-        return pytz.timezone('Africa/Lagos')
