Index: /main/waeup.kofa/branches/henrik-regista/CHANGES.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/CHANGES.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/CHANGES.txt	(revision 11954)
@@ -6,7 +6,7 @@
 
 * Enucleation: Keep only the portal's framework.
-  Remove institution, students, applicants, hostels and accesscodes modules.
+  Remove university, students, applicants, hostels and accesscodes modules.
 
-* Rename 'kofa' 'ikoba', 'university' 'institution' and 'student' 'customer'.
+* Rename 'kofa' 'ikoba', 'university' 'company' and 'student' 'customer'.
 
 0.1 (never released)
Index: /main/waeup.kofa/branches/henrik-regista/README.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/README.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/README.txt	(revision 11954)
@@ -7,5 +7,5 @@
 application and registration progress.
 
-Ikoba is the second flagships of the West African eInstitution Project (WAeUP).
+Ikoba is the second flagships of the West African eCompany Project (WAeUP).
 See http://www.waeup.org to learn more about WAeUP.
 
Index: /main/waeup.kofa/branches/henrik-regista/docs/INSTALL.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/INSTALL.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/docs/INSTALL.txt	(revision 11954)
@@ -263,7 +263,7 @@
 If you are connected and logged in,
 you should be able to add the grok-based applications
-(such as ``Institution``) from the menu.
-
-Add an instance of ``Institution`` and click on the link next to the
+(such as ``Company``) from the menu.
+
+Add an instance of ``Company`` and click on the link next to the
 then visible entry in the list of installed applications.
 
Index: in/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_accesscodes.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_accesscodes.rst	(revision 11953)
+++ 	(revision )
@@ -1,24 +1,0 @@
-`accesscodes` -- Access Codes Package
-*************************************
-
-(see also: :ref:`api-accesscodes-modules`)
-
-.. automodule:: waeup.ikoba.accesscodes
-   :members:
-   :undoc-members:
-
-.. _api-accesscodes-modules:
-
-Submodules
-===========
-
-This package contains the following modules:
-
-.. toctree::
-   :maxdepth: 1
-
-   accesscodes/api_accesscode
-   accesscodes/api_browser
-   accesscodes/api_catalog
-   accesscodes/api_interfaces
-   accesscodes/api_workflow
Index: /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_app.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_app.rst	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_app.rst	(revision 11954)
@@ -1,3 +1,3 @@
-`app` -- Institution Root (Site) Module
+`app` -- Company Root (Site) Module
 **************************************
 
Index: in/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_applicants.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_applicants.rst	(revision 11953)
+++ 	(revision )
@@ -1,29 +1,0 @@
-`applicants` - Application Components Package
-*********************************************
-
-(see also: :ref:`api-applicants-modules`)
-
-.. automodule:: waeup.ikoba.applicants
-   :members:
-   :undoc-members:
-
-.. _api-applicants-modules:
-
-Submodules
-----------
-
-This package bundles the following submodules:
-
-.. toctree::
-   :maxdepth: 1
-
-   applicants/api_interfaces
-   applicants/api_root
-   applicants/api_container
-   applicants/api_applicant
-   applicants/api_authentication
-   applicants/api_batching
-   applicants/api_browser
-   applicants/api_permissions
-   applicants/api_workflow
-
Index: in/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_hostels.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_hostels.rst	(revision 11953)
+++ 	(revision )
@@ -1,26 +1,0 @@
-`hostels` -- Accommodation Section Components Package
-*****************************************************
-
-(see also: :ref:`api-accommodation-modules`)
-
-.. automodule:: waeup.ikoba.hostels
-   :members:
-   :undoc-members:
-
-.. _api-accommodation-modules:
-
-Submodules
-----------
-
-This package bundles the following modules:
-
-.. toctree::
-   :maxdepth: 1
-
-   hostels/api_hostel
-   hostels/api_container
-   hostels/api_browser
-   hostels/api_catalog
-   hostels/api_permissions
-   hostels/api_vocabularies
-   hostels/api_interfaces
Index: /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_interfaces.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_interfaces.rst	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_interfaces.rst	(revision 11954)
@@ -6,5 +6,5 @@
    :undoc-members:
 
-.. autointerface:: waeup.ikoba.interfaces.IInstitution
+.. autointerface:: waeup.ikoba.interfaces.ICompany
    :members:
    :undoc-members:
Index: in/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_students.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_students.rst	(revision 11953)
+++ 	(revision )
@@ -1,36 +1,0 @@
-`students` -- Student Section Components Package
-************************************************
-
-(see also: :ref:`api-students-modules`)
-
-.. automodule:: waeup.ikoba.students
-   :members:
-   :undoc-members:
-
-.. _api-students-modules:
-
-Submodules
-----------
-
-This package bundles the following modules:
-
-.. toctree::
-   :maxdepth: 1
-
-   students/api_student
-   students/api_studycourse
-   students/api_studylevel
-   students/api_authentication
-   students/api_permissions
-   students/api_batching
-   students/api_browser
-   students/api_viewlets
-   students/api_catalog
-   students/api_container
-   students/api_dynamicroles
-   students/api_payments
-   students/api_accommodation
-   students/api_workflow
-   students/api_vocabularies
-   students/api_utils
-   students/api_interfaces
Index: in/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_university.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/api_university.rst	(revision 11953)
+++ 	(revision )
@@ -1,30 +1,0 @@
-`university` -- University Components Package
-*********************************************
-
-(see also: :ref:`api-university-modules`)
-
-.. automodule:: waeup.ikoba.university
-   :members:
-   :undoc-members:
-
-.. _api-university-modules:
-
-Submodules
-----------
-
-This package bundles the following modules:
-
-.. toctree::
-   :maxdepth: 1
-
-   university/api_interfaces
-   university/api_catalog
-   university/api_vocabularies
-   university/api_batching
-   university/api_facultiescontainer
-   university/api_faculty
-   university/api_department
-   university/api_certificatescontainer
-   university/api_coursescontainer
-   university/api_course
-   university/api_certificate
Index: /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/index.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/index.rst	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/docs/source/developerdocs/api/index.rst	(revision 11954)
@@ -38,5 +38,5 @@
    api_sourcefactory
    api_startup
-   api_institution
+   api_company
    api_userscontainer
    api_utils
Index: /main/waeup.kofa/branches/henrik-regista/docs/source/glossary.rst
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/docs/source/glossary.rst	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/docs/source/glossary.rst	(revision 11954)
@@ -10,5 +10,5 @@
 
    WAeUP
-     West African e-Institution Project.
+     West African e-Company Project.
 
    waeup.ikoba
Index: /main/waeup.kofa/branches/henrik-regista/setup.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/setup.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/setup.py	(revision 11954)
@@ -90,5 +90,5 @@
       long_description = long_description,
 
-      keywords = "portal waeup ikoba institution application registration grok zope",
+      keywords = "portal waeup ikoba company application registration grok zope",
       # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
       classifiers = [
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/app.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/app.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/app.py	(revision 11954)
@@ -25,5 +25,5 @@
 from waeup.ikoba.mandates.container import MandatesContainer
 from waeup.ikoba.interfaces import (
-    IInstitution, IIkobaPluggable, IObjectUpgradeEvent, IJobManager,
+    ICompany, IIkobaPluggable, IObjectUpgradeEvent, IJobManager,
     VIRT_JOBS_CONTAINER_NAME)
 from waeup.ikoba.userscontainer import UsersContainer
@@ -32,8 +32,8 @@
 from waeup.ikoba.configuration import ConfigurationContainer
 
-class Institution(grok.Application, grok.Container, Logger):
-    """A institution.
+class Company(grok.Application, grok.Container, Logger):
+    """A company.
     """
-    grok.implements(IInstitution)
+    grok.implements(ICompany)
 
     # Setup authentication for this app. Note: this is only
@@ -44,5 +44,5 @@
 
     def __init__(self, *args, **kw):
-        super(Institution, self).__init__(*args, **kw)
+        super(Company, self).__init__(*args, **kw)
         self.setup()
         return
@@ -85,5 +85,5 @@
         self.logger.info('Plugin update finished.')
         return
-attrs_to_fields(Institution)
+attrs_to_fields(Company)
 
 class ObjectUpgradeEvent(ObjectEvent):
@@ -92,8 +92,8 @@
     grok.implements(IObjectUpgradeEvent)
 
-@grok.subscribe(Institution, grok.IObjectAddedEvent)
-def handle_institution_added(app, event):
-    """If a institution is added, a message is logged.
+@grok.subscribe(Company, grok.IObjectAddedEvent)
+def handle_company_added(app, event):
+    """If a company is added, a message is logged.
     """
-    app.logger.info('Institution `%s` added.' % getattr(app, '__name__', None))
+    app.logger.info('Company `%s` added.' % getattr(app, '__name__', None))
     return
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/app.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/app.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/app.txt	(revision 11954)
@@ -7,25 +7,25 @@
 .. module:: waeup.ikoba.app
 
-.. class:: Institution
+.. class:: Company
 
   The main Ikoba application object is given with
-  :class:`Institution`. It provides the main containers as faculties,
+  :class:`Company`. It provides the main containers as faculties,
   hostels, etc.
 
   .. attribute:: name
 
-     A string. The name of a institution.
+     A string. The name of a company.
 
   .. attribute:: faculties
 
      An arbitrary object containing "faculties". In the case of
-     `Institution` it is a container of type
+     `Company` it is a container of type
      `waeup.ikoba.interfaces.IFacultiesContainer`.
 
 
-Creating `Institution` instances
+Creating `Company` instances
 ===============================
 
-As :class:`Institution` instances make use of the Zope Component
+As :class:`Company` instances make use of the Zope Component
 Architecture (ZCA), we have to setup the basic component registries,
 before we can create instances. We do this by simply grokking the
@@ -34,18 +34,18 @@
 registries (this is done by the testlayer automatically).
 
-Now we can import the :class:`Institution` class and create an
+Now we can import the :class:`Company` class and create an
 instance:
 
-    >>> from waeup.ikoba.app import Institution
-    >>> myinstitution = Institution()
-    >>> myinstitution
-    <waeup.ikoba.app.Institution object at 0x...>
+    >>> from waeup.ikoba.app import Company
+    >>> mycompany = Company()
+    >>> mycompany
+    <waeup.ikoba.app.Company object at 0x...>
 
-Instances of `Institution` comply with the interface
-`waeup.ikoba.interfaces.IInstitution`:
+Instances of `Company` comply with the interface
+`waeup.ikoba.interfaces.ICompany`:
 
     >>> from zope.interface.verify import verifyClass
-    >>> from waeup.ikoba.interfaces import IInstitution
-    >>> verifyClass(IInstitution, Institution)
+    >>> from waeup.ikoba.interfaces import ICompany
+    >>> verifyClass(ICompany, Company)
     True
 
@@ -53,16 +53,16 @@
 interface:
 
-    >>> from waeup.ikoba.app import Institution
-    >>> myinstitution = Institution()
-    >>> myinstitution['configuration'].name
-    u'Sample Institution'
+    >>> from waeup.ikoba.app import Company
+    >>> mycompany = Company()
+    >>> mycompany['configuration'].name
+    u'Sample Company'
 
-  >>> myinstitution['users']
+  >>> mycompany['users']
   <waeup.ikoba.userscontainer.UsersContainer object at 0x...>
 
-  >>> myinstitution['datacenter']
+  >>> mycompany['datacenter']
   <waeup.ikoba.datacenter.DataCenter object at 0x...>
 
-  >>> myinstitution['configuration']
+  >>> mycompany['configuration']
   <waeup.ikoba.configuration.ConfigurationContainer object at 0x...>
 
@@ -103,9 +103,9 @@
 and setup a new Ikoba instance, we will get a message:
 
-   >>> from waeup.ikoba.app import Institution
-   >>> site = Institution()
+   >>> from waeup.ikoba.app import Company
+   >>> site = Company()
    Setup was called for
-   <waeup.ikoba.app.Institution object at 0x...>
+   <waeup.ikoba.app.Company object at 0x...>
 
-Apparently the plugin can do with the Institution object whatever it
+Apparently the plugin can do with the Company object whatever it
 likes. That's what plugins are for.
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/authentication.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/authentication.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/authentication.txt	(revision 11954)
@@ -11,7 +11,7 @@
 
   >>> from zope.component.hooks import setSite # only needed in tests
-  >>> from waeup.ikoba.app import Institution
+  >>> from waeup.ikoba.app import Company
   >>> root = getRootFolder()
-  >>> u = Institution()
+  >>> u = Company()
   >>> root['app'] = u
   >>> setSite(root['app'])                     # only needed in tests
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/batchprocessing.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/batchprocessing.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/batchprocessing.txt	(revision 11954)
@@ -21,6 +21,6 @@
 Create a site:
 
-    >>> from waeup.ikoba.app import Institution
-    >>> getRootFolder()['app'] = Institution()
+    >>> from waeup.ikoba.app import Company
+    >>> getRootFolder()['app'] = Company()
     >>> from zope.component.hooks import setSite
     >>> setSite(getRootFolder()['app'])
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/breadcrumbs.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/breadcrumbs.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/breadcrumbs.py	(revision 11954)
@@ -28,5 +28,5 @@
 from waeup.ikoba.browser.interfaces import (
     IBreadcrumb, IBreadcrumbIgnorable, IBreadcrumbContainer, IIkobaObject,
-    IInstitution, IUsersContainer, IDataCenter,
+    ICompany, IUsersContainer, IDataCenter,
     )
 from waeup.ikoba.reports import IReportsContainer
@@ -86,8 +86,8 @@
         return self.viewname
 
-class InstitutionBreadcrumb(Breadcrumb):
-    """A breadcrumb for institution index pages.
-    """
-    grok.context(IInstitution)
+class CompanyBreadcrumb(Breadcrumb):
+    """A breadcrumb for company index pages.
+    """
+    grok.context(ICompany)
     title = _(u'Home')
     parent = None
@@ -97,10 +97,10 @@
 
     Here we need a special `parent()` implementation, because the
-    parent object is not a real parent (the Institution object has no
+    parent object is not a real parent (the Company object has no
     valid parent in terms of breadcrumbs). Instead it is the
     ``administration`` view of the same context the ``manage`` page
     itself is bound to.
     """
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.name('manage')
     title = _(u'Portal Settings')
@@ -113,7 +113,7 @@
 
 class AdministrationBreadcrumb(Breadcrumb):
-    """A breadcrumb for administration areas of Institution instances.
-    """
-    grok.context(IInstitution)
+    """A breadcrumb for administration areas of Company instances.
+    """
+    grok.context(ICompany)
     grok.name('administration')
     title = _(u'Administration')
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/breadcrumbs.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/breadcrumbs.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/breadcrumbs.txt	(revision 11954)
@@ -9,9 +9,9 @@
 ===============================
 
-We create a institution to check the breadcrumb functionality.
-
-    >>> from waeup.ikoba.app import Institution
+We create a company to check the breadcrumb functionality.
+
+    >>> from waeup.ikoba.app import Company
     >>> root = getRootFolder()
-    >>> root['app'] = Institution()
+    >>> root['app'] = Company()
     >>> app = root['app']
 
@@ -25,5 +25,5 @@
     >>> blist1 = getBreadcrumbList(app, 'index')
     >>> blist1
-    [<waeup.ikoba.browser.breadcrumbs.InstitutionBreadcrumb object at 0x...>]
+    [<waeup.ikoba.browser.breadcrumbs.CompanyBreadcrumb object at 0x...>]
 
 A slightly more extensive list for the datacenter:
@@ -32,9 +32,9 @@
     >>> from pprint import pprint
     >>> pprint(blist2)
-    [<waeup.ikoba.browser.breadcrumbs.InstitutionBreadcrumb object at 0x...>,
+    [<waeup.ikoba.browser.breadcrumbs.CompanyBreadcrumb object at 0x...>,
      <waeup.ikoba.browser.breadcrumbs.AdministrationBreadcrumb object at 0x...>,
      <waeup.ikoba.browser.breadcrumbs.DataCenterBreadcrumb object at 0x...>]
 
-We get a breadcrumb for institution, administration area and data
+We get a breadcrumb for company, administration area and data
 center in that order.
 
@@ -47,11 +47,11 @@
 
      >>> pprint([(x.context, x.viewname) for x in blist2])
-     [(<waeup.ikoba.app.Institution object at 0x...>, 'index'),
-      (<waeup.ikoba.app.Institution object at 0x...>, 'administration'),
+     [(<waeup.ikoba.app.Company object at 0x...>, 'index'),
+      (<waeup.ikoba.app.Company object at 0x...>, 'administration'),
       (<waeup.ikoba.datacenter.DataCenter object at 0x...>, 'index')]
 
 The administration area breadcrumb might be a surprise, as there is no
 equivalent object in the ZODB. In fact the administration area is only
-a certain view (the 'administration' view) on the institution object.
+a certain view (the 'administration' view) on the company object.
 
 We will show below, how you can define breadcrumbs this way.
@@ -62,5 +62,5 @@
 
 This way we can make sure, that there are different breadcrumb lists
-generated for instance for the administration view of Institution
+generated for instance for the administration view of Company
 instances and the index view. While the first should look something
 like::
@@ -118,5 +118,5 @@
 
     >>> pprint(mybccontainer.getList())
-    [<...breadcrumbs.InstitutionBreadcrumb object at 0x...>,
+    [<...breadcrumbs.CompanyBreadcrumb object at 0x...>,
      <...breadcrumbs.AdministrationBreadcrumb object at 0x...>,
      <...breadcrumbs.UsersContainerBreadcrumb object at 0x...>]
@@ -128,5 +128,5 @@
 
 Now we can get breadcrumbs for contexts and view names. For example a
-breadcrumb for the 'index' view of our Institution object:
+breadcrumb for the 'index' view of our Company object:
 
     >>> from zope.component import getAdapter
@@ -134,5 +134,5 @@
     >>> b1 = getAdapter(app, IBreadcrumb, 'index')
     >>> b1
-    <waeup.ikoba.browser.breadcrumbs.InstitutionBreadcrumb object at 0x...>
+    <waeup.ikoba.browser.breadcrumbs.CompanyBreadcrumb object at 0x...>
 
 Breadcrumb objects provide a title:
@@ -168,7 +168,7 @@
 
     >>> b2.parent
-    (<waeup.ikoba.app.Institution object at 0x...>, 'administration')
-
-This result denotes a new context object (the Institution instance we
+    (<waeup.ikoba.app.Company object at 0x...>, 'administration')
+
+This result denotes a new context object (the Company instance we
 created above) and a view name ('administration').
 
@@ -188,5 +188,5 @@
 As you can see, we get an AdministrationBreadcrumb, although the
 context object, for which the breadcrumb was created is also the
-Institution instance as above:
+Company instance as above:
 
     >>> b3.context is b1.context
@@ -197,5 +197,5 @@
     >>> context, viewname = b3.parent
     >>> context, viewname
-    (<waeup.ikoba.app.Institution object at 0x...>, 'index')
+    (<waeup.ikoba.app.Company object at 0x...>, 'index')
 
 We create last breadcrumb:
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/browser.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/browser.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/browser.txt	(revision 11954)
@@ -4,10 +4,10 @@
 Here we visit all parts of a Ikoba portal using a browser.
 
-Institution
+Company
 ==========
 
 We can watch universities in the browser.
 
-We create an institution object and put into the ZODB root::
+We create an company object and put into the ZODB root::
 
   >>> root = getRootFolder()
@@ -15,12 +15,12 @@
   []
 
-  >>> from waeup.ikoba.app import Institution
-  >>> u = Institution()
-  >>> root['myinstitution'] = u
+  >>> from waeup.ikoba.app import Company
+  >>> u = Company()
+  >>> root['mycompany'] = u
   >>> list(root)
-  [u'myinstitution']
+  [u'mycompany']
 
   >>> from zope.component.hooks import setSite
-  >>> setSite(root['myinstitution'])
+  >>> setSite(root['mycompany'])
 
 To make sure, we can 'watch' pages, we first have to initialize out
@@ -30,7 +30,7 @@
   >>> browser = Browser()
 
-Let's get the default view of a institution::
-
-  >>> browser.open('http://localhost/myinstitution')
+Let's get the default view of a company::
+
+  >>> browser.open('http://localhost/mycompany')
   >>> print browser.contents
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
@@ -55,5 +55,5 @@
 The contact form for anonymous users is called 'Enquiries'::
 
-  >>> browser.open('http://localhost/myinstitution')
+  >>> browser.open('http://localhost/mycompany')
   >>> browser.getLink('Enquiries').click()
   >>> browser.getControl('Send').click()
@@ -74,7 +74,7 @@
 Registered users with an email address can request a password change:
 
-  >>> root['myinstitution']['users'].addUser('forgetful', 'secret',title='Bob Forgetful',
+  >>> root['mycompany']['users'].addUser('forgetful', 'secret',title='Bob Forgetful',
   ...                               description='A forgetful user', email='aa@aa.ng')
-  >>> browser.open('http://localhost/myinstitution/changepw')
+  >>> browser.open('http://localhost/mycompany/changepw')
   >>> browser.getControl(name="form.identifier").value = 'forgetful'
   >>> browser.getControl(name="form.email").value = 'aa@aa.ng'
@@ -91,13 +91,13 @@
 We can then get an edit view of the configuration container::
 
-  >>> browser.open('http://localhost/myinstitution/configuration')
-  >>> print browser.contents
-  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
-  ...<form action="http://localhost/myinstitution/configuration/@@index"
-  ...
-
-The edit form contains the default value for the institution name::
-
-  >>> 'Sample Institution' in browser.contents
+  >>> browser.open('http://localhost/mycompany/configuration')
+  >>> print browser.contents
+  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
+  ...<form action="http://localhost/mycompany/configuration/@@index"
+  ...
+
+The edit form contains the default value for the company name::
+
+  >>> 'Sample Company' in browser.contents
   True
 
@@ -110,5 +110,5 @@
   ...
 
-  >>> browser.open('http://localhost/myinstitution/configuration')
+  >>> browser.open('http://localhost/mycompany/configuration')
   >>> browser.getControl("Update plugins").click()
   >>> print browser.contents
@@ -120,5 +120,5 @@
 and is properly rendered on the frontpage of the portal:
 
-  >>> browser.open('http://localhost/myinstitution')
+  >>> browser.open('http://localhost/mycompany')
   >>> print browser.contents
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
@@ -134,5 +134,5 @@
 If we change to German so that the German part of frontpage.rst is rendered:
 
-  >>> browser.open('http://localhost/myinstitution//@@change_language?lang=de')
+  >>> browser.open('http://localhost/mycompany//@@change_language?lang=de')
   >>> print browser.contents
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
@@ -147,5 +147,5 @@
 Switch back to English:
 
-  >>> browser.open('http://localhost/myinstitution//@@change_language?lang=en')
+  >>> browser.open('http://localhost/mycompany//@@change_language?lang=en')
 
 
@@ -153,5 +153,5 @@
 ============
 
-  >>> browser.open('http://localhost/myinstitution')
+  >>> browser.open('http://localhost/mycompany')
   >>> browser.getLink('Portal Users').click()
   >>> print browser.contents
@@ -187,10 +187,10 @@
 manually by setting the roles attribute:
 
-  >>> print root['myinstitution']['users']['bob'].roles
+  >>> print root['mycompany']['users']['bob'].roles
   []
-  >>> root['myinstitution']['users']['bob'].roles = ['waeup.UsersManager']
-  >>> print root['myinstitution']['users']['bob'].roles
+  >>> root['mycompany']['users']['bob'].roles = ['waeup.UsersManager']
+  >>> print root['mycompany']['users']['bob'].roles
   ['waeup.UsersManager']
-  >>> browser.open('http://localhost/myinstitution/users')
+  >>> browser.open('http://localhost/mycompany/users')
   >>> print browser.contents
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
@@ -200,5 +200,5 @@
 Users can't be added twice:
 
-  >>> browser.open('http://localhost/myinstitution/users/add')
+  >>> browser.open('http://localhost/mycompany/users/add')
   >>> browser.getControl(name="form.name").value = 'bob'
   >>> browser.getControl(name="form.title").value = 'Bob The User'
@@ -215,5 +215,5 @@
 Users can be deleted:
 
-  >>> browser.open('http://localhost/myinstitution/users')
+  >>> browser.open('http://localhost/mycompany/users')
   >>> browser.getControl("Remove", index=0).click()
   >>> 'User account bob successfully deleted' in browser.contents
@@ -227,5 +227,5 @@
 Let's enter the contact form::
 
-  >>> browser.open('http://localhost/myinstitution/contactadmin')
+  >>> browser.open('http://localhost/mycompany/contactadmin')
   >>> print browser.contents
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
@@ -236,5 +236,5 @@
 contact@waeup.org)::
 
-  >>> browser.open('http://localhost/myinstitution/contactadmin')
+  >>> browser.open('http://localhost/mycompany/contactadmin')
   >>> browser.getControl(name='form.body').value = "test message"
   >>> browser.getControl('Send').click()
@@ -253,5 +253,5 @@
 The data center helps us uploading files for later import or similar.
 
-  >>> browser.open('http://localhost/myinstitution')
+  >>> browser.open('http://localhost/mycompany')
   >>> browser.getLink('Data Center').click()
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/captcha.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/captcha.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/captcha.py	(revision 11954)
@@ -32,5 +32,5 @@
     ICaptchaRequest, ICaptchaResponse, ICaptcha, ICaptchaConfig,
     ICaptchaManager)
-from waeup.ikoba.interfaces import IInstitution
+from waeup.ikoba.interfaces import ICompany
 
 #
@@ -322,5 +322,5 @@
     # A test page to see a captcha in action
     grok.name('captcha')
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.require('waeup.Public')
     title = 'Captcha Test'
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/exceptions.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/exceptions.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/exceptions.py	(revision 11954)
@@ -64,5 +64,5 @@
     """A page rendered when an object cannot be found.
 
-    XXX: This page won't work for objects above a w.k.Institution.
+    XXX: This page won't work for objects above a w.k.Company.
     """
     grok.context(INotFound)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/interfaces.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/interfaces.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/interfaces.py	(revision 11954)
@@ -21,5 +21,5 @@
 from zope.interface import Interface, Attribute
 from waeup.ikoba.interfaces import (
-    IIkobaObject, IInstitution, IUsersContainer, IDataCenter, validate_email)
+    IIkobaObject, ICompany, IUsersContainer, IDataCenter, validate_email)
 from waeup.ikoba.interfaces import MessageFactory as _
 
@@ -161,5 +161,5 @@
 
         If no `headerline` is given, a default will be rendered (name
-        of institution).
+        of company).
 
         If no `title` is given, nothing will be rendered.
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/layout.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/layout.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/layout.py	(revision 11954)
@@ -227,5 +227,5 @@
 
     def getAppTitle(self):
-        return getattr(grok.getSite()['configuration'], 'name', u'Sample Institution')
+        return getattr(grok.getSite()['configuration'], 'name', u'Sample Company')
 
     def getAppAcronym(self):
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/pages.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/pages.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/pages.py	(revision 11954)
@@ -46,5 +46,5 @@
     IkobaDisplayFormPage, NullValidator)
 from waeup.ikoba.browser.interfaces import (
-    IInstitution, ICaptchaManager, IChangePassword)
+    ICompany, ICaptchaManager, IChangePassword)
 from waeup.ikoba.browser.layout import jsaction, action, UtilityView
 from waeup.ikoba.interfaces import MessageFactory as _
@@ -325,5 +325,5 @@
 class ContactAdminForm(IkobaForm):
     grok.name('contactadmin')
-    #grok.context(IInstitution)
+    #grok.context(ICompany)
     grok.template('contactform')
     grok.require('waeup.Authenticated')
@@ -405,13 +405,13 @@
 
 #
-# Institution related pages...
+# Company related pages...
 #
 
-class InstitutionPage(IkobaDisplayFormPage):
-    """ The main institution page.
+class CompanyPage(IkobaDisplayFormPage):
+    """ The main company page.
     """
     grok.require('waeup.Public')
     grok.name('index')
-    grok.context(IInstitution)
+    grok.context(ICompany)
     pnav = 0
     label = ''
@@ -434,5 +434,5 @@
     """
     grok.name('administration')
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.require('waeup.managePortal')
     label = _(u'Administration')
@@ -443,7 +443,7 @@
     """
     grok.name('feed.rss')
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.require('waeup.Public')
-    grok.template('institutionrss20feed')
+    grok.template('companyrss20feed')
 
     name = 'General news feed'
@@ -457,5 +457,5 @@
     @property
     def title(self):
-        return getattr(grok.getSite(), 'name', u'Sample Institution')
+        return getattr(grok.getSite(), 'name', u'Sample Company')
 
     @property
@@ -1568,5 +1568,5 @@
     """Captcha'd page for all kind of users to request a password change.
     """
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.name('changepw')
     grok.require('waeup.Anonymous')
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/pdf.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/pdf.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/pdf.py	(revision 11954)
@@ -710,5 +710,5 @@
             doc, 'ikoba_headtitle', getattr(
                 site_config, 'name',
-                u'Sample Institution'))
+                u'Sample Company'))
         canvas.setFont("Helvetica-Bold", 18)
         if self.header_logo_left_path is not None:
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/companypage.pt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/companypage.pt	(revision 11954)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/companypage.pt	(revision 11954)
@@ -0,0 +1,1 @@
+<span tal:replace="structure view/frontpage">Frontpage</span>
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/companyrss20feed.pt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/companyrss20feed.pt	(revision 11954)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/companyrss20feed.pt	(revision 11954)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0"
+     xmlns:tal="http://xml.zope.org/namespaces/tal"
+     xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>
+      <tal:block tal:content="view/title"/>
+      <tal:block
+	  tal:define="title view/contexttitle"
+	  tal:condition="title"> - <tal:block content="title"/>
+      </tal:block>
+    </title>
+    <link
+	tal:content="view/link"></link>
+    <description
+	tal:content="view/description"></description>
+    <language
+	tal:condition="view/language"
+	tal:content="view/language"></language>
+    <pubDate
+	tal:condition="view/date"
+	tal:content="view/date"></pubDate>
+    <lastBuildDate
+	tal:condition="view/buildDate"
+	tal:content="view/buildDate"></lastBuildDate>
+    <managingEditor
+	tal:condition="view/editor"
+	tal:content="view/editor"></managingEditor>
+    <webMaster
+	tal:condition="view/webmaster"
+	tal:content="view/webmaster"></webMaster>
+    <atom:link
+	tal:attributes="href string:${view/link}@@feeds/${view/name}"
+	rel="self" type="application/rss+xml" />
+    <item
+	tal:repeat="item view/entries">
+      <title
+	  tal:content="item/title"></title>
+      <description
+	  tal:content="item/description"></description>
+      <guid
+	  tal:content="item/guid"
+	  tal:define="isPermaLink item/isPermaLink|nothing"
+	  tal:attributes="isPermaLink python:isPermaLink and 'true' or 'false'"></guid>
+      <link
+	  tal:condition="item/link|nothing"
+	  tal:content="item/link"></link>
+      <author
+	  tal:condition="item/author|nothing"
+	  tal:content="item/author"></author>
+      <category
+	  tal:condition="item/category|nothing"
+	  tal:content="item/category"></category>
+      <pubDate
+	  tal:condition="item/pubDate|nothing"
+	  tal:content="item/pubDate"></pubDate>
+    </item>
+  </channel>
+</rss>
Index: in/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/institutionpage.pt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/institutionpage.pt	(revision 11953)
+++ 	(revision )
@@ -1,1 +1,0 @@
-<span tal:replace="structure view/frontpage">Frontpage</span>
Index: in/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/institutionrss20feed.pt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/templates/institutionrss20feed.pt	(revision 11953)
+++ 	(revision )
@@ -1,59 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<rss version="2.0"
-     xmlns:tal="http://xml.zope.org/namespaces/tal"
-     xmlns:atom="http://www.w3.org/2005/Atom">
-  <channel>
-    <title>
-      <tal:block tal:content="view/title"/>
-      <tal:block
-	  tal:define="title view/contexttitle"
-	  tal:condition="title"> - <tal:block content="title"/>
-      </tal:block>
-    </title>
-    <link
-	tal:content="view/link"></link>
-    <description
-	tal:content="view/description"></description>
-    <language
-	tal:condition="view/language"
-	tal:content="view/language"></language>
-    <pubDate
-	tal:condition="view/date"
-	tal:content="view/date"></pubDate>
-    <lastBuildDate
-	tal:condition="view/buildDate"
-	tal:content="view/buildDate"></lastBuildDate>
-    <managingEditor
-	tal:condition="view/editor"
-	tal:content="view/editor"></managingEditor>
-    <webMaster
-	tal:condition="view/webmaster"
-	tal:content="view/webmaster"></webMaster>
-    <atom:link
-	tal:attributes="href string:${view/link}@@feeds/${view/name}"
-	rel="self" type="application/rss+xml" />
-    <item
-	tal:repeat="item view/entries">
-      <title
-	  tal:content="item/title"></title>
-      <description
-	  tal:content="item/description"></description>
-      <guid
-	  tal:content="item/guid"
-	  tal:define="isPermaLink item/isPermaLink|nothing"
-	  tal:attributes="isPermaLink python:isPermaLink and 'true' or 'false'"></guid>
-      <link
-	  tal:condition="item/link|nothing"
-	  tal:content="item/link"></link>
-      <author
-	  tal:condition="item/author|nothing"
-	  tal:content="item/author"></author>
-      <category
-	  tal:condition="item/category|nothing"
-	  tal:content="item/category"></category>
-      <pubDate
-	  tal:condition="item/pubDate|nothing"
-	  tal:content="item/pubDate"></pubDate>
-    </item>
-  </channel>
-</rss>
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/tests/test_async.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/tests/test_async.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/tests/test_async.py	(revision 11954)
@@ -8,5 +8,5 @@
 from zope.security.interfaces import Unauthorized
 from zope.testbrowser.testing import Browser
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.async import AsyncJob, get_job_id
 from waeup.ikoba.interfaces import IJobManager
@@ -29,5 +29,5 @@
         self.storage = os.path.join(self.workdir, 'storage')
         os.mkdir(self.storage)
-        app = Institution()
+        app = Company()
         app['datacenter'].setStoragePath(self.storage)
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/tests/test_permissions.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/tests/test_permissions.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/tests/test_permissions.py	(revision 11954)
@@ -31,5 +31,5 @@
 from zope.security.interfaces import Unauthorized
 from zope.testbrowser.testing import Browser
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.testing import (
     FunctionalLayer, FunctionalTestCase, get_all_loggers, remove_new_loggers,
@@ -58,6 +58,6 @@
     def setUp(self):
         super(PermissionTest, self).setUp()
-        # Set up a complete institution to have every page available...
-        app = Institution()
+        # Set up a complete company to have every page available...
+        app = Company()
         self.getRootFolder()['app'] = app
         setSite(self.getRootFolder()['app'])
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/viewlets.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/viewlets.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/browser/viewlets.py	(revision 11954)
@@ -24,8 +24,8 @@
 from zope.traversing.browser import absoluteURL
 from waeup.ikoba.browser.pages import (
-    InstitutionPage, DatacenterPage,
+    CompanyPage, DatacenterPage,
     UsersContainerPage, UserManageFormPage)
 from waeup.ikoba.browser.interfaces import (
-    IBreadcrumbContainer, IInstitution, IUsersContainer)
+    IBreadcrumbContainer, ICompany, IUsersContainer)
 from waeup.ikoba.interfaces import (
     IIkobaUtils, IIkobaObject, IIkobaXMLExporter,
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/frontpage.html
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/frontpage.html	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/frontpage.html	(revision 11954)
@@ -16,5 +16,5 @@
 Ikoba is part of the
 <a href="https://waeup.org/">West African eUniversity Project (WAeUP)</a>.
-It is a powerful and comprehensive Student Management System.
+It is a powerful and comprehensive Online Application and Registration Portal.
 The software is written in Python and built upon the Open Source
 <a href="http://grok.zope.org/">Grok Web Framework</a>.
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/imagestorage.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/imagestorage.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/imagestorage.py	(revision 11954)
@@ -285,5 +285,5 @@
     want to change this path -- it is dynamic. That means, if you call
     the file store from 'within' a site, the root path will be located
-    inside this site (a :class:`waeup.ikoba.Institution` instance). If
+    inside this site (a :class:`waeup.ikoba.Company` instance). If
     you call it from 'outside' a site some temporary dir (always the
     same during lifetime of the file store instance) will be used. The
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/index.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/index.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/index.txt	(revision 11954)
@@ -20,5 +20,5 @@
    accesscodes/api.txt
    jambtables/api.txt
-   institution/api.txt
+   company/api.txt
    utils/api.txt
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/interfaces.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/interfaces.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/interfaces.py	(revision 11954)
@@ -253,5 +253,5 @@
     EXAM_SUBJECTS_DICT = Attribute("Dict of examination subjects")
     EXAM_GRADES = Attribute("Dict of examination grades")
-    INST_TYPES_DICT = Attribute("Dict if institution types")
+    INST_TYPES_DICT = Attribute("Dict if company types")
     STUDY_MODES_DICT = Attribute("Dict of study modes")
     APP_CATS_DICT = Attribute("Dict of application categories")
@@ -288,6 +288,6 @@
     """
 
-class IInstitution(IIkobaObject):
-    """Representation of an institution.
+class ICompany(IIkobaObject):
+    """Representation of an company.
     """
 
@@ -593,11 +593,11 @@
 
     name = schema.TextLine(
-        title = _(u'Name of Institution'),
-        default = _(u'Sample Institution'),
+        title = _(u'Name of Company'),
+        default = _(u'Sample Company'),
         required = True,
         )
 
     acronym = schema.TextLine(
-        title = _(u'Abbreviated Title of Institution'),
+        title = _(u'Abbreviated Title of Company'),
         default = u'WAeUP.Ikoba',
         required = True,
@@ -796,8 +796,8 @@
     Components implementing this interface are referred to as
     'plugins'. They are normally called when a new
-    :class:`waeup.ikoba.app.Institution` instance is created.
+    :class:`waeup.ikoba.app.Company` instance is created.
 
     Plugins can setup and update parts of the central site without the
-    site object (normally a :class:`waeup.ikoba.app.Institution` object)
+    site object (normally a :class:`waeup.ikoba.app.Company` object)
     needing to know about that parts. The site simply collects all
     available plugins, calls them and the plugins care for their
@@ -852,5 +852,5 @@
     Utilities providing this interface are looked up when a Pluggable
     Authentication Utility (PAU) for any
-    :class:`waeup.ikoba.app.Institution` instance is created and put
+    :class:`waeup.ikoba.app.Company` instance is created and put
     into ZODB.
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/de/LC_MESSAGES/waeup.ikoba.po
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/de/LC_MESSAGES/waeup.ikoba.po	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/de/LC_MESSAGES/waeup.ikoba.po	(revision 11954)
@@ -1073,13 +1073,13 @@
 
 #: waeup/ikoba/interfaces.py:595
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr "Name der Universität"
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr "Deomo-Universität"
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr "Abkürzung"
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/en/LC_MESSAGES/waeup.ikoba.po
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/en/LC_MESSAGES/waeup.ikoba.po	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/en/LC_MESSAGES/waeup.ikoba.po	(revision 11954)
@@ -1004,13 +1004,13 @@
 
 #: waeup/ikoba/interfaces.py:595
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr ""
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/fr/LC_MESSAGES/waeup.ikoba.po
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/fr/LC_MESSAGES/waeup.ikoba.po	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/fr/LC_MESSAGES/waeup.ikoba.po	(revision 11954)
@@ -1076,13 +1076,13 @@
 #: waeup/ikoba/interfaces.py:595
 #, fuzzy
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr "Nom du département"
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr ""
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/ha/LC_MESSAGES/waeup.ikoba.po
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/ha/LC_MESSAGES/waeup.ikoba.po	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/ha/LC_MESSAGES/waeup.ikoba.po	(revision 11954)
@@ -1005,13 +1005,13 @@
 
 #: waeup/ikoba/interfaces.py:595
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr ""
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/ig/LC_MESSAGES/waeup.ikoba.po
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/ig/LC_MESSAGES/waeup.ikoba.po	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/ig/LC_MESSAGES/waeup.ikoba.po	(revision 11954)
@@ -1005,13 +1005,13 @@
 
 #: waeup/ikoba/interfaces.py:595
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr ""
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/waeup.ikoba.pot
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/waeup.ikoba.pot	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/waeup.ikoba.pot	(revision 11954)
@@ -1011,13 +1011,13 @@
 
 #: waeup/ikoba/interfaces.py:595
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr ""
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/yo/LC_MESSAGES/waeup.ikoba.po
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/yo/LC_MESSAGES/waeup.ikoba.po	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/locales/yo/LC_MESSAGES/waeup.ikoba.po	(revision 11954)
@@ -1005,13 +1005,13 @@
 
 #: waeup/ikoba/interfaces.py:595
-msgid "Name of Institution"
+msgid "Name of Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:596
-msgid "Sample Institution"
+msgid "Sample Company"
 msgstr ""
 
 #: waeup/ikoba/interfaces.py:601
-msgid "Abbreviated Title of Institution"
+msgid "Abbreviated Title of Company"
 msgstr ""
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/browser.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/browser.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/browser.py	(revision 11954)
@@ -20,5 +20,5 @@
 import grok
 from waeup.ikoba.browser.layout import UtilityView
-from waeup.ikoba.interfaces import IInstitution
+from waeup.ikoba.interfaces import ICompany
 from waeup.ikoba.interfaces import MessageFactory as _
 
@@ -26,5 +26,5 @@
     """View to execute mandate.
     """
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.name('mandate')
     grok.require('waeup.Public')
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/container.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/container.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/container.py	(revision 11954)
@@ -49,5 +49,5 @@
 
 class MandatesPlugin(grok.GlobalUtility):
-    """A plugin that creates container for mandates inside a institution.
+    """A plugin that creates container for mandates inside a company.
     """
     grok.implements(IIkobaPluggable)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/tests.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/tests.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/mandates/tests.py	(revision 11954)
@@ -27,5 +27,5 @@
 from zope.component import createObject
 from zope.component.hooks import setSite, clearSite
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.interfaces import IUserAccount
 from waeup.ikoba.mandates.interfaces import (
@@ -63,5 +63,5 @@
 
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/payments/catalog.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/payments/catalog.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/payments/catalog.py	(revision 11954)
@@ -19,5 +19,5 @@
 """
 import grok
-from waeup.ikoba.interfaces import IInstitution
+from waeup.ikoba.interfaces import ICompany
 from waeup.ikoba.payments.interfaces import IPayment
 
@@ -25,5 +25,5 @@
     """A catalog for all payments.
     """
-    grok.site(IInstitution)
+    grok.site(ICompany)
     grok.name('payments_catalog')
     grok.context(IPayment)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/testing.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/testing.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/testing.py	(revision 11954)
@@ -126,5 +126,5 @@
         maybe_grok, setUpZope, cleanUpZope,
         )
-      from waeup.ikoba.app import Institution
+      from waeup.ikoba.app import Company
 
       class MyTestCase(unittest.TestCase):
@@ -148,5 +148,5 @@
 
           def test_jambdata_in_site(self):
-              u = Institution()
+              u = Company()
               self.assertTrue('jambdata' in u.keys())
               return
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_app.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_app.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_app.py	(revision 11954)
@@ -22,29 +22,29 @@
 from zope.component.hooks import setSite
 from zope.interface.verify import verifyClass, verifyObject
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.interfaces import (
-    IInstitution, IJobManager, VIRT_JOBS_CONTAINER_NAME)
+    ICompany, IJobManager, VIRT_JOBS_CONTAINER_NAME)
 from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
 
-class InstitutionTests(FunctionalTestCase):
+class CompanyTests(FunctionalTestCase):
 
     layer = FunctionalLayer
 
     def setUp(self):
-        super(InstitutionTests, self).setUp()
+        super(CompanyTests, self).setUp()
         self.workdir = tempfile.mkdtemp()
-        self.getRootFolder()['app'] = Institution()
+        self.getRootFolder()['app'] = Company()
         self.app = self.getRootFolder()['app']
         return
 
     def tearDown(self):
-        super(InstitutionTests, self).tearDown()
+        super(CompanyTests, self).tearDown()
         shutil.rmtree(self.workdir)
         return
 
     def test_ifaces(self):
-        institution = Institution()
-        assert verifyClass(IInstitution, Institution)
-        assert verifyObject(IInstitution, institution)
+        company = Company()
+        assert verifyClass(ICompany, Company)
+        assert verifyObject(ICompany, company)
         return
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_imagestorage.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_imagestorage.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_imagestorage.py	(revision 11954)
@@ -27,5 +27,5 @@
 from zope.component.hooks import setSite
 from zope.interface.verify import verifyClass, verifyObject
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
 from waeup.ikoba.imagestorage import (
@@ -228,5 +228,5 @@
         self.fd = open(self.samplefile, 'r')
         self.fd2 = open(self.otherfile, 'r')
-        self.getRootFolder()['app'] = Institution()
+        self.getRootFolder()['app'] = Company()
         self.app = self.getRootFolder()['app']
         self.app['datacenter'].setStoragePath(self.workdir)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_maintenance.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_maintenance.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_maintenance.py	(revision 11954)
@@ -9,5 +9,5 @@
 from zope.component.hooks import setSite
 from zope.interface import Interface, implements
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.maintenance import update_catalog
 from waeup.ikoba.testing import FunctionalTestCase, FunctionalLayer
@@ -41,5 +41,5 @@
         super(UpdateCatalogTests, self).setUp()
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_objecthistory.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_objecthistory.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_objecthistory.py	(revision 11954)
@@ -25,5 +25,5 @@
 from zope.security.management import newInteraction, endInteraction
 from zope.security.testing import Principal, Participation
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.interfaces import IObjectHistory, IIkobaObject
 from waeup.ikoba.testing import FunctionalTestCase, FunctionalLayer
@@ -43,5 +43,5 @@
 
         # Prepopulate ZODB
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_smtp.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_smtp.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/tests/test_smtp.py	(revision 11954)
@@ -27,5 +27,5 @@
 from zope.component.hooks import setSite
 from zope.sendmail.interfaces import IMailDelivery
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.interfaces import IMailService
 from waeup.ikoba.smtp import (
@@ -341,5 +341,5 @@
         super(ExternalMailerTests, self).setUp()
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/userscontainer.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/userscontainer.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/userscontainer.py	(revision 11954)
@@ -92,5 +92,5 @@
                     obj= object
                     path = ''
-                    while obj.__class__.__name__ != 'Institution':
+                    while obj.__class__.__name__ != 'Company':
                         path = '%s/' % obj.__name__ + path
                         obj = obj.__parent__
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/batching.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/batching.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/batching.txt	(revision 11954)
@@ -20,5 +20,5 @@
 * accepts a single data type identified by an interface.
 
-* knows about the places inside a site (Institution) where to store,
+* knows about the places inside a site (Company) where to store,
   remove or update the data.
 
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/browser.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/browser.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/browser.py	(revision 11954)
@@ -25,5 +25,5 @@
 from waeup.ikoba.interfaces import IObjectHistory
 
-from waeup.ikoba.interfaces import IInstitution
+from waeup.ikoba.interfaces import ICompany
 
 class ReindexPage(UtilityView, grok.View):
@@ -32,5 +32,5 @@
     Reindexes a catalog. For managers only.
     """
-    grok.context(IInstitution)
+    grok.context(ICompany)
     grok.name('reindex')
     grok.require('waeup.managePortal')
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/helpers.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/helpers.txt	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/helpers.txt	(revision 11954)
@@ -185,5 +185,5 @@
      ... <BLANKLINE>
      ... <body>
-     ... <form action="http://localhost/myinstitution/faculties/TF/add"
+     ... <form action="http://localhost/mycompany/faculties/TF/add"
      ...       method="post" class="edit-form"
      ...       enctype="multipart/form-data">
@@ -194,5 +194,5 @@
      ... """)
      <BLANKLINE>
-     <form action="http://localhost/myinstitution/faculties/TF/add"
+     <form action="http://localhost/mycompany/faculties/TF/add"
            method="post" class="edit-form"
            enctype="multipart/form-data">
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/logger.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/logger.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/logger.py	(revision 11954)
@@ -67,7 +67,7 @@
 
 The datacenter and its storage are created automatically when you
-create a :class:`waeup.ikoba.app.Institution`. This also means that
+create a :class:`waeup.ikoba.app.Company`. This also means that
 logging with the `Logger` mix-in will work only inside so-called sites
-(`Institution` instances put into ZODB are such `sites`).
+(`Company` instances put into ZODB are such `sites`).
 
 Other components in this module help to make everything work.
@@ -386,6 +386,6 @@
     return
 
-from waeup.ikoba.interfaces import IInstitution
-@grok.subscribe(IInstitution, grok.IObjectRemovedEvent)
+from waeup.ikoba.interfaces import ICompany
+@grok.subscribe(ICompany, grok.IObjectRemovedEvent)
 def handle_site_removed(obj, event):
     collector = queryUtility(ILoggerCollector)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_batching.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_batching.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_batching.py	(revision 11954)
@@ -30,5 +30,5 @@
 from zope.component.interfaces import IFactory
 from zope.interface import Interface, implements, verify
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.interfaces import (
     ICSVExporter, IBatchProcessor, IExportJobContainer, IJobManager,
@@ -137,5 +137,5 @@
 
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
@@ -597,5 +597,5 @@
     def test_active_site(self):
         # we get the datafinder if one is installed and site set
-        self.getRootFolder()['app'] = Institution()
+        self.getRootFolder()['app'] = Company()
         finder = getUtility(IExportContainerFinder)
         setSite(self.getRootFolder()['app'])
@@ -606,5 +606,5 @@
     def test_broken_site(self):
         # if the current site has no ExportContainer, we get None
-        self.getRootFolder()['app'] = Institution()
+        self.getRootFolder()['app'] = Company()
         app = self.getRootFolder()['app']
         del app['datacenter'] # datacenter _is_ the export container
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_converters.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_converters.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_converters.py	(revision 11954)
@@ -32,5 +32,5 @@
     Interface, implements, invariant, Invalid, implementedBy, verify)
 
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
 from waeup.ikoba.interfaces import (
@@ -155,5 +155,5 @@
 
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_logger.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_logger.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/utils/tests/test_logger.py	(revision 11954)
@@ -25,5 +25,5 @@
 from zope.component.hooks import setSite, clearSite
 from zope.interface.verify import verifyClass, verifyObject
-from waeup.ikoba.app import Institution
+from waeup.ikoba.app import Company
 from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
 
@@ -49,5 +49,5 @@
         super(LoggersTests, self).setUp()
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         self.dc_root2 = None
@@ -223,5 +223,5 @@
 
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
@@ -281,5 +281,5 @@
         super(LoggerCollectorTests, self).setUp()
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         app['datacenter'].setStoragePath(self.dc_root)
@@ -377,5 +377,5 @@
         super(LogfileChangeTests, self).setUp()
         # Setup a sample site for each test
-        app = Institution()
+        app = Company()
         self.dc_root = tempfile.mkdtemp()
         self.dc_root_new = None
Index: /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/webservices.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/webservices.py	(revision 11953)
+++ /main/waeup.kofa/branches/henrik-regista/src/waeup/ikoba/webservices.py	(revision 11954)
@@ -20,5 +20,5 @@
 from zope.component import getUtility
 from zope.catalog.interfaces import ICatalog
-from waeup.ikoba.interfaces import IInstitution, application_sessions_vocab
+from waeup.ikoba.interfaces import ICompany, application_sessions_vocab
 
 class XMLRPCPermission(grok.Permission):
@@ -34,5 +34,5 @@
     grok.permissions('waeup.xmlrpc',)
 
-class InstitutionXMLRPC(grok.XMLRPC):
+class CompanyXMLRPC(grok.XMLRPC):
     """XMLRPC webservices for Ikoba portals.
 
@@ -40,5 +40,5 @@
     but positional arguments only.
     """
-    grok.context(IInstitution)
+    grok.context(ICompany)
 
     @grok.require('waeup.Public')
Index: in/waeup.kofa/branches/henrik-regista/tools/add_old_id_col.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/tools/add_old_id_col.py	(revision 11953)
+++ 	(revision )
@@ -1,31 +1,0 @@
-"""Add a new column old id with contents from col `student_id`
-"""
-
-###
-### CONFIGURATION
-###
-
-IN_FILE = 'mytry.csv'
-
-# new col name. 'old_id' is expected by fix_import_file.py
-NEW_COL = 'old_id'
-
-###
-### CONFIGURATION - END
-###
-
-
-import csv
-OUT_FILE = '%s_edited.csv' % IN_FILE.split('.')[0]
-reader = csv.DictReader(open(IN_FILE, 'rb'))
-
-for num, row in enumerate(reader):
-    if num == 0:
-        writer = csv.DictWriter(
-            open(OUT_FILE, 'wb'), reader.fieldnames + [NEW_COL,])
-        header = dict([(x, x) for x in writer.fieldnames])
-        writer.writerow(header)
-    row[NEW_COL] = row['student_id']
-    writer.writerow(row)
-
-print "RESULT in ", OUT_FILE
Index: in/waeup.kofa/branches/henrik-regista/tools/copy_media_files.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/tools/copy_media_files.py	(revision 11953)
+++ 	(revision )
@@ -1,140 +1,0 @@
-##
-## This script is called without parameters
-##
-## It copies media files from an old SRP folder over to a Ikoba
-## instance media folder. It does not remove copied folders.
-##
-## Configuration is done below.
-##
-## At end a list of dirs that were copied or are empty is returned.
-##
-## Please note that for changing groups of files/directories, you
-## normally have to be root. This script is therefore normally run with
-## sudo.
-##
-
-## ######################################################################
-## CONFIGURATION
-##
-
-## The folder where all source docs can be found
-#SRC_DIR = "/zope/instances/aaue-images"
-SRC_DIR = "/tmp/migration/src"
-
-## The students folder in Ikoba where files should go to
-#DST_DIR = "/ikoba/aaue/var/datacenter/media/students"
-DST_DIR = "/tmp/migration/dst"
-
-## The Ids of new students to search for in old portal.
-NEW_IDS_CSV = "StudentIds.csv"
-
-## The ids of students that will will get a complete new number, not
-## an updated one. Must contain a mapping of old ids to new ids.
-## If no such update should be performed, please set the constant to None.
-ID_MAP_CSV = None
-ID_MAP_CSV = "id_mapping.csv"
-
-## Permissions to be set on new files/dirs. Set OWNER and/or GROUP to
-## None to leave them unchanged after creation.
-UMASK = 0664
-OWNER = 'uli'
-GROUP = 'nogroup'
-
-##
-## CONFIGURATION END
-## ######################################################################
-
-import csv
-import os
-import shutil
-import sys
-from grp import getgrnam
-from pwd import getpwnam
-
-OWNER_ID = OWNER and getpwnam(OWNER)[2] or -1
-GRP_ID = GROUP and getgrnam(GROUP)[2] or -1
-DIR_UMASK = UMASK | 0111  # directories need extra x-permission
-
-def set_perms(path):
-    # set permissions and ownership for path
-    if os.path.isdir(path):
-        os.chmod(path, DIR_UMASK)
-    else:
-        os.chmod(path, UMASK)
-    os.chown(path, OWNER_ID, GRP_ID)
-    return
-
-def new_folder_name(stud_id):
-    # compute new folder name from stud_id (old stud_ids only)
-    num = int(stud_id[1:])
-    num = num / 10000 * 10
-    return '%05d' % num
-
-def create_path(path):
-    # create path with subdirs, if it does not exist (completely)
-    if os.path.exists(path):
-        return
-    parent = os.path.dirname(path)
-    if not os.path.exists(parent):
-        # create parent first
-        create_path(parent)
-    print "CREATE PATH ", path
-    os.mkdir(path)
-    set_perms(path)
-    return
-
-def copy_file(file_src, file_dst):
-    create_path(os.path.dirname(file_dst))
-    print "COPY FILE: %s -> %s" % (file_src, file_dst)
-    shutil.copyfile(file_src, file_dst)
-    set_perms(file_dst)
-    return
-
-def get_new_old_id_mapping():
-    """Returns a dict mapping from _new_ ids to old (SRP) ids.
-
-    The dict is read from ID_MAP_CSV file. If this var is set to
-    ``None`` an empty dict is returned. The ID_MAP_CSV contains only
-    the student ids of those students, for which the standard method
-    (new_id=CHAR+old_id) does not work.
-    """
-    if ID_MAP_CSV is None:
-        return {}
-    if not os.path.isfile(ID_MAP_CSV):
-        raise IOError(
-            "No such file for mapping new to old ids: %s" % ID_MAP_CSV)
-    result = dict()
-    reader = csv.DictReader(open(ID_MAP_CSV, 'rb'))
-    for row in reader:
-        result[row['new_id']] = row['student_id']
-    return result
-
-# special ids not handled in common way
-new_to_old_map = get_new_old_id_mapping()
-removable_dirs = []
-reader = csv.DictReader(open(NEW_IDS_CSV, 'rb'))
-for row in reader:
-    new_stud_id = row['student_id']
-    stud_id = new_to_old_map.get(new_stud_id[1:], new_stud_id[1:])
-    src_folder = os.path.join(SRC_DIR, stud_id[0], stud_id)
-    dst_folder = os.path.join(
-        DST_DIR, new_folder_name(new_stud_id[1:]), new_stud_id)
-    if not os.path.exists(src_folder):
-        print "No old data for %s. Skipping." % stud_id
-        continue
-    if os.path.exists(dst_folder):
-        print "Destination folder exists already: %s. Skipping" % (dst_folder)
-        continue
-    removable_dirs.append(src_folder)
-    src_files = os.listdir(src_folder)
-    if len(src_files) == 0:
-        print "Empty source folder for %s. Skipping." % stud_id
-        continue
-    for name in src_files:
-        file_src = os.path.join(src_folder, name)
-        file_dst = os.path.join(dst_folder, name.replace(stud_id, new_stud_id))
-        copy_file(file_src, file_dst)
-
-print "DIRS TO REMOVE: "
-for name in removable_dirs:
-    print name
Index: in/waeup.kofa/branches/henrik-regista/tools/fix_import_file.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/tools/fix_import_file.py	(revision 11953)
+++ 	(revision )
@@ -1,569 +1,0 @@
-## $Id$
-## 
-## Copyright (C) 2012 Uli Fouquet & Henrik Bettermann
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-## 
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-## 
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-##
-"""
-Fix exports from old SRP portal and other data sources to make
-them importable by current portal.
-
-Usage:
-
-Change into this directory, set the options below (files are assumed
-to be in the same directory) and then run
-
-  python fix_import_file.py <filename>
-
-Errors/warnings will be displayed on the shell, the output will be put
-into the specified output file.
-
-
-The lgas.py module must be copied into the same folder where this script
-is started.
-"""
-import csv
-import datetime
-import os
-import re
-import sys
-
-try:
-    from lgas import LGAS
-except:
-    print 'ERROR: lgas.py is missing.'
-    sys.exit(1)
-
-def strip(string):
-    string = string.replace('_', '')
-    string = string.replace('/', '')
-    string = string.replace('-', '')
-    string = string.replace(' ', '')
-    string = string.lower()
-    return string
-
-LGAS_inverted_stripped = dict([(strip(i[1]), i[0]) for i in LGAS])
-LGAS_dict = dict(LGAS)
-
-##
-## CONFIGURATION SECTION
-##
-# keys are fieldnames in input file, values are methods of class
-# Converter (see below)
-OPTIONS = {
-    'student_id': 'student_id',
-    'sex': 'gender',
-    'birthday': 'date',
-    'marit_stat': 'marit_stat',
-    'session': 'session',
-    'entry_session': 'session',
-    'current_session': 'session',
-    'session_id': 'session',
-    'entry_mode': 'mode',
-    'reg_state': 'reg_state',
-    'password': 'password',
-    'phone': 'phone',
-    'nationality': 'nationality',
-    'level': 'level',
-    'start_level': 'level',
-    'end_level': 'level',
-    'level_id': 'level',
-    'current_level': 'level',
-    'semester': 'semester',
-    'application_category': 'application_category',
-    'lga': 'lga',
-    'order_id': 'no_int',
-    'uniben': 'former',
-    'nysc_year': 'year',
-    'alr_date': 'date',
-    'fst_sit_date': 'date',
-    'scd_sit_date': 'date',
-    'emp_start': 'date',
-    'emp_end': 'date',
-    'emp_start2': 'date',
-    'emp_end2': 'date',
-    'fst_sit_results': 'result',
-    'scd_sit_results': 'result',
-    'alr_results': 'result',
-    'email': 'email',
-    'fst_sit_type': 'sittype',
-    'scd_sit_type': 'sittype',
-    'resp_pay_reference': 'no_int',
-    'type': 'company',
-    'date': 'date',
-    'core_or_elective': 'bool',
-    'category': 'p_category',
-    'reg_transition': 'reg_state',  # we completely change this column,
-                                    # since reg_state import is usually intended
-    'transition': 'reg_transition',
-    'payment_date': 'date',
-    'validation_date': 'date',
-    'resp_approved_amount': 'amount',
-    'amount': 'amount',
-    'amount_auth': 'amount',
-    'surcharge': 'amount'
-    }
-
-# Mapping input file colnames --> output file colnames
-COLNAME_MAPPING = {
-    # base data
-    'id': 'student_id',
-    'reg_state': 'state',
-    'reg_transition': 'state',
-    'jamb_reg_no': 'reg_number',
-    'matric_no': 'matric_number',
-    'birthday': 'date_of_birth',
-    'clr_ac_pin': 'clr_code',
-    # clearance
-    'hq_grade': 'hq_degree',
-    'uniben': 'former_matric',
-    'hq_type2': 'hq2_type',
-    'hq_grade2': 'hq2_degree',
-    'hq_school2': 'hq2_school',
-    'hq_matric_no2': 'hq2_matric_no',
-    'hq_session2': 'hq2_session',
-    'hq_disc2': 'hq2_disc',
-    'emp': 'employer',
-    'emp2': 'employer2',
-    'emp_position2': 'emp2_position',
-    'emp_start2': 'emp2_start',
-    'emp_end2': 'emp2_end',
-    'emp_reason2': 'emp2_reason',
-    # study course
-    'study_course': 'certificate',
-    # study level
-    'session': 'level_session',
-    'verdict': 'level_verdict',
-    # course ticket
-    'level_id': 'level',
-    'core_or_elective': 'mandatory',
-    # payment ticket
-    'order_id': 'p_id',
-    'status': 'p_state',
-    'category': 'p_category',
-    'resp_pay_reference': 'r_pay_reference',
-    'resp_desc': 'r_desc',
-    'resp_approved_amount': 'r_amount_approved',
-    'item': 'p_item',
-    'amount': 'amount_auth',
-    'resp_card_num': 'r_card_num',
-    'resp_code': 'r_code',
-    'date': 'creation_date',
-    'surcharge': 'surcharge_1',
-    'session_id': 'p_session',
-    'type': 'r_company',
-    'old_id': 'old_id',
-    }
-
-# Mapping input state --> output state
-REGSTATE_MAPPING = {
-    'student_created': 'created',
-    'admitted': 'admitted',
-    'objection_raised': 'clearance started',
-    'clearance_pin_entered': 'clearance started',
-    'clearance_requested': 'clearance requested',
-    'cleared_and_validated': 'cleared',
-    'school_fee_paid': 'school fee paid',
-    'returning': 'returning',
-    'courses_registered': 'courses registered',
-    'courses_validated': 'courses validated',
-    'admit': 'admitted',
-    'return': 'returning'
-    }
-
-# Mapping of special cases, where new id is not deductible from old id
-# Set to `None`, if no such special cases should be considered.
-ID_MAP_CSV = None
-ID_MAP_CSV = "id_mapping.csv"
-
-##
-## END OF CONFIG
-##
-
-# Look for the first sequence of numbers
-RE_PHONE = re.compile('[^\d]*(\d*)[^\d]*')
-
-def get_id_mapping():
-    """Returns a dict mapping from old (SRP) ids to new ids.
-
-    The dict is read from ID_MAP_CSV file. If this var is set to
-    ``None`` an empty dict is returned. The ID_MAP_CSV contains only
-    the student ids of those students, for which the standard method
-    (new_id=CHAR+old_id) does not work.
-    """
-    if ID_MAP_CSV is None:
-        return {}
-    if not os.path.isfile(ID_MAP_CSV):
-        raise IOError(
-            "No such file for mapping old to new ids: %s" % ID_MAP_CSV)
-    result = dict()
-    reader = csv.DictReader(open(ID_MAP_CSV, 'rb'))
-    for row in reader:
-        result[row['student_id']] = row['new_id']
-    return result
-
-
-def convert_fieldnames(fieldnames):
-    """Replace input fieldnames by fieldnames of COLNAME_MAPPING.
-    """
-    # Remove whitespaces
-    header = dict([(name, name.strip()) for name in fieldnames])
-    for in_name, out_name in COLNAME_MAPPING.items():
-        if in_name not in header.values():
-            continue
-        # Inverse dictionary lookup
-        key = [key for key,value in header.items() if value==in_name][0]
-        header[key] = out_name
-    return header
-
-class Converters():
-    """Converters to turn old-style values into new ones.
-    """
-
-    old_new_id_map = get_id_mapping()
-
-    @classmethod
-    def student_id(cls, value, row):
-        """ 'A123456' --> 'EA123456'
-        """
-        value = cls.old_new_id_map.get(value, value)
-        if len(value) == 7:
-            return 'B' + value
-        return value
-
-    @classmethod
-    def reg_state(self, value, row):
-        """ 'courses_validated' --> 'courses validated'
-        """
-        return REGSTATE_MAPPING.get(value,value)
-
-    @classmethod
-    def reg_transition(self, value, row):
-        if value == "admitted":
-            return "admit"
-        if value == "returning":
-            return "return"
-        return value
-
-    @classmethod
-    def level(self, value, row):
-        """ '000' --> '10'
-        '800' --> '999' if pg student
-        """
-        try:
-            number = int(value)
-        except ValueError:
-            return 9999
-        if number == 0:
-            return 10
-        if row.get('entry_mode') and row.get('entry_mode').startswith('pg'):
-            return 999
-        return number
-
-    @classmethod
-    def semester(self, value, row):
-        """ '0' --> '9'
-        """
-        try:
-            number = int(value)
-        except ValueError:
-            return 9999
-        if number == 0:
-            return 9
-        return number
-
-    @classmethod
-    def application_category(self, value, row):
-        """ '' --> 'no'
-        """
-        if value == '':
-            return 'no'
-        return value
-
-    @classmethod
-    def lga(self, value, row):
-        """ Remove apostrophe
-        """
-        if value == 'akwa_ibom_uru_offong_oruko':
-            return 'akwa_ibom_urue-offong-oruko'
-        if value == 'edo_ohionmwon':
-            return 'edo_orhionmwon'
-
-        if value == 'nassarawa_nassarawa':
-            return 'nassarawa_nassawara'
-
-        if value == 'kogi_mopa-muro-mopi':
-            return 'kogi_mopa-muro'
-
-        if value == 'delta_osimili-north':
-            return 'delta_oshielli-north'
-
-        if value == 'delta_osimili':
-            return 'delta_oshimili'
-
-        if value == 'delta_osimili-south':
-            return 'delta_oshimili-south'
-        try:
-            value = value.replace("'","")
-        except:
-            return ''
-        lower = value.lower()
-        if lower in LGAS_dict.keys():
-            return lower
-        # If real names are given, let's see if a similar value
-        # in LGAS exist.
-        value = value.replace('_',' ')
-        value = LGAS_inverted_stripped.get(strip(lower), value)
-        return value
-
-
-    @classmethod
-    def session(self, value, row):
-        """ '08' --> '2008'
-        '2008/2009' --> '2008'
-        """
-        if '/' in value:
-            numbers = value.split('/')
-            number = int(numbers[0])
-            if number in range(2000,2015):
-                return number
-            else:
-                return 9999
-        try:
-            number = int(value)
-        except ValueError:
-            return 9999
-        if number < 14:
-            return number + 2000
-        elif number in range(2000,2015):
-            return number
-        else:
-            return 9999
-
-    @classmethod
-    def former(self, value, row):
-        """ True --> yes
-        '2008/2009' --> '2008'
-        """
-        if value == 'True':
-            return 'yes'
-        return
-
-    @classmethod
-    def bool(self, value, row):
-        """ True --> 1
-        """
-        if value in ('TRUE', 'True'):
-            return '1'
-        elif value in ('FALSE', 'False'):
-            return '0'
-        return
-
-    @classmethod
-    def year(self, value, row):
-        """ '0' --> ''
-        """
-        if value == '0':
-            return
-        if value == 'None':
-            return
-        return value
-
-
-    @classmethod
-    def marit_stat(self, value, row):
-        """ 'True'/'False' --> 'married'/'unmarried'
-        """
-        if value in ('True','married'):
-            value = 'married'
-        elif value in ('False','unmarried'):
-            value = 'unmarried'
-        else:
-            value = ''
-        return value
-
-    @classmethod
-    def gender(self, value, row):
-        """ 'True'/'False' --> 'f'/'m'
-        """
-        if value.strip() in ('F', 'True','f'):
-            value = 'f'
-        elif value.strip() in ('M', 'False','m'):
-            value = 'm'
-        else:
-            value = ''
-        return value
-
-    @classmethod
-    def date(self, value, row):
-        """ 'yyyy/mm/dd' --> 'yyyy-mm-dd'
-        """
-        if value == "None":
-            value = ""
-        elif value == "":
-            value = ""
-        else:
-            value = value.replace('/', '-')
-            # We add the hash symbol to avoid automatic date transformation
-            # in Excel and Calc for further processing
-            value += '#'
-        return value
-
-    @classmethod
-    def no_int(self, value, row):
-        """ Add hash and skip numbers starting with 999999
-        """
-        # We add the hash symbol to avoid automatic number transformation
-        # in Excel and Calc for further processing
-        try:
-            intvalue = int(value)
-            value += '#'
-        except:
-            pass
-        if value.startswith('999999'):
-            return
-        return value
-
-    @classmethod
-    def amount(self, value, row):
-        """ Amounts must be integers
-        """
-        try:
-            return float(value)
-        except:
-            return
-
-    @classmethod
-    def mode(self, value, row):
-        if value == "transfer_fulltime":
-            return "transfer_ft"
-        if value == "ume_ft":
-            return "utme_ft"
-        return value
-
-    @classmethod
-    def password(self, value, row):
-        if value == "not set":
-            return ""
-        return value
-
-    @classmethod
-    def nationality(self, value, row):
-        if value in ('nigeria', 'Nigeria'):
-            return "NG"
-        if value in ('niger', 'Niger'):
-            return "NE"
-        return value
-
-    @classmethod
-    def sittype(self, value, row):
-        if value == "nabtec":
-            return "nabteb"
-        return value
-
-    @classmethod
-    def company(self, value, row):
-        if value == "online":
-            return "interswitch"
-        return value
-
-    @classmethod
-    def p_category(self, value, row):
-        if value == "acceptance":
-            return "clearance"
-        return value
-
-    @classmethod
-    def email(self, value, row):
-        return value.strip()
-
-    @classmethod
-    def phone(self, value, row):
-        """ '<num-seq1>-<num-seq2> asd' -> '--<num-seq1><num-seq2>'
-
-        Dashes and slashes are removed before looking for sequences
-        of numbers.
-        """
-        if not value:
-            return
-        if len(value) < 5:
-            return
-        value = value.strip('#')
-        value = value.replace('-', '')
-        value = value.replace('/', '')
-        match = RE_PHONE.match(value)
-        phone = match.groups()[0]
-        if value.startswith('234'):
-            value = '+' + value[:3] + '-' + value[3:]
-        elif value.startswith('+234'):
-            value = value[:4] + '-' + value[4:]
-        else:
-            value = '-%s' % phone
-        return value + '#'
-
-    @classmethod
-    def result(self, value, row):
-        try:
-            liste = eval(value)
-        except:
-            return
-        if isinstance(liste,list):
-            return [(i[0].lower(),i[1]) for i in liste]
-        return
-
-
-def main():
-    input_file = '%s' % sys.argv[1]
-    output_file = '%s_edited.csv' % sys.argv[1].split('.')[0]
-    reader = csv.DictReader(open(input_file, 'rb'))
-    writer = None
-
-    for num, row in enumerate(reader):
-        if num == 0:
-            writer = csv.DictWriter(open(output_file, 'wb'), reader.fieldnames)
-            print "FIELDS: "
-            for x, y in enumerate(reader.fieldnames):
-                print x, y
-            header = convert_fieldnames(reader.fieldnames)
-            writer.writerow(header)
-        #if row.get('reg_state') == 'student_created':
-        #    # We do not reimport student records which have never been accessed.
-        #    continue
-        if row.get('status') == 'started':
-            # We do not reimport started payments.
-            continue
-        for key, value in row.items():
-            # Remove unwanted whitespaces.
-            row[key] = row[key].strip()
-            if not key in OPTIONS.keys():
-                continue
-            conv_name = OPTIONS[key]
-            converter = getattr(Converters, conv_name, None)
-            if converter is None:
-                print "WARNING: cannot find converter %s" % conv_name
-                continue
-            row[key] = converter(row[key], row)
-        try:
-            writer.writerow(row)
-        except:
-            print row['student_id']
-
-    print "Output written to %s" % output_file
-
-
-if __name__ == '__main__':
-    if len(sys.argv) != 2:
-        print 'Usage: %s <filename>' % __file__
-        sys.exit(1)
-    main()
Index: in/waeup.kofa/branches/henrik-regista/tools/reload_fpm.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/tools/reload_fpm.py	(revision 11953)
+++ 	(revision )
@@ -1,104 +1,0 @@
-##
-## This script is called without parameters.
-##
-## It moves fingerprint minutiae from a reload folder to their right place in
-## the media folder.
-##
-## Configuration is done below.
-##
-##
-## Please note that for changing groups of files/directories, you
-## normally have to be root. This script is therefore normally run with
-## sudo.
-##
-
-## ######################################################################
-## CONFIGURATION
-##
-
-## The folder where all source docs can be found (can be any folder)
-#SRC_DIR = "/ikoba/uniben/var/datacenter/media/students/reload"
-SRC_DIR = "/ikoba/uniben_fpm"
-
-## The students folder in Ikoba where files should go to
-DST_DIR = "/ikoba/uniben/var/datacenter/media/students"
-
-
-## Permissions to be set on new files/dirs. Set OWNER and/or GROUP to
-## None to leave them unchanged after creation.
-UMASK = 0664
-OWNER = 'ikoba'
-GROUP = 'ikoba'
-
-##
-## CONFIGURATION END
-## ######################################################################
-
-import csv
-import os
-import shutil
-import sys
-from grp import getgrnam
-from pwd import getpwnam
-
-OWNER_ID = OWNER and getpwnam(OWNER)[2] or -1
-GRP_ID = GROUP and getgrnam(GROUP)[2] or -1
-DIR_UMASK = UMASK | 0111  # directories need extra x-permission
-
-def set_perms(path):
-    # set permissions and ownership for path
-    if os.path.isdir(path):
-        os.chmod(path, DIR_UMASK)
-    else:
-        os.chmod(path, UMASK)
-    os.chown(path, OWNER_ID, GRP_ID)
-    return
-
-def final_subfolder(stud_id):
-    # compute new folder name from stud_id
-    num = int(stud_id[1:])
-    num = num / 1000
-    return '%05d' % num
-
-def copy_file(file_src, file_dst):
-    print "COPY FILE: %s -> %s" % (file_src, file_dst)
-    shutil.copyfile(file_src, file_dst)
-    set_perms(file_dst)
-    return
-
-def create_path(path):
-    # create path with subdirs, if it does not exist (completely)
-    if os.path.exists(path):
-        return
-    parent = os.path.dirname(path)
-    if not os.path.exists(parent):
-        # create parent first
-        create_path(parent)
-    print "CREATE PATH ", path
-    os.mkdir(path)
-    set_perms(path)
-    return
-
-if not os.path.exists(SRC_DIR):
-    sys.exit("No source folder %s. Skipping." % SRC_DIR)
-
-if len(os.listdir(SRC_DIR)) == 0:
-    sys.exit("Empty source folder for %s. Skipping." % SRC_DIR)
-
-for stud_id in os.listdir(SRC_DIR):
-    subfolder_name = final_subfolder(stud_id)
-    dst_folder = os.path.join(DST_DIR, subfolder_name, stud_id)
-    if not os.path.exists(dst_folder):
-        #print "Destination folder does not exist: %s. Skipping" % (dst_folder)
-        #continue
-        create_path(dst_folder)
-
-    src_subfolder = os.path.join(SRC_DIR, stud_id)
-    for fingernumber in os.listdir(src_subfolder):
-        src_file = os.path.join(SRC_DIR, src_subfolder, fingernumber)
-        dst_file = os.path.join(DST_DIR, subfolder_name, stud_id,
-            'finger%s_%s.fpm' % (fingernumber, stud_id))
-        if os.path.exists(dst_file):
-            print "Destination file exists: %s. Skipping" % (dst_file)
-            continue
-        copy_file(src_file, dst_file)
Index: in/waeup.kofa/branches/henrik-regista/tools/reload_portraits.py
===================================================================
--- /main/waeup.kofa/branches/henrik-regista/tools/reload_portraits.py	(revision 11953)
+++ 	(revision )
@@ -1,130 +1,0 @@
-##
-## This script is called without parameters.
-##
-## It moves passport images from a reload folder to their right place in
-## the media folder.
-##
-## Configuration is done below.
-##
-##
-## Please note that for changing groups of files/directories, you
-## normally have to be root. This script is therefore normally run with
-## sudo.
-##
-
-## ######################################################################
-## CONFIGURATION
-##
-
-## The folder where all source docs can be found (can be any folder)
-#SRC_DIR = "/ikoba/uniben/var/datacenter/media/students/reload"
-SRC_DIR = "/ikoba/uniben_passport_reload"
-
-## The students folder in Ikoba where files should go to
-DST_DIR = "/ikoba/uniben/var/datacenter/media/students"
-
-
-## Permissions to be set on new files/dirs. Set OWNER and/or GROUP to
-## None to leave them unchanged after creation.
-UMASK = 0664
-OWNER = 'ikoba'
-GROUP = 'ikoba'
-LETTER = 'B'
-
-##
-## CONFIGURATION END
-## ######################################################################
-
-import csv
-import os
-import shutil
-import sys
-from grp import getgrnam
-from pwd import getpwnam
-
-OWNER_ID = OWNER and getpwnam(OWNER)[2] or -1
-GRP_ID = GROUP and getgrnam(GROUP)[2] or -1
-DIR_UMASK = UMASK | 0111  # directories need extra x-permission
-
-def set_perms(path):
-    # set permissions and ownership for path
-    if os.path.isdir(path):
-        os.chmod(path, DIR_UMASK)
-    else:
-        os.chmod(path, UMASK)
-    os.chown(path, OWNER_ID, GRP_ID)
-    return
-
-def new_and_old_id(filename):
-    try:
-        stud_id, ext = filename.split('.')
-    except:
-        return None, None
-    if ext != 'jpg':
-        return None, None
-    if len(stud_id) == 7:
-        return LETTER + stud_id, stud_id
-    if len(stud_id) == 8:
-        return stud_id, stud_id
-    return None, None
-
-def final_subfolder(stud_id):
-    # compute new folder name from stud_id
-    try:
-        num = int(stud_id[1:])
-        if len(stud_id) == 7:
-            # old stud_id
-            num = num / 10000 * 10
-        if len(stud_id) == 8:
-            # new stud_id
-            num = num / 1000
-    except ValueError:
-        # new old stud_ids
-        num = int(stud_id[2:])
-        num = num / 10000 * 10
-    return '%05d' % num
-
-def copy_file(file_src, file_dst):
-    print "COPY FILE: %s -> %s" % (file_src, file_dst)
-    shutil.copyfile(file_src, file_dst)
-    set_perms(file_dst)
-    return
-
-def create_path(path):
-    # create path with subdirs, if it does not exist (completely)
-    if os.path.exists(path):
-        return
-    parent = os.path.dirname(path)
-    if not os.path.exists(parent):
-        # create parent first
-        create_path(parent)
-    print "CREATE PATH ", path
-    os.mkdir(path)
-    set_perms(path)
-    return
-
-if not os.path.exists(SRC_DIR):
-    sys.exit("No source folder %s. Skipping." % SRC_DIR)
-
-if len(os.listdir(SRC_DIR)) == 0:
-    sys.exit("Empty source folder for %s. Skipping." % SRC_DIR)
-
-for filename in os.listdir(SRC_DIR):
-    new_stud_id, stud_id = new_and_old_id(filename)
-    if not new_stud_id:
-        print "Wrong filename: %s" % filename
-        continue
-    subfolder = final_subfolder(stud_id)
-    dst_folder = os.path.join(DST_DIR, subfolder, new_stud_id)
-    if not os.path.exists(dst_folder):
-        #print "Destination folder does not exist: %s. Skipping" % (dst_folder)
-        #continue
-        create_path(dst_folder)
-    dst_file = os.path.join(DST_DIR, subfolder, new_stud_id,
-        'passport_%s.jpg' % new_stud_id)
-    if os.path.exists(dst_file):
-        print "Destination file exists: %s. Skipping" % (dst_file)
-        continue
-    file_src = os.path.join(SRC_DIR, filename)
-    file_dst = os.path.join(dst_file)
-    copy_file(file_src, file_dst)
