diff --git a/ipojo/runtime/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ProvidedService.java b/ipojo/runtime/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ProvidedService.java
index 48ead7d..6b08b25 100644
--- a/ipojo/runtime/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ProvidedService.java
+++ b/ipojo/runtime/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ProvidedService.java
@@ -112,6 +112,7 @@
         // Create the factory
         try {
             m_factory = new ComponentFactory(m_context, clazz, metadata);
+            m_factory.setUseFactoryClassloader(true);
             m_factory.start();
         } catch (ConfigurationException e) {
             // Should not happen.
diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
index 47cdcd4..12e99ba 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
@@ -18,22 +18,12 @@
  */
 package org.apache.felix.ipojo;
 
-import java.net.URL;
-import java.security.ProtectionDomain;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.felix.ipojo.architecture.ComponentTypeDescription;
 import org.apache.felix.ipojo.metadata.Attribute;
 import org.apache.felix.ipojo.metadata.Element;
 import org.apache.felix.ipojo.parser.ParseUtils;
 import org.apache.felix.ipojo.parser.PojoMetadata;
+import org.apache.felix.ipojo.util.Log;
 import org.apache.felix.ipojo.util.Logger;
 import org.apache.felix.ipojo.util.Tracker;
 import org.apache.felix.ipojo.util.TrackerCustomizer;
@@ -42,6 +32,10 @@
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 
+import java.net.URL;
+import java.security.ProtectionDomain;
+import java.util.*;
+
 /**
  * The component factory manages component instance objects. This management
  * consists to create and manage component instances build with the current
@@ -61,39 +55,38 @@
      * the fully qualified name of the handler <code>namespace:name</code>.
      */
     public static final String HANDLER_AUTO_PRIMITIVE = "org.apache.felix.ipojo.handler.auto.primitive";
-
-
     /**
      * The tracker used to track required handler factories.
      * Immutable once set.
      */
     protected Tracker m_tracker;
-
     /**
      * The class loader to delegate classloading.
      * Immutable once set.
      */
     private FactoryClassloader m_classLoader;
-
     /**
      * The component implementation class.
      * (manipulated byte array)
      */
     private byte[] m_clazz;
-
     /**
      * The component implementation qualified class name.
      * Immutable once set.
      * This attribute is set during the creation of the factory.
      */
     private String m_classname;
-
     /**
      * The manipulation metadata of the implementation class.
      * Immutable once set.
      * This attribute is set during the creation of the factory.
      */
     private PojoMetadata m_manipulation;
+    /**
+     * A flag enabling / disabling the use of the Factory classloader to define the class.
+     * This flag must be enabled if the component class was manipulated on the fly.
+     */
+    private boolean m_useFactoryClassloader = false;
 
     /**
      * Creates a instance manager factory.
@@ -122,6 +115,15 @@
     }
 
     /**
+     * Sets the flag enabling / disabling the factory classloader.
+     *
+     * @param use <code>true</code> enables the factory classloader.
+     */
+    public void setUseFactoryClassloader(boolean use) {
+        m_useFactoryClassloader = use;
+    }
+
+    /**
      * Gets the component type description of the current factory.
      *
      * @return the description of the component type attached to this factory.
@@ -130,7 +132,6 @@
     public ComponentTypeDescription getComponentTypeDescription() {
         return new PrimitiveTypeDescription(this);
     }
-    
 
     /**
      * Allows a factory to check if the given element is well-formed.
@@ -210,6 +211,10 @@
      * @return the defined class object
      */
     public synchronized Class defineClass(String name, byte[] clazz, ProtectionDomain domain) {
+        if (!m_useFactoryClassloader) {
+            m_logger.log(Log.WARNING, "A class definition was required even without the factory classloader enabled");
+        }
+
         if (m_classLoader == null) {
             m_classLoader = new FactoryClassloader();
         }
@@ -236,12 +241,15 @@
      * If it is, the factory classloader is used, else
      * the {@link Bundle#loadClass(String)} is called.
      *
+     * The implementation class is loaded using the factory classloader only if the factory classloader was enabled
+     *
      * @param className the name of the class to load
      * @return the resulting Class object
      * @throws ClassNotFoundException if the class is not found
+     * @see #setUseFactoryClassloader(boolean)
      */
     public Class loadClass(String className) throws ClassNotFoundException {
-        if (m_clazz != null && m_classname.equals(className)) {  // Immutable fields.
+        if (m_useFactoryClassloader && m_clazz != null && m_classname.equals(className)) {  // Immutable fields.
             return defineClass(className, m_clazz, null);
         }
         return m_context.getBundle().loadClass(className);
@@ -543,7 +551,6 @@
            * Set to keep component's all super-class class-names.
            */
         private Set m_superClasses = new HashSet();
-
         /*
            * Set to keep component's all interface class-names.
            */
@@ -617,7 +624,6 @@
                 * PojoMetadata of target Component.
                 */
             private PojoMetadata m_pojoMetadata;
-
             /*
                 * Bundle exposing target component.
                 */
