Index: main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 10479)
@@ -519,4 +519,5 @@
         fields = super(StudentStudyLevelProcessor, self).available_fields
         fields.remove('total_credits')
+        fields.remove('gpa')
         return  fields
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 10479)
@@ -1478,5 +1478,5 @@
     grok.template('studylevelmanagepage')
     form_fields = grok.AutoFields(IStudentStudyLevel).omit(
-        'validation_date', 'validated_by', 'total_credits')
+        'validation_date', 'validated_by', 'total_credits', 'gpa')
     pnav = 4
     taboneactions = [_('Save'),_('Cancel')]
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 10479)
@@ -578,9 +578,9 @@
         )
 
-    #gpa = schema.Int(
-    #    title = _(u'GPA'),
-    #    required = False,
-    #    readonly = True,
-    #    )
+    gpa = schema.Int(
+        title = _(u'Unrectified GPA'),
+        required = False,
+        readonly = True,
+        )
 
     def addCourseTicket(ticket, course):
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/studycourse.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/studycourse.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/studycourse.py	(revision 10479)
@@ -140,5 +140,5 @@
                 elif ticket.semester == 3:
                     tickets_3.append(ticket)
-            gpa_params = level_val.gpa_params
+            gpa_params = level_val.gpa_params_rectified
             sgpa = gpa_params[0]
             total_credits_counted += gpa_params[1]
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 10479)
@@ -100,5 +100,5 @@
 
     @property
-    def gpa_params(self):
+    def gpa_params_rectified(self):
         weighted_credits = 0.0
         credits_counted = 0
@@ -119,4 +119,21 @@
 
     @property
+    def gpa_params(self):
+        weighted_credits = 0.0
+        credits_counted = 0
+        level_gpa = 0.0
+        for ticket in self.values():
+            if ticket.score:
+                credits_counted += ticket.credits
+                weighted_credits += ticket.credits * ticket.weight
+        if credits_counted:
+            level_gpa = round(weighted_credits/credits_counted, 2)
+        return level_gpa, credits_counted, weighted_credits
+
+    @property
+    def gpa(self):
+        return self.gpa_params[0]
+
+    @property
     def is_current_level(self):
         try:
@@ -165,5 +182,5 @@
 
 StudentStudyLevel = attrs_to_fields(
-    StudentStudyLevel, omit=['total_credits'])
+    StudentStudyLevel, omit=['total_credits', 'gpa'])
 
 class StudentStudyLevelFactory(grok.GlobalUtility):
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 10479)
@@ -799,9 +799,9 @@
         self.browser.open(self.student_path + '/studycourse/100')
         # total credits
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[1], 23)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[1], 23)
         # weigheted credits = 3 * 10 + 4 * 13
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[2], 82.0)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[2], 82.0)
         # sgpa = 82 / 23
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[0], 3.57)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[0], 3.57)
         # Carry-over courses will be collected when next level is created
         self.browser.open(self.student_path + '/studycourse/manage')
@@ -833,9 +833,9 @@
         studylevel['COURSE1'].score = studylevel['COURSE1'].passmark + 1
         # GPA is 1.
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[0], 1.0)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[0], 1.0)
         # Set score below passmark.
         studylevel['COURSE1'].score = studylevel['COURSE1'].passmark - 1
         # GPA is still 0.
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[0], 0.0)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[0], 0.0)
         studylevel2 = createObject(u'waeup.StudentStudyLevel')
         studylevel2.level = 200
@@ -847,7 +847,7 @@
         # The score of the carry-over course is now used for calculation of the
         # GPA at level 100 ...
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[0], 4.0)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[0], 4.0)
         # ... but not at level 200
-        self.assertEqual(self.student['studycourse']['200'].gpa_params[0], 0.0)
+        self.assertEqual(self.student['studycourse']['200'].gpa_params_rectified[0], 0.0)
         return
 
@@ -1897,6 +1897,6 @@
         self.student['studycourse']['110']['COURSE2'] = courseticket
         self.student['studycourse']['100']['COURSE1'].score = 55
-        self.assertEqual(self.student['studycourse']['100'].gpa_params[0], 3.0)
-        self.assertEqual(self.student['studycourse']['110'].gpa_params[0], 4.0)
+        self.assertEqual(self.student['studycourse']['100'].gpa_params_rectified[0], 3.0)
+        self.assertEqual(self.student['studycourse']['110'].gpa_params_rectified[0], 4.0)
         # Get transcript data
         td = self.student['studycourse'].getTranscriptData()
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py	(revision 10479)
@@ -403,8 +403,8 @@
         self.assertEqual(
             result,
-            'level,level_session,level_verdict,total_credits,'
+            'gpa,level,level_session,level_verdict,total_credits,'
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            ',,0,0,,,,0,\r\n'
+            '0.0,,,0,0,,,,0,\r\n'
             )
         return
@@ -421,8 +421,8 @@
         self.assertEqual(
             result,
-            'level,level_session,level_verdict,total_credits,'
+            'gpa,level,level_session,level_verdict,total_credits,'
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -437,8 +437,8 @@
         self.assertEqual(
             result,
-            'level,level_session,level_verdict,total_credits,'
+            'gpa,level,level_session,level_verdict,total_credits,'
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -452,8 +452,8 @@
         self.assertEqual(
             result,
-            'level,level_session,level_verdict,total_credits,'
+            'gpa,level,level_session,level_verdict,total_credits,'
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -471,8 +471,8 @@
         self.assertEqual(
             result,
-            'level,level_session,level_verdict,total_credits,'
+            'gpa,level,level_session,level_verdict,total_credits,'
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 10477)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 10479)
@@ -242,5 +242,5 @@
             element[2]*cm for element in tableheader], style=CONTENT_STYLE)
         data.append(table)
-        sgpa = '%s: %s' % (trans('Sessional GPA', lang), level['sgpa'])
+        sgpa = '%s: %s' % (trans('Sessional GPA (rectified)', lang), level['sgpa'])
         data.append(Paragraph(sgpa, style["Normal"]))
     return data
