Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15173)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 15174)
@@ -1146,26 +1146,4 @@
         return
 
-class StudentTranscriptValidateView(UtilityView, grok.View):
-    """ View to validate transcript
-    """
-    grok.context(IStudentStudyCourse)
-    grok.name('validate_transcript')
-    grok.require('waeup.processTranscript')
-
-    def update(self, SUBMIT=None):
-        if self.context.student.state != TRANSREQ:
-            self.flash(_('Student is in wrong state.'), type="warning")
-            self.redirect(self.url(self.context))
-            return
-        # Fire transition
-        IWorkflowInfo(self.context.student).fireTransition(
-            'validate_transcript')
-        self.flash(_('Transcript validated.'))
-        self.redirect(self.url(self.context) + '/transcript')
-        return
-
-    def render(self):
-        return
-
 class StudentTranscriptSignView(UtilityView, grok.View):
     """ View to sign transcript
@@ -1208,4 +1186,54 @@
         return
 
+class StudentTranscriptValidateFormPage(KofaEditFormPage):
+    """ Page to validate transcript
+    """
+    grok.context(IStudentStudyCourse)
+    grok.name('validate_transcript')
+    grok.require('waeup.processTranscript')
+    grok.template('transcriptprocess')
+    label = _('Validate transcript')
+    buttonname = _('Save comment and validate transcript')
+    pnav = 4
+
+    def update(self, SUBMIT=None):
+        super(StudentTranscriptValidateFormPage, self).update()
+        if self.context.student.state != TRANSREQ:
+            self.flash(_('Student is in wrong state.'), type="warning")
+            self.redirect(self.url(self.context))
+            return
+        if getattr(self.context, 'transcript_comment', None) is not None:
+            self.correspondence = self.context.transcript_comment.replace(
+                '\n', '<br>')
+        else:
+            self.correspondence = ''
+        if getattr(self.context, 'transcript_signees', None) is not None:
+            self.signees = self.context.transcript_signees.replace(
+                '\n', '<br><br>')
+        else:
+            self.signees = ''
+        if SUBMIT is None:
+            return
+        # Fire transition
+        IWorkflowInfo(self.context.student).fireTransition('validate_transcript')
+        self.flash(_('Transcript validated.'))
+        comment = self.request.form.get('comment', '').replace('\r', '')
+        tz = getattr(queryUtility(IKofaUtils), 'tzinfo', pytz.utc)
+        today = now(tz).strftime('%d/%m/%Y %H:%M:%S %Z')
+        old_transcript_comment = getattr(
+            self.context, 'transcript_comment', None)
+        if old_transcript_comment == None:
+            old_transcript_comment = ''
+        self.context.transcript_comment = '''On %s %s wrote:
+
+%s
+
+%s''' % (today, self.request.principal.id, comment,
+         old_transcript_comment)
+        self.context.writeLogMessage(
+            self, 'comment: %s' % comment.replace('\n', '<br>'))
+        self.redirect(self.url(self.context) + '/transcript')
+        return
+
 class StudentTranscriptReleaseFormPage(KofaEditFormPage):
     """ Page to release transcript
@@ -1214,5 +1242,5 @@
     grok.name('release_transcript')
     grok.require('waeup.processTranscript')
-    grok.template('transcriptrelease')
+    grok.template('transcriptprocess')
     label = _('Release transcript')
     buttonname = _('Save comment and release transcript')
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcriptprocess.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcriptprocess.pt	(revision 15174)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcriptprocess.pt	(revision 15174)
@@ -0,0 +1,54 @@
+<form method="POST" i18n:domain="waeup.kofa">
+
+  <ul class="tabs nav nav-tabs" data-tabs="tabs">
+    <li class="active">
+      <a href="#tab1" data-toggle="tab">
+        <span i18n:translate="">Process request</span>
+      </a>
+    </li>
+    <li>
+      <a href="#tab2" data-toggle="tab">
+        <span i18n:translate="">View correspondence</span>
+      </a>
+    </li>
+    <li>
+      <a href="#tab3" data-toggle="tab">
+        <span i18n:translate="">View signatures</span>
+      </a>
+    </li>
+  </ul>
+
+  <div class="tab-content">
+    <div id="tab1" class="active tab-pane">
+
+      <table class="form-table">
+        <tbody>
+          <tr>
+            <td class="fieldname" i18n:translate="">
+            Comment:
+            </td>
+            <td>
+            <textarea cols="60" name="comment" rows="6"></textarea>
+            </td>
+          </tr>
+          <tr>
+            <td colspan="2">
+              <br />
+              <input type="submit" name="SUBMIT" class="btn btn-primary"
+                     tal:attributes="value view/buttonname" />
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+
+    <div id="tab2" class="tab-pane">
+      <br /><p tal:content="structure view/correspondence"></p>
+    </div>
+
+    <div id="tab3" class="tab-pane">
+      <br /><p tal:content="structure view/signees"></p>
+    </div>
+  </div>
+
+</form>
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcriptrelease.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcriptrelease.pt	(revision 15173)
+++ 	(revision )
@@ -1,54 +1,0 @@
-<form method="POST" i18n:domain="waeup.kofa">
-
-  <ul class="tabs nav nav-tabs" data-tabs="tabs">
-    <li class="active">
-      <a href="#tab1" data-toggle="tab">
-        <span i18n:translate="">Process request</span>
-      </a>
-    </li>
-    <li>
-      <a href="#tab2" data-toggle="tab">
-        <span i18n:translate="">View correspondence</span>
-      </a>
-    </li>
-    <li>
-      <a href="#tab3" data-toggle="tab">
-        <span i18n:translate="">View signatures</span>
-      </a>
-    </li>
-  </ul>
-
-  <div class="tab-content">
-    <div id="tab1" class="active tab-pane">
-
-      <table class="form-table">
-        <tbody>
-          <tr>
-            <td class="fieldname" i18n:translate="">
-            Comment:
-            </td>
-            <td>
-            <textarea cols="60" name="comment" rows="6"></textarea>
-            </td>
-          </tr>
-          <tr>
-            <td colspan="2">
-              <br />
-              <input type="submit" name="SUBMIT" class="btn btn-primary"
-                     tal:attributes="value view/buttonname" />
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-
-    <div id="tab2" class="tab-pane">
-      <br /><p tal:content="structure view/correspondence"></p>
-    </div>
-
-    <div id="tab3" class="tab-pane">
-      <br /><p tal:content="structure view/signees"></p>
-    </div>
-  </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 15173)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 15174)
@@ -2179,4 +2179,5 @@
         self.browser.open(self.studycourse_path + '/transcript')
         self.browser.getLink("Validate transcript").click()
+        self.browser.getControl("Save comment and validate transcript").click()
         # After validation all manage forms are locked.
         self.browser.open(self.studycourse_path + '/manage')
@@ -2298,4 +2299,5 @@
         # Officer is on transcript page and can validate the transcript
         self.browser.getLink("Validate transcript").click()
+        self.browser.getControl("Save comment and validate transcript").click()
         self.assertTrue(
             '<div class="alert alert-success">Transcript validated.</div>'
