Index: main/waeup.kofa/trunk/src/waeup/kofa/applicants/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/applicants/batching.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/applicants/batching.py	(revision 7933)
@@ -30,14 +30,14 @@
     IApplicantsContainer, IApplicant, IApplicantUpdateByRegNo)
 
-class ApplicantsContainerImporter(BatchProcessor):
-    """An importer for applicants containers.
+class ApplicantsContainerProcessor(BatchProcessor):
+    """A processor for applicants containers.
     """
     grok.implements(IBatchProcessor)
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'applicants container importer'
+    util_name = 'applicants container processor'
     grok.name(util_name)
 
-    name = u'Applicants Container Importer'
+    name = u'Applicants Container Processor'
     mode = u'create'
     iface = IApplicantsContainer
@@ -71,5 +71,5 @@
         return
 
-class ApplicantImporter(BatchProcessor):
+class ApplicantProcessor(BatchProcessor):
     """A batch processor for IApplicant objects.
     """
@@ -77,7 +77,7 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'applicantimporter'
+    util_name = 'applicantprocessor'
     grok.name(util_name)
-    name = u'Applicant Importer'
+    name = u'Applicant Processor'
     iface = IApplicant
     location_fields = []
Index: main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py	(revision 7933)
@@ -354,5 +354,5 @@
 
     This is a base interface with no field
-    required. For use with importers, forms, etc., please use one of
+    required. For use with processors, forms, etc., please use one of
     the derived interfaces below, which set more fields to required
     state, depending on use-case.
Index: main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_batching.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_batching.py	(revision 7933)
@@ -16,5 +16,5 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 ##
-"""Unit tests for applicants-related data importers.
+"""Unit tests for applicants-related data processors.
 """
 import datetime
@@ -29,5 +29,5 @@
 from waeup.kofa.app import University
 from waeup.kofa.applicants.batching import (
-    ApplicantsContainerImporter, ApplicantImporter)
+    ApplicantsContainerProcessor, ApplicantProcessor)
 from waeup.kofa.applicants.container import ApplicantsContainer
 from waeup.kofa.applicants.applicant import Applicant
@@ -66,10 +66,10 @@
     '\n')[0].split(',')
 
-class ApplicantsContainerImporterTest(FunctionalTestCase):
+class ApplicantsContainerProcessorTest(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(ApplicantsContainerImporterTest, self).setUp()
+        super(ApplicantsContainerProcessorTest, self).setUp()
 
         # Setup a sample site for each test
@@ -85,5 +85,5 @@
         self.app['applicants']['dp2011'] = self.container
 
-        self.importer = ApplicantsContainerImporter()
+        self.processor = ApplicantsContainerProcessor()
         self.workdir = tempfile.mkdtemp()
         self.csv_file = os.path.join(self.workdir, 'sampledata.csv')
@@ -93,5 +93,5 @@
 
     def tearDown(self):
-        super(ApplicantsContainerImporterTest, self).tearDown()
+        super(ApplicantsContainerProcessorTest, self).tearDown()
         shutil.rmtree(self.workdir)
         shutil.rmtree(self.dc_root)
@@ -101,35 +101,35 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
-            IBatchProcessor, ApplicantsContainerImporter) is True
+            IBatchProcessor, ApplicantsContainerProcessor) is True
 
     def test_parentsExist(self):
-        assert self.importer.parentsExist(None, dict()) is False
-        assert self.importer.parentsExist(None, self.app) is True
+        assert self.processor.parentsExist(None, dict()) is False
+        assert self.processor.parentsExist(None, self.app) is True
 
     def test_entryExists(self):
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(code='REG_NONE'), self.app) is False
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(code='dp2011'), self.app) is True
 
     def test_getParent(self):
-        parent = self.importer.getParent(None, self.app)
+        parent = self.processor.getParent(None, self.app)
         assert parent is self.app['applicants']
 
     def test_getEntry(self):
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(code='REG_NONE'), self.app) is None
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(code='dp2011'), self.app) is self.container
 
     def test_addEntry(self):
-        self.importer.addEntry(
+        self.processor.addEntry(
             'New application', dict(code='dp2012'), self.app)
         assert self.app['applicants']['dp2012'] == 'New application'
 
     def test_delEntry(self):
-        self.importer.delEntry(dict(code='dp2011'), self.app)
+        self.processor.delEntry(dict(code='dp2011'), self.app)
         assert 'dp2011' not in self.app['applicants'].keys()
 
@@ -137,5 +137,5 @@
         # Do a real import
         # see local sample_container.csv file for input
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, APPS_CONTAINER_HEADER_FIELDS)
         avail_containers = [x for x in self.app['applicants'].keys()]
@@ -219,11 +219,11 @@
         return
 
-class ApplicantImporterTest(ApplicantImportExportSetup):
+class ApplicantProcessorTest(ApplicantImportExportSetup):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(ApplicantImporterTest, self).setUp()
-        self.importer = ApplicantImporter()
+        super(ApplicantProcessorTest, self).setUp()
+        self.processor = ApplicantProcessor()
         self.csv_file = os.path.join(self.workdir, 'sample_applicant_data.csv')
         self.csv_file_faulty = os.path.join(self.workdir,
@@ -237,15 +237,15 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
-            IBatchProcessor, ApplicantImporter) is True
+            IBatchProcessor, ApplicantProcessor) is True
 
     def test_entryExists(self):
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(container_code='dp2011', application_number='999'),
             self.app) is False
 
     def test_getEntry(self):
-        applicant = self.importer.getEntry(
+        applicant = self.processor.getEntry(
             dict(container_code='dp2011',
                  application_number=self.application_number), self.app)
@@ -254,5 +254,5 @@
     def test_addEntry(self):
         new_applicant = Applicant()
-        self.importer.addEntry(
+        self.processor.addEntry(
             new_applicant, dict(container_code='dp2011'), self.app)
         assert len(self.app['applicants']['dp2011'].keys()) == 2
@@ -261,5 +261,5 @@
         assert self.application_number in self.app[
             'applicants']['dp2011'].keys()
-        self.importer.delEntry(
+        self.processor.delEntry(
             dict(container_code='dp2011',
                 application_number=self.application_number), self.app)
@@ -268,5 +268,5 @@
 
     def test_import(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, APPLICANT_HEADER_FIELDS)
         self.assertEqual(num_warns,0)
@@ -285,5 +285,5 @@
         # when in format xx/yy/zzzz as we cannot say whether it is
         # meant as dd/mm/yyyy or mm/dd/yyyy. We therefore require yyyy-mm-dd
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_faulty, APPLICANT_HEADER_FIELDS)
         if fail_file is not None:
@@ -300,8 +300,8 @@
 
     def test_import_update(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, APPLICANT_HEADER_FIELDS)
         shutil.rmtree(os.path.dirname(fin_file))
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_update, APPLICANT_HEADER_FIELDS_UPDATE, 'update')
         self.assertEqual(num_warns,0)
@@ -309,8 +309,8 @@
 
     def test_import_remove(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, APPLICANT_HEADER_FIELDS)
         shutil.rmtree(os.path.dirname(fin_file))
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_update, APPLICANT_HEADER_FIELDS_UPDATE, 'remove')
         self.assertEqual(num_warns,0)
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/batchprocessing.txt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/batchprocessing.txt	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/batchprocessing.txt	(revision 7933)
@@ -93,18 +93,18 @@
     >>> importerselect = browser.getControl(name='importer')
     >>> importerselect.displayOptions
-    ['Applicant Importer',
-     'Applicants Container Importer',
-     'CourseTicket Importer',
-     'Payment Importer',
-     'Student Importer',
-     'StudentStudyCourse Importer (update only)',
-     'StudentStudyLevel Importer',
-     'CertificateCourse Importer',
-     'Certificate Importer',
-     'Course Importer',
-     'Department Importer',
-     'Faculty Importer']
-
-    >>> importerselect.getControl('Faculty Importer').selected = True
+    ['Applicant Processor',
+     'Applicants Container Processor',
+     'CourseTicket Processor',
+     'Payment Processor',
+     'Student Processor',
+     'StudentStudyCourse Processor (update only)',
+     'StudentStudyLevel Processor',
+     'CertificateCourse Processor',
+     'Certificate Processor',
+     'Course Processor',
+     'Department Processor',
+     'Faculty Processor']
+
+    >>> importerselect.getControl('Faculty Processor').selected = True
 
     >>> modeselect = browser.getControl(name='mode')
@@ -197,5 +197,5 @@
 
     >>> importerselect = browser.getControl(name='importer')
-    >>> importerselect.getControl('Department Importer').selected = True
+    >>> importerselect.getControl('Department Processor').selected = True
     >>> modeselect = browser.getControl(name='mode')
     >>> modeselect.getControl(value='create').selected = True
@@ -262,5 +262,5 @@
 
     >>> importerselect = browser.getControl(name='importer')
-    >>> importerselect.getControl('Course Importer', index=2).selected = True
+    >>> importerselect.getControl('Course Processor', index=2).selected = True
     >>> modeselect = browser.getControl(name='mode')
     >>> modeselect.getControl(value='create').selected = True
@@ -328,5 +328,5 @@
 
     >>> importerselect = browser.getControl(name='importer')
-    >>> importerselect.getControl('Certificate Importer').selected = True
+    >>> importerselect.getControl('Certificate Processor').selected = True
     >>> modeselect = browser.getControl(name='mode')
     >>> modeselect.getControl(value='create').selected = True
@@ -393,5 +393,5 @@
 
     >>> importerselect = browser.getControl(name='importer')
-    >>> importerselect.getControl('CertificateCourse Importer').selected = True
+    >>> importerselect.getControl('CertificateCourse Processor').selected = True
     >>> modeselect = browser.getControl(name='mode')
     >>> modeselect.getControl(value='create').selected = True
@@ -466,5 +466,5 @@
 
     >>> importerselect = browser.getControl(name='importer')
-    >>> importerselect.getControl('Faculty Importer').selected = True
+    >>> importerselect.getControl('Faculty Processor').selected = True
     >>> modeselect = browser.getControl(name='mode')
     >>> modeselect.getControl(value='create').selected = True
@@ -528,5 +528,5 @@
 
     >>> importerselect = browser.getControl(name='importer')
-    >>> importerselect.getControl('Faculty Importer').selected = True
+    >>> importerselect.getControl('Faculty Processor').selected = True
     >>> modeselect = browser.getControl(name='mode')
     >>> modeselect.getControl(value='create').selected = True
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 7933)
@@ -829,5 +829,5 @@
 
 class DatacenterImportStep2(KofaPage):
-    """Manual import step 2: choose importer
+    """Manual import step 2: choose processor
     """
     grok.context(IDataCenter)
Index: main/waeup.kofa/trunk/src/waeup/kofa/datacenter.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/datacenter.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/datacenter.py	(revision 7933)
@@ -133,5 +133,5 @@
         If finished file is placed in a location outside the local
         storage dir, the complete directory is removed
-        afterwards. Regular importers should put their stuff in
+        afterwards. Regular processors should put their stuff in
         dedicated temporary dirs.
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 7933)
@@ -321,5 +321,5 @@
     """
     name = schema.TextLine(
-        title = _(u'Importer name')
+        title = _(u'Processor name')
         )
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 7933)
@@ -49,8 +49,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'studentimporter'
+    util_name = 'studentprocessor'
     grok.name(util_name)
 
-    name = u'Student Importer'
+    name = u'Student Processor'
     iface = IStudent
 
@@ -223,5 +223,5 @@
     grok.name(util_name)
 
-    name = u'StudentStudyCourse Importer (update only)'
+    name = u'StudentStudyCourse Processor (update only)'
     iface = IStudentStudyCourse
     factory_name = 'waeup.StudentStudyCourse'
@@ -330,8 +330,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'studylevelimporter'
+    util_name = 'studylevelprocessor'
     grok.name(util_name)
 
-    name = u'StudentStudyLevel Importer'
+    name = u'StudentStudyLevel Processor'
     iface = IStudentStudyLevel
     factory_name = 'waeup.StudentStudyLevel'
@@ -427,8 +427,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'courseticketimporter'
+    util_name = 'courseticketprocessor'
     grok.name(util_name)
 
-    name = u'CourseTicket Importer'
+    name = u'CourseTicket Processor'
     iface = ICourseTicket
     factory_name = 'waeup.CourseTicket'
@@ -533,8 +533,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'paymentimporter'
+    util_name = 'paymentprocessor'
     grok.name(util_name)
 
-    name = u'Payment Importer'
+    name = u'Payment Processor'
     iface = IStudentOnlinePayment
     factory_name = 'waeup.StudentOnlinePayment'
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 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_batching.py	(revision 7933)
@@ -16,5 +16,5 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 ##
-"""Unit tests for students-related data importers.
+"""Unit tests for students-related data processors.
 """
 import os
@@ -95,10 +95,10 @@
     '\n')[0].split(',')
 
-class StudentImporterTest(FunctionalTestCase):
+class StudentProcessorTest(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(StudentImporterTest, self).setUp()
+        super(StudentProcessorTest, self).setUp()
         # Setup a sample site for each test
         app = University()
@@ -124,5 +124,5 @@
         self.app['students'].addStudent(student)
         self.student = self.app['students'][student.student_id]
-        self.importer = StudentProcessor()
+        self.processor = StudentProcessor()
         self.workdir = tempfile.mkdtemp()
         self.csv_file = os.path.join(self.workdir, 'sample_student_data.csv')
@@ -139,5 +139,5 @@
 
     def tearDown(self):
-        super(StudentImporterTest, self).tearDown()
+        super(StudentProcessorTest, self).tearDown()
         shutil.rmtree(self.workdir)
         shutil.rmtree(self.dc_root)
@@ -147,43 +147,43 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
             IBatchProcessor, StudentProcessor) is True
 
     def test_parentsExist(self):
-        self.assertFalse(self.importer.parentsExist(None, dict()))
-        self.assertTrue(self.importer.parentsExist(None, self.app))
+        self.assertFalse(self.processor.parentsExist(None, dict()))
+        self.assertTrue(self.processor.parentsExist(None, self.app))
 
     def test_entryExists(self):
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(student_id='ID_NONE'), self.app) is False
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(reg_number='123'), self.app) is True
 
     def test_getParent(self):
-        parent = self.importer.getParent(None, self.app)
+        parent = self.processor.getParent(None, self.app)
         assert parent is self.app['students']
 
     def test_getEntry(self):
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(student_id='ID_NONE'), self.app) is None
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(student_id=self.student.student_id), self.app) is self.student
 
     def test_addEntry(self):
         new_student = Student()
-        self.importer.addEntry(
+        self.processor.addEntry(
             new_student, dict(), self.app)
         assert len(self.app['students'].keys()) == 2
 
     def test_checkConversion(self):
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', reg_state='admitted'))
         self.assertEqual(len(errs),0)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', reg_state=''))
         self.assertEqual(len(errs),1)
         self.assertTrue(('reg_state', 'no value provided') in errs)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', reg_state='nonsense'))
         self.assertEqual(len(errs),1)
@@ -192,10 +192,10 @@
     def test_delEntry(self):
         assert self.student.student_id in self.app['students'].keys()
-        self.importer.delEntry(
+        self.processor.delEntry(
             dict(reg_number=self.student.reg_number), self.app)
         assert self.student.student_id not in self.app['students'].keys()
 
     def test_import(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDENT_HEADER_FIELDS)
         self.assertEqual(num_warns,0)
@@ -205,8 +205,8 @@
 
     def test_import_update(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDENT_HEADER_FIELDS)
         shutil.rmtree(os.path.dirname(fin_file))
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_update, STUDENT_HEADER_FIELDS_UPDATE, 'update')
         self.assertEqual(num_warns,0)
@@ -214,8 +214,8 @@
 
     def test_import_update2(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDENT_HEADER_FIELDS)
         shutil.rmtree(os.path.dirname(fin_file))
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_update2, STUDENT_HEADER_FIELDS_UPDATE2, 'update')
         self.assertEqual(num_warns,0)
@@ -223,8 +223,8 @@
 
     def test_import_remove(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDENT_HEADER_FIELDS)
         shutil.rmtree(os.path.dirname(fin_file))
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_update, STUDENT_HEADER_FIELDS_UPDATE, 'remove')
         self.assertEqual(num_warns,0)
@@ -232,5 +232,5 @@
 
     def test_import_migration_data(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file_migration, STUDENT_HEADER_FIELDS_MIGRATION)
         self.assertEqual(num_warns,2)
@@ -251,10 +251,10 @@
 
 
-class StudentStudyCourseImporterTest(FunctionalTestCase):
+class StudentStudyCourseProcessorTest(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(StudentStudyCourseImporterTest, self).setUp()
+        super(StudentStudyCourseProcessorTest, self).setUp()
         self.dc_root = tempfile.mkdtemp()
         self.workdir = tempfile.mkdtemp()
@@ -283,5 +283,5 @@
             self.certificate)
 
-        self.importer = StudentStudyCourseProcessor()
+        self.processor = StudentStudyCourseProcessor()
         self.csv_file = os.path.join(
             self.workdir, 'sample_studycourse_data.csv')
@@ -290,5 +290,5 @@
 
     def tearDown(self):
-        super(StudentStudyCourseImporterTest, self).tearDown()
+        super(StudentStudyCourseProcessorTest, self).tearDown()
         shutil.rmtree(self.workdir)
         shutil.rmtree(self.dc_root)
@@ -298,50 +298,50 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
             IBatchProcessor, StudentStudyCourseProcessor) is True
 
     def test_entryExists(self):
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(reg_number='REG_NONE'), self.app) is False
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(reg_number='1'), self.app) is True
 
     def test_getEntry(self):
-        student = self.importer.getEntry(
+        student = self.processor.getEntry(
             dict(reg_number='1'), self.app).__parent__
         self.assertEqual(student.reg_number,'1')
 
     def test_checkConversion(self):
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', certificate='CERT1', current_level='200'))
         self.assertEqual(len(errs),0)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', certificate='CERT999'))
         self.assertEqual(len(errs),1)
         self.assertTrue(('certificate', u'Invalid value') in errs)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', certificate='CERT1', current_level='100'))
         self.assertEqual(len(errs),1)
         self.assertTrue(('current_level','not in range') in errs)
         # If we import only current_level, no conversion checking is done.
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', current_level='100'))
         self.assertEqual(len(errs),0)
 
     def test_import(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDYCOURSE_HEADER_FIELDS,'update')
         self.assertEqual(num_warns,1)
-        studycourse = self.importer.getEntry(dict(reg_number='1'), self.app)
+        studycourse = self.processor.getEntry(dict(reg_number='1'), self.app)
         self.assertEqual(studycourse.certificate.code, u'CERT1')
         shutil.rmtree(os.path.dirname(fin_file))
 
-class StudentStudyLevelImporterTest(FunctionalTestCase):
+class StudentStudyLevelProcessorTest(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(StudentStudyLevelImporterTest, self).setUp()
+        super(StudentStudyLevelProcessorTest, self).setUp()
         self.dc_root = tempfile.mkdtemp()
         self.workdir = tempfile.mkdtemp()
@@ -374,10 +374,10 @@
             self.workdir, 'sample_studycourse_data.csv')
         open(studycourse_file, 'wb').write(STUDYCOURSE_SAMPLE_DATA)
-        importer = StudentStudyCourseProcessor()
-        num, num_warns, fin_file, fail_file = importer.doImport(
+        processor = StudentStudyCourseProcessor()
+        num, num_warns, fin_file, fail_file = processor.doImport(
             studycourse_file, STUDYCOURSE_HEADER_FIELDS,'update')
         shutil.rmtree(os.path.dirname(fin_file))
 
-        self.importer = StudentStudyLevelProcessor()
+        self.processor = StudentStudyLevelProcessor()
         self.csv_file = os.path.join(
             self.workdir, 'sample_studylevel_data.csv')
@@ -385,5 +385,5 @@
 
     def tearDown(self):
-        super(StudentStudyLevelImporterTest, self).tearDown()
+        super(StudentStudyLevelProcessorTest, self).tearDown()
         shutil.rmtree(self.workdir)
         shutil.rmtree(self.dc_root)
@@ -393,17 +393,17 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
             IBatchProcessor, StudentStudyLevelProcessor) is True
 
     def test_checkConversion(self):
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', level='220'))
         self.assertEqual(len(errs),0)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', level='900'))
         self.assertEqual(len(errs),1)
         self.assertTrue(('level','no valid integer') in errs)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', level='xyz'))
         self.assertEqual(len(errs),1)
@@ -411,10 +411,10 @@
 
     def test_import(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, STUDYLEVEL_HEADER_FIELDS,'create')
         self.assertEqual(num_warns,2)
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(reg_number='1', level='100'), self.app) is True
-        studylevel = self.importer.getEntry(
+        studylevel = self.processor.getEntry(
             dict(reg_number='1', level='100'), self.app)
         self.assertEqual(studylevel.__parent__.certificate.code, u'CERT1')
@@ -425,10 +425,10 @@
         
 
-class CourseTicketImporterTest(FunctionalTestCase):
+class CourseTicketProcessorTest(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(CourseTicketImporterTest, self).setUp()
+        super(CourseTicketProcessorTest, self).setUp()
         self.dc_root = tempfile.mkdtemp()
         self.workdir = tempfile.mkdtemp()
@@ -470,19 +470,19 @@
             self.workdir, 'sample_studycourse_data.csv')
         open(studycourse_file, 'wb').write(STUDYCOURSE_SAMPLE_DATA)
-        importer = StudentStudyCourseProcessor()
-        num, num_warns, fin_file, fail_file = importer.doImport(
+        processor = StudentStudyCourseProcessor()
+        num, num_warns, fin_file, fail_file = processor.doImport(
             studycourse_file, STUDYCOURSE_HEADER_FIELDS,'update')
         shutil.rmtree(os.path.dirname(fin_file))
 
         # Import study levels
-        importer = StudentStudyLevelProcessor()
+        processor = StudentStudyLevelProcessor()
         studylevel_file = os.path.join(
             self.workdir, 'sample_studylevel_data.csv')
         open(studylevel_file, 'wb').write(STUDYLEVEL_SAMPLE_DATA)
-        num, num_warns, fin_file, fail_file = importer.doImport(
+        num, num_warns, fin_file, fail_file = processor.doImport(
             studylevel_file, STUDYLEVEL_HEADER_FIELDS,'create')
         shutil.rmtree(os.path.dirname(fin_file))
 
-        self.importer = CourseTicketProcessor()
+        self.processor = CourseTicketProcessor()
         self.csv_file = os.path.join(
             self.workdir, 'sample_courseticket_data.csv')
@@ -490,5 +490,5 @@
 
     def tearDown(self):
-        super(CourseTicketImporterTest, self).tearDown()
+        super(CourseTicketProcessorTest, self).tearDown()
         shutil.rmtree(self.workdir)
         shutil.rmtree(self.dc_root)
@@ -498,13 +498,13 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
             IBatchProcessor, CourseTicketProcessor) is True
 
     def test_checkConversion(self):
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', code='COURSE1', level='220'))
         self.assertEqual(len(errs),0)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', code='COURSE2', level='220'))
         self.assertEqual(len(errs),1)
@@ -513,11 +513,11 @@
     def test_import(self):
 
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, COURSETICKET_HEADER_FIELDS,'create')
 
         self.assertEqual(num_warns,2)
-        assert self.importer.entryExists(
+        assert self.processor.entryExists(
             dict(reg_number='1', level='100', code='COURSE1'), self.app) is True
-        courseticket = self.importer.getEntry(
+        courseticket = self.processor.getEntry(
             dict(reg_number='1', level='100', code='COURSE1'), self.app)
         self.assertEqual(courseticket.__parent__.__parent__.certificate.code, u'CERT1')
@@ -533,10 +533,10 @@
         shutil.rmtree(os.path.dirname(fin_file))
 
-class PaymentImporterTest(FunctionalTestCase):
+class PaymentProcessorTest(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(PaymentImporterTest, self).setUp()
+        super(PaymentProcessorTest, self).setUp()
         self.dc_root = tempfile.mkdtemp()
         self.workdir = tempfile.mkdtemp()
@@ -566,5 +566,5 @@
         shutil.rmtree(os.path.dirname(fin_file))
 
-        self.importer = StudentOnlinePaymentProcessor()
+        self.processor = StudentOnlinePaymentProcessor()
         self.csv_file = os.path.join(
             self.workdir, 'sample_payment_data.csv')
@@ -572,5 +572,5 @@
 
     def tearDown(self):
-        super(PaymentImporterTest, self).tearDown()
+        super(PaymentProcessorTest, self).tearDown()
         shutil.rmtree(self.workdir)
         shutil.rmtree(self.dc_root)
@@ -580,15 +580,15 @@
     def test_interface(self):
         # Make sure we fulfill the interface contracts.
-        assert verifyObject(IBatchProcessor, self.importer) is True
+        assert verifyObject(IBatchProcessor, self.processor) is True
         assert verifyClass(
             IBatchProcessor, StudentOnlinePaymentProcessor) is True
 
     def test_getEntry(self):
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(student_id='ID_NONE', p_id='nonsense'), self.app) is None
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(student_id=self.student.student_id, p_id='p123'),
             self.app) is self.student['payments']['p123']
-        assert self.importer.getEntry(
+        assert self.processor.getEntry(
             dict(student_id=self.student.student_id, p_id='XXXXXX123'),
             self.app) is self.student['payments']['p123']
@@ -598,5 +598,5 @@
         payment1 = createObject(u'waeup.StudentOnlinePayment')
         payment1.p_id = 'p234'
-        self.importer.addEntry(
+        self.processor.addEntry(
             payment1, dict(student_id=self.student.student_id, p_id='p234'),
             self.app)
@@ -606,5 +606,5 @@
         payment1.p_id = 'nonsense'
         # payment1.p_id will be replaced if p_id doesn't start with 'p'
-        self.importer.addEntry(
+        self.processor.addEntry(
             payment2, dict(student_id=self.student.student_id, p_id='XXXXXX456'),
             self.app)
@@ -613,24 +613,24 @@
 
     def test_checkConversion(self):
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', p_id='3816951266236341955'))
         self.assertEqual(len(errs),0)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', p_id='p1266236341955'))
         self.assertEqual(len(errs),0)
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', p_id='nonsense'))
         self.assertEqual(len(errs),1)
         timestamp = "%d" % int(time()*1000)
         p_id = "p%s" % timestamp
-        errs, inv_errs, conv_dict = self.importer.checkConversion(
+        errs, inv_errs, conv_dict = self.processor.checkConversion(
             dict(reg_number='1', p_id=p_id))
         self.assertEqual(len(errs),0)
 
     def test_import(self):
-        num, num_warns, fin_file, fail_file = self.importer.doImport(
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
             self.csv_file, PAYMENT_HEADER_FIELDS,'create')
         self.assertEqual(num_warns,0)
-        payment = self.importer.getEntry(dict(reg_number='1',
+        payment = self.processor.getEntry(dict(reg_number='1',
             p_id='p1290797973744'), self.app)
         self.assertEqual(payment.p_id, 'p1290797973744')
@@ -642,7 +642,7 @@
     suite = unittest.TestSuite()
     for testcase in [
-        StudentImporterTest,StudentStudyCourseImporterTest,
-        StudentStudyLevelImporterTest,CourseTicketImporterTest,
-        PaymentImporterTest,]:
+        StudentProcessorTest,StudentStudyCourseProcessorTest,
+        StudentStudyLevelProcessorTest,CourseTicketProcessorTest,
+        PaymentProcessorTest,]:
         suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
                 testcase
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 7933)
@@ -743,5 +743,5 @@
         importerselect = self.browser.getControl(name='importer')
         modeselect = self.browser.getControl(name='mode')
-        importerselect.getControl('Student Importer').selected = True
+        importerselect.getControl('Student Processor').selected = True
         modeselect.getControl(value='create').selected = True
         self.browser.getControl('Proceed to step 3').click()
@@ -770,5 +770,5 @@
         modeselect = self.browser.getControl(name='mode')
         importerselect.getControl(
-            'StudentStudyCourse Importer (update only)').selected = True
+            'StudentStudyCourse Processor (update only)').selected = True
         modeselect.getControl(value='create').selected = True
         self.browser.getControl('Proceed to step 3').click()
Index: main/waeup.kofa/trunk/src/waeup/kofa/university/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/university/batching.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/university/batching.py	(revision 7933)
@@ -38,8 +38,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'facultyimporter'
-    grok.name(util_name)
-
-    name = u'Faculty Importer'
+    util_name = 'facultyprocessor'
+    grok.name(util_name)
+
+    name = u'Faculty Processor'
     iface = IFaculty
 
@@ -80,8 +80,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'departmentimporter'
-    grok.name(util_name)
-
-    name = u'Department Importer'
+    util_name = 'departmentprocessor'
+    grok.name(util_name)
+
+    name = u'Department Processor'
     iface = IDepartment
 
@@ -127,8 +127,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'courseimporter'
-    grok.name(util_name)
-
-    name = u'Course Importer'
+    util_name = 'courseprocessor'
+    grok.name(util_name)
+
+    name = u'Course Processor'
     iface = ICourse
 
@@ -178,8 +178,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'certificateimporter'
-    grok.name(util_name)
-
-    name = u'Certificate Importer'
+    util_name = 'certificateprocessor'
+    grok.name(util_name)
+
+    name = u'Certificate Processor'
     iface = ICertificate
 
@@ -229,8 +229,8 @@
     grok.provides(IBatchProcessor)
     grok.context(Interface)
-    util_name = 'certificatecourseimporter'
-    grok.name(util_name)
-
-    name = u'CertificateCourse Importer'
+    util_name = 'certificatecourseprocessor'
+    grok.name(util_name)
+
+    name = u'CertificateCourse Processor'
     iface = ICertificateCourse
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py	(revision 7933)
@@ -44,8 +44,8 @@
 
     # Name used in pages and forms...
-    name = u'Non-registered base importer'
+    name = u'Non-registered base processor'
 
     # Internal name...
-    util_name = 'baseimporter'
+    util_name = 'baseprocessor'
 
     # Items for this processor need an interface with zope.schema fields.
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.txt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.txt	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.txt	(revision 7933)
@@ -10,9 +10,9 @@
 mass-remove, or mass-update data.
 
-So you can feed CSV files to importers or processors, that are part of
+So you can feed CSV files to processors, that are part of
 the batch-processing mechanism.
 
-Importers/Processors
---------------------
+Processors
+----------
 
 Each CSV file processor
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/helpers.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/helpers.py	(revision 7932)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/helpers.py	(revision 7933)
@@ -152,5 +152,5 @@
 
     In :mod:`waeup.kofa` we use factories extensively for
-    batching. While processing a batch some importer looks up a
+    batching. While processing a batch some processors looks up a
     factory to create real-world instances that then get filled with
     data from imported CSV files.
@@ -192,5 +192,5 @@
        True
 
-    After grokking we (and importers) can create objects without
+    After grokking we (and processors) can create objects without
     knowing about the location of the real class definition, just by
     the factory name:
