Index: main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 12872)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 12873)
@@ -561,7 +561,4 @@
     factory_name = 'waeup.StudentStudyLevel'
 
-    additional_fields = ['level']
-    additional_fields_required = additional_fields
-
     @property
     def available_fields(self):
@@ -581,5 +578,5 @@
         if studycourse is None:
             return None
-        return studycourse.get(row['level'])
+        return studycourse.get(str(row['level']))
 
     def delEntry(self, row, site):
@@ -598,5 +595,4 @@
         items_changed = super(StudentStudyLevelProcessor, self).updateEntry(
             obj, row, site, filename)
-        obj.level = int(row['level'])
         student = self.getParent(row, site).__parent__
         student.__parent__.logger.info(
@@ -607,20 +603,6 @@
     def addEntry(self, obj, row, site):
         parent = self.getParent(row, site)
-        obj.level = int(row['level'])
-        parent[row['level']] = obj
-        return
-
-    def checkConversion(self, row, mode='ignore'):
-        """Validates all values in row.
-        """
-        errs, inv_errs, conv_dict = super(
-            StudentStudyLevelProcessor, self).checkConversion(row, mode=mode)
-        try:
-            level = int(row['level'])
-            if level not in range(0,1000,10) + [999]:
-                errs.append(('level','no valid integer'))
-        except ValueError:
-            errs.append(('level','no integer'))
-        return errs, inv_errs, conv_dict
+        parent[str(row['level'])] = obj
+        return
 
 class CourseTicketProcessor(StudentProcessorBase):
@@ -653,5 +635,5 @@
         if student is None:
             return None
-        return student['studycourse'].get(row['level'])
+        return student['studycourse'].get(str(row['level']))
 
     def getEntry(self, row, site):
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 12872)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 12873)
@@ -1321,5 +1321,5 @@
     grok.name('index')
     grok.require('waeup.viewStudent')
-    form_fields = grok.AutoFields(IStudentStudyLevel)
+    form_fields = grok.AutoFields(IStudentStudyLevel).omit('level')
     form_fields[
         'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
@@ -1353,5 +1353,5 @@
     form_fields = grok.AutoFields(IStudentStudyLevel)
     form_fields[
-        'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
+        'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le').omit('level')
     prefix = 'form'
     omit_fields = (
@@ -1434,5 +1434,5 @@
     grok.template('studylevelmanagepage')
     form_fields = grok.AutoFields(IStudentStudyLevel).omit(
-        'validation_date', 'validated_by', 'total_credits', 'gpa')
+        'validation_date', 'validated_by', 'total_credits', 'gpa', 'level')
     pnav = 4
     taboneactions = [_('Save'),_('Cancel')]
@@ -2597,6 +2597,4 @@
     grok.require('waeup.editStudyLevel')
     grok.template('studyleveleditpage')
-    form_fields = grok.AutoFields(IStudentStudyLevel).omit(
-        'level_session', 'level_verdict')
     pnav = 4
     placeholder = _('Enter valid course code')
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/export.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/export.py	(revision 12872)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/export.py	(revision 12873)
@@ -297,5 +297,5 @@
 
     fields = tuple(sorted(iface_names(
-        IStudentStudyLevel) + ['level'])) + (
+        IStudentStudyLevel))) + (
         'student_id', 'number_of_tickets','certcode')
     title = _(u'Student Study Levels')
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 12872)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 12873)
@@ -562,9 +562,15 @@
 
     """
-    level = Attribute('The level code')
     number_of_tickets = Attribute('Number of tickets contained in this level')
     certcode = Attribute('The certificate code of the study course')
     is_current_level = Attribute('Is this level the current level of the student?')
     passed_params = Attribute('Information about passed and failed courses')
+
+    level = schema.Choice(
+        title = _(u'Level'),
+        source = StudyLevelSource(),
+        required = True,
+        readonly = False,
+        )
 
     level_session = schema.Choice(
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 12872)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 12873)
@@ -67,5 +67,4 @@
     def __init__(self):
         super(StudentStudyLevel, self).__init__()
-        self.level = None
         return
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_batching.py	(revision 12872)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_batching.py	(revision 12873)
@@ -764,9 +764,9 @@
             dict(reg_number='1', level='1000'))
         self.assertEqual(len(errs),1)
-        self.assertTrue(('level','no valid integer') in errs)
+        self.assertTrue(('level', u'Invalid value') in errs)
         errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', level='xyz'))
         self.assertEqual(len(errs),1)
-        self.assertTrue(('level','no integer') in errs)
+        self.assertTrue(('level', u'Invalid value') in errs)
 
     def test_import(self):
