Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 6915)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 6916)
@@ -34,5 +34,6 @@
     IWAeUPObject, IUserContainer, IUserAccount, IDataCenter,
     IWAeUPXMLImporter, IWAeUPXMLExporter, IBatchProcessor,
-    ILocalRolesAssignable, DuplicationError, IConfigurationContainer)
+    ILocalRolesAssignable, DuplicationError, IConfigurationContainer,
+    ISessionConfiguration, ISessionConfigurationAdd, academic_sessions_vocab)
 from waeup.sirp.permissions import get_users_with_local_roles, getRoles
 from waeup.sirp.university.catalog import search
@@ -417,19 +418,26 @@
     form_fields['frontpage'].custom_widget = ReSTDisplayWidget
 
-    #def renderFrontpage(self):
-    #    self.setUpWidgets()
-    #    return widgets['frontpage']
-
 class ConfigurationContainerManageFormPage(WAeUPEditFormPage):
-    """Manage page of the configuration container.
+    """Manage page of the configuration container. We always use the
+    manage page in the UI not the view page, thus we use the index name here.
     """
     grok.require('waeup.managePortalConfiguration')
     grok.name('index')
     grok.context(IConfigurationContainer)
+    grok.template('configurationmanagepage')
     pnav = 0
     label = u'Edit portal configuration'
     title = u'Portal Configuration'
+    taboneactions = ['Save', 'Update plugins']
+    tabtwoactions = [
+        'Add session configuration',
+        'Remove selected sesson configurations']
 
     form_fields = grok.AutoFields(IConfigurationContainer)
+
+    def update(self):
+        tabs.need()
+        datatable.need()
+        return super(ConfigurationContainerManageFormPage, self).update()
 
     @grok.action('Save')
@@ -439,4 +447,43 @@
         return
 
+    @grok.action('Add session configuration', validator=NullValidator)
+    def addSubunit(self, **data):
+        self.redirect(self.url(self.context, '@@add'))
+        return
+
+    def getSessionConfigurations(self):
+        """Get a list of all stored session configuration objects.
+        """
+        for key, val in self.context.items():
+            url = self.url(val)
+            session_string = academic_sessions_vocab.getTermByToken(key).title
+            title = 'Session %s Configuration Data' % session_string
+            yield(dict(url=url, name=key, title=title))
+
+    # ToDo: Show warning message before deletion
+    @grok.action('Remove selected sesson configurations')
+    def delSubobjects(self, **data):
+        form = self.request.form
+        if form.has_key('val_id'):
+            child_id = form['val_id']
+        else:
+            self.flash('No item selected.')
+            self.redirect(self.url(self.context, '@@index')+'#tab-2')
+            return
+        if not isinstance(child_id, list):
+            child_id = [child_id]
+        deleted = []
+        for id in child_id:
+            try:
+                del self.context[id]
+                deleted.append(id)
+            except:
+                self.flash('Could not delete %s: %s: %s' % (
+                        id, sys.exc_info()[0], sys.exc_info()[1]))
+        if len(deleted):
+            self.flash('Successfully removed: %s' % ', '.join(deleted))
+        self.redirect(self.url(self.context, '@@index')+'#tab-2')
+        return
+
     @grok.action('Update plugins', validator=NullValidator)
     def updatePlugins(self, **data):
@@ -445,4 +492,31 @@
         return
 
+class SessionConfigurationAddFormPage(WAeUPAddFormPage):
+    """Add a session configuration object to configuration container.
+    """
+    grok.context(IConfigurationContainer)
+    grok.name('add')
+    grok.require('waeup.managePortalConfiguration')
+    label = 'Add session configuration'
+    title = 'Configuration'
+    form_fields = grok.AutoFields(ISessionConfigurationAdd)
+    pnav = 0
+
+    @grok.action('Add Session Configuration')
+    def addSessionConfiguration(self, **data):
+        sessionconfiguration = createObject(u'waeup.SessionConfiguration')
+        self.applyData(sessionconfiguration, **data)
+        try:
+            self.context.addSessionConfiguration(sessionconfiguration)
+        except KeyError:
+            self.flash('The session chosen already exists ')
+            return
+        self.redirect(self.url(self.context, '@@index')+'#tab-2')
+        return
+
+    @grok.action('Cancel', validator=NullValidator)
+    def cancel(self):
+        self.redirect(self.url(self.context, '@@index')+'#tab-2')
+        return
 
 #
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/configurationmanagepage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/configurationmanagepage.pt	(revision 6916)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/configurationmanagepage.pt	(revision 6916)
@@ -0,0 +1,76 @@
+<h2 i18n:translate="" tal:condition="view/label" tal:content="view/label">Label</h2>
+<div class="form-status"  tal:define="status view/status"  tal:condition="status"> Form Status:
+  <span i18n:translate="" tal:content="view/status"> Form status summary
+  </span>
+</div>
+<form action="." tal:attributes="action request/URL" method="POST" class="edit-form" enctype="multipart/form-data">
+  <div id="tabs">
+    <ul>
+      <li>
+      <a href="#tab-1">
+        <span>Site Settings
+        </span></a>
+      </li>
+      <li>
+      <a href="#tab-2">Session Configurations</a>
+      </li>
+    </ul>
+    <div id="tab-1">
+      <table class="zebra">
+        <tbody>
+          <tal:block repeat="widget view/widgets">
+            <tr>
+              <td class="label">
+                <label tal:attributes="for widget/name">
+                  <span class="required" tal:condition="widget/required">*
+                  </span>
+                  <span i18n:translate="" tal:content="widget/label">label
+                  </span>:
+                </label> </td>
+              <td class="field">
+                <span class="widget" tal:content="structure widget">
+                  <input type="text" />
+                </span>
+                <tal:error tal:condition="widget/error">
+                  <span tal:replace="structure widget/error">error
+                  </span>
+                </tal:error>
+                <tal:hint tal:condition="widget/hint">
+                  <span class="hint" tal:content="structure widget/hint">hint
+                  </span>
+                </tal:hint> </td>
+            </tr>
+          </tal:block>
+        </tbody>
+      </table>
+      <div class="actionButtons" tal:condition="view/availableActions">
+        <span tal:repeat="action view/actions" tal:omit-tag="">
+          <input tal:condition="python:action.label in view.taboneactions" tal:replace="structure action/render"/>
+        </span>
+      </div>
+    </div>
+    <div id="tab-2"> <br />
+      <table class="display dataTableManage">
+        <thead>
+          <tr>
+            <th>&nbsp;
+            </th>
+            <th>Name
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr tal:repeat="entry view/getSessionConfigurations" class="gradeB"> <td>
+              <input type="checkbox" name="val_id" tal:attributes="value entry/name" /> </td> <td>
+              <a href="" tal:attributes="href entry/url" tal:content="entry/title">Name</a> </td>
+          </tr>
+        </tbody>
+      </table>
+      <div class="actionButtons" tal:condition="view/availableActions">
+        <span tal:repeat="action view/actions" tal:omit-tag="">
+          <input tal:condition="python:action.label in view.tabtwoactions" tal:replace="structure action/render"/>
+        </span>
+      </div>
+    </div>
+  </div>
+</form>
Index: main/waeup.sirp/trunk/src/waeup/sirp/configuration.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/configuration.py	(revision 6915)
+++ main/waeup.sirp/trunk/src/waeup/sirp/configuration.py	(revision 6916)
@@ -18,6 +18,7 @@
 """
 import grok
+from zope.component.interfaces import IFactory
 from waeup.sirp.interfaces import (
-    ISessionConfiguration, IConfigurationContainer)
+    ISessionConfiguration, IConfigurationContainer, ISessionConfigurationAdd)
 from waeup.sirp.utils.helpers import attrs_to_fields
 
@@ -34,7 +35,31 @@
         if not ISessionConfiguration.providedBy(sessionconfiguration):
             raise TypeError(
-                'StudentsContainers contain only IStudent instances')
-        self[sessionconfiguration.year] = sessionconfiguration
+                'ConfigurationContainers contain only ISessionConfiguration instances')
+        code = unicode(sessionconfiguration.academic_session)
+        self[code] = sessionconfiguration
         return
 
 ConfigurationContainer = attrs_to_fields(ConfigurationContainer)
+
+class SessionConfiguration(grok.Model):
+    """
+    Session configuration model
+    """
+
+    grok.implements(ISessionConfiguration, ISessionConfigurationAdd)
+
+SessionConfiguration = attrs_to_fields(SessionConfiguration)
+
+class SessionConfigurationFactory(grok.GlobalUtility):
+    """A factory for session configuration objects.
+    """
+    grok.implements(IFactory)
+    grok.name(u'waeup.SessionConfiguration')
+    title = u"Create a new session configuration object.",
+    description = u"This factory instantiates new session configurations."
+
+    def __call__(self, *args, **kw):
+        return SessionConfiguration(*args, **kw)
+
+    def getInterfaces(self):
+        return implementedBy(SessionConfiguration)
Index: main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py	(revision 6915)
+++ main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py	(revision 6916)
@@ -244,4 +244,24 @@
         )
 
+    fee_2 = schema.Int(
+        title = u'Surcharge',
+        default = 0,
+        )
+
+class ISessionConfigurationAdd(ISessionConfiguration):
+    """A session configuration object in add mode.
+    """
+
+    academic_session = schema.Choice(
+        title = u'Academic Session',
+        source = academic_sessions_vocab,
+        default = None,
+        required = True,
+        readonly = False,
+        )
+
+ISessionConfigurationAdd['academic_session'].order =  ISessionConfiguration[
+    'academic_session'].order
+
 class IDataCenter(IWAeUPObject):
     """A data center.
