Index: /main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_utils.py
===================================================================
--- /main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_utils.py	(revision 14543)
+++ /main/waeup.aaue/trunk/src/waeup/aaue/students/tests/test_utils.py	(revision 14544)
@@ -128,6 +128,12 @@
         self.assertEqual(error, None)
 
+        error, payment = utils.setPaymentDetails('clearance',self.student, 2004, 100)
+        self.assertEqual(error, 'This is not a previous session.')
         error, payment = utils.setPaymentDetails('schoolfee',self.student, 2004, 100)
-        self.assertEqual(error, u'Previous session payment not yet implemented.')
+        self.assertEqual(payment.p_level, 100)
+        self.assertEqual(payment.p_session, 2004)
+        self.assertEqual(payment.amount_auth, 6666.0)
+        self.assertEqual(payment.p_item, u'CERT1')
+        self.assertEqual(error, None)
         return
 
Index: /main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py
===================================================================
--- /main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py	(revision 14543)
+++ /main/waeup.aaue/trunk/src/waeup/aaue/students/utils.py	(revision 14544)
@@ -220,8 +220,21 @@
         error = u''
         if previous_session:
-            return _('Previous session payment not yet implemented.'), None
-        p_session = student['studycourse'].current_session
-        p_level = student['studycourse'].current_level
-        p_current = True
+            if previous_session < student['studycourse'].entry_session:
+                return _('The previous session must not fall below '
+                         'your entry session.'), None
+            if category == 'schoolfee':
+                # School fee is always paid for the following session
+                if previous_session > student['studycourse'].current_session:
+                    return _('This is not a previous session.'), None
+            else:
+                if previous_session > student['studycourse'].current_session - 1:
+                    return _('This is not a previous session.'), None
+            p_session = previous_session
+            p_level = previous_level
+            p_current = False
+        else:
+            p_session = student['studycourse'].current_session
+            p_level = student['studycourse'].current_level
+            p_current = True
         academic_session = self._getSessionConfiguration(p_session)
         if academic_session == None:
@@ -305,5 +318,5 @@
             if student.is_postgrad and category != 'schoolfee':
                 return _("No additional fees required."), None
-            if student.current_mode in (
+            if not previous_session and student.current_mode in (
                 'ug_ft', 'ug_pt', 'de_ft', 'de_pt',
                 'transfer', 'mug_ft', 'mde_ft') \
@@ -319,5 +332,16 @@
                     return _("You are not allowed "
                              "to pay by instalments."), None
-            if student.state == CLEARED and category != 'schoolfee_2':
+            if previous_session:
+                # Students can pay for previous sessions in all
+                # workflow states.  Fresh students are excluded by the
+                # update method of the PreviousPaymentAddFormPage.
+                if previous_level == 100:
+                    amount = getattr(certificate, 'school_fee_1', 0.0)
+                else:
+                    if student.entry_session >= 2015:
+                        amount = getattr(certificate, 'school_fee_2', 0.0)
+                    else:
+                        amount = getattr(certificate, 'school_fee_3', 0.0)
+            elif student.state == CLEARED and category != 'schoolfee_2':
                 amount = getattr(certificate, 'school_fee_1', 0.0)
                 # Cut school fee by 50%
Index: /main/waeup.aaue/trunk/src/waeup/aaue/students/viewlets.py
===================================================================
--- /main/waeup.aaue/trunk/src/waeup/aaue/students/viewlets.py	(revision 14543)
+++ /main/waeup.aaue/trunk/src/waeup/aaue/students/viewlets.py	(revision 14544)
@@ -37,9 +37,9 @@
 from waeup.aaue.interfaces import MessageFactory as _
 
-class AddPreviousPaymentActionButton(AddPreviousPaymentActionButton):
+#class AddPreviousPaymentActionButton(AddPreviousPaymentActionButton):
 
-    @property
-    def target_url(self):
-        return ''
+#    @property
+#    def target_url(self):
+#        return ''
 
 #class AddBalancePaymentActionButton(AddBalancePaymentActionButton):
Index: /main/waeup.aaue/trunk/src/waeup/aaue/utils/utils.py
===================================================================
--- /main/waeup.aaue/trunk/src/waeup/aaue/utils/utils.py	(revision 14543)
+++ /main/waeup.aaue/trunk/src/waeup/aaue/utils/utils.py	(revision 14544)
@@ -122,4 +122,9 @@
         'fac_dep': 'Faculty and Departmental Dues',
         'restitution': 'Restitution Fee',
+        }
+
+    PREVIOUS_PAYMENT_CATEGORIES = {
+        'schoolfee': 'School Fee',
+        'clearance': 'Acceptance Fee',
         }
 
