Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 6794)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 6795)
@@ -35,8 +35,9 @@
     IStudentPersonal, IStudentBase, IStudentStudyCourse, IStudentPayments,
     IStudentAccommodation, IStudentClearanceEdit, IStudentStudyLevel,
+    ICourseTicket, ICourseTicketAdd,
     )
 from waeup.sirp.students.catalog import search
 from waeup.sirp.students.workflow import CLEARANCE
-from waeup.sirp.students.studylevel import StudentStudyLevel
+from waeup.sirp.students.studylevel import StudentStudyLevel, CourseTicket
 from waeup.sirp.students.vocabularies import StudyLevelSource
 
@@ -592,6 +593,5 @@
     pnav = 4
     taboneactions = ['Save','Cancel']
-    tabtwoactions = ['Remove selected tickets','Cancel']
-    tabthreeactions = ['Add course ticket']
+    tabtwoactions = ['Add course ticket','Remove selected tickets','Cancel']
 
     def update(self):
@@ -615,16 +615,6 @@
 
     @grok.action('Add course ticket')
-    def addStudyLevel(self, **data):
-        # We need a ticket catalog
-        return
-
-        #course_code = self.request.form.get('addticket', None)
-        #try:
-        #    self.context.addCourseTicket(
-        #        self.context.certificate,studylevel)
-        #except KeyError:
-        #    self.flash('This ticket exists.')
-        #self.redirect(self.url(self.context, u'@@manage')+'#tab-2')
-        #return
+    def addCourseTicket(self, **data):
+        self.redirect(self.url(self.context, '@@add'))
 
     @grok.action('Remove selected tickets')
@@ -651,4 +641,44 @@
         self.redirect(self.url(self.context, u'@@manage')+'#tab-2')
         return
+
+class CourseTicketAddFormPage(WAeUPAddFormPage):
+    """Add a department to a faculty.
+    """
+    grok.context(IStudentStudyLevel)
+    grok.name('add')
+    grok.require('waeup.manageStudents')
+    label = 'Add course ticket'
+    form_fields = grok.AutoFields(ICourseTicketAdd).omit('grade', 'score')
+    pnav = 4
+
+    @property
+    def title(self):
+        return 'Study Level %s' % self.context.level_title
+
+    @grok.action('Add course ticket')
+    def addCourseTicket(self, **data):
+        ticket = CourseTicket()
+        #import pdb; pdb.set_trace()
+        course = data['course']
+        ticket.core_or_elective = data['core_or_elective']
+        ticket.level = self.context.level
+        ticket.code = course.code
+        ticket.title = course.title
+        ticket.faculty = course.__parent__.__parent__.__parent__.title
+        ticket.department = course.__parent__.__parent__.title
+        ticket.credits = course.credits
+        ticket.passmark = course.passmark
+        ticket.semester = course.semester
+        try:
+            self.context.addCourseTicket(ticket)
+        except KeyError:
+            self.flash('The ticket exists.')
+            return
+        self.redirect(self.url(self.context, u'@@manage')+'#tab-2')
+        return
+
+    @grok.action('Cancel')
+    def cancel(self, **data):
+        self.redirect(self.url(self.context))
 
 class PaymentsDisplayFormPage(WAeUPDisplayFormPage):
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studylevelmanagepage.pt
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studylevelmanagepage.pt	(revision 6794)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studylevelmanagepage.pt	(revision 6795)
@@ -100,17 +100,4 @@
   </div>
 
-  <br /><br /><br />
-
-  <div>
-    <span class="actionButtons" tal:condition="view/availableActions">
-      <span tal:repeat="action view/actions"
-            tal:omit-tag="">
-        <input tal:condition="python:action.label in view.tabthreeactions"
-               tal:replace="structure action/render"/>
-      </span>
-    </span>
-
-  </div>
-
 </div>
 </div>
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py	(revision 6794)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py	(revision 6795)
@@ -6,4 +6,5 @@
 from waeup.sirp.interfaces import IWAeUPObject
 from waeup.sirp.schema import TextLineChoice
+from waeup.sirp.university.vocabularies import CourseSource
 from waeup.sirp.students.vocabularies import (
   CertificateSource, academic_sessions_vocab, verdicts, StudyLevelSource,
@@ -225,5 +226,4 @@
         required = False,
         )
-
 
 class ICourseTicket(IWAeUPObject):
@@ -238,6 +238,12 @@
     faculty = Attribute('faculty of the original course')
     department = Attribute('department of the original course')
-    core_or_elective = Attribute('core_or_elective of the original course referrer')
     level = Attribute('level of the original course referrer')
+
+    core_or_elective = schema.Bool(
+        title = u'Mandatory',
+        default = False,
+        required = False,
+        readonly = False,
+        )
 
     score = schema.Int(
@@ -255,4 +261,14 @@
         )
 
+class ICourseTicketAdd(ICourseTicket):
+    """An interface for adding course tickets
+
+    """
+    course = schema.Choice(
+        title = u'Course',
+        source = CourseSource(),
+        readonly = False,
+        )
+
 class IStudentAccommodation(IWAeUPObject):
     """A container for student accommodation objects.
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/studycourse.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/studycourse.py	(revision 6794)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/studycourse.py	(revision 6795)
@@ -51,14 +51,14 @@
             if val.level != studylevel.level:
                 continue
-            ticket = CourseTicket(
-                val.getCourseCode(),
-                val.course.title,
-                val.course.credits,
-                val.course.passmark,
-                val.course.semester,
-                val.course.__parent__.__parent__.__parent__.title,
-                val.course.__parent__.__parent__.title,
-                val.level,
-                val.core_or_elective)
+            ticket = CourseTicket()
+            ticket.code = val.getCourseCode()
+            ticket.level = val.level
+            ticket.core_or_elective = val.core_or_elective
+            ticket.title = val.course.title
+            ticket.faculty = val.course.__parent__.__parent__.__parent__.title
+            ticket.department = val.course.__parent__.__parent__.title
+            ticket.credits = val.course.credits
+            ticket.passmark = val.course.passmark
+            ticket.semester = val.course.semester
             self[str(studylevel.level)][val.getCourseCode()] = ticket
         return
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/studylevel.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/studylevel.py	(revision 6794)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/studylevel.py	(revision 6795)
@@ -35,4 +35,6 @@
         super(StudentStudyLevel, self).__init__()
         self.level = None
+        self.validation_date = None
+        self.validated_by = None
         return
 
@@ -69,17 +71,14 @@
     grok.provides(ICourseTicket)
 
-    def __init__(self, code, title, credits,
-        passmark, semester, faculty, department, level, core_or_elective):
-
+    def __init__(self):
         super(CourseTicket, self).__init__()
-        self.title = title
-        self.code = code
-        self.faculty = faculty
-        self.department = department
-        self.level = level
-        self.credits = credits
-        self.passmark = passmark
-        self.semester = semester
-        self.core_or_elective = core_or_elective
+        self.code = None
+        self.level = None
+        self.title = None
+        self.faculty = None
+        self.department = None
+        self.credits = None
+        self.passmark = None
+        self.semester = None
         return
 
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 6794)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_student.py	(revision 6795)
@@ -37,6 +37,5 @@
         self.studycourse = StudentStudyCourse()
         self.studylevel = StudentStudyLevel()
-        self.courseticket = CourseTicket('CERT', 'Title', 100, 10, 40, 1,
-            'Faculty', 'Department', True)
+        self.courseticket = CourseTicket()
         self.payments = StudentPayments()
         self.accommodation = StudentAccommodation()
