Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/browser.py	(revision 9736)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/browser.py	(revision 9737)
@@ -241,5 +241,5 @@
         xmldict['dalash_amt'] = 0
         self.pay_item_id = '000'
-        if self.context.p_category in ('schoolfee', 'co1', 'co2', 'co3'):
+        if self.context.p_category == 'schoolfee':
             self.pay_item_id = '101'
             # Dalash data
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/tests.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/tests.py	(revision 9736)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/tests.py	(revision 9737)
@@ -79,4 +79,5 @@
         IWorkflowState(self.student).setState('cleared')
         self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
         self.browser.getControl("Create ticket").click()
         self.assertMatches('...ticket created...',
@@ -154,5 +155,4 @@
         self.assertMatches('...Amount Authorized...',
                            self.browser.contents)
-
         # Maint fee is taken from the session configuration object
         self.assertMatches(
@@ -174,4 +174,33 @@
         self.assertMatches(
             '...item_name="Hostel Maintenance Fee" item_amt="68700" bank_id="31" acct_num="0039050937"...',
+            self.browser.contents)
+
+        # Create carryover ticket
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['carryover1']
+        self.browser.getControl("Create ticket").click()
+        ctrl = self.browser.getControl(name='val_id')
+        value = ctrl.options[2]
+        self.browser.getLink(value).click()
+        self.assertMatches(
+            '...<span>6000.0</span>...',
+            self.browser.contents)
+        # Manager can access InterswitchForm
+        self.browser.getLink("CollegePAY", index=0).click()
+        self.assertMatches('...<input type="hidden" name="pay_item_id" value="101" />...',
+                           self.browser.contents)
+        self.assertMatches('...Total Amount Authorized:...',
+                           self.browser.contents)
+        self.assertMatches(
+            '...<input type="hidden" name="amount" value="600000.0" />...',
+            self.browser.contents)
+        self.assertMatches(
+            '...item_name="School Fee" item_amt="270000" bank_id="120" acct_num="1771180233"...',
+            self.browser.contents)
+        self.assertMatches(
+            '...item_name="Dalash" item_amt="180000" bank_id="117" acct_num="1013196791"...',
+            self.browser.contents)
+        self.assertMatches(
+            '...item_name="BT Education" item_amt="120000" bank_id="117" acct_num="1010764827"...',
             self.browser.contents)
 
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py	(revision 9736)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py	(revision 9737)
@@ -96,4 +96,5 @@
         self.browser.open(self.payments_path)
         self.browser.getLink("Add current session payment ticket").click()
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
         self.browser.getControl("Create ticket").click()
         self.assertMatches('...Amount could not be determined...',
@@ -101,4 +102,5 @@
         IWorkflowState(self.student).setState('cleared')
         self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
         self.browser.getControl("Create ticket").click()
         self.assertMatches('...ticket created...',
@@ -117,4 +119,5 @@
         ticket.p_state = 'paid'
         self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
         self.browser.getControl("Create ticket").click()
         self.assertMatches('...This type of payment has already been made...',
@@ -125,25 +128,20 @@
             del self.student['payments'][payment]
         self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['co1']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['co2']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['co3']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(
-            name="form.p_category").value = ['bed_allocation']
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
+        self.browser.getControl("Create ticket").click()
+        self.assertMatches('...ticket created...',
+                           self.browser.contents)
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['carryover1']
+        self.browser.getControl("Create ticket").click()
+        self.assertMatches('...ticket created...',
+                           self.browser.contents)
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['carryover2']
+        self.browser.getControl("Create ticket").click()
+        self.assertMatches('...ticket created...',
+                           self.browser.contents)
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['carryover3']
         self.browser.getControl("Create ticket").click()
         self.assertMatches('...ticket created...',
@@ -152,9 +150,4 @@
         self.browser.getControl(
             name="form.p_category").value = ['hostel_maintenance']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['clearance']
         self.browser.getControl("Create ticket").click()
         self.assertMatches('...ticket created...',
@@ -256,23 +249,26 @@
         self.assertEqual(error, None)
 
-        error, payment = utils.setPaymentDetails('co1',self.student)
+        error, payment = utils.setPaymentDetails('carryover1',self.student)
         self.assertEqual(payment.p_level, 100)
         self.assertEqual(payment.p_session, 2004)
         self.assertEqual(payment.amount_auth, 6000.0)
-        self.assertEqual(payment.p_item, u'')
-        self.assertEqual(error, None)
-
-        error, payment = utils.setPaymentDetails('co2',self.student)
+        self.assertEqual(payment.p_item, u'1 CarryOver')
+        self.assertEqual(payment.p_category, 'schoolfee')
+        self.assertEqual(error, None)
+
+        error, payment = utils.setPaymentDetails('carryover2',self.student)
         self.assertEqual(payment.p_level, 100)
         self.assertEqual(payment.p_session, 2004)
         self.assertEqual(payment.amount_auth, 7000.0)
-        self.assertEqual(payment.p_item, u'')
-        self.assertEqual(error, None)
-
-        error, payment = utils.setPaymentDetails('co3',self.student)
+        self.assertEqual(payment.p_item, u'2 CarryOvers')
+        self.assertEqual(payment.p_category, 'schoolfee')
+        self.assertEqual(error, None)
+
+        error, payment = utils.setPaymentDetails('carryover3',self.student)
         self.assertEqual(payment.p_level, 100)
         self.assertEqual(payment.p_session, 2004)
         self.assertEqual(payment.amount_auth, 8000.0)
-        self.assertEqual(payment.p_item, u'')
+        self.assertEqual(payment.p_item, u'3 CarryOvers')
+        self.assertEqual(payment.p_category, 'schoolfee')
         self.assertEqual(error, None)
 
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/utils.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/utils.py	(revision 9736)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/utils.py	(revision 9737)
@@ -19,9 +19,9 @@
 import random
 from time import time
-from zope.component import createObject
+from zope.component import createObject, getUtility
 from waeup.kofa.interfaces import CLEARED, RETURNING, PAID
 from kofacustom.nigeria.students.utils import NigeriaStudentsUtils
 from waeup.kofa.accesscodes import create_accesscode
-from waeup.kofa.interfaces import CLEARED, RETURNING
+from waeup.kofa.interfaces import CLEARED, RETURNING, IKofaUtils
 from waeup.kofa.fees import FeeTable
 from waeup.kwarapoly.interfaces import MessageFactory as _
@@ -164,9 +164,9 @@
                          p_level)
                         )
-        elif category == 'co1':
+        elif category == 'carryover1':
             amount = 6000.0
-        elif category == 'co2':
+        elif category == 'carryover2':
             amount = 7000.0
-        elif category == 'co3':
+        elif category == 'carryover3':
             amount = 8000.0
         if amount in (0.0, None):
@@ -179,4 +179,9 @@
                ticket.p_session == p_session:
                   return _('This type of payment has already been made.'), None
+        if category.startswith('carryover'):
+            p_item = getUtility(IKofaUtils).PAYMENT_CATEGORIES[category]
+            p_item = unicode(p_item)
+            # Now we change the category to reduce the number of categories.
+            category = 'schoolfee'
         payment = createObject(u'waeup.StudentOnlinePayment')
         timestamp = ("%d" % int(time()*10000))[1:]
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/utils/utils.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/utils/utils.py	(revision 9736)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/utils/utils.py	(revision 9737)
@@ -43,7 +43,7 @@
     PAYMENT_CATEGORIES = {
         'schoolfee': 'School Fee',
-        'co1': '1 Carry-Over',
-        'co2': '2 Carry-Overs',
-        'co3': '3 Carry-Overs',
+        'carryover1': '1 CarryOver',
+        'carryover2': '2 CarryOvers',
+        'carryover3': '3 CarryOvers',
         'clearance': 'Acceptance Fee',
         'bed_allocation': 'Bed Allocation Fee',
@@ -51,2 +51,10 @@
         'application': 'Application Fee'
         }
+
+    SELECTABLE_PAYMENT_CATEGORIES = {
+        'schoolfee': 'School Fee',
+        'carryover1': 'One CarryOver',
+        'carryover2': 'Two CarryOvers',
+        'carryover3': 'Three CarryOvers',
+        'hostel_maintenance': 'Hostel Maintenance Fee',
+        }
