Index: /main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscode.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscode.py	(revision 7180)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscode.py	(revision 7181)
@@ -19,7 +19,4 @@
     )
 from waeup.sirp.accesscodes.workflow import DISABLED, USED
-
-class ManageACBatches(grok.Permission):
-    grok.name('waeup.manageACBatches')
 
 class AccessCode(grok.Model):
Index: /main/waeup.sirp/trunk/src/waeup/sirp/permissions.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/permissions.py	(revision 7180)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/permissions.py	(revision 7181)
@@ -41,4 +41,7 @@
     grok.name('waeup.managePortalConfiguration')
 
+class ManageACBatches(grok.Permission):
+    grok.name('waeup.manageACBatches')
+
 # Local Roles
 class DepartmentOfficer(grok.Role):
@@ -72,4 +75,9 @@
     grok.title(u'Portal User')
     grok.permissions('waeup.View', 'waeup.Public')
+
+class ACManager(grok.Role):
+    grok.name('waeup.ACManager')
+    grok.title(u'Access Code Manager')
+    grok.permissions('waeup.manageACBatches')
 
 class PortalManager(grok.Role):
Index: /main/waeup.sirp/trunk/src/waeup/sirp/permissions.txt
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/permissions.txt	(revision 7180)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/permissions.txt	(revision 7181)
@@ -29,5 +29,5 @@
 
     >>> sorted(list(getAllRoles()))
-    [(u'waeup.AccommodationOfficer', <waeup.sirp.hostels.permissions.AccommodationOfficer object at 0x...]
+    [(u'waeup.ACManager', <waeup.sirp.permissions.ACManager object at 0x...]
 
 :func:`getWAeUPRoles`
@@ -39,8 +39,8 @@
     >>> from waeup.sirp.permissions import getWAeUPRoles
     >>> len(list(getWAeUPRoles()))
-    9
+    10
 
     >>> len(list(getWAeUPRoles(also_local=True)))
-    15
+    16
 
 
@@ -53,5 +53,5 @@
     >>> from waeup.sirp.permissions import getWAeUPRoleNames
     >>> list(getWAeUPRoleNames())
-    [u'waeup.AccommodationOfficer', u'waeup.Applicant',
+    [u'waeup.ACManager', u'waeup.AccommodationOfficer', u'waeup.Applicant',
      u'waeup.ApplicationsOfficer',
      u'waeup.PortalManager', u'waeup.PortalUser', u'waeup.Student',
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 7180)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 7181)
@@ -948,5 +948,5 @@
     grok.context(IStudentPaymentsContainer)
     grok.name('index')
-    grok.require('waeup.handleStudent')
+    grok.require('waeup.payStudent')
     form_fields = grok.AutoFields(IStudentPaymentsContainer)
     grok.template('paymentsmanagepage')
@@ -1018,5 +1018,5 @@
     grok.context(IStudentPaymentsContainer)
     grok.name('addop')
-    grok.require('waeup.handleStudent')
+    grok.require('waeup.payStudent')
     form_fields = grok.AutoFields(IStudentOnlinePayment).select(
         'p_category')
@@ -1110,5 +1110,5 @@
     grok.context(IStudentOnlinePayment)
     grok.view(OnlinePaymentDisplayFormPage)
-    grok.require('waeup.handleStudent')
+    grok.require('waeup.payStudent')
     icon = 'actionicon_call.png'
     text = 'Request callback'
@@ -1218,5 +1218,5 @@
     grok.context(IStudentAccommodation)
     grok.name('index')
-    grok.require('waeup.handleStudent')
+    grok.require('waeup.handleAccommodation')
     form_fields = grok.AutoFields(IStudentAccommodation)
     grok.template('accommodationmanagepage')
@@ -1283,5 +1283,5 @@
     grok.context(IStudentAccommodation)
     grok.view(AccommodationManageFormPage)
-    grok.require('waeup.handleStudent')
+    grok.require('waeup.handleAccommodation')
     icon = 'actionicon_home.png'
     text = 'Book accommodation'
@@ -1293,5 +1293,5 @@
     grok.context(IStudentAccommodation)
     grok.name('add')
-    grok.require('waeup.handleStudent')
+    grok.require('waeup.handleAccommodation')
     grok.template('enterpin')
     ac_prefix = 'HOS'
@@ -1384,5 +1384,5 @@
     grok.context(IBedTicket)
     grok.name('index')
-    grok.require('waeup.viewStudent')
+    grok.require('waeup.handleAccommodation')
     form_fields = grok.AutoFields(IBedTicket)
     form_fields[
@@ -1402,5 +1402,5 @@
     grok.context(IBedTicket)
     grok.view(BedTicketDisplayFormPage)
-    grok.require('waeup.viewStudent')
+    grok.require('waeup.handleAccommodation')
     icon = 'actionicon_pdf.png'
     text = 'Download bed allocation slip'
@@ -1412,5 +1412,5 @@
     grok.context(IBedTicket)
     grok.name('bed_allocation.pdf')
-    grok.require('waeup.viewStudent')
+    grok.require('waeup.handleAccommodation')
     form_fields = grok.AutoFields(IBedTicket)
     form_fields['booking_date'].custom_widget = FriendlyDateDisplayWidget('le')
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/permissions.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/permissions.py	(revision 7180)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/permissions.py	(revision 7181)
@@ -30,4 +30,7 @@
     grok.name('waeup.payStudent')
 
+class HandleAccommodation(grok.Permission):
+    grok.name('waeup.handleAccommodation')
+
 class UploadStudentFile(grok.Permission):
     grok.name('waeup.uploadStudentFile')
@@ -44,5 +47,6 @@
     grok.title(u'Student Record Owner')
     grok.permissions('waeup.handleStudent', 'waeup.uploadStudentFile',
-                     'waeup.viewStudent', 'waeup.payStudent')
+                     'waeup.viewStudent', 'waeup.payStudent',
+                     'waeup.handleAccommodation')
 
 # Site Roles
@@ -60,5 +64,6 @@
     grok.title(u'Students Manager')
     grok.permissions('waeup.viewStudent', 'waeup.manageStudent',
-                     'waeup.payStudent', 'waeup.uploadStudentFile')
+                     'waeup.payStudent', 'waeup.uploadStudentFile',
+                     'waeup.handleAccommodation')
 
 class StudentsClearanceOfficer(grok.Role):
Index: /main/waeup.sirp/trunk/src/waeup/sirp/students/viewlets.py
===================================================================
--- /main/waeup.sirp/trunk/src/waeup/sirp/students/viewlets.py	(revision 7180)
+++ /main/waeup.sirp/trunk/src/waeup/sirp/students/viewlets.py	(revision 7181)
@@ -63,4 +63,5 @@
 class StudentManagePaymentsLink(StudentManageLink):
     grok.order(4)
+    grok.require('waeup.payStudent')
     link = 'payments'
     text = u'Payments'
@@ -68,4 +69,5 @@
 class StudentManageAccommodationLink(StudentManageLink):
     grok.order(5)
+    grok.require('waeup.handleAccommodation')
     link = 'accommodation'
     text = u'Accommodation Data'
