diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/Activator.java b/ipojo/src/main/java/org/apache/felix/ipojo/Activator.java
index b1c4950..ea63748 100644
--- a/ipojo/src/main/java/org/apache/felix/ipojo/Activator.java
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/Activator.java
@@ -111,7 +111,7 @@
             ComponentFactory factory = m_factories[i];
             factory.stop();
         }
-        m_creator.stop();
+        if(m_creator != null) { m_creator.stop(); }
         m_factories = new ComponentFactory[0]; // Release all factories
     }
 
@@ -150,7 +150,12 @@
     			String componentClass = m_factories[j].getComponentClassName();
     			String factoryName = m_factories[j].getFactoryName();
     			if(conf.get("component") != null && (conf.get("component").equals(componentClass) || conf.get("component").equals(factoryName))) {
-    				if(m_factories[j].isAcceptable(conf)) { m_factories[j].createComponentInstance(conf); created = true;}
+    				try {
+						m_factories[j].createComponentInstance(conf);
+	    				created = true;
+					} catch (UnacceptableConfiguration e) {
+						System.err.println("Cannot create the instance " + conf.get("name") +" : " + e.getMessage());
+					} 
     			}
     		}
     		if(!created && conf.get("component") != null) {
diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/ComponentFactory.java b/ipojo/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
index 519994b..513a67b 100644
--- a/ipojo/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
@@ -296,10 +296,12 @@
     /**
      * @see org.apache.felix.ipojo.Factory#createComponentInstance(java.util.Dictionary)
      */
-    public ComponentInstance createComponentInstance(Dictionary configuration) {
-    	if(!isAcceptable(configuration)) {
-    		m_logger.log(Logger.ERROR, "The configuration is not acceptable");
-    		return null; 
+    public ComponentInstance createComponentInstance(Dictionary configuration)  throws UnacceptableConfiguration {
+    	try {
+    		_isAcceptable(configuration);
+    	} catch(UnacceptableConfiguration e) {
+    		m_logger.log(Logger.ERROR, "The configuration is not acceptable : " + e.getMessage());
+    		throw new UnacceptableConfiguration("The configuration " + configuration + " is not acceptable for " + m_factoryName + ": " + e.getMessage() );
     	}
     	
         IPojoContext context = new IPojoContext(m_context);
@@ -319,11 +321,12 @@
     /**
      * @see org.apache.felix.ipojo.Factory#createComponentInstance(java.util.Dictionary)
      */
-    public ComponentInstance createComponentInstance(Dictionary configuration, ServiceContext serviceContext) {
-    	if(!isAcceptable(configuration)) {
-    		//TODO : extend the message with infomation about the non acceptability
-    		m_logger.log(Logger.ERROR, "The configuration is not acceptable");
-    		return null; 
+    public ComponentInstance createComponentInstance(Dictionary configuration, ServiceContext serviceContext) throws UnacceptableConfiguration {
+    	try {
+    		_isAcceptable(configuration);
+    	} catch(UnacceptableConfiguration e) {
+    		m_logger.log(Logger.ERROR, "The configuration is not acceptable : " + e.getMessage());
+    		throw new UnacceptableConfiguration("The configuration " + configuration + " is not acceptable for " + m_factoryName + ": " + e.getMessage() );
     	}
     	
     	IPojoContext context = new IPojoContext(m_context, serviceContext);
@@ -361,9 +364,24 @@
      */
     public void updated(String pid, Dictionary properties) throws ConfigurationException {
         InstanceManager cm = (InstanceManager) m_componentInstances.get(pid);
-        if (cm == null) { createComponentInstance(properties); } // Create the component
+        if (cm == null) { 
+        	try {
+        		createComponentInstance(properties);
+        	} catch (UnacceptableConfiguration e) {
+        		m_logger.log(Logger.ERROR, "The configuration is not acceptable : " + e.getMessage());
+        		throw new ConfigurationException(properties.toString(), e.getMessage());
+        	} 
+        }
         else {
             cm.stop(); // Stop the component
+            
+            try {
+				_isAcceptable(properties); // Test if the configuration is acceptable
+			} catch (UnacceptableConfiguration e) {
+				m_logger.log(Logger.ERROR, "The configuration is not acceptable : " + e.getMessage());
+        		throw new ConfigurationException(properties.toString(), e.getMessage());
+			}
+			
             cm.configure(m_componentMetadata, properties); // re-configure the component
             cm.start(); // restart it
         }
@@ -393,5 +411,17 @@
     	}
     	return true;
     }
+    
+    private void _isAcceptable(Dictionary conf) throws UnacceptableConfiguration {
+    	if(conf == null || conf.get("name") == null) { throw new UnacceptableConfiguration("The configuration does not contains the \"name\" property"); }
+    	PropertyDescription[] props = m_componentDesc.getProperties();
+    	for(int i = 0; i < props.length; i++) {
+    		PropertyDescription pd = props[i];
+    		// Failed if the props has no default value and the configuration does not push a value 
+    		if(pd.getValue() == null && conf.get(pd.getName()) == null) {
+    			throw new UnacceptableConfiguration("The configuration does not contains the \"" + pd.getName() + "\" property");
+    		}
+    	}
+    }
 
 }
diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/Factory.java b/ipojo/src/main/java/org/apache/felix/ipojo/Factory.java
index 66606ca..86d006c 100644
--- a/ipojo/src/main/java/org/apache/felix/ipojo/Factory.java
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/Factory.java
@@ -34,7 +34,7 @@
      * @param configuration : the configuration properties for this component.
      * @return the created instance manager.
      */
-    ComponentInstance createComponentInstance(Dictionary configuration);
+    ComponentInstance createComponentInstance(Dictionary configuration) throws UnacceptableConfiguration;
     
     /**
      * Create an instance manager (i.e. component type instance).
@@ -43,7 +43,7 @@
      * @param serviceContext : the service context of the component.
      * @return the created instance manager.
      */
-    ComponentInstance createComponentInstance(Dictionary configuration, ServiceContext serviceContext);
+    ComponentInstance createComponentInstance(Dictionary configuration, ServiceContext serviceContext) throws UnacceptableConfiguration;
 
     /**
      * Get the component type information containing provided service, configuration properties ...
diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/InstanceCreator.java b/ipojo/src/main/java/org/apache/felix/ipojo/InstanceCreator.java
index a9708a7..d6c0c7d 100644
--- a/ipojo/src/main/java/org/apache/felix/ipojo/InstanceCreator.java
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/InstanceCreator.java
@@ -20,6 +20,7 @@
 
 import java.util.Dictionary;
 
+import org.apache.felix.ipojo.util.Logger;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceEvent;
@@ -35,6 +36,7 @@
 	
 	private BundleContext m_context;
 	
+	private Logger m_logger;
 	
 	/**
 	 * This structure aims to manage a configuration.
@@ -54,17 +56,15 @@
 	 */
 	private ManagedConfiguration[] m_configurations;
 	
-	
-	
 	public InstanceCreator(BundleContext context, Dictionary[] configurations) {
 		m_context = context;
+		m_logger = new Logger(context, "InstanceCreator"+context.getBundle().getBundleId(), Logger.WARNING);
 		m_configurations = new ManagedConfiguration[configurations.length];
 		for(int i = 0; i < configurations.length; i++) {
 			ManagedConfiguration conf = new ManagedConfiguration(configurations[i]);
 			m_configurations[i] = conf;
 			
 			// Get the component type name :
-			System.out.println("component = " + conf.configuration.get("component"));
 			String componentType = (String) conf.configuration.get("component");
 			Factory fact = null;
 			
@@ -76,26 +76,24 @@
 					createInstance(fact, conf);					
 				}
 				else {
-					System.err.println("No factory available for the type : " + componentType);
+					m_logger.log(Logger.WARNING, "No factory available for the type : " + componentType);
 				}
-			} catch (InvalidSyntaxException e) { e.printStackTrace(); }
-
+			} catch (InvalidSyntaxException e) { m_logger.log(Logger.ERROR, "Invalid syntax filter for the type : " + componentType, e); }
 		}
 		
 		// Register a service listenner on Factory Service
 		try {
 			m_context.addServiceListener(this, "(objectClass="+Factory.class.getName() + ")");
-		} catch (InvalidSyntaxException e) { e.printStackTrace(); }
+		} catch (InvalidSyntaxException e) { m_logger.log(Logger.ERROR, "Invalid syntax filter when registering a listener on Factory Service", e); }
 	}
 	
 	private void createInstance(Factory fact, ManagedConfiguration config) {
 		Dictionary conf = config.configuration;
-		if(fact.isAcceptable(conf)) {
-			config.instance = fact.createComponentInstance(conf);
-			config.factoryName = fact.getName();
-		}
-		else {
-			System.err.println("A factory is available for the configuration but the configuration is not acceptable");
+		try {
+				config.instance = fact.createComponentInstance(conf);
+				config.factoryName = fact.getName();
+		} catch (UnacceptableConfiguration e) {
+			m_logger.log(Logger.ERROR, "A factory is available for the configuration but the configuration is not acceptable", e);
 		}
 	}
 
diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/UnacceptableConfiguration.java b/ipojo/src/main/java/org/apache/felix/ipojo/UnacceptableConfiguration.java
new file mode 100644
index 0000000..bcda55b
--- /dev/null
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/UnacceptableConfiguration.java
@@ -0,0 +1,9 @@
+package org.apache.felix.ipojo;
+
+public class UnacceptableConfiguration extends Exception {
+
+	private static final long serialVersionUID = 2998931848886223965L;
+	
+	public UnacceptableConfiguration(String message) { super(message); }
+
+}
diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java b/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
index 7136732..60cda50 100644
--- a/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
@@ -281,6 +281,10 @@
 
         // Contruct the service properties list
         Properties serviceProperties = getServiceProperties();
+        
+        if(serviceProperties == null) {
+        	m_handler.getInstanceManager().getFactory().getLogger().log(Logger.ERROR, "Cannot get the properties of the provided service");
+        }
 
         // Update the service registration
         if (m_state == REGISTERED) {
diff --git a/ipojo/src/main/java/org/apache/felix/ipojo/parser/ManifestMetadataParser.java b/ipojo/src/main/java/org/apache/felix/ipojo/parser/ManifestMetadataParser.java
index 17451fd..1684578 100644
--- a/ipojo/src/main/java/org/apache/felix/ipojo/parser/ManifestMetadataParser.java
+++ b/ipojo/src/main/java/org/apache/felix/ipojo/parser/ManifestMetadataParser.java
@@ -58,13 +58,18 @@
         Dictionary[] dicts = new Dictionary[configs.length];
         for (int i = 0; i < configs.length; i++) {
             String comp = configs[i].getAttribute("component"); // get the component targeted by the configuration
+            if(comp == null) { throw new ParseException("An instance connaot be parsed : no component attribute"); }
             Dictionary d = new Properties();
             d.put("component", comp);
             if (configs[i].getAttribute("name") != null) { d.put("name", configs[i].getAttribute("name")); }
             for (int j = 0; j < configs[i].getElements("property", "").length; j++) {
                 String propsName = configs[i].getElements("property", "")[j].getAttribute("name", "");
                 String propsValue = configs[i].getElements("property", "")[j].getAttribute("value", "");
-                d.put(propsName, propsValue);
+                if(propsName == null || propsValue == null) { 
+                	System.err.println("A property cannot be parsed : " + propsName + " = " + propsValue);
+                	throw new ParseException("A property cannot be parsed : " + propsName + " = " + propsValue);
+                } 
+                else { d.put(propsName, propsValue); }
             }
             dicts[i] = d;
         }
