Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/batching.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/batching.py	(revision 8008)
@@ -81,7 +81,6 @@
     name = u'Applicant Processor'
     iface = IApplicant
-    location_fields = []
+    location_fields = ['container_code']
     factory_name = 'waeup.Applicant'
-    location_fields = ['container_code']
 
     mode = None
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8008)
@@ -27,4 +27,5 @@
 from hurry.workflow.interfaces import (
     IWorkflowInfo, IWorkflowState, InvalidTransitionError)
+from waeup.kofa.applicants.container import ApplicantsContainer
 from waeup.kofa.applicants.interfaces import (
     IApplicant, IApplicantEdit, IApplicantsRoot,
@@ -169,6 +170,5 @@
             return
         # Add new applicants container...
-        provider = data['provider'][1]
-        container = provider.factory()
+        container = ApplicantsContainer()
         self.applyData(container, **data)
         container.code = code
@@ -363,5 +363,5 @@
     @action(_('Create application record'))
     def addApplicant(self, **data):
-        applicant = createObject(self.context.factory_name)
+        applicant = createObject(u'waeup.Applicant')
         self.applyData(applicant, **data)
         self.context.addApplicant(applicant)
@@ -921,5 +921,5 @@
             return
         # Add applicant and create password
-        applicant = createObject(self.context.factory_name)
+        applicant = createObject(u'waeup.Applicant')
         self.applyData(applicant, **data)
         self.context.addApplicant(applicant)
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/container.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/container.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/container.py	(revision 8008)
@@ -25,6 +25,5 @@
 from waeup.kofa.interfaces import MessageFactory as _
 from waeup.kofa.applicants.interfaces import (
-    IApplicantsContainer, IApplicantsContainerAdd,
-    IApplicantsContainerProvider, IApplicant
+    IApplicantsContainer, IApplicantsContainerAdd, IApplicant
     )
 from waeup.kofa.utils.helpers import attrs_to_fields
@@ -45,18 +44,4 @@
     grok.implements(IApplicantsContainer,IApplicantsContainerAdd)
 
-    #: These are 'class-attributes'. Do not fiddle around with it in
-    #: instances of this class.
-    #:
-    #: The title of this container as displayed in add-forms. It should
-    #: give some idea about what kind of container this is (one or two words)
-    container_title = _(u'Basic')
-    #: The `container_description` gives a short explanation about for what
-    #: purposes this container type serves (a few words only).
-    container_description = _(u'handles basic applicants')
-    #: `iface` is the interface of the child objects.
-    iface = IApplicant
-    #: The name of the child object factory. This name is used in views
-    #: to create proper applicant objects.
-    factory_name = 'waeup.Applicant'
     #: A dictionary to hold per language translations of description string.
     description_dict = {}
@@ -101,8 +86,7 @@
         """Add an applicant.
         """
-        if not self.iface.providedBy(applicant):
+        if not IApplicant.providedBy(applicant):
             raise TypeError(
-                '%s containers contain only %s instances' %(
-                self.container_title, self.iface))
+                'ApplicantsContainers contain only IApplicant instances')
         applicant_id = generate_applicant_id(container=self)
         applicant.applicant_id = applicant_id
@@ -112,14 +96,16 @@
 ApplicantsContainer = attrs_to_fields(ApplicantsContainer)
 
-class ApplicantsContainerProvider(grok.GlobalUtility):
-    """A utility that provides basic applicants containers.
+# ApplicantsContainers must be importable. So we need a factory.
+class ApplicantsContainerFactory(grok.GlobalUtility):
+    """A factory for student online payments.
     """
-    grok.implements(IApplicantsContainerProvider)
-    grok.name('waeup.kofa.applicants.ApplicantsContainer')
+    grok.implements(IFactory)
+    grok.name(u'waeup.ApplicantsContainer')
+    title = u"Create a new container for applicants.",
+    description = u"This factory instantiates new IApplicantsContainer instances."
 
-    #: The applicants container type this provider provides:
-    #: :class:`ApplicantsContainer`.
-    factory = ApplicantsContainer
+    def __call__(self, *args, **kw):
+        return ApplicantsContainer()
 
-factory = Factory(lambda : ApplicantsContainer, 'ApplicantsContainer')
-grok.global_utility(factory, IFactory, name='waeup.ApplicantsContainer')
+    def getInterfaces(self):
+        return implementedBy(ApplicantsContainer)
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py	(revision 8008)
@@ -34,5 +34,5 @@
     #: Fieldnames considered by this exporter
     fields = ('code', 'title', 'prefix', 'entry_level', 'year',
-              'provider', 'application_category', 'description',
+              'application_category', 'description',
               'startdate', 'enddate', 'strict_deadline')
 
@@ -41,6 +41,4 @@
 
     def mangle_value(self, value, name, context=None):
-        if name == 'provider' and isinstance(value, tuple):
-            value = value[0]
         return super(
             ApplicantsContainerExporter, self).mangle_value(
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py	(revision 8008)
@@ -189,13 +189,6 @@
     """
 
-    container_title = Attribute(
-        u'classattribute: title for type of container')
-    container_description = Attribute(
-        u'classattribute: description for type of container')
-
-
     code = schema.TextLine(
         title = _(u'Code'),
-        #default = u'-',
         required = True,
         readonly = True,
@@ -205,5 +198,4 @@
         title = _(u'Title'),
         required = True,
-        #default = u'-',
         readonly = True,
         )
@@ -213,4 +205,11 @@
         required = True,
         source = ApplicationTypeSource(),
+        readonly = True,
+        )
+
+    year = schema.Choice(
+        title = _(u'Year of Entrance'),
+        required = True,
+        values = year_range(),
         readonly = True,
         )
@@ -219,20 +218,5 @@
         title = _(u'Entry Level'),
         vocabulary = course_levels,
-        #default = 100,
-        required = True,
-        )
-
-    year = schema.Choice(
-        title = _(u'Year of Entrance'),
-        required = True,
-        values = year_range(),
-        readonly = True,
-        )
-
-    provider = schema.Choice(
-        title = _(u'Applicants Container Type'),
-        required = True,
-        source = ApplicantContainerProviderSource(),
-        readonly = True,
+        required = True,
         )
 
@@ -327,17 +311,8 @@
         )
 
-    provider = schema.Choice(
-        title = _(u'Applicants Container Type'),
-        required = True,
-        source = ApplicantContainerProviderSource(),
-        readonly = False,
-        )
-
 IApplicantsContainerAdd[
     'prefix'].order =  IApplicantsContainer['prefix'].order
 IApplicantsContainerAdd[
     'year'].order =  IApplicantsContainer['year'].order
-IApplicantsContainerAdd[
-    'provider'].order =  IApplicantsContainer['provider'].order
 
 class IApplicantBaseData(IKofaObject):
@@ -553,58 +528,2 @@
     'p_year'].order
 
-class IApplicantsContainerProvider(Interface):
-    """A provider for applicants containers.
-
-    Applicants container providers are meant to be looked up as
-    utilities. This way we can find all applicant container types
-    defined somewhere.
-
-    Each applicants container provider registered as utility provides
-    one container type and one should be able to call the `factory`
-    attribute to create an instance of the requested container type.
-
-    .. THE FOLLOWING SHOULD GO INTO SPHINX DOCS (and be tested)
-
-    Samples:
-
-    Given, you had an IApplicantsContainer implementation somewhere
-    and you would like to make it findable on request, then you would
-    normally create an appropriate provider utility like this::
-
-      import grok
-      from waeup.kofa.applicants.interfaces import IApplicantsContainerProvider
-
-      class MyContainerProvider(grok.GlobalUtility):
-          grok.implements(IApplicantsContainerProvider)
-          grok.name('MyContainerProvider') # Must be unique
-          factory = MyContainer # A class implementing IApplicantsContainer
-                                # or derivations thereof.
-
-    This utility would be registered on startup and could then be used
-    like this:
-
-      >>> from zope.component import getAllUtilitiesRegisteredFor
-      >>> from waeup.kofa.applicants.interfaces import (
-      ...     IApplicantsContainerProvider)
-      >>> all_providers = getAllUtilitiesRegisteredFor(
-      ...     IApplicantsContainerProvider)
-      >>> all_providers
-      [<MyContainerProvider object at 0x...>]
-
-    You could look up this specific provider by name:
-
-      >>> from zope.component import getUtility
-      >>> p = getUtility(IApplicantsContainerProvider, name='MyProvider')
-      >>> p
-      <MyContainerProvider object at 0x...>
-
-    An applicants container would then be created like this:
-
-      >>> provider = all_providers[0]
-      >>> container = provider.factory()
-      >>> container
-      <MyContainer object at 0x...>
-
-    """
-    factory = Attribute("A class that can create instances of the "
-                        "requested container type")
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 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_batching.py	(revision 8008)
@@ -151,7 +151,4 @@
         self.assertEqual(container.entry_level, 100)
         self.assertEqual(container.year, 2012)
-        self.assertEqual(
-            container.provider[0],
-            u'waeup.kofa.applicants.ApplicantsContainer')
         self.assertEqual(container.application_category, 'basic')
         self.assertEqual(
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py	(revision 8008)
@@ -248,6 +248,4 @@
         self.browser.getControl(name="form.year").value = ['2010']
         self.browser.getControl(name="form.entry_level").value = ['100']
-        self.browser.getControl(name="form.provider").value = [
-            'waeup.kofa.applicants.ApplicantsContainer']
         self.browser.getControl(
             name="form.application_category").value = ['basic']
@@ -264,6 +262,4 @@
         self.browser.getControl(name="form.year").value = ['2010']
         self.browser.getControl(name="form.entry_level").value = ['100']
-        self.browser.getControl(name="form.provider").value = [
-            'waeup.kofa.applicants.ApplicantsContainer']
         self.browser.getControl(
             name="form.application_category").value = ['basic']
@@ -280,6 +276,4 @@
         self.browser.getControl(name="form.year").value = ['2010']
         self.browser.getControl(name="form.entry_level").value = ['100']
-        self.browser.getControl(name="form.provider").value = [
-            'waeup.kofa.applicants.ApplicantsContainer']
         #self.browser.getControl(name="form.ac_prefix").value = ['APP']
         self.browser.getControl(
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py	(revision 8008)
@@ -12,5 +12,5 @@
     ApplicantsContainerExporter, ApplicantsExporter)
 from waeup.kofa.applicants.interfaces import (
-    IApplicantsContainerProvider, AppCatSource, ApplicationTypeSource)
+    AppCatSource, ApplicationTypeSource)
 from waeup.kofa.applicants.tests.test_batching import (
     ApplicantImportExportSetup)
@@ -53,8 +53,4 @@
         container.year = 2012
         container.entry_level = 100
-        provider = [
-            x for x in getUtilitiesFor(IApplicantsContainerProvider)
-            if x[0] == 'waeup.kofa.applicants.ApplicantsContainer'][0]
-        container.provider = provider
         container.application_category = list(AppCatSource()(container))[0]
         container.description = u'Some Description\nwith linebreak\n'
@@ -73,9 +69,8 @@
         self.assertEqual(
             result,
-            'code,title,prefix,entry_level,year,provider,application_category,'
+            'code,title,prefix,entry_level,year,application_category,'
             'description,startdate,enddate,strict_deadline\r\n'
 
-            'dp2012,General Studies 2012/13,app,100,2012,'
-            'waeup.kofa.applicants.ApplicantsContainer,basic,'
+            'dp2012,General Studies 2012/13,app,100,2012,basic,'
             '"Some Description\nwith linebreak\n<<de>>man spriht deutsh",'
             '2012-01-01,2012-01-31,1\r\n'
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 8007)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 8008)
@@ -257,5 +257,6 @@
         )
 
-class IStudent(IStudentBase,IUGStudentClearance,IPGStudentClearance,IStudentPersonal):
+class IStudent(IStudentBase,IUGStudentClearance,IPGStudentClearance,
+    IStudentPersonal):
     """Representation of a student.
 
