Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/applicant.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/applicant.py	(revision 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/applicant.py	(revision 8039)
@@ -163,4 +163,5 @@
     applicant_id = index.Field(attribute='applicant_id')
     reg_number = index.Field(attribute='reg_number')
+    email = index.Field(attribute='email')
 
 class ApplicantFactory(grok.GlobalUtility):
Index: /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/browser.py	(revision 8039)
@@ -745,9 +745,10 @@
     form_fields = grok.AutoFields(IApplicantEdit).omit(
         'locked', 'course_admitted', 'student_id',
-        'screening_score', 'reg_number'
+        'screening_score',
         )
     form_fields['date_of_birth'].custom_widget = FriendlyDateWidget('le-year')
     form_fields['phone'].custom_widget = PhoneWidget
     form_fields['applicant_id'].for_display = True
+    form_fields['reg_number'].for_display = True
     grok.template('applicanteditpage')
     manage_applications = False
@@ -917,5 +918,5 @@
                 if applicant.password is not None:
                     self.flash(_('Your password has already been set. '
-                                  'You can proceed to the login page.'))
+                                  'Please proceed to the login page.'))
                     return
                 elif getattr(applicant,'firstname',None) is None:
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 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_browser.py	(revision 8039)
@@ -21,7 +21,9 @@
 import shutil
 import tempfile
+import grok
 from StringIO import StringIO
 from datetime import datetime, date, timedelta
 from mechanize import LinkNotFoundError
+from zope.event import notify
 from zope.component import createObject, getUtility
 from zope.component.hooks import setSite, clearSite
@@ -866,2 +868,19 @@
             self.container_path + '/registration_complete?email=xx%40yy.zz')
         return
+
+    def test_change_password_request(self):
+        self.browser.open('http://localhost/app/sendpw')
+        self.browser.getControl(name="form.reg_number").value = '1234'
+        self.browser.getControl(name="form.email").value = 'aa@aa.ng'
+        self.browser.getControl("Get new login credentials").click()
+        self.assertTrue('No record found' in self.browser.contents)
+        self.applicant.email = 'aa@aa.ng'
+        # Update the catalog
+        notify(grok.ObjectModifiedEvent(self.applicant))
+        self.browser.open('http://localhost/app/sendpw')
+        self.browser.getControl(name="form.reg_number").value = '1234'
+        self.browser.getControl(name="form.email").value = 'aa@aa.ng'
+        self.browser.getControl("Get new login credentials").click()
+        self.assertTrue(
+            'An email with your user name and password has been sent'
+            in self.browser.contents)
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/loginpage.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/loginpage.pt	(revision 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/loginpage.pt	(revision 8039)
@@ -42,6 +42,6 @@
     <strong><a href  ="setpassword"> here</a></strong>.
   </p>
-  <p i18n:translate="login_trouble3"> Or simply forgot your student id or password? Then request a new password
-    <strong><a href="changepw"> here</a></strong>.
+  <p i18n:translate="login_trouble3"> Or simply forgot your student id, application id or password? Then request a new password
+    <strong><a href="sendpw"> here</a></strong>.
   </p>
 </form>
Index: /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 8039)
@@ -325,5 +325,5 @@
 
     mode = schema.Choice(
-        title = _(u'Import mode'),
+        title = _(u'Import Mode'),
         values = ['create', 'update', 'remove']
         )
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 8039)
@@ -1851,8 +1851,8 @@
     """
     grok.context(IUniversity)
-    grok.name('changepw')
+    grok.name('sendpw')
     grok.require('waeup.Anonymous')
-    grok.template('changepw')
-    label = _('Change my password')
+    grok.template('sendpassword')
+    label = _('Send me a new password')
     form_fields = grok.AutoFields(IStudentChangePassword)
 
@@ -1870,13 +1870,22 @@
             # No need to flash something.
             return
-        # Search student
-        cat = queryUtility(ICatalog, name='students_catalog')
+        # Search student or applicant
         reg_number = data['reg_number']
         email = data['email']
+        cat = queryUtility(ICatalog, name='students_catalog')
         results = cat.searchResults(
             reg_number=(reg_number, reg_number),
             email=(email,email))
         if len(results) == 0:
-            self.flash(_('No student record found.'))
+            # Try also the applicants_catalog if no student record was found.
+            cat = queryUtility(ICatalog, name='applicants_catalog')
+            if cat is None:
+                self.flash(_('Application package not installed.'))
+                return
+            results = cat.searchResults(
+                reg_number=(reg_number, reg_number),
+                email=(email,email))
+        if len(results) == 0:
+            self.flash(_('No record found.'))
             return
         student = list(results)[0]
Index: in/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/changepw.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/changepw.pt	(revision 8038)
+++ 	(revision )
@@ -1,24 +1,0 @@
-<form action="." tal:attributes="action request/URL" method="post"
-      i18n:domain="waeup.kofa" enctype="multipart/form-data">
-
-  <table class="form-table">
-    <tbody>
-      <tal:widgets content="structure provider:widgets" />
-      <tr tal:condition="view/captcha_code">
-        <td i18n:translate="solve_captcha">
-          Please solve the captcha<br />to prevent misuse of this service:
-        </td>
-        <td>
-          <div tal:content="structure view/captcha_code"></div>
-        </td>
-      </tr>
-
-    </tbody>
-  </table>
-
-  <div tal:condition="view/availableActions">
-    <input tal:repeat="action view/actions"
-           tal:replace="structure action/render"
-           />
-  </div>
-</form>
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/sendpassword.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/sendpassword.pt	(revision 8039)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/sendpassword.pt	(revision 8039)
@@ -0,0 +1,33 @@
+<form action="." tal:attributes="action request/URL" method="post"
+      i18n:domain="waeup.kofa" enctype="multipart/form-data">
+
+  <table class="form-table">
+    <tbody>
+      <tal:widgets content="structure provider:widgets" />
+      <tr tal:condition="view/captcha_code">
+        <td i18n:translate="solve_captcha">
+          Please solve the captcha<br />to prevent misuse of this service:
+        </td>
+        <td>
+          <div tal:content="structure view/captcha_code"></div>
+        </td>
+      </tr>
+
+    </tbody>
+  </table>
+
+  <p i18n:translate="email_address_problem">
+    Enter the email address stored on Kofa.
+    You can't change your email address here.
+    If you've forgotten your email address or the email
+    address stored in Kofa is wrong or no longer valid,
+    use the enquiries form to request a change
+    of address.
+  </p>
+  <br />
+  <div tal:condition="view/availableActions">
+    <input tal:repeat="action view/actions"
+           tal:replace="structure action/render"
+           />
+  </div>
+</form>
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 8038)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 8039)
@@ -1643,5 +1643,5 @@
 
     def test_change_password_request(self):
-        self.browser.open('http://localhost/app/changepw')
+        self.browser.open('http://localhost/app/sendpw')
         self.browser.getControl(name="form.reg_number").value = '123'
         self.browser.getControl(name="form.email").value = 'aa@aa.ng'
