Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/applicant.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/applicant.py	(revision 15130)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/applicant.py	(revision 15131)
@@ -21,4 +21,7 @@
 from waeup.kofa.applicants.applicant import ApplicantFactory
 from waeup.kofa.utils.helpers import attrs_to_fields
+from waeup.kofa.interfaces import IObjectHistory
+from waeup.kofa.applicants.workflow import (
+    application_states_dict, ADMITTED, NOT_ADMITTED, CREATED)
 from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
 from kofacustom.edopoly.applicants.interfaces import(
@@ -47,4 +50,24 @@
         return False
 
+    @property
+    def history(self):
+        # We do not provide a history
+        if self.state in (ADMITTED, NOT_ADMITTED, CREATED) \
+            and not self.admchecking_fee_paid():
+            return
+        history = IObjectHistory(self)
+        return history
+
+    @property
+    def translated_state(self):
+        if self.state in (ADMITTED, NOT_ADMITTED, CREATED) \
+            and not self.admchecking_fee_paid():
+            return
+        try:
+            state = application_states_dict[self.state]
+        except LookupError:  # in unit tests
+            return
+        return state
+
 # Set all attributes of CustomApplicant required in ICustomApplicant as field
 # properties. Doing this, we do not have to set initial attributes
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser.py	(revision 15130)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser.py	(revision 15131)
@@ -42,5 +42,6 @@
     PG_OMIT_EDIT_FIELDS,
     )
-from waeup.kofa.applicants.workflow import ADMITTED, PAID, STARTED
+from waeup.kofa.applicants.workflow import (
+    ADMITTED, PAID, STARTED, NOT_ADMITTED, CREATED)
 from kofacustom.edopoly.applicants.interfaces import (
     ICustomUGApplicantEdit, ICustomUGApplicant,
@@ -107,5 +108,5 @@
     @property
     def admission_checking_info(self):
-        if self.context.state == ADMITTED and \
+        if self.context.state in (ADMITTED, NOT_ADMITTED, CREATED) and \
             not self.context.admchecking_fee_paid():
             return _('You must pay the admission checking fee '
@@ -116,5 +117,6 @@
         state = IWorkflowState(self.context).getState()
         actions = []
-        if state == ADMITTED and not self.context.admchecking_fee_paid():
+        if state in (ADMITTED, NOT_ADMITTED, CREATED) \
+            and not self.context.admchecking_fee_paid():
             actions = [_('Add admission checking payment ticket')]
         return actions
@@ -186,5 +188,5 @@
     def update(self):
         super(CustomExportPDFPageApplicationSlip, self).update()
-        if self.context.state == ADMITTED and \
+        if self.context.state in (ADMITTED, NOT_ADMITTED, CREATED) and \
             not self.context.admchecking_fee_paid():
             self.flash(
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser_templates/applicantdisplaypage.pt
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser_templates/applicantdisplaypage.pt	(revision 15130)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/browser_templates/applicantdisplaypage.pt	(revision 15131)
@@ -1,3 +1,3 @@
-<h2 i18n:domain="waeup.kofa">
+<h2 i18n:domain="waeup.kofa" tal:condition="context/translated_state">
   ...
   <span tal:replace="context/translated_state">APPLICATIONSTATE
@@ -9,5 +9,5 @@
 </h2>
 
-<div class="workflow">
+<div class="workflow" tal:condition="context/history">
   <div tal:repeat="msg context/history/messages">
     <span tal:replace="msg">MESSAGE</span><br />
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/payment.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/payment.py	(revision 15130)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/payment.py	(revision 15131)
@@ -25,4 +25,5 @@
 from waeup.kofa.utils.helpers import attrs_to_fields
 from kofacustom.edopoly.applicants.interfaces import ICustomApplicantOnlinePayment
+from kofacustom.edopoly.interfaces import MessageFactory as _
 
 class CustomApplicantOnlinePayment(ApplicantOnlinePayment):
@@ -40,4 +41,36 @@
         super(CustomApplicantOnlinePayment, self).__init__()
         return
+
+    def doAfterApplicantPaymentApproval(self):
+        """Process applicant after payment was approved.
+        """
+        if not (self.__parent__.special and self.__parent__.state == PAID) \
+            and self.p_category != 'admission_checking':
+            wf_info = IWorkflowInfo(self.__parent__)
+            try:
+                wf_info.fireTransition('approve')
+            except InvalidTransitionError:
+                msg = log = 'Error: %s' % sys.exc_info()[1]
+                return 'danger', msg, log
+        log = 'approved: %s' % self.p_id
+        msg = _('Payment approved')
+        flashtype = 'success'
+        return flashtype, msg, log
+
+    def doAfterApplicantPayment(self):
+        """Process applicant after payment was made.
+        """
+        if not (self.__parent__.special and self.__parent__.state == PAID) \
+            and self.p_category != 'admission_checking':
+            wf_info = IWorkflowInfo(self.__parent__)
+            try:
+                wf_info.fireTransition('pay')
+            except InvalidTransitionError:
+                msg = log = 'Error: %s' % sys.exc_info()[1]
+                return 'danger', msg, log
+        log = 'successful payment: %s' % self.p_id
+        msg = _('Successful payment')
+        flashtype = 'success'
+        return flashtype, msg, log
 
 CustomApplicantOnlinePayment = attrs_to_fields(
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/tests/test_browser.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/tests/test_browser.py	(revision 15130)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/tests/test_browser.py	(revision 15131)
@@ -74,4 +74,7 @@
             'Please pay admission checking fee before trying to download'
             in self.browser.contents)
+        # History and state is also missing
+        self.assertFalse('...' in self.browser.contents)
+        self.assertFalse('Application initialized' in self.browser.contents)
         # Pay admission checking fee.
         self.browser.getControl("Add admission checking").click()
@@ -84,4 +87,7 @@
         self.assertTrue('<a href="http://localhost/app/faculties/fac1/dep1/certificates/CERT1">CERT1 - Unnamed Certificate</a>' in self.browser.contents)
         self.assertTrue('<span>55</span>' in self.browser.contents)
+        # History and state are visible
+        self.assertTrue('...' in self.browser.contents)
+        self.assertTrue('Application initialized' in self.browser.contents)
         # Application slip can be downloaded again.
         self.browser.getLink("Download application slip").click()
Index: main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/viewlets.py
===================================================================
--- main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/viewlets.py	(revision 15130)
+++ main/kofacustom.edopoly/trunk/src/kofacustom/edopoly/applicants/viewlets.py	(revision 15131)
@@ -20,4 +20,6 @@
 from waeup.kofa.browser.viewlets import ManageActionButton
 from waeup.kofa.applicants.viewlets import PDFActionButton
+from waeup.kofa.applicants.workflow import (
+    INITIALIZED, ADMITTED, PAID, STARTED, NOT_ADMITTED, CREATED)
 from kofacustom.edopoly.applicants.interfaces import ICustomApplicant
 from kofacustom.edopoly.interfaces import MessageFactory as _
@@ -29,8 +31,8 @@
         """Get a URL to the target...
         """
-        if self.context.state in ('initialized', 'started', 'paid') \
+        if self.context.state in (INITIALIZED, STARTED, PAID) \
             or self.context.special:
             return
-        if self.context.state == 'admitted' and \
+        if self.context.state in (ADMITTED, NOT_ADMITTED, CREATED) and \
             not self.context.admchecking_fee_paid():
             return
