Index: main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 13002)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 13003)
@@ -178,11 +178,11 @@
 
 class IStudentNavigation(IStudentNavigationBase):
-    """Interface needed for student navigation, logging, etc.
-    """
-    student = Attribute('Student object of context.')
+    """Interface needed for navigation and logging. This interface is
+    implemented by all content classes in the student section.
+    """
+    student = Attribute('Student object of context')
 
     def writeLogMessage(view, message):
         """Write a view specific log message into students.log.
-
         """
 
@@ -190,6 +190,4 @@
     """Representation of student base data.
     """
-    password = Attribute('Encrypted password')
-    temp_password = Attribute('Dictionary with user name, timestamp and encrypted password')
     history = Attribute('Object history, a list of messages')
     state = Attribute('Registration state')
@@ -211,4 +209,7 @@
     transcript_enabled = Attribute('True if transcript processing is enabled')
 
+    password = Attribute('Encrypted password')
+    temp_password = Attribute('Dictionary with user name, timestamp and encrypted password')
+
     suspended = schema.Bool(
         title = _(u'Account suspended'),
@@ -281,8 +282,4 @@
         required = False,
         )
-
-    def writeLogMessage(view, message):
-        """Write formatted log message into students.log.
-        """
 
     def setTempPassword(user, password):
@@ -427,5 +424,4 @@
     """Representation of student study course data.
     """
-    student = Attribute('Student object')
     next_session_allowed = Attribute('True if the student can proceed to next session')
     is_postgrad = Attribute('True if student is postgraduate student')
@@ -482,8 +478,4 @@
         )
 
-    def writeLogMessage(view, message):
-        """Write formatted log message into students.log.
-        """
-
     def addStudentStudyLevel(cert, studylevel):
         """Add a study level object.
@@ -577,6 +569,4 @@
     """A representation of student study level data. 
     """
-    student = Attribute('Student object')
-
     certcode = Attribute('The certificate code of the study course')
     is_current_level = Attribute('True if level is current level of the student')
@@ -633,8 +623,4 @@
         )
 
-    def writeLogMessage(view, message):
-        """Write formatted log message into students.log.
-        """
-
     def addCourseTicket(ticket, course):
         """Add a course ticket object.
@@ -649,11 +635,13 @@
     """A representation of course ticket data.
     """
-    code = Attribute('code of the original course')
-    certcode = Attribute('certificate code of the study course')
-    grade = Attribute('grade calculated from score')
-    weight = Attribute('weight calculated from score')
-    removable_by_student = Attribute('Is student allowed to remove the ticket?')
-    level_session = Attribute('session of the level the ticket has been added to')
-    level = Attribute('id of the level the ticket has been added to')
+    certcode = Attribute('Certificate code of the study course')
+    level_session = Attribute('Session of the study level the ticket has been added to')
+    level = Attribute('Level value of the study level the ticket has been added to')
+    grade = Attribute('Grade calculated from score')
+    weight = Attribute('Weight calculated from score')
+    removable_by_student = Attribute('True if student is allowed to remove the ticket')
+    editable_by_lecturer = Attribute('True if lecturer is allowed to edit the ticket')
+
+    code = Attribute('Code of the original course')
 
     title = schema.TextLine(
@@ -712,5 +700,4 @@
         required = False,
         )
-
 
 class ICourseTicketAdd(IKofaObject):
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 13002)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 13003)
@@ -143,5 +143,4 @@
     def passed_params(self):
         """Determine the number and credits of passed and failed courses.
-
         This method is used for level reports.
         """
@@ -274,5 +273,5 @@
         try:
             return self.__parent__.__parent__.__parent__
-        except AttributeError:
+        except AttributeError: # in unit tests
             return None
 
@@ -281,5 +280,5 @@
         try:
             return self.__parent__.__parent__.certificate.code
-        except AttributeError:
+        except AttributeError: # in unit tests
             return None
 
@@ -290,7 +289,10 @@
     @property
     def editable_by_lecturer(self):
-        cas = grok.getSite()['configuration'].current_academic_session
-        if self.student.state == VALIDATED and self.student.current_session == cas:
-            return True
+        try:
+            cas = grok.getSite()['configuration'].current_academic_session
+            if self.student.state == VALIDATED and self.student.current_session == cas:
+                return True
+        except TypeError: # in unit tests
+            pass
         return False
 
@@ -304,5 +306,5 @@
         try:
             return self.__parent__.level
-        except AttributeError:
+        except AttributeError: # in unit tests
             return None
 
@@ -313,5 +315,5 @@
         try:
             return self.__parent__.level_session
-        except AttributeError:
+        except AttributeError: # in unit tests
             return None
 
@@ -327,17 +329,4 @@
         """
         return getGradeWeightFromScore(self.score)[1]
-
-    @property
-    def course(self):
-        """Returns the course the ticket is referring to. Returns
-        None if the course has been removed.
-
-        This method is not used in Kofa anymore.
-        """
-        cat = queryUtility(ICatalog, name='courses_catalog')
-        result = cat.searchResults(code=(self.code, self.code))
-        if len(result) != 1:
-            return None
-        return list(result)[0]
 
 CourseTicket = attrs_to_fields(CourseTicket)
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 13002)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 13003)
@@ -1803,8 +1803,4 @@
         self.browser.getControl("Show").click()
         self.assertTrue(self.student_id in self.browser.contents)
-        # The course ticket can be linked with the course.
-        self.assertEqual(
-            self.student['studycourse']['100']['COURSE1'].course,
-            self.course)
         # Lecturer can neither access the student ...
         self.assertRaises(
