Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 15065)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 15066)
@@ -614,5 +614,5 @@
     def addEntry(self, obj, row, site):
         if IGNORE_MARKER == str(row['level']):
-            raise FatalCSVError("Invalid level")
+            raise FatalCSVError("level: Invalid value")
         parent = self.getParent(row, site)
         parent[str(row['level'])] = obj
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15065)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15066)
@@ -938,5 +938,5 @@
             # handle_certificate_removed does only clear
             # studycourses with certificate code 'studycourse' but not
-            # 'studycourse_1' or 'studycourse_2'.These certificates do
+            # 'studycourse_1' or 'studycourse_2'. These certificates do
             # still exist but have no parents.
             pass
@@ -951,5 +951,5 @@
             # handle_certificate_removed does only clear
             # studycourses with certificate code 'studycourse' but not
-            # 'studycourse_1' or 'studycourse_2'.These certificates do
+            # 'studycourse_1' or 'studycourse_2'. These certificates do
             # still exist but have no parents.
             pass
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/sample_studylevel_data.csv
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/sample_studylevel_data.csv	(revision 15065)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/sample_studylevel_data.csv	(revision 15066)
@@ -6,4 +6,5 @@
 1,,2008,A,111
 1,,2008,A,nonsense
+1,,2008,A,<IGNORE>
 4,,2008,A,200
 5,,2008,A,200
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 15065)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_batching.py	(revision 15066)
@@ -775,5 +775,5 @@
         num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDYLEVEL_HEADER_FIELDS,'create')
-        self.assertEqual(num_warns,2)
+        self.assertEqual(num_warns,3)
         assert self.processor.entryExists(
             dict(reg_number='1', level='100'), self.app) is True
@@ -784,6 +784,4 @@
         self.assertEqual(studylevel.level_verdict, '0')
         self.assertEqual(studylevel.level, 100)
-        shutil.rmtree(os.path.dirname(fin_file))
-
         logcontent = open(self.logfile).read()
         # Logging message from updateEntry,
@@ -793,4 +791,14 @@
             'level=100, level_verdict=C, level_session=2009'
             in logcontent)
+        content = open(fail_file).read()
+        self.assertEqual(
+            content,
+            'reg_number,level_verdict,level_session,matric_number,level,'
+            '--ERRORS--\r\n'
+            '1,A,2008,<IGNORE>,111,level: Invalid value\r\n'
+            '1,A,2008,<IGNORE>,nonsense,level: Invalid value\r\n'
+            '1,A,2008,<IGNORE>,<IGNORE>,level: Invalid value\r\n'
+            )
+        shutil.rmtree(os.path.dirname(fin_file))
 
     def test_import_update(self):
@@ -803,8 +811,17 @@
         num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDYLEVEL_HEADER_FIELDS,'update')
-        self.assertEqual(num_warns,2)
+        self.assertEqual(num_warns,3)
         studylevel = self.processor.getEntry(
             dict(reg_number='1', level='100'), self.app)
         self.assertEqual(studylevel.level, 100)
+        content = open(fail_file).read()
+        self.assertEqual(
+            content,
+            'reg_number,level_verdict,level_session,matric_number,level,'
+            '--ERRORS--\r\n'
+            '1,A,2008,<IGNORE>,111,level: Invalid value\r\n'
+            '1,A,2008,<IGNORE>,nonsense,level: Invalid value\r\n'
+            '1,A,2008,<IGNORE>,<IGNORE>,Cannot update: no such entry\r\n'
+            )
         shutil.rmtree(os.path.dirname(fin_file))
 
@@ -820,5 +837,5 @@
         assert self.processor.entryExists(
             dict(reg_number='1', level='100'), self.app) is False
-        self.assertEqual(num_warns,2)
+        self.assertEqual(num_warns,3)
 
         shutil.rmtree(os.path.dirname(fin_file))
