Index: /main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicants.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicants.py	(revision 6195)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicants.py	(revision 6196)
@@ -28,5 +28,5 @@
 from waeup.sirp.app import University
 from waeup.sirp.applicants.interfaces import (
-    IResultEntry, IApplicant, IApplicantPDEEditData,
+    IResultEntry, IApplicant, IApplicantEdit,
     DEFAULT_PASSPORT_IMAGE_MALE,
     )
@@ -41,5 +41,5 @@
 
 class Applicant(grok.Model):
-    grok.implements(IApplicant, IApplicantPDEEditData)
+    grok.implements(IApplicant,IApplicantEdit)
     grok.provides(IApplicant)
 
Index: /main/waeup.sirp/trunk/src/waeup/sirp/applicants/browser.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/applicants/browser.py	(revision 6195)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/applicants/browser.py	(revision 6196)
@@ -54,5 +54,5 @@
 from waeup.sirp.applicants import ResultEntry, Applicant, get_applicant_data
 from waeup.sirp.applicants.interfaces import (
-    IApplicant, IApplicantPrincipal, IApplicantPDEEditData,
+    IApplicant, IApplicantPrincipal,IApplicantEdit,
     IApplicantsRoot, IApplicantsContainer, IApplicantsContainerProvider,
     IApplicantsContainerAdd, application_types_vocab
@@ -435,21 +435,62 @@
     grok.require('waeup.viewApplication')
     form_fields = grok.AutoFields(IApplicant).omit('locked')
-    form_fields['fst_sit_results'].custom_widget = list_results_display_widget
+    #form_fields['fst_sit_results'].custom_widget = list_results_display_widget
     form_fields['passport'].custom_widget = ThumbnailWidget
     form_fields['date_of_birth'].custom_widget = FriendlyDateDisplayWidget('le')
     label = 'Applicant'
-    title = 'Applicant'
-    pnav = 3
-
-class EditApplicantStudent(WAeUPEditFormPage):
+    pnav = 3
+
+    @property
+    def title(self):
+        return '%s' % self.context.access_code
+
+    @property
+    def label(self):
+        container_title = self.context.__parent__.title
+        return '%s Application Record' % container_title
+
+class EditApplicantFull(WAeUPEditFormPage):
+    """A full edit view for applicant data.
+    """
+    grok.context(IApplicant)
+    grok.name('edit_full')
+    grok.require('waeup.editFullApplication')
+    form_fields = grok.AutoFields(IApplicant)   #.omit('locked')
+    form_fields['passport'].custom_widget = EncodingImageFileWidget
+    form_fields['date_of_birth'].custom_widget = FriendlyDateWidget('le-year')
+    grok.template('form_edit')
+    pnav = 3
+
+    def update(self):
+        datepicker.need() # Enable jQuery datepicker in date fields.
+        super(EditApplicantFull, self).update()
+        return
+
+    @property
+    def title(self):
+        return self.context.access_code
+
+    @property
+    def label(self):
+        container_title = self.context.__parent__.title
+        return '%s Application Form' % container_title
+
+    @grok.action('Save')
+    def save(self, **data):
+        self.applyData(self.context, **data)
+        self.context._p_changed = True
+        self.flash('Form has been saved.')
+        return
+
+class EditApplicantStudent(EditApplicantFull):
     """An applicant-centered edit view for applicant data.
     """
-    grok.context(IApplicant)
+    grok.context(IApplicantEdit)
     grok.name('edit')
     grok.require('waeup.editApplication')
-    form_fields = grok.AutoFields(IApplicantPDEEditData).omit('locked')
+    form_fields = grok.AutoFields(IApplicantEdit).omit('locked')
     form_fields['passport'].custom_widget = EncodingImageFileWidget
     form_fields['date_of_birth'].custom_widget = FriendlyDateWidget('le-year')
-    grok.template('form_edit_pde')
+    grok.template('form_edit')
 
     def emitLockMessage(self):
@@ -466,16 +507,10 @@
         return
 
-    def filteredWidgets(self):
-        for widget in self.widgets:
-            if widget.name == 'form.confirm_passport':
-                continue
-            yield widget
-
-    @property
-    def label(self):
-        # XXX: Use current/upcoming session
-        return 'Apply for Post UDE Screening Test (2009/2010)'
-    title = 'Edit Application'
-    pnav = 3
+    def dataNotComplete(self):
+        if self.context.confirm_passport is not True:
+            return 'Passport confirmation box not ticked.'
+        if len(self.errors) > 0:
+            return 'Form has errors.'
+        return False
 
     @grok.action('Save')
@@ -486,4 +521,5 @@
         self.applyData(self.context, **data)
         self.context._p_changed = True
+        self.flash('Form has been saved.')
         return
 
@@ -495,53 +531,10 @@
         self.applyData(self.context, **data)
         self.context._p_changed = True
-        if not self.dataComplete():
-            self.flash('Data yet not complete.')
+        if self.dataNotComplete():
+            self.flash(self.dataNotComplete())
             return
         self.context.locked = True
-        return
-
-    def dataComplete(self):
-        if self.context.confirm_passport is not True:
-            return False
-        if len(self.errors) > 0:
-            return False
-        return True
-
-class EditApplicantFull(WAeUPEditFormPage):
-    """A full edit view for applicant data.
-
-    This one is meant to be used by officers only.
-    """
-    grok.context(IApplicant)
-    grok.name('edit_full')
-    grok.require('waeup.editFullApplication')
-    form_fields = grok.AutoFields(IApplicantPDEEditData).omit('locked')
-    form_fields['passport'].custom_widget = EncodingImageFileWidget
-    form_fields['date_of_birth'].custom_widget = FriendlyDateWidget('le-year')
-    grok.template('form_edit_full')
-
-    def update(self):
-        if self.context.locked:
-            self.emitLockMessage()
-            return
-        datepicker.need() # Enable jQuery datepicker in date fields.
-        super(EditApplicantFull, self).update()
-        return
-
-    def filteredWidgets(self):
-        for widget in self.widgets:
-            if widget.name == 'form.confirm_passport':
-                continue
-            yield widget
-
-    @property
-    def label(self):
-        return 'Application for %s' % self.context.access_code
-    title = 'Edit Application'
-    pnav = 3
-
-    @grok.action('Save')
-    def save(self, **data):
-        self.applyData(self.context, **data)
-        self.context._p_changed = True
-        return
+        self.flash('Form has been submitted.')
+        self.redirect(self.url(self.context))
+        return
+
Index: /main/waeup.sirp/trunk/src/waeup/sirp/applicants/browser_templates/form_edit.pt
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/applicants/browser_templates/form_edit.pt	(revision 6196)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/applicants/browser_templates/form_edit.pt	(revision 6196)
@@ -0,0 +1,61 @@
+<form action="." tal:attributes="action request/URL" method="post"
+      class="edit-form" enctype="multipart/form-data">
+
+  <h2 i18n:translate=""
+    tal:condition="view/label"
+    tal:content="view/label">Label</h2>
+
+  <div class="form-status"
+    tal:define="status view/status"
+    tal:condition="status">
+
+    <div i18n:translate="" tal:content="view/status">
+      Form status summary
+    </div>
+
+    <ul class="errors" tal:condition="view/errors">
+      <li tal:repeat="error view/error_views">
+         <span tal:replace="structure error">Error Type</span>
+      </li>
+    </ul>
+  </div>
+
+  <table class="form-fields zebra">
+    <tbody>
+      <tal:block repeat="widget view/widgets">
+        <tr>
+          <td class="label" tal:define="hint widget/hint">
+            <label tal:condition="python:hint"
+                   tal:attributes="for widget/name">
+              <span class="required" tal:condition="widget/required">*
+              </span><span i18n:translate=""
+                             tal:content="widget/label">label</span>
+            </label>
+            <label tal:condition="python:not hint"
+                   tal:attributes="for widget/name">
+              <span class="required" tal:condition="widget/required">*
+              </span><span i18n:translate=""
+                             tal:content="widget/label">label</span>
+            </label>
+          </td>
+          <td class="field">
+            <div class="widget" tal:content="structure widget">
+              <input type="text" />
+            </div>
+            <div class="error" tal:condition="widget/error">
+              <span tal:replace="structure widget/error">error</span>
+            </div>
+          </td>
+        </tr>
+      </tal:block>
+    </tbody>
+  </table>
+
+  <div id="actionsView">
+    <span class="actionButtons" tal:condition="view/availableActions">
+      <input tal:repeat="action view/actions"
+             tal:replace="structure action/render"
+             />
+    </span>
+  </div>
+</form>
