Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 6630)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 6631)
@@ -45,5 +45,6 @@
 from waeup.sirp.browser.resources import datepicker, tabs, datatable
 from waeup.sirp.browser.viewlets import (
-    ManageActionButton, PrimaryNavTab, LeftSidebarLink, AddActionButton,
+    ManageActionButton, PrimaryNavTab, LeftSidebarLink,
+    AddActionButton, ActionButton,
     )
 from waeup.sirp.image.browser.widget import (
@@ -62,5 +63,6 @@
     MultiListWidget, MultiListDisplayWidget)
 from waeup.sirp.students.interfaces import (
-    IStudentsContainer, IStudent,
+    IStudentsContainer, IStudent, IStudentClearance,
+    IStudentPersonal, IStudentBase
     )
 from waeup.sirp.students.students import (
@@ -220,15 +222,131 @@
         return
 
-class DisplayStudent(WAeUPDisplayFormPage):
+class StudentBaseDisplayFormPage(WAeUPDisplayFormPage):
+    """ Page to display student base data
+    """
     grok.context(IStudent)
     grok.name('index')
     grok.require('waeup.viewStudents')
-    form_fields = grok.AutoFields(IStudent)
-
-    @property
-    def title(self):
-        return 'Student: %s' % self.context.name
-
-    @property
-    def label(self):
-        return self.context.name
+    form_fields = grok.AutoFields(IStudentBase)
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
+
+    @property
+    def label(self):
+        return '%s: Base Data' % self.context.name
+
+class StudentBaseManageActionButton(ManageActionButton):
+    grok.order(1)
+    grok.context(IStudent)
+    grok.view(StudentBaseDisplayFormPage)
+    grok.require('waeup.manageStudents')
+    text = 'Edit base data'
+    target = 'edit_base'
+
+class StudentClearanceViewActionButton(ActionButton):
+    grok.order(2)
+    icon = 'actionicon_view.png'
+    grok.context(IStudent)
+    grok.view(StudentBaseDisplayFormPage)
+    grok.require('waeup.viewStudents')
+    text = 'View clearance data'
+    target = 'view_clearance'
+
+class StudentPersonalViewActionButton(ActionButton):
+    grok.order(3)
+    icon = 'actionicon_view.png'
+    grok.context(IStudent)
+    grok.view(StudentBaseDisplayFormPage)
+    grok.require('waeup.viewStudents')
+    text = 'View personal data'
+    target = 'view_personal'
+
+class StudentBaseManageFormPage(WAeUPEditFormPage):
+    """ View to edit student base data
+    """
+    grok.context(IStudent)
+    grok.name('edit_base')
+    grok.require('waeup.manageStudents')
+    form_fields = grok.AutoFields(IStudentBase).omit('student_id')
+    #grok.template('editstudentbase')
+    label = 'Edit base data'
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
+
+class StudentClearanceDisplayFormPage(WAeUPDisplayFormPage):
+    """ Page to display student clearance data
+    """
+    grok.context(IStudent)
+    grok.name('view_clearance')
+    grok.require('waeup.viewStudents')
+    form_fields = grok.AutoFields(IStudentClearance)
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
+
+    @property
+    def label(self):
+        return '%s: Clearance Data' % self.context.name
+
+class StudentClearanceManageActionButton(ManageActionButton):
+    grok.order(1)
+    grok.context(IStudent)
+    grok.view(StudentClearanceDisplayFormPage)
+    grok.require('waeup.manageStudents')
+    text = 'Edit clearance data'
+    target = 'edit_clearance'
+
+class StudentClearanceManageFormPage(WAeUPEditFormPage):
+    """ Page to edit student clearance data
+    """
+    grok.context(IStudent)
+    grok.name('edit_clearance')
+    grok.require('waeup.viewStudents')
+    form_fields = grok.AutoFields(IStudentClearance)
+    label = 'Edit clearance data'
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
+
+class StudentPersonalDisplayFormPage(WAeUPDisplayFormPage):
+    """ Page to display student personal data
+    """
+    grok.context(IStudent)
+    grok.name('view_personal')
+    grok.require('waeup.viewStudents')
+    form_fields = grok.AutoFields(IStudentPersonal)
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
+
+    @property
+    def label(self):
+        return '%s: Personal Data' % self.context.name
+
+class StudentPersonalManageActionButton(ManageActionButton):
+    grok.order(1)
+    grok.context(IStudent)
+    grok.view(StudentPersonalDisplayFormPage)
+    grok.require('waeup.manageStudents')
+    text = 'Edit personal data'
+    target = 'edit_personal'
+
+class StudentPersonalManageFormPage(WAeUPEditFormPage):
+    """ Page to edit student clearance data
+    """
+    grok.context(IStudent)
+    grok.name('edit_personal')
+    grok.require('waeup.viewStudents')
+    form_fields = grok.AutoFields(IStudentPersonal)
+    label = 'Edit personal data'
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentaddpage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentaddpage.pt	(revision 6630)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentaddpage.pt	(revision 6631)
@@ -9,12 +9,12 @@
     	<td><label for="form.student_id">Student Id:</label></td>
     	<td>
-         <input name="form.student_id" type="text" size="10" maxlength="10"
+         <input name="form.student_id" type="text" size="7" maxlength="7"
                 value="" />
     	</td>
       </tr>
       <tr>
-    	<td><label for="form.name">Name:</label></td>
+    	<td><label for="form.name">Full Name:</label></td>
     	<td>
-         <input name="form.name" type="text" size="10" maxlength="10"
+         <input name="form.name" type="text" size="30" maxlength="30"
                 value="" />
     	</td>
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentscontainermanagepage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentscontainermanagepage.pt	(revision 6630)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentscontainermanagepage.pt	(revision 6631)
@@ -31,6 +31,8 @@
     	<tr tal:repeat="item view/hitlist">
     	  <td><input type="checkbox" name="entries"
-    	             tal:attributes="value item/student_id" /></td>
-    	  <td tal:content="item/student_id">A123456</td>
+    	             tal:attributes="value item/context/__name__" /></td>
+    	  <td> <a tal:attributes="href item/url">
+          <span tal:content="item/student_id">A123456</span></a>
+        </td>
     	  <td tal:content="item/name">Bob</td>
     	</tr>
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentscontainerpage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentscontainerpage.pt	(revision 6630)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentscontainerpage.pt	(revision 6631)
@@ -29,5 +29,7 @@
       <tbody>
     	<tr tal:repeat="item view/hitlist">
-    	  <td tal:content="item/student_id">A123456</td>
+    	  <td> <a tal:attributes="href item/url">
+          <span tal:content="item/student_id">A123456</span></a>
+        </td>
     	  <td tal:content="item/name">Bob</td>
     	</tr>
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py	(revision 6630)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/interfaces.py	(revision 6631)
@@ -5,6 +5,6 @@
 from waeup.sirp.interfaces import IWAeUPObject
 
-class IStudent(IWAeUPObject):
-    """Representation of a student.
+class IStudentBase(IWAeUPObject):
+    """Representation of student base data.
     """
     student_id = schema.TextLine(
@@ -15,9 +15,30 @@
 
     name = schema.TextLine(
-        title = u'Name of student',
+        title = u'Full Name',
         default = u'Nobody',
         required = True,
         )
 
+class IStudentClearance(IWAeUPObject):
+    """Representation of student clearance data.
+    """
+
+    date_of_birth = schema.Date(
+        title = u'Date of Birth',
+        required = True,
+        )
+
+class IStudentPersonal(IWAeUPObject):
+    """Representation of student personal data.
+    """
+
+    perm_address = schema.Date(
+        title = u'Permanent Address',
+        required = False,
+        )
+
+class IStudent(IStudentBase,IStudentClearance,IStudentPersonal):
+    """Representation of a student.
+    """
 
 class IStudentsContainer(IWAeUPObject):
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 6630)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 6631)
@@ -71,7 +71,20 @@
         setSite(app)
 
+
+        # Add student
+        student = Student()
+        student.name = u'Anna Tester'
+        student.student_id = u'Z654321'
+        self.app['students'][student.student_id] = student
+
         self.container_path = 'http://localhost/app/students'
         self.manage_container_path = self.container_path + '/@@manage'
         self.add_student_path = self.container_path + '/addstudent'
+        self.student_path = self.container_path + '/Z654321'
+        self.manage_student_path = self.student_path + '/edit_base'
+        self.clearance_student_path = self.student_path + '/view_clearance'
+        self.personal_student_path = self.student_path + '/view_personal'
+        self.edit_clearance_student_path = self.student_path + '/edit_clearance'
+        self.edit_personal_student_path = self.student_path + '/edit_personal'
 
         # Populate university
@@ -166,2 +179,32 @@
         self.assertTrue('No student found' in self.browser.contents)
 
+class StudentUITests(StudentsFullSetup):
+    # Tests for Student class views and pages
+
+    layer = FunctionalLayer
+
+    def test_manage_access(self):
+        # Managers can access the pages of students
+        # and can perform actions
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.browser.open(self.student_path)
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.url, self.student_path)
+        self.browser.getLink("Edit base data").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.url, self.manage_student_path)
+        self.browser.open(self.student_path)
+        self.browser.getLink("View clearance data").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.url, self.clearance_student_path)
+        self.browser.getLink("Edit clearance data").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.url, self.edit_clearance_student_path)
+        self.browser.open(self.student_path)
+        self.browser.getLink("View personal data").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.url, self.personal_student_path)
+        self.browser.getLink("Edit personal data").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.url, self.edit_personal_student_path)
+        return
