Index: main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py	(revision 6780)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py	(revision 6781)
@@ -207,5 +207,35 @@
     """
     level = Attribute('The level code')
-    level_title = Attribute('Title of level')
+
+
+class ICourseTicket(IWAeUPObject):
+    """A course ticket.
+
+    """
+    code = Attribute('Course code')
+    title = Attribute('Course title')
+    course_level = Attribute('level of the original course referrer')
+    core_or_elective = Attribute('core_or_elective of the original course referrer')
+
+    credits = schema.Int(
+        title = u'Credits',
+        default = 0,
+        required = False,
+        readonly = False,
+        )
+
+    score = schema.Int(
+        title = u'Score',
+        default = 0,
+        required = False,
+        readonly = False,
+        )
+
+    grade = schema.TextLine(
+        title = u'Grade',
+        default = u'',
+        required = False,
+        readonly = True,
+        )
 
 class IStudentAccommodation(IWAeUPObject):
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/studylevel.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/studylevel.py	(revision 6780)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/studylevel.py	(revision 6781)
@@ -22,5 +22,5 @@
 from zope.component.interfaces import IFactory
 from waeup.sirp.students.interfaces import (
-    IStudentStudyLevel, IStudentNavigation)
+    IStudentStudyLevel, IStudentNavigation, ICourseTicket)
 from waeup.sirp.utils.helpers import attrs_to_fields
 from waeup.sirp.students.vocabularies import StudyLevelSource
@@ -45,3 +45,33 @@
         return studylevelsource.factory.getTitle(self.__parent__, self.level)
 
+    def addCourseTicket(self, courseticket):
+        """Add a course ticket object.
+        """
+        if not ICourseTicket.providedBy(courseticket):
+            raise TypeError(
+                'StudentStudyLeves contain only ICourseTicket instances')
+        self[str(courseticket.code)] = courseticket
+        return
+
 StudentStudyLevel = attrs_to_fields(StudentStudyLevel)
+
+class CourseTicket(grok.Model):
+    """This is a course ticket which allows the
+    student to attend the course. Lecturers will enter scores and more at
+    the end of the term.
+    """
+    grok.implements(ICourseTicket, IStudentNavigation)
+    grok.provides(ICourseTicket)
+
+    def __init__(self, code, title, course_level, core_or_elective):
+        super(CourseTicket, self).__init__()
+        self.title = title
+        self.code = code
+        self.course_level = course_level
+        self.core_or_elective = core_or_elective
+        return
+
+    def getStudent(self):
+        return self.__parent__.__parent__.__parent__
+
+CourseTicket = attrs_to_fields(CourseTicket)
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_student.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_student.py	(revision 6780)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_student.py	(revision 6781)
@@ -20,9 +20,10 @@
 from waeup.sirp.students.student import Student, StudentFactory
 from waeup.sirp.students.studycourse import StudentStudyCourse
+from waeup.sirp.students.studylevel import StudentStudyLevel, CourseTicket
 from waeup.sirp.students.payments import StudentPayments
 from waeup.sirp.students.accommodation import StudentAccommodation
 from waeup.sirp.students.interfaces import (
     IStudent, IStudentStudyCourse, IStudentPayments, IStudentAccommodation,
-    )
+    IStudentStudyLevel, ICourseTicket)
 from waeup.sirp.testing import FunctionalLayer, FunctionalTestCase
 
@@ -35,4 +36,6 @@
         self.student = Student()
         self.studycourse = StudentStudyCourse()
+        self.studylevel = StudentStudyLevel()
+        self.courseticket = CourseTicket('CERT', 'Title', 100, True)
         self.payments = StudentPayments()
         self.accommodation = StudentAccommodation()
@@ -48,4 +51,6 @@
         verify.verifyClass(IStudentStudyCourse, StudentStudyCourse)
         verify.verifyObject(IStudentStudyCourse, self.studycourse)
+        verify.verifyObject(IStudentStudyLevel, self.studylevel)
+        verify.verifyObject(ICourseTicket, self.courseticket)
         verify.verifyClass(IStudentPayments, StudentPayments)
         verify.verifyObject(IStudentPayments, self.payments)
