Index: /main/waeup.uniben/trunk/src/waeup/uniben/remita/browser.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/remita/browser.py	(revision 17962)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/remita/browser.py	(revision 17963)
@@ -153,5 +153,5 @@
         reduced_inst_amt = 0.0
         lab_amt = 0.0
-        if self.context.p_category == 'schoolfee' and \
+        if self.context.p_category in ('schoolfee', 'schoolfee_1') and \
             not self.context.p_item == 'Balance':
             provider_amt = self.dynamic_provider_amt(self.context.student)
Index: /main/waeup.uniben/trunk/src/waeup/uniben/students/payments.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/students/payments.py	(revision 17962)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/students/payments.py	(revision 17963)
@@ -62,5 +62,5 @@
         log = 'successful %s payment: %s' % (self.p_category, self.p_id)
         msg = _('Payment successfully completed')
-        if self.p_category in ('schoolfee',):
+        if self.p_category in ('schoolfee', 'schoolfee_1'):
             msg += _('. Please proceed to library clearance, register your '
                    'courses online and proceed to your '
Index: /main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 17962)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 17963)
@@ -810,4 +810,32 @@
         return
 
+    def test_set_payment_details_jupeb(self):
+        # JUPEB students can pay by instalments
+        utils = getUtility(IStudentsUtils)
+        self.certificate.study_mode = 'found'
+        IWorkflowState(self.student).setState('cleared')
+        error, payment = utils.setPaymentDetails(
+            'schoolfee', self.student, None, None, None)
+        self.assertEqual(payment.p_level, 100)
+        self.assertEqual(payment.p_session, 2004)
+        self.assertEqual(payment.amount_auth, 220000.0)
+        self.assertEqual(payment.p_item, u'CERT1')
+        self.assertEqual(error, None)
+        error, payment = utils.setPaymentDetails(
+            'schoolfee_1', self.student, None, None, None)
+        self.assertEqual(payment.p_level, 100)
+        self.assertEqual(payment.p_session, 2004)
+        self.assertEqual(payment.amount_auth, 110000.0)
+        self.assertEqual(payment.p_item, u'CERT1')
+        self.assertEqual(error, None)
+        return
+        error, payment = utils.setPaymentDetails(
+            'secondinstall', self.student, None, None, None)
+        self.assertEqual(payment.p_level, 100)
+        self.assertEqual(payment.p_session, 2004)
+        self.assertEqual(payment.amount_auth, 110000.0)
+        self.assertEqual(payment.p_item, u'CERT1')
+        self.assertEqual(error, None)
+
     def test_edit_level_by_co(self):
         # Create clearance officer
Index: /main/waeup.uniben/trunk/src/waeup/uniben/students/utils.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/students/utils.py	(revision 17962)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/students/utils.py	(revision 17963)
@@ -493,4 +493,17 @@
             else:
                 amount = 60000.0
+
+        elif student.state == CLEARED \
+                and student.is_jupeb and category in ('schoolfee', 'schoolfee_1',
+                                                      'secondinstall'):
+            try:
+                certificate = student['studycourse'].certificate
+                p_item = certificate.code
+            except (AttributeError, TypeError):
+                return _('Study course data are incomplete.'), None
+            amount = 220000.0
+            if category in ('schoolfee_1', 'secondinstall'):
+                amount /= 2
+
         elif category == 'schoolfee':
             try:
@@ -580,5 +593,4 @@
             if student.is_staff:
                 amount /= 2
-
         else:
             fee_name = category + '_fee'
Index: /main/waeup.uniben/trunk/src/waeup/uniben/utils/utils.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/utils/utils.py	(revision 17962)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/utils/utils.py	(revision 17963)
@@ -74,4 +74,6 @@
     PAYMENT_CATEGORIES = {
         'schoolfee': 'School Fee',
+        'schoolfee_1': 'School Fee (1st instalment)',
+        'secondinstall':'School Fee (2nd instalment)',
         'clearance': 'Acceptance Fee',
         'bed_allocation': 'Bed Allocation Fee',
@@ -126,4 +128,6 @@
     REPORTABLE_PAYMENT_CATEGORIES = {
         'schoolfee': 'School Fee',
+        'schoolfee_1': 'School Fee (1st instalment)',
+        'secondinstall':'School Fee (2nd instalment)',
         'clearance': 'Acceptance Fee',
         'bed_allocation': 'Bed Allocation Fee',
@@ -133,5 +137,9 @@
 
     def selectable_payment_categories(self, student):
-        return self.SELECTABLE_PAYMENT_CATEGORIES
+        spc = deepcopy(self.SELECTABLE_PAYMENT_CATEGORIES)
+        if student.is_jupeb:
+            spc[schoolfee_1] =  'School Fee (1st instalment)'
+            spc[secondinstal] = 'School Fee (2nd instalment)'
+        return spc
 
     PREVIOUS_PAYMENT_CATEGORIES = deepcopy(SELECTABLE_PAYMENT_CATEGORIES)
@@ -147,5 +155,5 @@
         'sf_return': 'School Fee - Returning',
         'maint_all': 'Accomm. Fee - All',
-        'cl_all':    'Accept. Fee- All',
+        'cl_all':    'Accept. Fee - All',
         'cl_jupeb':  'Accept. Fee - JUPEB',
         'cl_allexj': 'Accept. Fee - All except JUPEB',
