Index: main/waeup.aaue/trunk/src/waeup/aaue/students/studylevel.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/studylevel.py	(revision 14246)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/studylevel.py	(revision 14248)
@@ -35,4 +35,5 @@
 from waeup.aaue.students.interfaces import (
     ICustomStudentStudyLevel, ICustomCourseTicket)
+from waeup.aaue.interfaces import MessageFactory as _
 
 
@@ -99,7 +100,17 @@
 
     @property
-    def course_registration_allowed(self):
+    def course_registration_forbidden(self):
+        fac_dep_paid = False
+        if self.student.entry_session >= 2016:
+            for ticket in self.student['payments'].values():
+                if ticket.p_category == 'fac_dep' and \
+                    ticket.p_session == self.level_session and \
+                    ticket.p_state == 'paid':
+                        fac_dep_paid = True
+                        continue
+        if not fac_dep_paid:
+            return _("Please pay faculty and departmental dues first.")
         if self.student.is_fresh:
-            return True
+            return
         try:
             if self.student.is_postgrad:
@@ -119,8 +130,7 @@
                         str(self.level_session)].coursereg_deadline
         except (TypeError, KeyError):
-            return True
+            return
         if not deadline or deadline > datetime.now(pytz.utc):
-            return True
-        payment_made = False
+            return
         if len(self.student['payments']):
             for ticket in self.student['payments'].values():
@@ -128,8 +138,7 @@
                     ticket.p_session == self.level_session and \
                     ticket.p_state == 'paid':
-                        payment_made = True
-        if payment_made:
-            return True
-        return False
+                        return
+        return _("Course registration has ended. "
+                 "Please pay the late registration fee.")
 
     # only AAUE
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 14246)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_browser.py	(revision 14248)
@@ -831,4 +831,35 @@
         return
 
+    def test_course_registration_forbidden(self):
+        IWorkflowState(self.student).setState('school fee paid')
+        self.student['studycourse'].entry_session = 2016
+        self.student['studycourse'].current_session = 2016
+        self.browser.open(self.login_path)
+        self.browser.getControl(name="form.login").value = self.student_id
+        self.browser.getControl(name="form.password").value = 'spwd'
+        self.browser.getControl("Login").click()
+        self.browser.getLink("Study Course").click()
+        self.browser.getLink("Add course list").click()
+        self.browser.getControl("Create course list now").click()
+        self.browser.getLink("Edit course list").click()
+        self.browser.getControl("Register course list").click()
+        self.assertTrue('Please pay faculty and departmental dues first'
+            in self.browser.contents)
+
+        configuration_1 = createObject('waeup.SessionConfiguration')
+        configuration_1.academic_session = 2016
+        configuration_1.fac_dep_fee = 9999.0
+        self.app['configuration'].addSessionConfiguration(configuration_1)
+
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['fac_dep']
+        self.browser.getControl("Create ticket").click()
+        self.student['payments'].values()[0].approveStudentPayment()
+        self.browser.open(self.studycourse_path + '/100/edit')
+        self.browser.getControl("Register course list").click()
+        self.assertTrue('Course list has been registered'
+            in self.browser.contents)
+        return
+
     def test_student_clearance(self):
         # Student cant login if their password is not set
Index: main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py	(revision 14246)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py	(revision 14248)
@@ -200,16 +200,4 @@
             else:
                 return _(u'No bed allocated.'), None
-        elif category == 'welfare' and not student.is_postgrad:
-            amount = academic_session.welfare_fee
-        elif category == 'id_card' and not student.is_postgrad:
-            amount = academic_session.id_card_fee
-        elif category == 'union' and not student.is_postgrad:
-            amount = academic_session.union_fee
-        elif category == 'lapel' and not student.is_postgrad:
-            amount = academic_session.lapel_fee
-        elif category == 'matric_gown' and not student.is_postgrad:
-            amount = academic_session.matric_gown_fee
-        elif category == 'concessional' and not student.is_postgrad:
-            amount = academic_session.concessional_fee
         elif student.current_mode == 'found' and category not in (
             'schoolfee', 'clearance', 'late_registration'):
@@ -327,4 +315,7 @@
             else:
                 amount += academic_session.penalty_ug
+        elif not student.is_postgrad:
+            fee_name = category + '_fee'
+            amount = getattr(academic_session, fee_name, 0.0)
         if amount in (0.0, None):
             return _(u'Amount could not be determined.'), None
