Index: main/waeup.aaue/trunk/src/waeup/aaue/interswitch/browser.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/interswitch/browser.py	(revision 13511)
+++ main/waeup.aaue/trunk/src/waeup/aaue/interswitch/browser.py	(revision 13512)
@@ -218,5 +218,5 @@
             xmldict['joint_venture_amt'] = 100 * joint_venture_amt
             xmldict['aaue_share_amt'] = 100 * aaue_share_amt
-            if self.context.p_category == 'schoolfee_incl':
+            if self.context.p_category in ('schoolfee_incl', 'schoolfee_1'):
                 # Schoolfee including additional fees
                 xmldict['student_union_due_amt'] = 100 * student_union_due_amt
Index: main/waeup.aaue/trunk/src/waeup/aaue/students/browser.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/browser.py	(revision 13511)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/browser.py	(revision 13512)
@@ -144,5 +144,6 @@
             academic_session = None
         text =  '\n\n The Amount Authorized is inclusive of: '
-        if self.context.p_category == 'schoolfee_incl' and academic_session:
+        if self.context.p_category in ('schoolfee_incl', 'schoolfee_1') \
+            and academic_session:
             welfare_fee = gateway_net_amt(academic_session.welfare_fee)
             union_fee = gateway_net_amt(academic_session.union_fee)
Index: main/waeup.aaue/trunk/src/waeup/aaue/students/payments.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/payments.py	(revision 13511)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/payments.py	(revision 13512)
@@ -49,5 +49,5 @@
     def redeemTicket(self):
         student = self.student
-        if self.p_category.startswith('schoolfee'):
+        if self.p_category in ('schoolfee', 'schoolfee_incl', 'schoolfee_1') :
             # Bypass activation code creation if next session
             # can be started directly.
Index: main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_browser.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_browser.py	(revision 13511)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_browser.py	(revision 13512)
@@ -178,20 +178,30 @@
         self.assertMatches('...ticket created...',
                            self.browser.contents)
-
-    def deactivated_test_for_instalment_payments(self):
+        return
+
+    def test_for_instalment_payments(self):
+        self.student['studycourse'].certificate.school_fee_1 = 6666.0
+        self.app['configuration']['2004'].union_fee = 1250.0
+        self.app['configuration']['2004'].welfare_fee = 750.0
+        self.student.nationality = u'NG'
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-        self.browser.open(self.payments_path)
         self.browser.open(self.payments_path + '/addop')
         self.browser.getControl(name="form.p_category").value = ['schoolfee_1']
         self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
+        self.assertTrue(
+            'Wrong state. Only students in state \'cleared\' are allowed to pay by instalments'
+            in self.browser.contents)
+        IWorkflowState(self.student).setState('cleared')
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee_1']
+        self.browser.getControl("Create ticket").click()
+        self.assertTrue('ticket created' in self.browser.contents)
         # We can't add the 2nd instalment ticket because the
         # first one has not yet been approved.
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['schoolfee_2']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...1st school fee instalment has not yet been paid...',
-                           self.browser.contents)
+        #self.browser.open(self.payments_path + '/addop')
+        #self.browser.getControl(name="form.p_category").value = ['schoolfee_2']
+        #self.browser.getControl("Create ticket").click()
+        #self.assertMatches('...1st school fee instalment has not yet been paid...',
+        #                   self.browser.contents)
         # Ok, then we approve the first instalment ...
         self.browser.open(self.payments_path)
@@ -203,36 +213,16 @@
         self.browser.getControl(name="form.p_category").value = ['schoolfee_2']
         self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
+        self.assertTrue('ticket created' in self.browser.contents)
         # ... approve the second instalment ...
         ctrl = self.browser.getControl(name='val_id')
         p_id = ctrl.options[1]
         self.browser.open(self.payments_path + '/' + p_id + '/approve')
-        # ... and finally add the 1st instalment for the next session
-        # provided that student is returning.
-        IWorkflowState(self.student).setState('returning')
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['schoolfee_1']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...Session configuration object is not...',
-                           self.browser.contents)
-        # Uups, we forgot to add a session configuration for next session
-        configuration = createObject('waeup.SessionConfiguration')
-        configuration.academic_session = 2005
-        self.app['configuration'].addSessionConfiguration(configuration)
-        self.app['configuration']['2005'].school_base = 7777.0
-        self.browser.open(self.payments_path + '/addop')
-        self.browser.getControl(name="form.p_category").value = ['schoolfee_1']
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...ticket created...',
-                           self.browser.contents)
-        # If the session configuration doesn't exist an error message will
-        # be shown. No other requirement is being checked.
-        del self.app['configuration']['2004']
-        self.browser.open(self.payments_path)
-        self.browser.getLink("Add current session payment ticket").click()
-        self.browser.getControl("Create ticket").click()
-        self.assertMatches('...Session configuration object is not...',
-                           self.browser.contents)
+        self.assertEqual(self.student['payments'].values()[0].p_category, 'schoolfee_1')
+        self.assertEqual(self.student['payments'].values()[1].p_category, 'schoolfee_2')
+        # 6666/2 + 1250 + 750 - 500
+        self.assertEqual(self.student['payments'].values()[0].amount_auth, 4833.0)
+        # 6666/2
+        self.assertEqual(self.student['payments'].values()[1].amount_auth, 3333.0)
+        return
 
     def test_manage_payments_bypass_ac_creation(self):
Index: main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py	(revision 13511)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py	(revision 13512)
@@ -178,9 +178,15 @@
             except (AttributeError, TypeError):
                 return _('Study course data are incomplete.'), None
-            if student.state == CLEARED:
+            if student.state == CLEARED or category == 'schoolfee_2':
                 if student.is_foreigner:
                     amount = getattr(certificate, 'school_fee_3', 0.0)
                 else:
                     amount = getattr(certificate, 'school_fee_1', 0.0)
+                # Cut school fee by 50%
+                if category in ('schoolfee_1', 'schoolfee_2'):
+                    amount = amount / 2
+            elif category == 'schoolfee_1':
+                return _("Wrong state. Only students in state 'cleared' "
+                         "are allowed to pay by instalments."), None
             elif student.state == RETURNING:
                 if not student.father_name:
@@ -204,5 +210,5 @@
                 return _(u'Amount could not be determined.'), None
             # Add Student Union Fee and Welfare Assurance
-            if category == 'schoolfee_incl':
+            if category in ('schoolfee_incl', 'schoolfee_1'):
                 amount += gateway_net_amt(academic_session.welfare_fee) + \
                     gateway_net_amt(academic_session.union_fee)
Index: main/waeup.aaue/trunk/src/waeup/aaue/utils/utils.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/utils/utils.py	(revision 13511)
+++ main/waeup.aaue/trunk/src/waeup/aaue/utils/utils.py	(revision 13512)
@@ -29,6 +29,6 @@
     PAYMENT_CATEGORIES = {
         'schoolfee': 'School Fee',
-        'schoolfee_1': 'School Fee 1st instalment',
-        'schoolfee_2': 'School Fee 2nd instalment',
+        'schoolfee_1': 'School Fee Plus (1st instalment)',
+        'schoolfee_2': 'School Fee (2nd instalment)',
         'schoolfee_incl': 'School Fee Plus',
         'clearance': 'Acceptance Fee',
@@ -49,6 +49,6 @@
     SELECTABLE_PAYMENT_CATEGORIES = {
         'schoolfee': 'School Fee without additional fees',
-        #'schoolfee_1': 'School Fee 1st instalment',
-        #'schoolfee_2': 'School Fee 2nd instalment',
+        'schoolfee_1': 'School Fee (1st instalment) + Student Union Dues + Welfare Assurance Fee',
+        'schoolfee_2': 'School Fee (2nd instalment)',
         'schoolfee_incl': 'School Fee + Student Union Dues + Welfare Assurance Fee',
         'clearance': 'Acceptance Fee without additional fees',
