Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/applicant.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/applicant.py	(revision 15990)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/applicant.py	(revision 15991)
@@ -27,5 +27,5 @@
     ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit,
     IPUTMEApplicantEdit, ITranscriptApplicant, ICertificateRequest,
-    IFedexRequest)
+    IFedexRequest, IRecruitment)
 
 class CustomApplicant(NigeriaApplicant):
@@ -34,5 +34,5 @@
         ICustomPGApplicantEdit, IPUTMEApplicantEdit,
         ITranscriptApplicant, ICertificateRequest,
-        IFedexRequest)
+        IFedexRequest, IRecruitment)
     grok.provides(ICustomApplicant)
 
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser.py	(revision 15990)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser.py	(revision 15991)
@@ -56,5 +56,6 @@
     IVerificationRequest,
     ISendByEmailRequest,
-    IFedexRequest
+    IFedexRequest,
+    IRecruitment,
     )
 
@@ -251,5 +252,8 @@
             form_fields = grok.AutoFields(IFedexRequest).omit(
                 'locked', 'suspended')
-            form_fields['dispatch_address'].custom_widget = BytesDisplayWidget
+        if self.target is not None and self.target == 'rec':
+            form_fields = grok.AutoFields(IRecruitment).omit(
+                'locked', 'suspended')
+            form_fields['address'].custom_widget = BytesDisplayWidget
             return form_fields
         if self.target is not None and self.target == 'send':
@@ -426,4 +430,8 @@
             form_fields['applicant_id'].for_display = True
             return form_fields
+        if self.target is not None and self.target == 'rec':
+            form_fields = grok.AutoFields(IRecruitment)
+            form_fields['applicant_id'].for_display = True
+            return form_fields
         # AAUE is using the same interface for all regular applications.
         form_fields = grok.AutoFields(ICustomUGApplicant)
@@ -467,5 +475,5 @@
             if not store.getFileByContext(self.context, attr=u'passport.jpg'):
                 return _('No passport picture uploaded.')
-            if not self.target[:4] in ('cert', 'tran') and \
+            if not self.target in ('cert', 'trans') and \
                 not self.request.form.get('confirm_passport', False):
                 return _('Passport picture confirmation box not ticked.')
@@ -553,4 +561,9 @@
         if self.target is not None and self.target == 'fedex':
             form_fields = grok.AutoFields(IFedexRequest).omit(
+                'locked', 'suspended')
+            form_fields['applicant_id'].for_display = True
+            return form_fields
+        if self.target is not None and self.target == 'rec':
+            form_fields = grok.AutoFields(IRecruitment).omit(
                 'locked', 'suspended')
             form_fields['applicant_id'].for_display = True
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser_templates/applicanteditpage.pt
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser_templates/applicanteditpage.pt	(revision 15990)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/browser_templates/applicanteditpage.pt	(revision 15991)
@@ -101,5 +101,5 @@
 
   <div tal:condition="python: not view.manage_applications
-                              and not view.target in ('trans', 'cert')
+                              and not view.target in ('trans', 'cert', 'rec')
                               and context.__parent__.with_picture">
     <input id="confirm_passport" name="confirm_passport"
@@ -116,5 +116,5 @@
   </div>
   <div tal:condition="python: not view.manage_applications
-                              and view.target not in ('trans', 'cert')
+                              and view.target in ('rec',)
                               and context.__parent__.with_picture">
     <input id="confirm_passport" name="confirm_passport"
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py	(revision 15990)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/interfaces.py	(revision 15991)
@@ -67,4 +67,10 @@
     )
 
+application_types_vocab = SimpleKofaVocabulary(
+    (_('Academic Staff Positions'), 'academic'),
+    (_('Senior Non-Teaching Staff'), 'senior'),
+    (_('Junior Staff (Non-Teaching)'), 'junior'),
+    )
+
 request_types_vocab = SimpleKofaVocabulary(
     (_('Scanned Result'), 'result'),
@@ -978,4 +984,77 @@
         )
 
+class IRecruitment(IKofaObject):
+    """A recruitment application.
+    """
+
+    suspended = schema.Bool(
+        title = _(u'Account suspended'),
+        default = False,
+        required = False,
+        )
+
+    locked = schema.Bool(
+        title = _(u'Form locked'),
+        default = False,
+        required = False,
+        )
+
+    applicant_id = schema.TextLine(
+        title = _(u'Application Id'),
+        required = False,
+        readonly = False,
+        )
+
+    #reg_number = TextLineChoice(
+    #    title = _(u'Kofa Registration Number'),
+    #    readonly = False,
+    #    required = True,
+    #    source = contextual_reg_num_source,
+    #    )
+
+    application_types = schema.Choice(
+        title = _(u'Application Category'),
+        vocabulary = application_types_vocab,
+        required = True,
+        )
+
+    firstname = schema.TextLine(
+        title = _(u'First Name'),
+        required = True,
+        )
+
+    middlename = schema.TextLine(
+        title = _(u'Middle Name'),
+        required = False,
+        )
+
+    lastname = schema.TextLine(
+        title = _(u'Last Name (Surname)'),
+        required = True,
+        )
+
+    sex = schema.Choice(
+        title = _(u'Gender'),
+        source = GenderSource(),
+        required = True,
+        )
+
+    email = schema.ASCIILine(
+        title = _(u'Email Address'),
+        required = True,
+        constraint=validate_email,
+        )
+
+    phone = PhoneNumber(
+        title = _(u'Phone'),
+        description = u'',
+        required = False,
+        )
+
+    address = schema.Text(
+        title = _(u'Address'),
+        required = True,
+        )
+
 class ISendByEmailRequest(IKofaObject):
     """A applicant asking for sending an email.
@@ -1059,5 +1138,5 @@
                        ITranscriptApplicant, ICertificateRequest,
                        IVerificationRequest, ISendByEmailRequest,
-                       IFedexRequest):
+                       IFedexRequest, IRecruitment):
     """An interface for all types of applicants.
 
Index: main/waeup.aaue/trunk/src/waeup/aaue/applicants/utils.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/applicants/utils.py	(revision 15990)
+++ main/waeup.aaue/trunk/src/waeup/aaue/applicants/utils.py	(revision 15991)
@@ -48,4 +48,5 @@
         'send': ['Send-By-Email Request', 'SE'],
         'fedex': ['Payment for Courier (Fedex)', 'FED'],
+        'rec': ['AAU Recruitment', 'REC'],
         }
 
