Index: main/waeup.kofa/trunk/docs/source/userdocs/datacenter.rst
===================================================================
--- main/waeup.kofa/trunk/docs/source/userdocs/datacenter.rst	(revision 12858)
+++ main/waeup.kofa/trunk/docs/source/userdocs/datacenter.rst	(revision 12859)
@@ -28,8 +28,15 @@
 Regular data exporters (1) collect objects from specific containers, (2) iterate over the collected objects, (3) extract and mangle information from each object, (4) write the information of each object into a row of a CSV file and (5) finally provide the file for download. The CSV file is neither stored in the database nor archived in the filesystem. (3) and (4) means a flattening of the hierarchical data structure, i.e. a mapping of objects to flat relational data to be stored in a CSV table. The extracted information must not necessarily be based only on static attributes of the collected object. The data, finally stored in the CSV file, can also be derived from parent or child objects, or dynamically computed by the object's methods and property attributes. These methods and properties can retrieve information from everywhere in the portal's database.
 
-In the following we list all exporter classes including the two attributes and a method description. The `fields` attribute contain the column titles of the export file. These are not necessarily only attributes of the exported objects. The `title` attribute unveils the name of the exporter under which this exporter will be displayed in the user interface. The `mangle_value()` method shows how some of fields are being dynamically computed.
+In the following we list all exporter classes including two attributes and a method description. The `fields` attribute contain the column titles of the export file. These are not necessarily only attributes of the exported objects. The `title` attribute unveils the name of the exporter under which this exporter will be displayed in the user interface. The `mangle_value()` method shows how some of fields are being dynamically computed.
 
-Academic Section Exporters
---------------------------
+Regular Exporters
+-----------------
+
+.. autoclass:: waeup.kofa.userscontainer.UserExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.userscontainer.UserExporter.fields
+  .. autoattribute:: waeup.kofa.userscontainer.UserExporter.title
+  .. automethod:: waeup.kofa.userscontainer.UserExporter.mangle_value()
 
 .. autoclass:: waeup.kofa.university.export.FacultyExporter()
@@ -70,10 +77,45 @@
 
 
-Application Section Exporters
------------------------------
+.. autoclass:: waeup.kofa.applicants.export.ApplicantsContainerExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.applicants.export.ApplicantsContainerExporter.fields
+  .. autoattribute:: waeup.kofa.applicants.export.ApplicantsContainerExporter.title
+
+.. autoclass:: waeup.kofa.applicants.export.ApplicantExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.applicants.export.ApplicantExporter.fields
+  .. autoattribute:: waeup.kofa.applicants.export.ApplicantExporter.title
+  .. automethod:: waeup.kofa.applicants.export.ApplicantExporter.mangle_value()
+
+.. autoclass:: waeup.kofa.accesscodes.export.AccessCodeBatchExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.accesscodes.export.AccessCodeBatchExporter.fields
+  .. autoattribute:: waeup.kofa.accesscodes.export.AccessCodeBatchExporter.title
+
+.. autoclass:: waeup.kofa.accesscodes.export.AccessCodeExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.accesscodes.export.AccessCodeExporter.fields
+  .. autoattribute:: waeup.kofa.accesscodes.export.AccessCodeExporter.title
+  .. automethod:: waeup.kofa.accesscodes.export.AccessCodeExporter.mangle_value()
+
+.. autoclass:: waeup.kofa.hostels.export.HostelExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.hostels.export.HostelExporter.fields
+  .. autoattribute:: waeup.kofa.hostels.export.HostelExporter.title
+
+.. autoclass:: waeup.kofa.hostels.export.BedExporter()
+  :noindex:
+
+  .. autoattribute:: waeup.kofa.hostels.export.BedExporter.fields
+  .. autoattribute:: waeup.kofa.hostels.export.BedExporter.title
 
 
-Student Section Exporters
--------------------------
+Student Data Exporters
+----------------------
 
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/export.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/export.py	(revision 12858)
+++ main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/export.py	(revision 12859)
@@ -27,13 +27,11 @@
 
 class AccessCodeBatchExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for accesscodebatches.
+    """The Access Code Batch Exporter exports container data. It does not
+    export access codes inside the container.
     """
     grok.implements(ICSVExporter)
     grok.name('accesscodebatches')
 
-    #: Fieldnames considered by this exporter
     fields = tuple(sorted(iface_names(IAccessCodeBatch))) + ('batch_id',)
-
-    #: The title under which this exporter will be displayed
     title = _(u'Access Code Batches')
 
@@ -48,5 +46,4 @@
     def export_all(self, site, filepath=None):
         """Export accesscode batches into filepath as CSV data.
-
         If `filepath` is ``None``, a raw string with CSV data is returned.
         """
@@ -57,17 +54,20 @@
         return self.close_outfile(filepath, outfile)
 
+
 class AccessCodeExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for courses.
+    """The Access Code Exporter exports all access codes stored in the
+    access code batch containers. The exporter iterates over all access code
+    batches and over all access codes inside each batch container.
     """
     grok.implements(ICSVExporter)
     grok.name('accesscodes')
 
-    #: Fieldnames considered by this exporter
     fields = tuple(sorted(iface_names(IAccessCode)))
-
-    #: The title under which this exporter will be displayed
     title = _(u'Access Codes')
 
     def mangle_value(self, value, name, context=None):
+        """The mangler adds a hash symbol at the end of ``random_num``
+        to avoid annoying automatic number transformation by Excel or Calc.
+        """
         if name == 'random_num' and value is not None:
             # Append hash '#' to numbers to circumvent
@@ -80,5 +80,4 @@
     def export_all(self, site, filepath=None):
         """Export accesscodes into filepath as CSV data.
-
         If `filepath` is ``None``, a raw string with CSV data is returned.
         """
Index: main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py	(revision 12858)
+++ main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py	(revision 12859)
@@ -29,12 +29,11 @@
 
 class ApplicantsContainerExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for ApplicantsContainers.
+    """The Applicants Container Exporter exports container data. It does not
+    export applicants (application records) inside the container.
     """
     grok.implements(ICSVExporter)
     grok.name('applicantscontainers')
 
-    #: Fieldnames considered by this exporter
     fields = tuple(sorted(iface_names(IApplicantsContainer)))
-    #: The title under which this exporter will be displayed
     title = _(u'Applicants Containers')
 
@@ -63,17 +62,23 @@
         return self.export(containers.values(), filepath)
 
+
 class ApplicantExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for Applicants.
+    """The Applicant Exporter exports all application records (= applicants)
+    stored in the database. In contrast to the exporters in the academics
+    section this exporter does not iterate over the items of containers
+    but searches the Applicants Catalog instead.
     """
     grok.implements(ICSVExporter)
     grok.name('applicants')
 
-    #: Fieldnames considered by this exporter
     fields = tuple(sorted(IApplicantBaseData.names())) + ('container_code',)
-
-    #: The title under which this exporter will be displayed
     title = _(u'Applicants')
 
     def mangle_value(self, value, name, context=None):
+        """The mangler determines the the codes of the atributes `course1`,
+        `course2` and `course_admitted`. It furthermore prepares the
+        history messages and adds a hash symbol at the end of the phone number
+        to avoid annoying automatic number transformation by Excel or Calc.
+        """
         if name in (
             'course1', 'course2', 'course_admitted') and value is not None:
Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/export.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/export.py	(revision 12858)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/export.py	(revision 12859)
@@ -26,18 +26,15 @@
 
 class HostelExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for hostels.
+    """The Hostel Exporter exports container data. It does not
+    export beds inside the container.
     """
     grok.implements(ICSVExporter)
     grok.name('hostels')
 
-    #: Fieldnames considered by this exporter
     fields = tuple(sorted(iface_names(IHostel))) 
-
-    #: The title under which this exporter will be displayed
     title = _(u'Hostels')
 
     def export_all(self, site, filepath=None):
         """Export hostels into filepath as CSV data.
-
         If `filepath` is ``None``, a raw string with CSV data is returned.
         """
@@ -48,20 +45,19 @@
         return self.close_outfile(filepath, outfile)
 
+
 class BedExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for courses.
+    """The Bed Exporter exports all beds stored in the
+    hostel containers. The exporter iterates over all hostels
+    and over all beds inside each hostel container.
     """
     grok.implements(ICSVExporter)
     grok.name('beds')
 
-    #: Fieldnames considered by this exporter
     fields = tuple(sorted(iface_names(IBed))) + (
         'hall', 'block', 'room', 'bed', 'special_handling', 'sex', 'bt')
-
-    #: The title under which this exporter will be displayed
     title = _(u'Beds')
 
     def export_all(self, site, filepath=None):
         """Export beds into filepath as CSV data.
-
         If `filepath` is ``None``, a raw string with CSV data is returned.
         """
Index: main/waeup.kofa/trunk/src/waeup/kofa/userscontainer.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/userscontainer.py	(revision 12858)
+++ main/waeup.kofa/trunk/src/waeup/kofa/userscontainer.py	(revision 12859)
@@ -62,20 +62,20 @@
 
 class UserExporter(grok.GlobalUtility, ExporterBase):
-    """Exporter for user accounts.
+    """The User Exporter exports all user accounts. It iterates over all
+    objects of the ``users`` container.
     """
     grok.implements(ICSVExporter)
     grok.name('users')
 
-    #: Fieldnames considered by this exporter
     fields = ('name', 'title', 'public_name', 'description',
               'email', 'phone', 'roles', 'local_roles', 'password')
-
-    #: The title under which this exporter will be displayed
     title = _(u'Users')
 
     def mangle_value(self, value, name, context=None):
-        """Treat location values special.
+        """The mangler determines the local roles each user has and computes
+        a Python expression like:
+
+        ``{u'waeup.local.ClearanceOfficer': [u'faculties/ABC/', u'faculties/DEF/']}``
         """
-
         if name == 'local_roles' and context is not None:
             local_roles = context.getLocalRoles()
