diff --git a/product/ERP5Type/DocumentationHelper/DCWorkflowDocumentationHelper.py b/product/ERP5Type/DocumentationHelper/DCWorkflowDocumentationHelper.py
index fc0ad7ecd049a8e45b4ace6115f19b37cc5e799f..6c5d36222f324ce7f83ca6fbc36f6085332bc8ff 100644
--- a/product/ERP5Type/DocumentationHelper/DCWorkflowDocumentationHelper.py
+++ b/product/ERP5Type/DocumentationHelper/DCWorkflowDocumentationHelper.py
@@ -33,6 +33,12 @@ from Products.ERP5Type import Permissions
 from Products.DCWorkflowGraph.DCWorkflowGraph import getGraph
 
 
+permission_code_dict = { 'Access contents information': (0, 'A')
+                       , 'View'                       : (1, 'V')
+                       , 'Modify portal content'      : (2, 'M')
+                       , 'Add portal content'         : (3, 'C')
+                       }
+
 def getRoleList(workflow):
   role_set = set()
   for state in workflow.states.objectValues():
@@ -139,7 +145,7 @@ class DCWorkflowDocumentationHelper(DocumentationHelper):
     variable_list = []
     variables = getattr(self.getDocumentedObject(), 'variables', None)
     if variables is not None:
-      for variable in  variables.objectValues():
+      for variable in variables.objectValues():
         variable_list.append((variable.getId(),
                               getattr(variable, "title", ""),
                               getattr(variable, "description", "")
@@ -164,11 +170,23 @@ class DCWorkflowDocumentationHelper(DocumentationHelper):
     variable_id_list = self.getVariableIdList()
     return map(lambda x: ('%s/variables/%s' % (self.uri, x)), variable_id_list)
 
-  security.declareProtected(Permissions.AccessContentsInformation, 'getPermissionList')
-  def getPermissionList(self):
-    """
-    """
-    return getattr(self.getDocumentedObject(), "permissions", ())
+  security.declareProtected(Permissions.AccessContentsInformation, 'getPermissionItemList')
+  def getPermissionItemList(self, **kw):
+    """
+    """
+    permission_list = []
+    extra_code = 0
+    for permission in sorted(getattr(self.getDocumentedObject(),
+                                     "permissions", ())):
+      permission_code = permission_code_dict.get(permission)
+      if permission_code:
+        permission_code = permission_code[1]
+      else:
+        permission_code = str(extra_code)
+        extra_code += 1
+      permission_list.append(self.asContext(permission=permission,
+                                            code=permission_code))
+    return permission_list
 
   security.declareProtected(Permissions.AccessContentsInformation, 'getWorklistIdList')
   def getWorklistIdList(self):
diff --git a/product/ERP5Type/DocumentationHelper/DCWorkflowStateDocumentationHelper.py b/product/ERP5Type/DocumentationHelper/DCWorkflowStateDocumentationHelper.py
index aa91ea59da669e87f14f3660b4877c323ba8de1e..93b44fb0407c9c25841636a06a5a9278bd36ee4a 100644
--- a/product/ERP5Type/DocumentationHelper/DCWorkflowStateDocumentationHelper.py
+++ b/product/ERP5Type/DocumentationHelper/DCWorkflowStateDocumentationHelper.py
@@ -30,7 +30,7 @@ from AccessControl import ClassSecurityInfo
 from Globals import InitializeClass
 from Products.ERP5Type import Permissions
 from DocumentationHelper import DocumentationHelper
-from DCWorkflowDocumentationHelper import getRoleList
+from DCWorkflowDocumentationHelper import getRoleList, permission_code_dict
 
 class DCWorkflowStateDocumentationHelper(DocumentationHelper):
   """
@@ -62,6 +62,12 @@ class DCWorkflowStateDocumentationHelper(DocumentationHelper):
     """
     return getRoleList(self.getDocumentedObject().getWorkflow())
 
+  security.declareProtected(Permissions.AccessContentsInformation, 'getAcquiredPermissions')
+  def getAcquiredPermissions(self):
+    """
+    """
+    return self.getPermissionsOfRole(None)
+
   security.declareProtected(Permissions.AccessContentsInformation, 'getPermissionsList')
   def getPermissionsList(self):
     """
@@ -76,17 +82,25 @@ class DCWorkflowStateDocumentationHelper(DocumentationHelper):
       M = Modify Portal Content
       C = Add Portal Content
     """
-    permissions = ""
-    permission_roles = self.getDocumentedObject().permission_roles
-    if permission_roles:
-      if role in permission_roles.get('Access contents information', ()):
-        permissions += "A"
-      if role in permission_roles.get('View', ()):
-        permissions += "V"
-      if role in permission_roles.get('Modify portal content', ()):
-        permissions += "M"
-      if role in permission_roles.get('Add portal content', ()):
-        permissions += "C"
+    permissions = []
+    state = self.getDocumentedObject()
+    permission_list = getattr(state.getWorkflow(), 'permissions', ())
+    if permission_list:
+      extra_sort = len(permission_code_dict)
+      extra_code = 0
+      for permission in sorted(permission_list):
+        permission_code = permission_code_dict.get(permission)
+        if permission_code is None:
+          permission_code = extra_sort, str(extra_code)
+          extra_code += 1
+        permission_info = state.getPermissionInfo(permission)
+        if role and role in permission_info['roles'] \
+           or not role and permission_info['acquired']:
+          permissions.append(permission_code)
+
+    permissions.sort()
+    permissions = ''.join(y for x,y in permissions)
+
     return permissions