Index: main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 14572)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 14574)
@@ -658,5 +658,5 @@
             'student_id','reg_number','matric_number',
             'mandatory', 'score', 'carry_over', 'automatic',
-            'level_session',
+            'outstanding', 'level_session',
             'title', 'credits', 'passmark', 'semester'
             ] + self.additional_fields
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 14572)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 14574)
@@ -598,5 +598,5 @@
         )
 
-    gpa = schema.Int(
+    gpa = schema.TextLine(
         title = _(u'Unrectified GPA'),
         required = False,
@@ -664,4 +664,10 @@
         )
 
+    outstanding = schema.Bool(
+        title = _(u'Outstanding Course'),
+        default = False,
+        required = False,
+        )
+
     score = schema.Int(
         title = _(u'Score'),
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py	(revision 14572)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py	(revision 14574)
@@ -75,5 +75,5 @@
         credits_counted = level_obj.gpa_params[1]
         credits_passed = passed_params[2]
-        level_gpa = format_float(level_obj.gpa, 3)
+        level_gpa = format_float(level_obj.gpa_params[0], 3)
         cum_credits_taken = level_obj.cumulative_params[1]
         cum_credits_passed = level_obj.cumulative_params[4]
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 14572)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 14574)
@@ -25,7 +25,7 @@
 from zope.component.interfaces import IFactory
 from zope.catalog.interfaces import ICatalog
-from zope.component import createObject, queryUtility
+from zope.component import createObject, queryUtility, getUtility
 from zope.interface import implementedBy
-from waeup.kofa.interfaces import academic_sessions_vocab, VALIDATED
+from waeup.kofa.interfaces import academic_sessions_vocab, VALIDATED, IKofaUtils
 from waeup.kofa.students.interfaces import (
     IStudentStudyLevel, IStudentNavigation, ICourseTicket)
@@ -79,5 +79,6 @@
         total = 0
         for ticket in self.values():
-            total += ticket.credits
+            if not ticket.outstanding:
+                total += ticket.credits
         return total
 
@@ -135,5 +136,8 @@
     @property
     def gpa(self):
-        return self.gpa_params[0]
+        """Return string formatted gpa value.
+        """
+        format_float = getUtility(IKofaUtils).format_float
+        return format_float(self.gpa_params[0], 2)
 
     @property
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 14572)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 14574)
@@ -2576,4 +2576,41 @@
         return
 
+    def test_student_course_registration_outstanding(self):
+        self.course = createObject('waeup.Course')
+        self.course.code = 'COURSE2'
+        self.course.semester = 1
+        self.course.credits = 45
+        self.course.passmark = 40
+        self.app['faculties']['fac1']['dep1'].courses.addCourse(
+            self.course)
+        IWorkflowState(self.student).setState('school fee paid')
+        self.browser.open(self.login_path)
+        self.browser.getControl(name="form.login").value = self.student_id
+        self.browser.getControl(name="form.password").value = 'spwd'
+        self.browser.getControl("Login").click()
+        self.browser.open(self.student_path + '/studycourse/add')
+        self.browser.getControl("Create course list now").click()
+        self.assertEqual(self.student['studycourse']['100'].number_of_tickets, 1)
+        self.student['studycourse'].current_level = 200
+        self.browser.getLink("Study Course").click()
+        self.browser.getLink("Add course list").click()
+        self.assertMatches('...Add current level 200 (Year 2)...',
+                           self.browser.contents)
+        self.browser.getControl("Create course list now").click()
+        self.browser.getLink("200").click()
+        self.browser.getLink("Edit course list").click()
+        self.browser.getLink("here").click()
+        self.browser.getControl(name="form.course").value = ['COURSE2']
+        self.browser.getControl("Add course ticket").click()
+        # Carryover COURSE1 in level 200 already has 10 credits
+        self.assertMatches(
+            '...Total credits exceed 50...', self.browser.contents)
+        # If COURSE1 is outstanding, its credits won't be considered
+        self.student['studycourse']['200']['COURSE1'].outstanding = True
+        self.browser.getControl("Add course ticket").click()
+        self.assertMatches(
+            '...Successfully added COURSE2...', self.browser.contents)
+        return
+
     def test_postgraduate_student_access(self):
         self.certificate.study_mode = 'pg_ft'
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 14572)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py	(revision 14574)
@@ -492,5 +492,5 @@
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '0.0,,,0,0,,,,0,\r\n'
+            '0.00,,,0,0,,,,0,\r\n'
             )
         return
@@ -510,5 +510,5 @@
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.00,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -526,5 +526,5 @@
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.00,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -541,5 +541,5 @@
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.00,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -560,5 +560,5 @@
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.00,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -579,5 +579,5 @@
             'validated_by,validation_date,'
             'student_id,number_of_tickets,certcode\r\n'
-            '0.0,100,2012,A,100,,,A111111,1,CERT1\r\n'
+            '0.00,100,2012,A,100,,,A111111,1,CERT1\r\n'
             )
         return
@@ -614,7 +614,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '0,0,,,,,,,0,,,,,,,\r\n'
+            '0,0,,,,,,,0,0,,,,,,,\r\n'
             )
         return
@@ -633,7 +633,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,100,,2,Course 1,A111111,CERT1,'
+            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,0,100,,2,Course 1,A111111,CERT1,'
             'Anna M. Tester\r\n'
             )
@@ -650,7 +650,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,100,,2,Course 1,A111111,CERT1,'
+            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,0,100,,2,Course 1,A111111,CERT1,'
             'Anna M. Tester\r\n'
             )
@@ -666,7 +666,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,100,,2,Course 1,A111111,CERT1,'
+            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,0,100,,2,Course 1,A111111,CERT1,'
             'Anna M. Tester\r\n'
             )
@@ -686,7 +686,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,100,,2,Course 1,A111111,CERT1,'
+            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,0,100,,2,Course 1,A111111,CERT1,'
             'Anna M. Tester\r\n'
             )
@@ -700,7 +700,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,100,,2,Course 1,A111111,CERT1,'
+            '1,1,CRS1,100,DEP1,FAC1,100,2012,0,0,100,,2,Course 1,A111111,CERT1,'
             'Anna M. Tester\r\n'
             )
@@ -711,5 +711,5 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
             )
@@ -724,7 +724,7 @@
             result,
             'automatic,carry_over,code,credits,dcode,fcode,level,level_session,'
-            'mandatory,passmark,score,semester,title,student_id,certcode,'
+            'mandatory,outstanding,passmark,score,semester,title,student_id,certcode,'
             'display_fullname\r\n'
-            '1,1,CRS1,100,DEP1,FAC1,110,2012,0,100,,2,Course 1,A111111,CERT1,'
+            '1,1,CRS1,100,DEP1,FAC1,110,2012,0,0,100,,2,Course 1,A111111,CERT1,'
             'Anna M. Tester\r\n'
             )
