Index: main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/browser.py
===================================================================
--- main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/browser.py	(revision 15588)
+++ main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/browser.py	(revision 15592)
@@ -173,5 +173,7 @@
             form_fields = grok.AutoFields(ICustomSpecialApplicant)
             form_fields = form_fields.omit(
-                'special_application', 'carryover_courses',
+                'special_application',
+                'carryover_courses_1',
+                'carryover_courses_2',
                 'locked', 'suspended')
             return form_fields
@@ -204,5 +206,7 @@
     def note(self):
         if self.context.special:
-            return
+            return '''<br /><br />
+Head of Department Signature:
+'''
         note = getattr(self.context.__parent__, 'application_slip_notice', None)
         if note:
@@ -239,6 +243,8 @@
                 'special_application',
                 'locked', 'suspended', 'applicant_id')
-            if not self.context.carryover_courses:
-                form_fields = form_fields.omit('carryover_courses')
+            if not self.context.carryover_courses_1:
+                form_fields = form_fields.omit('carryover_courses_1')
+            if not self.context.carryover_courses_2:
+                form_fields = form_fields.omit('carryover_courses_2')
             return form_fields
         form_fields = grok.AutoFields(ICustomUGApplicant)
@@ -273,5 +279,7 @@
             form_fields = grok.AutoFields(ICustomSpecialApplicant)
             form_fields = form_fields.omit(
-                'special_application', 'carryover_courses',
+                'special_application',
+                'carryover_courses_1',
+                'carryover_courses_2',
                 'locked', 'suspended')
             form_fields['applicant_id'].for_display = True
@@ -291,5 +299,6 @@
         super(CustomApplicantManageFormPage,self).setUpWidgets(ignore_request)
         if self.context.special:
-            self.widgets['carryover_courses'].height = 3
+            self.widgets['carryover_courses_1'].height = 3
+            self.widgets['carryover_courses_2'].height = 3
         return
 
@@ -311,5 +320,7 @@
             form_fields = grok.AutoFields(ICustomSpecialApplicant)
             form_fields = form_fields.omit(
-                'special_application', 'carryover_courses',
+                'special_application',
+                'carryover_courses_1',
+                'carryover_courses_2',
                 'locked', 'suspended')
             form_fields['applicant_id'].for_display = True
@@ -332,5 +343,6 @@
         super(CustomApplicantEditFormPage,self).setUpWidgets(ignore_request)
         if self.context.special:
-            self.widgets['carryover_courses'].height = 3
+            self.widgets['carryover_courses_1'].height = 3
+            self.widgets['carryover_courses_2'].height = 3
         return
 
Index: main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/interfaces.py
===================================================================
--- main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/interfaces.py	(revision 15588)
+++ main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/interfaces.py	(revision 15592)
@@ -289,8 +289,8 @@
 class ICustomSpecialApplicant(ISpecialApplicant):
 
-    department = schema.TextLine(
-        title = _(u'Department'),
-        required = True,
-        readonly = False,
+    certificate = schema.Choice(
+        title = _(u'Course of Study'),
+        source = CertificateSource(),
+        required = True,
         )
 
@@ -302,10 +302,14 @@
         )
 
-    carryover_courses = schema.Text(
-        title = _(u'Carry-Over Courses'),
-        required = False,
-        #description = _(
-        #    u'Enter course titles if carry-over remedial payment.'),
-        )
+    carryover_courses_1 = schema.Text(
+        title = _(u'1st Semseter Carry-Over Courses'),
+        required = False,
+        )
+
+    carryover_courses_2 = schema.Text(
+        title = _(u'2nd Semester Carry-Over Courses'),
+        required = False,
+        )
+
 class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant,
                        ICustomSpecialApplicant):
Index: main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/tests/test_browser.py
===================================================================
--- main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/tests/test_browser.py	(revision 15588)
+++ main/kofacustom.dspg/trunk/src/kofacustom/dspg/applicants/tests/test_browser.py	(revision 15592)
@@ -35,4 +35,6 @@
 from waeup.kofa.university.faculty import Faculty
 from waeup.kofa.university.department import Department
+from waeup.kofa.interfaces import IUserAccount
+from waeup.kofa.configuration import SessionConfiguration
 from waeup.kofa.testing import FunctionalTestCase
 from waeup.kofa.applicants.tests.test_batching import ApplicantImportExportSetup
@@ -75,4 +77,6 @@
         #self.ndftcontainer.title = u'This is the %s container' % ndftcontainer_name
         self.app['applicants'][ndftcontainer_name] = self.ndftcontainer
+
+        self.login_path = 'http://localhost/app/login'
 
         delta = datetime.timedelta(days=10)
@@ -122,4 +126,37 @@
         self.browser.getControl(name="form.email").value = 'xx@yy.zz'
 
+    def prepare_special_container(self):
+        # Add special application container
+        container_name = u'special%s' % session
+        applicantscontainer = ApplicantsContainer()
+        applicantscontainer.code = container_name
+        applicantscontainer.prefix = 'special'
+        applicantscontainer.year = session
+        applicantscontainer.with_picture = False
+        applicantscontainer.title = u'This is a special app container'
+        applicantscontainer.application_category = 'no'
+        applicantscontainer.mode = 'create'
+        applicantscontainer.strict_deadline = True
+        delta = datetime.timedelta(days=10)
+        applicantscontainer.startdate = datetime.datetime.now(pytz.utc) - delta
+        applicantscontainer.enddate = datetime.datetime.now(pytz.utc) + delta
+        self.app['applicants'][container_name] = applicantscontainer
+        # Add an applicant
+        applicant = createObject('waeup.Applicant')
+        # reg_number is the only field which has to be preset here
+        # because managers are allowed to edit this required field
+        applicant.reg_number = u'12345'
+        self.special_applicant = applicant
+        self.app['applicants'][container_name].addApplicant(applicant)
+        IUserAccount(
+            self.app['applicants'][container_name][
+            applicant.application_number]).setPassword('apwd')
+        # Add session configuration object
+        self.configuration = SessionConfiguration()
+        self.configuration.academic_session = session
+        #self.configuration.transcript_fee = 200.0
+        self.configuration.clearance_fee = 300.0
+        self.app['configuration'].addSessionConfiguration(self.configuration)
+
     def test_manage_and_view_applicant(self):
         # Managers can manage ndft applicants.
@@ -154,4 +191,56 @@
         self.assertMatches('...Form has been saved...', self.browser.contents)
         return
+
+    def test_special_application(self):
+        self.prepare_special_container()
+        # Login
+        self.browser.open(self.login_path)
+        self.browser.getControl(
+            name="form.login").value = self.special_applicant.applicant_id
+        self.browser.getControl(name="form.password").value = 'apwd'
+        self.browser.getControl("Login").click()
+        applicant_path = self.browser.url
+        self.browser.getLink("Edit application record").click()
+        self.browser.getControl(name="form.firstname").value = 'John'
+        self.browser.getControl(name="form.middlename").value = 'Anthony'
+        self.browser.getControl(name="form.lastname").value = 'Tester'
+        self.browser.getControl(name="form.special_application").value = [
+            'carryover4']
+        self.browser.getControl(name="form.date_of_birth").value = '09/09/1988'
+        self.browser.getControl(name="form.email").value = 'xx@yy.zz'
+        self.browser.getControl(name="form.certificate").value = ['CERT1']
+        self.browser.getControl(name="form.carryover_courses_1").value = 'Test Course 1 - TCO1'
+        self.browser.getControl(name="form.carryover_courses_2").value = 'Test Course 2 - TCO2 \nTest Course 3 - TCO3'
+        self.browser.getControl(name="form.grad_year").value = ['2015']
+        self.configuration.carryover4_fee = 5000.0
+        self.browser.getControl("Save").click()
+        self.browser.getControl("Add online payment ticket").click()
+        self.assertMatches('...Payment ticket created...',
+                           self.browser.contents)
+        self.assertTrue(
+            '<span>4 Carry-Over Courses</span>' in self.browser.contents)
+        self.assertTrue(
+            'This is a special app container' in self.browser.contents)
+        self.assertTrue(
+            '<span>5000.0</span>' in self.browser.contents)
+        self.assertEqual(len(self.special_applicant.keys()), 1)
+        payment_id = self.special_applicant.keys()[0]
+        # The applicant's workflow state is paid ...
+        self.special_applicant.payments[0].approveApplicantPayment()
+        self.assertEqual(self.special_applicant.state, 'paid')
+        self.browser.open(applicant_path + '/edit')
+        self.browser.getControl("Finally Submit").click()
+        self.browser.open(applicant_path + '/' + payment_id)
+        self.browser.getLink("Download payment slip").click()
+        self.assertEqual(self.browser.headers['Content-Type'],
+                 'application/pdf')
+        path = os.path.join(samples_dir(), 'special_payment_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample PDF clearance_slip.pdf written to %s" % path
+        self.browser.open(applicant_path)
+        self.browser.getLink("Download application slip").click()
+        path = os.path.join(samples_dir(), 'application_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample application_slip.pdf written to %s" % path
 
 class ApplicantExporterTest(ApplicantImportExportSetup):
