Index: main/waeup.sirp/trunk/src/waeup/sirp/app.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/app.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/app.py	(revision 6907)
@@ -14,4 +14,5 @@
 from waeup.sirp.utils.logger import Logger
 from waeup.sirp.utils.helpers import attrs_to_fields
+from waeup.sirp.configuration import ConfigurationContainer
 
 class University(grok.Application, grok.Container, Logger):
@@ -44,4 +45,5 @@
         self['images'] = ImageStorage()
         self['students'] = StudentsContainer()
+        self['configuration'] = ConfigurationContainer()
         self._createPlugins()
 
Index: main/waeup.sirp/trunk/src/waeup/sirp/app.txt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/app.txt	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/app.txt	(revision 6907)
@@ -55,5 +55,5 @@
     >>> from waeup.sirp.app import University
     >>> myuniversity = University()
-    >>> myuniversity.name
+    >>> myuniversity['configuration'].name
     u'Sample University'
 
@@ -69,4 +69,7 @@
   >>> myuniversity['datacenter']
   <waeup.sirp.datacenter.DataCenter object at 0x...>
+
+  >>> myuniversity['configuration']
+  <waeup.sirp.configuration.ConfigurationContainer object at 0x...>
 
 We can export universities. For this we lookup an appropriate exporter
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/breadcrumbs.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/breadcrumbs.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/breadcrumbs.py	(revision 6907)
@@ -6,4 +6,5 @@
 from zope.publisher.browser import TestRequest
 
+from waeup.sirp.interfaces import IConfigurationContainer
 from waeup.sirp.browser import interfaces
 from waeup.sirp.browser.interfaces import (IBreadcrumb, IBreadcrumbIgnorable,
@@ -100,4 +101,11 @@
     viewname = 'administration'
 
+class ConfigurationContainerBreadcrumb(Breadcrumb):
+    """A breadcrumb for the configuration container.
+    """
+    grok.context(IConfigurationContainer)
+    title = u'Portal Configuration'
+    parent_viewname = 'administration'
+
 class UserContainerBreadcrumb(Breadcrumb):
     """A breadcrumb for user containers.
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt	(revision 6907)
@@ -62,10 +62,10 @@
   >>> browser.handleErrors = False
 
-We can then get an edit view of a university::
-
-  >>> browser.open('http://localhost/myuniversity/manage')
-  >>> print browser.contents
-  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
-  ...<form action="http://localhost/myuniversity/manage"
+We can then get an edit view of the configuration container::
+
+  >>> browser.open('http://localhost/myuniversity/configuration')
+  >>> print browser.contents
+  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
+  ...<form action="http://localhost/myuniversity/configuration/@@index"
   ...
 
@@ -88,18 +88,5 @@
   ...
 
-  >>> browser.getControl("Cancel").click()
-  >>> print browser.contents
-  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
-  ...<li class="message">Action cancelled.</li>
-  ...
-
-  >>> browser.open('http://localhost/myuniversity/manage')
-  >>> browser.getControl("Save and return").click()
-  >>> print browser.contents
-  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
-  ...<li class="message">Settings have been saved.</li>
-  ...
-
-  >>> browser.open('http://localhost/myuniversity/manage')
+  >>> browser.open('http://localhost/myuniversity/configuration')
   >>> browser.getControl("Update plugins").click()
   >>> print browser.contents
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/layout.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/layout.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/layout.py	(revision 6907)
@@ -133,5 +133,5 @@
 
     def getAppTitle(self):
-        return getattr(grok.getSite(), 'name', u'Sample University')
+        return getattr(grok.getSite()['configuration'], 'name', u'Sample University')
 
     def isAuthenticated(self):
@@ -184,5 +184,5 @@
         """
         mode('minified')
-        theme_name = getattr(grok.getSite(), 'skin', '')
+        theme_name = getattr(grok.getSite()['configuration'], 'skin', '')
         theme = queryUtility(ITheme, name=theme_name,
                              default=self.default_theme)
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 6907)
@@ -34,5 +34,5 @@
     IWAeUPObject, IUserContainer, IUserAccount, IDataCenter,
     IWAeUPXMLImporter, IWAeUPXMLExporter, IBatchProcessor,
-    ILocalRolesAssignable, DuplicationError)
+    ILocalRolesAssignable, DuplicationError, IConfigurationContainer)
 from waeup.sirp.permissions import get_users_with_local_roles, getRoles
 from waeup.sirp.university.catalog import search
@@ -153,7 +153,4 @@
     pnav = 0
 
-    form_fields = grok.AutoFields(IUniversity)
-    form_fields['frontpage'].custom_widget = ReSTDisplayWidget
-
     @property
     def title(self):
@@ -162,40 +159,12 @@
     @property
     def label(self):
-        return self.context.title
-
-class UniversityManageFormPage(WAeUPEditFormPage):
-    """Manage the basic properties of a `University` instance.
-    """
-    form_fields = grok.AutoFields(IUniversity)
-    grok.context(IUniversity)
-    grok.require('waeup.manageUniversity')
-    title = u'Edit portal settings'
-    pnav = 0
-    grok.name('manage')
-
-    @grok.action('Save')
-    def save(self, **data):
-        self.applyData(self.context, **data)
-        self.flash('Settings have been saved.')
-        return
-
-    @grok.action('Save and return')
-    def saveAndReturn(self, **data):
-        self.applyData(self.context, **data)
-        self.redirect(self.url(self.context))
-        self.flash('Settings have been saved.')
-        return
-    @grok.action('Cancel', validator=NullValidator)
-    def cancel(self, **data):
-        self.flash('Action cancelled.')
-        self.redirect(self.url(self.context))
-        return
-
-    @grok.action('Update plugins', validator=NullValidator)
-    def updatePlugins(self, **data):
-        self.context.updatePlugins()
-        self.flash('Plugins were updated. See log file for details.')
-        self.redirect(self.url(self.context))
-        return
+        return self.context['configuration'].title
+
+    @property
+    def frontpage(self):
+        view = ConfigurationContainerDisplayFormPage(
+            self.context['configuration'],self.request)
+        view.setUpWidgets()
+        return view.widgets['frontpage']()
 
 class AdministrationPage(WAeUPPage):
@@ -430,4 +399,50 @@
         self.flash('Your message has been sent.')
         return
+
+
+#
+# Configuration pages...
+#
+
+class ConfigurationContainerDisplayFormPage(WAeUPDisplayFormPage):
+    """View page of the configuration container.
+    """
+    grok.require('waeup.managePortalConfiguration')
+    grok.name('view')
+    grok.context(IConfigurationContainer)
+    pnav = 0
+    label = u'View portal configuration'
+    title = u'Portal Configuration'
+    form_fields = grok.AutoFields(IConfigurationContainer)
+    form_fields['frontpage'].custom_widget = ReSTDisplayWidget
+
+    #def renderFrontpage(self):
+    #    self.setUpWidgets()
+    #    return widgets['frontpage']
+
+class ConfigurationContainerManageFormPage(WAeUPEditFormPage):
+    """Manage page of the configuration container.
+    """
+    grok.require('waeup.managePortalConfiguration')
+    grok.name('index')
+    grok.context(IConfigurationContainer)
+    pnav = 0
+    label = u'Edit portal configuration'
+    title = u'Portal Configuration'
+
+    form_fields = grok.AutoFields(IConfigurationContainer)
+
+    @grok.action('Save')
+    def save(self, **data):
+        self.applyData(self.context, **data)
+        self.flash('Settings have been saved.')
+        return
+
+    @grok.action('Update plugins', validator=NullValidator)
+    def updatePlugins(self, **data):
+        grok.getSite().updatePlugins()
+        self.flash('Plugins were updated. See log file for details.')
+        return
+
 
 #
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/administrationpage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/administrationpage.pt	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/administrationpage.pt	(revision 6907)
@@ -1,3 +1,3 @@
-<h3>Administration</h3>
+<h2>Administration</h2>
 
 <p>
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/universitypage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/universitypage.pt	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/universitypage.pt	(revision 6907)
@@ -1,3 +1,3 @@
 <h2 tal:content="view/label">Title</h2>
 
-<span tal:replace="structure view/widgets/frontpage">Frontpage</span>
+<span tal:replace="structure view/frontpage">Frontpage</span>
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py	(revision 6907)
@@ -301,8 +301,8 @@
     # This link is only displayed, if the user is
     # allowed to use it!
-    grok.require('waeup.managePortalSettings')
-
-    link = '@@manage'
-    text = u'Portal Settings'
+    grok.require('waeup.managePortalConfiguration')
+
+    link = 'configuration'
+    text = u'Portal Configuration'
     
     def render(self):
@@ -332,10 +332,10 @@
 # Manage ("Edit settings") actions...
 #
-class ManageUniversityActionButton(ManageActionButton):
-    """ 'Edit' button for University instances.
-    """
-    grok.context(IUniversity)
-    grok.view(UniversityPage)
-    text = 'Edit portal settings'
+#class ManageUniversityActionButton(ManageActionButton):
+#    """ 'Edit' button for University instances.
+#    """
+#    grok.context(IUniversity)
+#    grok.view(UniversityPage)
+#    text = 'Edit portal settings'
     
 #class ManageFacultiesActionButton(ManageActionButton):
@@ -618,13 +618,13 @@
         return self.view.url(self.context[self.target_viewname])
 
-class AdminTaskPortalSettings(AdminTask):
+class AdminTaskPortalConfiguration(AdminTask):
     """Entry on administration page that link to portal settings.
     """
     grok.order(1)
-    grok.require('waeup.managePortalSettings')
-
-    link_title = 'Portal Settings'
+    grok.require('waeup.managePortalConfiguration')
+
+    link_title = 'Portal Configuration'
     def link_target(self):
-        return self.view.url(self.view.context, '@@manage')
+        return self.view.url(self.view.context, 'configuration')
 
 class AdminTaskUsers(AdminTask):
Index: main/waeup.sirp/trunk/src/waeup/sirp/configuration.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/configuration.py	(revision 6907)
+++ main/waeup.sirp/trunk/src/waeup/sirp/configuration.py	(revision 6907)
@@ -0,0 +1,40 @@
+## Copyright (C) 2011 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
+##
+"""
+Containers for session configuration objects.
+"""
+import grok
+from waeup.sirp.interfaces import (
+    ISessionConfiguration, IConfigurationContainer)
+from waeup.sirp.utils.helpers import attrs_to_fields
+
+class ConfigurationContainer(grok.Container):
+    """
+    The node containing the session configuration models
+    """
+
+    grok.implements(IConfigurationContainer)
+
+    def addSessionConfiguration(self, sessionconfiguration):
+        """Add a session configuration object.
+        """
+        if not ISessionConfiguration.providedBy(sessionconfiguration):
+            raise TypeError(
+                'StudentsContainers contain only IStudent instances')
+        self[sessionconfiguration.year] = sessionconfiguration
+        return
+
+ConfigurationContainer = attrs_to_fields(ConfigurationContainer)
Index: main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py	(revision 6907)
@@ -67,29 +67,4 @@
     """Representation of a university.
     """
-    name = schema.TextLine(
-        title = u'Name of University',
-        default = u'Sample University',
-        required = True,
-        )
-
-    title = schema.TextLine(
-        title = u'Title of frontpage',
-        default = u'Welcome to the Student Information and Registration ' +
-                  u'Portal of Sample University',
-        required = False,
-        )
-
-    skin = schema.Choice(
-        title = u'Skin',
-        default = u'waeuptheme-gray1.css',
-        vocabulary = 'waeup.sirp.browser.theming.ThemesVocabulary',
-        required = True,
-        )
-
-    frontpage = schema.Text(
-        title = u'Content in reST format',
-        required = False,
-        default = default_frontpage,
-        )
 
 
@@ -210,4 +185,38 @@
         """
 
+class IConfigurationContainer(IWAeUPObject):
+    """A container for session configuration objects.
+    """
+
+    name = schema.TextLine(
+        title = u'Name of University',
+        default = u'Sample University',
+        required = True,
+        )
+
+    title = schema.TextLine(
+        title = u'Title of frontpage',
+        default = u'Welcome to the Student Information and Registration ' +
+                  u'Portal of Sample University',
+        required = False,
+        )
+
+    skin = schema.Choice(
+        title = u'Skin',
+        default = u'gray waeup theme',
+        vocabulary = 'waeup.sirp.browser.theming.ThemesVocabulary',
+        required = True,
+        )
+
+    frontpage = schema.Text(
+        title = u'Content in reST format',
+        required = False,
+        default = default_frontpage,
+        )
+
+class ISessionConfiguration(IWAeUPObject):
+    """A container for session configuration objects.
+    """
+
 class IDataCenter(IWAeUPObject):
     """A data center.
Index: main/waeup.sirp/trunk/src/waeup/sirp/permissions.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/permissions.py	(revision 6906)
+++ main/waeup.sirp/trunk/src/waeup/sirp/permissions.py	(revision 6907)
@@ -34,6 +34,6 @@
     grok.name('waeup.manageDataCenter')
 
-class ManagePortalSettings(grok.Permission):
-    grok.name('waeup.managePortalSettings')
+class ManagePortalConfiguration(grok.Permission):
+    grok.name('waeup.managePortalConfiguration')
 
 # Local Roles
@@ -67,4 +67,5 @@
                      'waeup.View', 'waeup.Public','waeup.manageACBatches',
                      'waeup.manageDataCenter','waeup.managePortalSettings',
+                     'waeup.managePortalConfiguration',
                      'waeup.manageApplications', 'waeup.handleApplication',
                      'waeup.viewStudents', 'waeup.manageStudents')
