diff --git a/product/ERP5Type/dynamic/component_package.py b/product/ERP5Type/dynamic/component_package.py
index 7bd0c1536b50a6783d764113a0e2370543b7f1e4..a5dee3b07ad354a63c178296bf1120e969bf5b54 100644
--- a/product/ERP5Type/dynamic/component_package.py
+++ b/product/ERP5Type/dynamic/component_package.py
@@ -114,20 +114,15 @@ class ComponentDynamicPackage(ModuleType):
         # Only consider modified or validated states as state transition will
         # be handled by component_validation_workflow which will take care of
         # updating the registry
-        try:
-          validation_state_tuple = component.getValidationState()
-        except AttributeError:
-          # XXX: Accessors may have not been generated yet
-          pass
-        else:
-          if validation_state_tuple in ('modified', 'validated'):
-            version = component.getVersion(validated_only=True)
-            # The versions should have always been set on ERP5Site property
-            # beforehand
-            if version in version_priority_set:
-              reference = component.getReference(validated_only=True)
-              self.__registry_dict[reference][version] = (component.getId(),
-                                                          component._p_oid)
+        validation_state_tuple = component.getValidationState()
+        if validation_state_tuple in ('modified', 'validated'):
+          version = component.getVersion(validated_only=True)
+          # The versions should have always been set on ERP5Site property
+          # beforehand
+          if version in version_priority_set:
+            reference = component.getReference(validated_only=True)
+            self.__registry_dict[reference][version] = (component.getId(),
+                                                        component._p_oid)
 
     return self.__registry_dict
 
diff --git a/product/ERP5Type/mixin/component.py b/product/ERP5Type/mixin/component.py
index 6fbaba7b8956f772c7bd1d7fcd462997dd5e12ee..5cf6561897f2e4591ca088626849077ad2a3f4c4 100644
--- a/product/ERP5Type/mixin/component.py
+++ b/product/ERP5Type/mixin/component.py
@@ -37,6 +37,7 @@ from Products.ERP5.mixin.property_recordable import PropertyRecordableMixin
 from Products.ERP5Type import Permissions
 from Products.ERP5Type.Base import Base
 from Products.ERP5Type.Accessor.Constant import PropertyGetter as ConstantGetter
+from Products.ERP5Type.Accessor import Base as BaseAccessor
 from Products.ERP5Type.ConsistencyMessage import ConsistencyMessage
 from zExceptions import Forbidden
 
@@ -78,7 +79,7 @@ class RecordablePropertyMetaClass(ExtensionClass):
       setter.__name__ = accessor_name
       return setter
 
-    def getterWrapper(accessor_name, property_name):
+    def getterWrapper(accessor_name, property_name, property_getter):
       dictionary['security'].declareProtected(Permissions.AccessContentsInformation,
                                               accessor_name)
 
@@ -97,17 +98,19 @@ class RecordablePropertyMetaClass(ExtensionClass):
           except (AttributeError, KeyError):
             pass
 
-        return getattr(super(ComponentMixin, self), accessor_name)()
+        return property_getter(self)
 
       getter.__name__ = accessor_name
       return getter
 
-    for property_name in dictionary['_recorded_property_name_tuple']:
+    for (property_name,
+         property_getter) in dictionary['_recorded_property_name_getter_dict'].iteritems():
       setter_name = '_set' + convertToUpperCase(property_name)
       dictionary[setter_name] = setterWrapper(setter_name, property_name)
 
       getter_name = 'get' + convertToUpperCase(property_name)
-      dictionary[getter_name] = getterWrapper(getter_name, property_name)
+      dictionary[getter_name] = getterWrapper(getter_name, property_name,
+                                              property_getter)
 
     # docstring required for publishing any object
     dictionary['__doc__'] = metacls.__doc__
@@ -159,10 +162,23 @@ class ComponentMixin(PropertyRecordableMixin, Base):
                      'TextDocument',
                      'Component')
 
-  _recorded_property_name_tuple = (
-    'reference',
-    'version',
-    'text_content')
+  _recorded_property_name_getter_dict = {
+    'reference': BaseAccessor.Getter('getReference',
+                                     'reference',
+                                     'string',
+                                     storage_id='default_reference'),
+    'version': BaseAccessor.Getter('getVersion',
+                                   'version',
+                                   'string',
+                                   default=''),
+    'text_content': BaseAccessor.Getter('getTextContent',
+                                        'text_content',
+                                        'string'),
+    'description': BaseAccessor.Getter('getDescription',
+                                       'description',
+                                       'string',
+                                       default='')
+    }
 
   _message_reference_not_set = "Reference must be set"
   _message_invalid_reference = "Reference cannot end with '_version' or "\
@@ -176,6 +192,15 @@ class ComponentMixin(PropertyRecordableMixin, Base):
   _message_text_content_not_set = "No source code"
   _message_text_content_error = "Error in Source Code: ${error_message}"
 
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'getValidationState')
+  def getValidationState(self):
+    """
+    Needed for bootstrap when the WorkflowState Accessor is not defined yet
+    """
+    return self.workflow_history[
+      'component_validation_workflow'][-1]['validation_state']
+
   security.declareProtected(Permissions.ModifyPortalContent, 'checkConsistency')
   def checkConsistency(self, *args, **kw):
     """
@@ -270,7 +295,7 @@ class ComponentMixin(PropertyRecordableMixin, Base):
     reference, version and text_content
     """
     if not self.checkConsistency():
-      for property_name in self._recorded_property_name_tuple:
+      for property_name in self._recorded_property_name_getter_dict:
         self.clearRecordedProperty(property_name)
 
       self.validate()