Index: main/waeup.kofa/trunk/CHANGES.txt
===================================================================
--- main/waeup.kofa/trunk/CHANGES.txt	(revision 13616)
+++ main/waeup.kofa/trunk/CHANGES.txt	(revision 13617)
@@ -5,5 +5,5 @@
 =======================
 
-* (No changes yet)
+* Add DegreeSource and degree field to Certificate. Plugins must be updated!
 
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/app.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/app.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/app.py	(revision 13617)
@@ -81,5 +81,4 @@
         """Lookup all plugins and call their `update()` method.
         """
-        # XXX: TBD: Remove update() in all plugins but documents and users
         getUtility(IKofaPluggable, name='documents').update(
             self, 'documents', self.logger)
@@ -88,4 +87,6 @@
         getUtility(IKofaPluggable, name='applicants').update(
             self, 'applicants', self.logger)
+        getUtility(IKofaPluggable, name='certificates').update(
+            self, 'certificates', self.logger)
         return
 attrs_to_fields(University)
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 13617)
@@ -580,5 +580,5 @@
     def _set_inst_types(self):
         study_modes = getUtility(IKofaUtils).INST_TYPES_DICT
-        self.inst_types = study_modes.items()
+        self.inst_types = sorted(study_modes.items())
         return
 
@@ -603,5 +603,10 @@
     def _set_study_modes(self):
         study_modes = getUtility(IKofaUtils).STUDY_MODES_DICT
-        self.study_modes = study_modes.items()
+        self.study_modes = sorted(study_modes.items())
+        return
+
+    def _set_degrees(self):
+        degrees = getUtility(IKofaUtils).DEGREES_DICT
+        self.degrees = sorted(degrees.items())
         return
 
@@ -613,5 +618,5 @@
     def _set_verdicts(self):
         verdicts = getUtility(IKofaUtils).VERDICTS_DICT
-        self.verdicts = verdicts.items()
+        self.verdicts = sorted(verdicts.items())
         return
 
@@ -660,4 +665,5 @@
         self._set_study_levels()
         self._set_study_modes()
+        self._set_degrees()
         self._set_student_states()
         self._set_verdicts()
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 13617)
@@ -925,8 +925,16 @@
     title = _('Study Modes')
 
+class DegreeSource(InstTypesSource):
+    """Available study modes for the sources overview page.
+    """
+    grok.order(6)
+    name = 'Degrees'
+    source_name = 'degrees'
+    title = _('Degrees')
+
 class PaymentCatsSource(InstTypesSource):
     """Available payment categories for the sources overview page.
     """
-    grok.order(6)
+    grok.order(7)
     name = 'PaymentCats'
     source_name = 'payment_cats'
@@ -936,5 +944,5 @@
     """Available application types for the sources overview page.
     """
-    grok.order(7)
+    grok.order(8)
     name = 'AppTypes'
     source_name = 'app_types'
@@ -944,5 +952,5 @@
     """Available application categories for the sources overview page.
     """
-    grok.order(8)
+    grok.order(9)
     name = 'AppCats'
     source_name = 'app_cats'
Index: main/waeup.kofa/trunk/src/waeup/kofa/university/certificate.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/university/certificate.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/university/certificate.py	(revision 13617)
@@ -59,5 +59,5 @@
                  school_fee_1=None, school_fee_2=None,
                  school_fee_3=None, school_fee_4=None,
-                 ratio=None,
+                 ratio=None, degree=None,
                  custom_textline_1=None, custom_textline_2=None,
                  custom_float_1=None, custom_float_2=None):
@@ -74,4 +74,5 @@
         self.school_fee_4 = school_fee_4
         self.ratio = ratio
+        self.degree = degree
         self.custom_textline_1 = custom_textline_1
         self.custom_textline_2 = custom_textline_2
Index: main/waeup.kofa/trunk/src/waeup/kofa/university/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/university/interfaces.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/university/interfaces.py	(revision 13617)
@@ -30,4 +30,5 @@
     InstTypeSource,
     SemesterSource,
+    DegreeSource,
     )
 
@@ -173,4 +174,10 @@
         default = u'ug_ft',
         required = True,
+        )
+
+    degree = schema.Choice(
+        title = _(u'Degree'),
+        source = DegreeSource(),
+        required = False,
         )
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/university/vocabularies.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/university/vocabularies.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/university/vocabularies.py	(revision 13617)
@@ -68,4 +68,14 @@
     DICT_NAME = 'STUDY_MODES_DICT'
 
+class DegreeSource(ContextualDictSourceFactoryBase):
+    """A source for certificate degrees
+    """
+    #: name of dict to deliver from kofa utils.
+    DICT_NAME = 'DEGREES_DICT'
+
+    def getTitle(self, context, value):
+        utils = getUtility(IKofaUtils)
+        return "%s (%s)" % (getattr(utils, self.DICT_NAME)[value], value)
+
 class CourseSource(BasicSourceFactory):
     """A course source delivers all courses inside the portal by looking
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/degrees.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/degrees.py	(revision 13617)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/degrees.py	(revision 13617)
@@ -0,0 +1,12 @@
+DEGREES_DICT = {
+    'BA': 'Bachelor of Arts',
+    'BAGR': 'Bachelor of Agriculture',
+    'LLB': 'Bachelor of Laws',
+    'MA': 'Master of Arts',
+    'MBA': 'Master of Business Administration',
+    'MUSM': 'Master of Music',
+    'LLM': 'Master of Laws',
+    'DBA': 'Doctor of Business Administration',
+    'PHD': 'Doctor of Philosophy',
+    'MD': 'Doctor of Medicine',
+    }
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/utils.py	(revision 13616)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/utils.py	(revision 13617)
@@ -29,4 +29,5 @@
 from waeup.kofa.smtp import send_mail as send_mail_internally
 from waeup.kofa.utils.helpers import get_sorted_preferred
+from waeup.kofa.utils.degrees import DEGREES_DICT
 
 
@@ -87,4 +88,6 @@
     #: (e.g. object histories) pdf slips.
     PORTAL_LANGUAGE = 'en'
+
+    DEGREES_DICT = DEGREES_DICT
 
     PREFERRED_LANGUAGES_DICT = {
