diff --git a/product/CMFCategory/Category.py b/product/CMFCategory/Category.py
index 54659aac5a8c6f9e17a6676bc7383e1c534b81c1..6654643849a177847a65a236942776dd0f7ca99a 100644
--- a/product/CMFCategory/Category.py
+++ b/product/CMFCategory/Category.py
@@ -30,6 +30,7 @@ import string
 
 from Globals import InitializeClass, DTMLFile
 from AccessControl import ClassSecurityInfo
+from AccessControl import getSecurityManager
 from Acquisition import aq_base, aq_inner, aq_parent
 from Products.CMFCore.utils import getToolByName
 
@@ -528,13 +529,20 @@ class Category(Folder):
       if not cache:
         return _renderCategoryChildItemList(
                       recursive=recursive, base=base, **kw)
-
+      
+      # If checked_permission is specified, we include the username in the
+      # cache key
+      username = None
+      if 'checked_permission' in kw:
+        username = str(getSecurityManager().getUser())
+        
       # Some methods are language dependent so we include the language in the
       # key
       localizer = getToolByName(self, 'Localizer')
       language = localizer.get_selected_language()
       m = CachingMethod(_renderCategoryChildItemList,
-            ('Category_getCategoryChildItemList', language, self.getPath()),
+            ('Category_getCategoryChildItemList', language,
+              self.getPath(), username),
             cache_factory=cache)
 
       return m(recursive=recursive, base=base, **kw)
diff --git a/product/CMFCategory/tests/testCMFCategory.py b/product/CMFCategory/tests/testCMFCategory.py
index 42acb0eb4eb081670ff1d4f8a3dc4a64512e8868..493d328093f3a273e39055610f35dfe4ff968c52 100644
--- a/product/CMFCategory/tests/testCMFCategory.py
+++ b/product/CMFCategory/tests/testCMFCategory.py
@@ -30,6 +30,7 @@ import unittest
 
 from Testing import ZopeTestCase
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Testing.ZopeTestCase.PortalTestCase import PortalTestCase
 from AccessControl.SecurityManagement import newSecurityManager
 from AccessControl.SecurityManagement import noSecurityManager
 from Products.ERP5Type.Base import _aq_reset
@@ -1043,6 +1044,35 @@ class TestCMFCategory(ERP5TypeTestCase):
       bc.getCategoryChildTitleItemList(checked_permission=checked_permission,
                                        cache=0))
 
+  def test_28b_getCategoryChildItemList_checked_permission_cache(self):
+    # getCategoryChildTitleItemList take into account user 
+    pc = self.getCategoriesTool()
+
+    bc_id = 'barfoo'
+    bc = pc.newContent(portal_type='Base Category', id=bc_id)
+    a = bc.newContent(portal_type='Category', id='1', title='A')
+    b = bc.newContent(portal_type='Category', id='2', title='B')
+    b1 = b.newContent(portal_type='Category', id='21', title='B1')
+
+    uf = self.getPortal().acl_users
+    uf._doAddUser('alice', '', ['Member', 'Manager', 'Assignor'], [])
+    uf._doAddUser('bob', '', ['Member'], [])
+    login = PortalTestCase.login
+
+    checked_permission = 'View'
+    
+    b.manage_permission(checked_permission, roles=['Assignor'], acquire=0)
+    login(self, 'alice')
+    self.assertEquals(
+      [['', ''], ['A', '1'], ['B', '2'], ['B1', '2/21']],
+      bc.getCategoryChildTitleItemList(checked_permission=checked_permission,))
+    
+    login(self, 'bob')
+    self.assertEquals(
+      [['', ''], ['A', '1']],
+      bc.getCategoryChildTitleItemList(checked_permission=checked_permission,))
+
+
   def test_29_renameBaseCategory(self):
     bc = self.portal.portal_categories.newContent(
                           portal_type='Base Category',