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 9392)
+++ /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py	(revision 9393)
@@ -32,4 +32,6 @@
 from waeup.kofa.students.interfaces import IStudentsUtils
 from waeup.kwarapoly.testing import FunctionalLayer
+from waeup.kwarapoly.students.utils import (
+    local_nonlocal, arts_science, pt_ft)
 
 
@@ -195,8 +197,12 @@
 
         IWorkflowState(self.student).setState('cleared')
+        self.assertEqual(local_nonlocal(self.student), 'non-local')
+        self.assertEqual(arts_science(self.student), 'science')
+        self.assertEqual(pt_ft(self.student), 'ft')
+
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(payment.p_level, 100)
         self.assertEqual(payment.p_session, 2004)
-        self.assertEqual(payment.amount_auth, 60980.0)
+        self.assertEqual(payment.amount_auth, 44630.0)
         self.assertEqual(payment.p_item, u'CERT1')
         self.assertEqual(error, None)
@@ -206,5 +212,5 @@
         self.assertEqual(payment.p_level, 200)
         self.assertEqual(payment.p_session, 2005)
-        self.assertEqual(payment.amount_auth, 60980.0)
+        self.assertEqual(payment.amount_auth, 44590.0)
         self.assertEqual(payment.p_item, u'CERT1')
         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 9392)
+++ /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/utils.py	(revision 9393)
@@ -24,5 +24,59 @@
 from waeup.kofa.accesscodes import create_accesscode
 from waeup.kofa.interfaces import CLEARED, RETURNING
+from waeup.kofa.fees import FeeTable
 from waeup.kwarapoly.interfaces import MessageFactory as _
+
+PAYMENT_LEVELS = (10, 100, 200, 210, 300, 400, 500, 510, 600, 999)
+
+FEES_PARAMS = (
+        ('ft', 'pt'),
+        ('local', 'non-local'),
+        ('science','arts'),
+        PAYMENT_LEVELS
+    )
+
+FEES_VALUES = (
+        (
+          (
+            (34400.00, 37100.00, 43000.00, 29300.00, 0.00, 37900.00, 29700.00, 29900.00, 0.00, 47550.00), # science
+            (32900.00, 35600.00, 28000.00, 27800.00, 0.00, 36400.00, 28200.00, 28400.00, 0.00, 47550.00)  # arts
+          ), # local
+          (
+            (41930.00, 44630.00, 44590.00, 36400.00, 0.00, 46330.00, 32900.00, 38100.00, 0.00, 60980.00), # science
+            (40430.00, 43130.00, 29590.00, 34900.00, 0.00, 44830.00, 31400.00, 36600.00, 0.00, 60980.00)  # arts
+          ), # non-local
+        ), # ft
+        (
+          (
+            (0.00, 38400.00, 30900.00, 0.00, 30900.00, 39000.00, 31550.00, 0.00, 31550.00, 0.00), # science
+            (0.00, 36900.00, 29400.00, 0.00, 29400.00, 37500.00, 30050.00, 0.00, 30050.00, 0.00)  # arts
+          ), # local
+          (
+            (0.00, 45600.00, 32350.00, 0.00, 32350.00, 47200.00, 35750.00, 0.00, 35750.00, 0.00), # science
+            (0.00, 44100.00, 30850.00, 0.00, 30850.00, 45700.00, 34250.00, 0.00, 34250.00, 0.00)  # arts
+          ), # non-local
+        ), # pt
+    )
+
+SCHOOL_FEES = FeeTable(FEES_PARAMS, FEES_VALUES)
+
+def local_nonlocal(student):
+    lga = getattr(student, 'lga')
+    if lga and student.lga.startswith('kwara'):
+        return 'local'
+    else:
+        return 'non-local'
+
+def arts_science(student):
+    if student.faccode == 'IFMS':
+        return 'arts'
+    else:
+        return 'science'
+
+def pt_ft(student):
+    if student.current_mode.endswith('pt'):
+        return 'pt'
+    else:
+        return 'ft'
 
 class CustomStudentsUtils(NigeriaStudentsUtils):
@@ -30,4 +84,5 @@
 
     """
+
 
     def selectBed(self, available_beds):
@@ -96,13 +151,14 @@
             except (AttributeError, TypeError):
                 return _('Study course data are incomplete.'), None
-
-
             if student.state == RETURNING:
                 p_session, p_level = self.getReturningData(student)
-
-
             if student.state in (RETURNING, CLEARED):
-                amount = 60980.00
-
+                if p_level in PAYMENT_LEVELS:
+                    amount = SCHOOL_FEES.get_fee(
+                        (pt_ft(student),
+                         local_nonlocal(student),
+                         arts_science(student),
+                         p_level)
+                        )
         if amount in (0.0, None):
             return _(u'Amount could not be determined.'), None
