Index: main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 10630)
+++ main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 10631)
@@ -644,4 +644,5 @@
     current_academic_session = schema.Choice(
         title = _(u'Current Academic Session'),
+        description = _(u'Session for which score editing is allowed'),
         source = academic_sessions_vocab,
         default = None,
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 10630)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 10631)
@@ -3055,6 +3055,6 @@
         session = academic_sessions_vocab.getTerm(
             self.current_academic_session).title
-        return 'Students registered for %s in academic session %s' % (
-            self.context.longtitle(), session)
+        return '%s tickets in academic session %s' % (
+            self.context.code, session)
 
     def _searchCatalog(self, session):
@@ -3073,4 +3073,6 @@
         datatable.need()
         self.tickets = self._searchCatalog(self.current_academic_session)
+        editable_tickets = [
+            ticket for ticket in self.tickets if ticket.editable_by_lecturer]
         if not self.tickets:
             self.flash(_('No student found.'))
@@ -3079,8 +3081,13 @@
             tno = 0
             error = ''
-            for ticket in self.tickets:
+            if not editable_tickets:
+                return
+            scores = form['scores']
+            if isinstance(scores, basestring):
+                scores = [scores]
+            for ticket in editable_tickets:
                 score = ticket.score
                 try:
-                    score = int(form['scores'][tno])
+                    score = int(scores[tno])
                 except ValueError:
                     error += '%s, ' % ticket.student.display_fullname
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/editscorespage.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/editscorespage.pt	(revision 10630)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/editscorespage.pt	(revision 10631)
@@ -25,6 +25,10 @@
       <td tal:content="ticket/student/current_level">LEVEL</td>
       <td tal:content="ticket/level">LEVEL</td>
-  	  <td><input type="text" name="scores" class="span1"
-  	             tal:attributes="value ticket/score" /></td>
+  	  <td tal:condition="ticket/editable_by_lecturer">
+          <input type="text" name="scores" class="span1"
+  	             tal:attributes="value ticket/score" />
+      </td>
+      <td tal:condition="not: ticket/editable_by_lecturer"
+          tal:content="ticket/score">SCORE</td>
   	</tr>
     </tbody>
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 10630)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 10631)
@@ -25,5 +25,5 @@
 from zope.component import createObject, queryUtility
 from zope.interface import implementedBy
-from waeup.kofa.interfaces import academic_sessions_vocab
+from waeup.kofa.interfaces import academic_sessions_vocab, VALIDATED
 from waeup.kofa.students.interfaces import (
     IStudentStudyLevel, IStudentNavigation, ICourseTicket)
@@ -291,4 +291,11 @@
         return not self.mandatory
 
+    @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
+        return False
+
     def writeLogMessage(self, view, message):
         return self.__parent__.__parent__.__parent__.writeLogMessage(view, message)
