diff --git a/bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testPreferences.py b/bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testPreferences.py
index c9ed3d0401c7bb3e75c29bd1adf3588ed8819938..b370773c32b245eed4fafb0e0ba6db0e7d08ecc8 100644
--- a/bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testPreferences.py
+++ b/bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testPreferences.py
@@ -651,6 +651,7 @@ class TestPreferences(PropertySheetTestCase):
     preference_tool.manage_permission(read_permission, [], 0)
     obj.manage_permission(read_permission, [], 0)
     self.assertFalse(guarded_hasattr(preference_tool, 'getPreferredToto'))
+    self.assertEqual(preference_tool.getPreference('toto'), None)
 
     preference_tool.manage_permission(read_permission, ['Manager'], 1)
 
diff --git a/product/ERP5Form/PreferenceTool.py b/product/ERP5Form/PreferenceTool.py
index a3c75a72b22717dd9a4c4399c5285e0ad32802e0..b3ff4ecdcf632812b84063a55bb5f60afd08f548 100644
--- a/product/ERP5Form/PreferenceTool.py
+++ b/product/ERP5Form/PreferenceTool.py
@@ -30,6 +30,7 @@
 from AccessControl import ClassSecurityInfo
 from AccessControl.SecurityManagement import getSecurityManager,\
                           setSecurityManager, newSecurityManager
+from AccessControl.ZopeGuards import guarded_getattr
 from MethodObject import Method
 from Products.ERP5Type.Globals import InitializeClass, DTMLFile
 from zLOG import LOG, PROBLEM
@@ -128,8 +129,8 @@ class PreferenceTool(BaseTool):
 
   security.declarePublic('getPreference')
   def getPreference(self, pref_name, default=_marker) :
-    """ get the preference on the most appopriate Preference object. """
-    method = getattr(self, 'get%s' % convertToUpperCase(pref_name), None)
+    """ get the preference on the most appropriate Preference object. """
+    method = guarded_getattr(self, 'get%s' % convertToUpperCase(pref_name), None)
     if method is not None:
       return method(default)
     if default is _marker: