Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/container.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/container.py	(revision 13481)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/container.py	(revision 13483)
@@ -23,6 +23,7 @@
 from datetime import datetime
 from zope.catalog.interfaces import ICatalog
-from zope.component import queryUtility
-from waeup.kofa.hostels.interfaces import IHostelsContainer, IHostel
+from zope.component import queryUtility, getUtility, ComponentLookupError
+from waeup.kofa.hostels.interfaces import (
+    IHostelsContainer, IHostel, IHostelsUtils)
 from waeup.kofa.utils.logger import Logger
 from waeup.kofa.utils.helpers import attrs_to_fields
@@ -79,4 +80,13 @@
         return False
 
+    @property
+    def statistics(self):
+        try:
+          statistics = getUtility(
+              IHostelsUtils).getBedStatistics()
+        except ComponentLookupError:  # happens in unit tests
+            return
+        return statistics
+
     logger_name = 'waeup.kofa.${sitename}.hostels'
     logger_filename = 'hostels.log'
Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/interfaces.py	(revision 13481)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/interfaces.py	(revision 13483)
@@ -20,5 +20,5 @@
 from zope.component import getUtility
 from zope.catalog.interfaces import ICatalog
-from zope.interface import invariant, Invalid, Attribute
+from zope.interface import invariant, Invalid, Attribute, Interface
 from zope import schema
 from waeup.kofa.interfaces import (
@@ -43,4 +43,5 @@
 
     expired = Attribute('True if current datetime is in application period.')
+    statistics = Attribute('Bed category statistics')
 
     startdate = schema.Datetime(
@@ -295,2 +296,10 @@
         """Add an INFO message to hostels.log.
         """
+
+class IHostelsUtils(Interface):
+    """A collection of methods which are subject to customization.
+    """
+
+    def getBedStatistics():
+        """Return bed statistics.
+        """
Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/tests.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/tests.py	(revision 13481)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/tests.py	(revision 13483)
@@ -31,8 +31,8 @@
 from zope.security.interfaces import Unauthorized
 from zope.catalog.interfaces import ICatalog
-from zope.component import queryUtility
+from zope.component import queryUtility, getUtility
 from waeup.kofa.app import University
 from waeup.kofa.hostels.interfaces import (
-    IHostelsContainer, IHostel, IBed)
+    IHostelsContainer, IHostel, IBed, IHostelsUtils)
 from waeup.kofa.hostels.vocabularies import NOT_OCCUPIED
 from waeup.kofa.hostels.container import HostelsContainer
@@ -162,5 +162,5 @@
         bed.bed_id = u'hall_block_room_bed'
         bed.bed_number = 1
-        bed.bed_type = u'a_b_c'
+        bed.bed_type = u'regular_male_fr'
         self.app['hostels'][hostel.hostel_id][bed.bed_id] = bed
 
@@ -230,4 +230,37 @@
         return
 
+    def test_bed_statistics(self):
+        utils = getUtility(IHostelsUtils)
+        self.app['hostels']['hall-x'][
+            'hall_block_room_bed'].owner = NOT_OCCUPIED
+        notify(grok.ObjectModifiedEvent(
+            self.app['hostels']['hall-x']['hall_block_room_bed']))
+        stats = utils.getBedStatistics()
+        self.assertEqual(stats,
+            {'regular_male_fr': (1, 1),
+             'regular_female_fi': (0, 0),
+             'regular_male_re': (0, 0),
+             'regular_female_fr': (0, 0),
+             'regular_female_all': (0, 0),
+             'regular_female_re': (0, 0),
+             'regular_male_fi': (0, 0),
+             'regular_male_all': (0, 0)}
+             )
+        self.app[
+            'hostels']['hall-x']['hall_block_room_bed'].owner = self.student_id
+        notify(grok.ObjectModifiedEvent(
+            self.app['hostels']['hall-x']['hall_block_room_bed']))
+        stats = utils.getBedStatistics()
+        self.assertEqual(stats,
+            {'regular_male_fr': (0, 1),
+             'regular_female_fi': (0, 0),
+             'regular_male_re': (0, 0),
+             'regular_female_fr': (0, 0),
+             'regular_female_all': (0, 0),
+             'regular_female_re': (0, 0),
+             'regular_male_fi': (0, 0),
+             'regular_male_all': (0, 0)}
+             )
+
 class BedCatalogTests(HostelsFullSetup):
 
@@ -242,5 +275,6 @@
         # We can find a certain bed
         cat = queryUtility(ICatalog, name='beds_catalog')
-        results = cat.searchResults(bed_type=(u'a_b_c', u'a_b_c'))
+        results = cat.searchResults(
+            bed_type=(u'regular_male_fr', u'regular_male_fr'))
         results = [x for x in results] # Turn results generator into list
         assert len(results) == 1
@@ -531,6 +565,6 @@
             result,
             'bed_id,bed_number,bed_type,owner,hall,block,room,bed,'
-            'special_handling,sex,bt\r\nhall_block_room_bed,1,a_b_c,,'
-            'hall,block,room,bed,a,b,c\r\n'
+            'special_handling,sex,bt\r\nhall_block_room_bed,1,regular_male_fr,,'
+            'hall,block,room,bed,regular,male,fr\r\n'
             )
         return
Index: main/waeup.kofa/trunk/src/waeup/kofa/hostels/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/hostels/utils.py	(revision 13483)
+++ main/waeup.kofa/trunk/src/waeup/kofa/hostels/utils.py	(revision 13483)
@@ -0,0 +1,52 @@
+## $Id$
+##
+## Copyright (C) 2015 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
+##
+"""General helper functions and utilities for the hostels section.
+"""
+
+import grok
+from zope.component import getUtility
+from zope.catalog.interfaces import ICatalog
+from waeup.kofa.interfaces import MessageFactory as _
+from waeup.kofa.hostels.interfaces import IHostelsUtils
+from waeup.kofa.hostels.vocabularies import NOT_OCCUPIED
+
+class HostelsUtils(grok.GlobalUtility):
+    """A collection of parameters and methods subject to customization.
+    """
+    grok.implements(IHostelsUtils)
+
+    def getBedStatistics(self):
+        cat = getUtility(ICatalog, name='beds_catalog')
+        stats = {}
+        bed_types = (
+            'regular_female_fr',
+            'regular_female_re',
+            'regular_female_fi',
+            'regular_female_all',
+            'regular_male_fr',
+            'regular_male_re',
+            'regular_male_fi',
+            'regular_male_all',)
+        for bed_type in bed_types:
+            no = cat.searchResults(
+                bed_type=(bed_type, bed_type),
+                owner=(NOT_OCCUPIED, NOT_OCCUPIED))
+            all = cat.searchResults(
+                bed_type=(bed_type, bed_type))
+            stats[bed_type] = (len(no), len(all))
+        return stats
