diff --git a/product/ERP5Type/Utils.py b/product/ERP5Type/Utils.py
index 5b508839345e3f365701b16f12a375c20d528fb6..72a94114dd0a107fdce18df09c536e60343197a6 100644
--- a/product/ERP5Type/Utils.py
+++ b/product/ERP5Type/Utils.py
@@ -331,8 +331,6 @@ class DocumentConstructor(Method):
 
     def __call__(self, folder, id, REQUEST=None,
                  activate_kw=None, is_indexable=None, **kw):
-#       o = self.klass(id, title=None)
-      # XXX Is it safe to set the title to None ?
       o = self.klass(id)
       if activate_kw is not None:
         o._v_activate_kw = activate_kw
@@ -1734,8 +1732,9 @@ def createDefaultAccessors(property_holder, id, prop = None,
   else:
     # Create getters for a simple property
     accessor_name = 'get' + UpperCase(id)
-    accessor = Base.Getter(accessor_name, id, prop['type'], default = prop.get('default'),
-                                                 storage_id = prop.get('storage_id'))
+    accessor = Base.Getter(accessor_name, id, 
+                           prop['type'], default=prop.get('default'),
+                           storage_id = prop.get('storage_id'))
     if not hasattr(property_holder, accessor_name) or prop.get('override',0):
       setattr(property_holder, accessor_name, accessor)
       property_holder.security.declareProtected( read_permission, accessor_name )
@@ -2504,203 +2503,139 @@ def createRelatedValueAccessors(property_holder, id,
     read_permission=Permissions.AccessContentsInformation,
     write_permission=Permissions.ModifyPortalContent):
 
+  upper_case_id = UpperCase(id)
   # Related Values (ie. reverse relation getters)
 
   # We are not generating here all the related stuff we need
   property_holder = BaseClass
 
-  accessor_name = UpperCase(id) + 'RelatedValues'
-  accessor_name = string.lower(accessor_name[0]) + accessor_name[1:]
-  accessor = RelatedValue.ListGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'RelatedValueList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedValueList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedValueSet'
-  accessor = RelatedValue.SetGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedValueSet'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'getDefault' + UpperCase(id) + 'RelatedValue'
-  accessor = RelatedValue.DefaultGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'RelatedValue'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGetDefault' + UpperCase(id) + 'RelatedValue'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedValue'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  # Related Relative Url (ie. reverse relation getters)
-  property_holder = BaseClass
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedList'
-  accessor = Related.ListGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedSet'
-  accessor = Related.SetGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedSet'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'getDefault' + UpperCase(id) + 'Related'
-  accessor = Related.DefaultGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'Related'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGetDefault' + UpperCase(id) + 'Related'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-  accessor_name = '_categoryGet' + UpperCase(id) + 'Related'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  # Related Ids (ie. reverse relation getters)
-  property_holder = BaseClass
-
-  accessor_name = UpperCase(id) + 'RelatedIds'
-  accessor_name = string.lower(accessor_name[0]) + accessor_name[1:]
-  accessor = RelatedValue.IdListGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'RelatedIdList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedIdList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedIdSet'
-  accessor = RelatedValue.IdSetGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedIdSet'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'getDefault' + UpperCase(id) + 'RelatedId'
-  accessor = RelatedValue.DefaultIdGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'RelatedId'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGetDefault' + UpperCase(id) + 'RelatedId'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedId'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  # Related Ids (ie. reverse relation getters)
-  property_holder = BaseClass
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedTitleList'
-  accessor = RelatedValue.TitleListGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedTitleList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedTitleSet'
-  accessor = RelatedValue.TitleSetGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedTitleSet'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'getDefault' + UpperCase(id) + 'RelatedTitle'
-  accessor = RelatedValue.DefaultTitleGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'RelatedTitle'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGetDefault' + UpperCase(id) + 'RelatedTitle'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedTitle'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  # Related Ids (ie. reverse relation getters)
-  property_holder = BaseClass
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedPropertyList'
-  accessor = RelatedValue.PropertyListGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedPropertyList'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'get' + UpperCase(id) + 'RelatedPropertySet'
-  accessor = RelatedValue.PropertySetGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedPropertySet'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
-  accessor_name = 'getDefault' + UpperCase(id) + 'RelatedProperty'
-  accessor = RelatedValue.DefaultPropertyGetter(accessor_name, id)
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor)
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = 'get' + UpperCase(id) + 'RelatedProperty'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-    property_holder.security.declareProtected(read_permission, accessor_name)
-  accessor_name = '_categoryGetDefault' + UpperCase(id) + 'RelatedProperty'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-  accessor_name = '_categoryGet' + UpperCase(id) + 'RelatedProperty'
-  if not hasattr(property_holder, accessor_name):
-    setattr(property_holder, accessor_name, accessor.dummy_copy(accessor_name))
-
+  # AccessorClass: (accessor_name, )
+  accessor_dict = {
+    # List getter
+    RelatedValue.ListGetter: (
+      '%s%sRelatedValues' % (upper_case_id[0].lower(),
+                             upper_case_id[1:]),
+      'get%sRelatedValueList' % upper_case_id,
+      '_categoryGet%sRelatedValueList' % upper_case_id,
+    ),
+
+    # Set getter
+    RelatedValue.SetGetter: (
+      'get%sRelatedValueSet' % upper_case_id,
+      '_categoryGet%sRelatedValueSet' % upper_case_id,
+    ),
+
+    # Default value getter
+    RelatedValue.DefaultGetter: (
+      'getDefault%sRelatedValue' % upper_case_id,
+      'get%sRelatedValue' % upper_case_id,
+      '_categoryGetDefault%sRelatedValue' % upper_case_id,
+      '_categoryGet%sRelatedValue' % upper_case_id,
+    ),
+
+    # Related Relative Url
+    Related.ListGetter: (
+      'get%sRelatedList' % upper_case_id,
+      '_categoryGet%sRelatedList' % upper_case_id,
+    ),
+
+    # Related as Set
+    Related.SetGetter: (
+      'get%sRelatedSet' % upper_case_id,
+      '_categoryGet%sRelatedSet' % upper_case_id,
+    ),
+
+    # Default getter
+    Related.DefaultGetter: (
+      'getDefault%sRelated' % upper_case_id,
+      'get%sRelated' % upper_case_id,
+      '_categoryGetDefault%sRelated' % upper_case_id,
+      '_categoryGet%sRelated' % upper_case_id,
+    ),
+
+    # Related Ids (ie. reverse relation getters)
+    RelatedValue.IdListGetter: (
+      '%s%sRelatedIds' % (upper_case_id[0].lower(),
+                          upper_case_id[1:]),
+      'get%sRelatedIdList' % upper_case_id,
+      '_categoryGet%sRelatedIdList' % upper_case_id,
+    ),
+
+    # Related Ids as Set
+    RelatedValue.IdSetGetter: (
+      'get%sRelatedIdSet' % upper_case_id,
+      '_categoryGet%sRelatedIdSet' % upper_case_id,
+    ),
+
+    # Default Id getter
+    RelatedValue.DefaultIdGetter: (
+      'getDefault%sRelatedId' % upper_case_id,
+      'get%sRelatedId' % upper_case_id,
+      '_categoryGetDefault%sRelatedId' % upper_case_id,
+      '_categoryGet%sRelatedId' % upper_case_id,
+    ),
+
+    # Related Title list
+    RelatedValue.TitleListGetter: (
+      'get%sRelatedTitleList' % upper_case_id,
+      '_categoryGet%sRelatedTitleList' % upper_case_id,
+    ),
+
+    # Related Title Set
+    RelatedValue.TitleSetGetter: (
+      'get%sRelatedTitleSet' % upper_case_id,
+      '_categoryGet%sRelatedTitleSet' % upper_case_id,
+    ),
+
+    # Related default title
+    RelatedValue.DefaultTitleGetter: (
+      'getDefault%sRelatedTitle' % upper_case_id,
+      'get%sRelatedTitle' % upper_case_id,
+      '_categoryGetDefault%sRelatedTitle' % upper_case_id,
+      '_categoryGet%sRelatedTitle' % upper_case_id,
+    ),
+
+    # Related Property list
+    RelatedValue.PropertyListGetter: (
+      'get%sRelatedPropertyList' % upper_case_id,
+      '_categoryGet%sRelatedPropertyList' % upper_case_id,
+    ),
+
+    # Related Property Set
+    RelatedValue.PropertySetGetter: (
+      'get%sRelatedPropertySet' % upper_case_id,
+      '_categoryGet%sRelatedPropertySet' % upper_case_id,
+    ),
+
+    # Related default title
+    RelatedValue.DefaultPropertyGetter: (
+      'getDefault%sRelatedProperty' % upper_case_id,
+      'get%sRelatedProperty' % upper_case_id,
+      '_categoryGetDefault%sRelatedProperty' % upper_case_id,
+      '_categoryGet%sRelatedProperty' % upper_case_id,
+    ),
+  }
+
+  permission = read_permission
+  for accessor_class, accessor_name_list in accessor_dict.items():
+
+    # First element is the original accessor
+    accessor_name = accessor_name_list[0]
+    accessor = accessor_class(accessor_name, id)
+    if not hasattr(property_holder, accessor_name):
+      setattr(property_holder, accessor_name, accessor)
+      # Declare the security of method which doesn't start with _
+      if accessor_name[0] != '_':
+        property_holder.security.declareProtected(permission, accessor_name)
+
+    # Others are dummy copies
+    for accessor_name in accessor_name_list[1:]:
+      if not hasattr(property_holder, accessor_name):
+        setattr(property_holder, accessor_name, 
+                accessor.dummy_copy(accessor_name))
+        # Declare the security of method which doesn't start with _
+        if accessor_name[0] != '_':
+          property_holder.security.declareProtected(permission, accessor_name)
 
 def createTranslationAccessors(property_holder, id,
     read_permission=Permissions.AccessContentsInformation,