Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8983)
@@ -492,5 +492,5 @@
     grok.template('applicantdisplaypage')
     form_fields = grok.AutoFields(IApplicant).omit(
-        'locked', 'course_admitted', 'password')
+        'locked', 'course_admitted', 'password', 'suspended')
     label = _('Applicant')
     pnav = 3
@@ -881,5 +881,5 @@
     form_fields = grok.AutoFields(IApplicantEdit).omit(
         'locked', 'course_admitted', 'student_id',
-        'screening_score',
+        'screening_score', 'suspended'
         )
     form_fields['applicant_id'].for_display = True
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser_templates/applicantdisplaypage.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser_templates/applicantdisplaypage.pt	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser_templates/applicantdisplaypage.pt	(revision 8983)
@@ -1,4 +1,10 @@
-<h2>
-... <span tal:replace="context/translated_state">APPLICATIONSTATE</span> ...
+<h2 i18n:domain="waeup.kofa">
+  ...
+  <span tal:replace="context/translated_state">APPLICATIONSTATE
+  </span>
+  <span tal:omit-tag=""
+    i18n:translate="" tal:condition="context/suspended">(account suspended)
+  </span>
+  ...
 </h2>
 
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser_templates/applicanteditpage.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser_templates/applicanteditpage.pt	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser_templates/applicanteditpage.pt	(revision 8983)
@@ -3,6 +3,12 @@
       autocomplete="off">
 
-  <h2>
-  ... <span tal:replace="context/translated_state">APPLICATIONSTATE</span> ...
+  <h2 i18n:domain="waeup.kofa">
+    ...
+    <span tal:replace="context/translated_state">APPLICATIONSTATE
+    </span>
+    <span tal:omit-tag=""
+      i18n:translate="" tal:condition="context/suspended">(account suspended)
+    </span>
+    ...
   </h2>
 
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/interfaces.py	(revision 8983)
@@ -322,4 +322,9 @@
     application_number = Attribute('The key under which the record is stored')
 
+    suspended = schema.Bool(
+        title = _(u'Account suspended'),
+        default = False,
+        )
+
     applicant_id = schema.TextLine(
         title = _(u'Applicant Id'),
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_authentication.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_authentication.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_authentication.py	(revision 8983)
@@ -64,4 +64,5 @@
     email = None
     phone = None
+    suspended = False
 
 
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py	(revision 8983)
@@ -821,5 +821,5 @@
         self.browser.getControl("Final Submit").click()
         self.assertTrue(
-            '... submitted ...' in self.browser.contents)
+            'Application submitted' in self.browser.contents)
         # ... or allow submission after deadline.
         IWorkflowState(self.applicant).setState('paid')
@@ -830,5 +830,5 @@
         self.browser.getControl("Final Submit").click()
         self.assertTrue(
-            '... submitted ...' in self.browser.contents)
+            'Application submitted' in self.browser.contents)
         self.browser.goBack(count=1)
         self.browser.getControl("Save").click()
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py	(revision 8983)
@@ -145,10 +145,10 @@
             'history,lastname,locked,middlename,notice,password,phone,'
             'reg_number,screening_score,screening_venue,sex,state,'
-            'student_id,container_code\r\n'
+            'student_id,suspended,container_code\r\n'
             'dp2011_654321,,654321,,,,,Anna Tester,,Anna,'
             in result)
         self.assertTrue(
             'Application initialized by system\'],Tester,'
-            '0,,,,,,,,,initialized,,dp2011\r\n'
+            '0,,,,,,,,,initialized,,0,dp2011\r\n'
             in result)
         return
@@ -169,5 +169,5 @@
             'history,lastname,locked,middlename,notice,password,phone,'
             'reg_number,screening_score,screening_venue,sex,state,'
-            'student_id,container_code\r\n'
+            'student_id,suspended,container_code\r\n'
             'dp2011_654321,,654321,CERT1,CERT1,CERT1,1981-02-04#,'
             'Anna M. Tester,anna@sample.com,Anna,'
@@ -176,5 +176,5 @@
             'Application initialized by system\'],'
             'Tester,0,M.,"Some notice\nin lines.",any password,'
-            '+234-123-12345,123456,98,Exam Room,f,initialized,,dp2011\r\n'
+            '+234-123-12345,123456,98,Exam Room,f,initialized,,0,dp2011\r\n'
             in result)
 
@@ -193,5 +193,5 @@
             'history,lastname,locked,middlename,notice,password,phone,'
             'reg_number,screening_score,screening_venue,sex,state,'
-            'student_id,container_code\r\n'
+            'student_id,suspended,container_code\r\n'
             'dp2011_654321,,654321,CERT1,CERT1,CERT1,1981-02-04#,'
             'Anna M. Tester,anna@sample.com,Anna,'
@@ -200,5 +200,5 @@
             'Application initialized by system\'],'
             'Tester,0,M.,"Some notice\nin lines.",any password,'
-            '+234-123-12345,123456,98,Exam Room,f,initialized,,dp2011\r\n'
-            in result)
-        return
+            '+234-123-12345,123456,98,Exam Room,f,initialized,,0,dp2011\r\n'
+            in result)
+        return
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/authentication.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/authentication.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/authentication.py	(revision 8983)
@@ -102,4 +102,6 @@
     def checkPassword(self, password):
         """Check whether the given `password` matches the one stored.
+
+        We additionally check if student account has been suspended.
         """
         if not isinstance(password, basestring):
@@ -107,4 +109,6 @@
         if not getattr(self.context, 'password', None):
             # unset/empty passwords do never match
+            return False
+        if self.context.suspended == True:
             return False
         passwordmanager = getUtility(IPasswordManager, 'SSHA')
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 8983)
@@ -292,10 +292,13 @@
     grok.require('waeup.viewStudent')
     grok.template('basepage')
-    form_fields = grok.AutoFields(IStudentBase).omit('password')
+    form_fields = grok.AutoFields(IStudentBase).omit('password', 'suspended')
     pnav = 4
 
     @property
     def label(self):
-        return _('${a}: Base Data',
+        if self.context.suspended:
+            return _('${a}: Base Data (account suspended)',
+                mapping = {'a':self.context.display_fullname})
+        return  _('${a}: Base Data',
             mapping = {'a':self.context.display_fullname})
 
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 8983)
@@ -157,4 +157,9 @@
     is_postgrad = Attribute('True if postgraduate student')
 
+    suspended = schema.Bool(
+        title = _(u'Account suspended'),
+        default = False,
+        )
+
     student_id = schema.TextLine(
         title = _(u'Student Id'),
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_authentication.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_authentication.py	(revision 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_authentication.py	(revision 8983)
@@ -65,4 +65,5 @@
     email = None
     phone = None
+    suspended = False
 
 
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 8982)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py	(revision 8983)
@@ -44,10 +44,10 @@
             'adm_code,clearance_locked,clr_code,date_of_birth,email,employer,'
             'firstname,lastname,matric_number,middlename,nationality,'
-            'perm_address,phone,reg_number,sex,student_id,password,'
+            'perm_address,phone,reg_number,sex,student_id,suspended,password,'
             'state,history,certcode\r\n'
 
             'my adm code,0,my clr code,1981-02-04#,anna@sample.com,,'
             'Anna,Tester,M123456,M.,NG,"Studentroad 21\nLagos 123456\n",'
-            '+234-123-12345#,123456,f,A111111,,created'
+            '+234-123-12345#,123456,f,A111111,0,,created'
             in result
             )
@@ -64,10 +64,10 @@
             'adm_code,clearance_locked,clr_code,date_of_birth,email,employer,'
             'firstname,lastname,matric_number,middlename,nationality,'
-            'perm_address,phone,reg_number,sex,student_id,password,'
+            'perm_address,phone,reg_number,sex,student_id,suspended,password,'
             'state,history,certcode\r\n'
 
             'my adm code,0,my clr code,1981-02-04#,anna@sample.com,,'
             'Anna,Tester,M123456,M.,NG,"Studentroad 21\nLagos 123456\n",'
-            '+234-123-12345#,123456,f,A111111,,created'
+            '+234-123-12345#,123456,f,A111111,0,,created'
             in result
             )
@@ -83,10 +83,10 @@
             'adm_code,clearance_locked,clr_code,date_of_birth,email,employer,'
             'firstname,lastname,matric_number,middlename,nationality,'
-            'perm_address,phone,reg_number,sex,student_id,password,'
+            'perm_address,phone,reg_number,sex,student_id,suspended,password,'
             'state,history,certcode\r\n'
 
             'my adm code,0,my clr code,1981-02-04#,anna@sample.com,,'
             'Anna,Tester,M123456,M.,NG,"Studentroad 21\nLagos 123456\n",'
-            '+234-123-12345#,123456,f,A111111,,created'
+            '+234-123-12345#,123456,f,A111111,0,,created'
             in result
             )
