diff --git a/product/ERP5Form/PreferenceTool.py b/product/ERP5Form/PreferenceTool.py
index 48bee75c01e3f41e6986cfa52da0a6d0b35c84fc..f6c4932d6eb5834ec677bd72847faed29f917da0 100644
--- a/product/ERP5Form/PreferenceTool.py
+++ b/product/ERP5Form/PreferenceTool.py
@@ -40,6 +40,7 @@ from Products.ERP5Type.Accessor.TypeDefinition import list_types
 from Products.ERP5Form import _dtmldir
 from Products.ERP5Form.Document.Preference import Priority
 
+_marker = []
 
 def updatePreferenceClassPropertySheetList():
   # The Preference class should be imported from the common location
@@ -124,11 +125,10 @@ class PreferenceMethod(Method):
 
   def __call__(self, instance, *args, **kw):
     def _getPreference(user_name=None):
-      MARKER = []
       value = None
       for pref in instance._getSortedPreferenceList():
-        value = getattr(pref, self._preference_name, MARKER)
-        if value is not MARKER:
+        value = getattr(pref, self._preference_name, _marker)
+        if value is not _marker:
           # If callable, store the return value.
           if callable(value):
             value = value()
@@ -144,8 +144,13 @@ class PreferenceMethod(Method):
     # all values are null values, one of them must be returned.
     # Therefore, return a default value, only if explicitly specified,
     # instead of returning None.
-    if value in self._null and args:
-      return args[0]
+    default = _marker
+    if 'default' in kw:
+      default = kw['default']
+    elif args:
+      default = args[0]
+    if value in self._null and default is not _marker:
+      return default
     return value
 
 class PreferenceTool(BaseTool):
@@ -176,11 +181,15 @@ class PreferenceTool(BaseTool):
     BaseTool.inheritedAttribute('manage_afterAdd')(self, item, container)
 
   security.declareProtected(Permissions.View, "getPreference")
-  def getPreference(self, pref_name, default=None) :
+  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)
     if method is not None:
-      return method(default=default)
+      if default is not _marker:
+        kw = {'default': default}
+      else:
+        kw = {}
+      return method(**kw)
     return default
 
   security.declareProtected(Permissions.ModifyPortalContent, "setPreference")
diff --git a/product/ERP5Form/tests/testPreferences.py b/product/ERP5Form/tests/testPreferences.py
index 7075d9052fdad1755335dcf67c3f0d1f3b75f10b..2a8d85dc1b60f2b1cc4d18397fc51f48433135eb 100644
--- a/product/ERP5Form/tests/testPreferences.py
+++ b/product/ERP5Form/tests/testPreferences.py
@@ -376,13 +376,24 @@ class TestPreferences(ERP5TypeTestCase):
     state = method('default')
     self.assertEquals(state, 'default')
 
+    method = lambda *args: pref_tool.getPreference('preferred_accounting_transaction_simulation_state', *args)
+    state = method()
+    self.assertEquals(state, None)
+    state = method('default')
+    self.assertEquals(state, 'default')
+
     method = pref_tool.getPreferredAccountingTransactionSimulationStateList
     state_list = method()
     self.assertEquals(state_list, None)
     state_list = method(('default',))
     self.assertEquals(state_list, ('default',))
  
-    
+    method = lambda *args: pref_tool.getPreference('preferred_accounting_transaction_simulation_state_list', *args)
+    state_list = method()
+    self.assertEquals(state_list, None)
+    state_list = method(('default',))
+    self.assertEquals(state_list, ('default',))
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestPreferences))