Index: main/waeup.kofa/trunk/src/waeup/kofa/permissions.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/permissions.py	(revision 15969)
+++ main/waeup.kofa/trunk/src/waeup/kofa/permissions.py	(revision 15970)
@@ -294,6 +294,6 @@
     The LocalReportsOfficer requires the assignment of the global
     ReportsOfficer role to access the reports section. If set, it reduces
-    the number of available report generators and selectable certificates
-    Local Reports Officer can create only reports for their department.
+    the number of available report generators and selectable certificates.
+    Local Reports Officers can create only reports for their department.
     """
     grok.name('waeup.local.ReportsOfficer')
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15969)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15970)
@@ -2960,4 +2960,7 @@
                 return
             course = list(result)[0]
+            if course.former_course:
+                self.flash(_('Former courses can\'t be added.'), type="warning")
+                return
             addCourseTicket(self, course)
         return
@@ -3083,4 +3086,7 @@
             return
         course = data['course']
+        if course.former_course:
+            self.flash(_('Former courses can\'t be added.'), type="warning")
+            return
         success = addCourseTicket(self, course)
         if success:
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 15969)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 15970)
@@ -3567,4 +3567,52 @@
         self.assertEqual(self.student.state, 'courses registered')
 
+    def test_former_course(self):
+        IWorkflowState(self.student).setState('school fee paid')
+        self.student['studycourse'].current_level = 100
+        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()
+        # Now students can add the current study level
+        self.browser.getLink("Study Course").click()
+        self.browser.getLink("Add course list").click()
+        self.assertMatches('...Add current level 100 (Year 1)...',
+                           self.browser.contents)
+        self.browser.getControl("Create course list now").click()
+        # A level with one course ticket was created
+        self.assertEqual(
+            self.student['studycourse']['100'].number_of_tickets, 1)
+        self.browser.getLink("100").click()
+        self.assertTrue('<td>Unnamed Course</td>' in self.browser.contents)
+        self.browser.getLink("Edit course list").click()
+        del self.student['studycourse']['100']['COURSE1']
+        # Course can be added again via CourseTicketAddFormPage2
+        self.browser.getLink("here").click()
+        self.browser.getControl(name="form.course").value = ['COURSE1']
+        self.browser.getControl("Add course ticket").click()
+        self.assertTrue('Successfully added COURSE1' in self.browser.contents)
+        self.assertEqual(len(self.student['studycourse']['100'].keys()),1)
+        del self.student['studycourse']['100']['COURSE1']
+        self.course.former_course = True
+        self.browser.getLink("here").click()
+        self.browser.getControl(name="form.course").value = ['COURSE1']
+        self.browser.getControl("Add course ticket").click()
+        self.assertTrue('Former courses can\'t be added.' in self.browser.contents)
+        self.assertEqual(len(self.student['studycourse']['100'].keys()),0)
+        # Course can be added again via StudyLevelEditFormPage
+        self.browser.getLink("100").click()
+        self.browser.getLink("Edit course list").click()
+        self.browser.getControl(name="course").value = 'COURSE1'
+        self.browser.getControl("Add course ticket").click()
+        self.assertTrue('Former courses can\'t be added.' in
+            self.browser.contents)
+        self.assertEqual(len(self.student['studycourse']['100'].keys()),0)
+        # but added if current course
+        self.course.former_course = False
+        self.browser.getControl(name="course").value = 'COURSE1'
+        self.browser.getControl("Add course ticket").click()
+        self.assertTrue('Successfully added COURSE1' in self.browser.contents)
+        self.assertEqual(len(self.student['studycourse']['100'].keys()),1)
+        return
 
 class StudentRequestPWTests(StudentsFullSetup):
