diff --git a/product/ERP5Type/dynamic/portal_type_class.py b/product/ERP5Type/dynamic/portal_type_class.py
index b4c44e2b237298938e9c8d39e507b8ddc6be4506..5b9e6a927941c1348e33b498c920ebc6d83e067f 100644
--- a/product/ERP5Type/dynamic/portal_type_class.py
+++ b/product/ERP5Type/dynamic/portal_type_class.py
@@ -193,13 +193,23 @@ def generatePortalTypeClass(site, portal_type_name):
     type_class_namespace = document_class_registry.get(type_class, '')
     if not (type_class_namespace.startswith('Products.ERP5Type') or
             portal_type_name in core_portal_type_class_dict):
-      try:
-        klass = getattr(__import__('erp5.component.document.' + type_class,
-                                   fromlist=['erp5.component.document'],
-                                   level=0),
-                        type_class)
-      except (ImportError, AttributeError):
-        pass
+      import erp5.component.document
+      module_fullname = 'erp5.component.document.' + type_class
+      module_loader = erp5.component.document.find_module(module_fullname)
+      if module_loader is not None:
+        try:
+          module = module_loader.load_module(module_fullname)
+        except ImportError, e:
+          LOG("ERP5Type.dynamic", WARNING,
+              "Could not load Component module '%s': %s" % (module_fullname, e))
+        else:
+          try:
+            klass = getattr(module, type_class)
+          except AttributeError:
+            LOG("ERP5Type.dynamic", WARNING,
+                "Could not get class '%s' in Component module '%s'" % \
+                (type_class,
+                 module_fullname))
 
     if klass is None:
       type_class_path = document_class_registry.get(type_class)
diff --git a/product/ERP5Type/patches/ExternalMethod.py b/product/ERP5Type/patches/ExternalMethod.py
index fcb6d8ab5757617e4df6d14fbc96473eb4babb67..2ae8a751c168340e1c684de1d3c16ddea5a82b9e 100644
--- a/product/ERP5Type/patches/ExternalMethod.py
+++ b/product/ERP5Type/patches/ExternalMethod.py
@@ -70,12 +70,10 @@ if 1:
           from kw.
         """
         try:
-            f = getattr(__import__('erp5.component.extension.' + self._module,
-                                   fromlist=['erp5.component.extension'],
-                                   level=0),
-                        self._function)
-
-        except (ImportError, AttributeError):
+            component_module = __import__('erp5.component.extension.' + self._module,
+                                          fromlist=['erp5.component.extension'],
+                                          level=0)
+        except ImportError:
             import Globals  # for data
 
             filePath = self.filepath()
@@ -93,6 +91,9 @@ if 1:
                 self.reloadIfChanged()
 
             f = None
+        else:
+            f = getattr(component_module, self._function)
+
         _v_f = getattr(self, '_v_f', None)
         if not _v_f or (f and f is not _v_f):
             f = self.getFunction(f=f)