Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscode.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscode.py	(revision 6931)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscode.py	(revision 6932)
@@ -295,5 +295,11 @@
         """Get next unused num for given prefix.
         """
-        num = 1
+        # School fee, clearance and hostel application batches start with 0.
+        # These batches are being emptily created during initialization of the
+        # university instance.
+        if prefix in ('CLR', 'SFE', 'HOS'):
+            num = 0
+        else:
+            num = 1
         while self.get('%s-%s' % (prefix, num), None) is not None:
             num += 1
@@ -379,6 +385,17 @@
 
     def setup(self, site, name, logger):
-        site['accesscodes'] = AccessCodeBatchContainer()
+        basecontainer = AccessCodeBatchContainer()
+        site['accesscodes'] = basecontainer
         logger.info('Installed container for access code batches.')
+        cost = 0.0
+        creator = 'system'
+        entry_num = 0
+        creation_date = datetime.now()
+        basecontainer.createBatch(creation_date, creator,
+            'SFE', cost,entry_num)
+        basecontainer.createBatch(creation_date, creator,
+            'CLR', cost,entry_num)
+        basecontainer.createBatch(creation_date, creator,
+            'HOS', cost,entry_num)
         return
 
Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.txt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.txt	(revision 6931)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.txt	(revision 6932)
@@ -50,6 +50,6 @@
 For users that have the right to manage access-code related stuff, the
 home page of a `University` instance provides a link to the
-access-code management screen. In the beginning, there are naturally
-no batches available:
+access-code management screen. In the beginning, there are already
+three empty batches available which will be filled by online payments:
 
     >>> browser.open('http://localhost/myuniversity')
@@ -61,5 +61,7 @@
     ...
     ... The following batches are available:
-    ...No batches yet...
+    ...CLR...
+    ...HOS...
+    ...SFE...
     ...
 
Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/tests/test_accesscode.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/tests/test_accesscode.py	(revision 6931)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/tests/test_accesscode.py	(revision 6932)
@@ -288,4 +288,9 @@
         assert verifyClass(IAccessCodeBatch, AccessCodeBatch)
 
+    def test_container_contents(self):
+        assert 'SFE-0' in self.app['accesscodes']
+        assert 'HOS-0' in self.app['accesscodes']
+        assert 'CLR-0' in self.app['accesscodes']
+
     def test_csv_export(self):
         # Make sure CSV export of accesscodes works
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 6931)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 6932)
@@ -115,5 +115,5 @@
         pin_container.createBatch(
             datetime.now(), 'some_userid', 'PWD', 9.99, 5)
-        pins = pin_container[pin_container.keys()[0]].values()
+        pins = pin_container['PWD-1'].values()
         self.pwdpins = [x.representation for x in pins]
         self.existing_pwdpin = self.pwdpins[0]
@@ -123,5 +123,5 @@
         pin_container.createBatch(
             datetime.now(), 'some_userid', 'CLR', 9.99, 5)
-        pins = pin_container[pin_container.keys()[0]].values()
+        pins = pin_container['CLR-1'].values()
         pins[0].owner = u'Hans Wurst'
         self.existing_clrac = pins[0]
