diff --git a/ipojo/core/pom.xml b/ipojo/core/pom.xml
index 1c0b460..8f9de84 100644
--- a/ipojo/core/pom.xml
+++ b/ipojo/core/pom.xml
@@ -31,7 +31,7 @@
 	<version>1.3.0-SNAPSHOT</version>
 	
 	<properties>
-		<ipojo.package.version>1.2.0</ipojo.package.version>
+		<ipojo.package.version>1.3.0</ipojo.package.version>
 	</properties>
 	
 	<dependencies>
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
index 4030075..91578fc 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
@@ -463,7 +463,7 @@
          * Creates a PrimitiveTypeDescription object.
          * @param factory the factory attached to this component type description.
          */
-        public PrimitiveTypeDescription(Factory factory) {
+        public PrimitiveTypeDescription(IPojoFactory factory) {
             super(factory);
         }
 
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
index 153ad66..6da7ce2 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
@@ -182,7 +182,7 @@
          * @param factory the factory.
          * @see ComponentTypeDescription#ComponentTypeDescription(Factory)
          */
-        public HandlerTypeDescription(Factory factory) {
+        public HandlerTypeDescription(IPojoFactory factory) {
             super(factory);
         }
 
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
index 0813853..cb26e98 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
@@ -23,6 +23,7 @@
 
 import org.apache.felix.ipojo.ComponentFactory;
 import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.IPojoFactory;
 import org.apache.felix.ipojo.metadata.Attribute;
 import org.apache.felix.ipojo.metadata.Element;
 import org.osgi.framework.BundleContext;
@@ -48,15 +49,23 @@
     /**
      * Represented factory.
      */
-    private final Factory m_factory;
+    private final IPojoFactory m_factory;
     
     /**
      * Constructor.
      * @param factory : represented factory.
      */
-    public ComponentTypeDescription(Factory factory) {
+    public ComponentTypeDescription(IPojoFactory factory) {
         m_factory = factory;
     }
+    
+    /**
+     * Gets the attached factory.
+     * @return the factory
+     */
+    public IPojoFactory getFactory() {
+        return m_factory;
+    }
 
     /**
      * Gets a printable form of the current component type description.
@@ -109,10 +118,7 @@
      * @param pd : the property to add
      */
     public void addProperty(PropertyDescription pd) { //NOPMD remove the instance name of the 'name' property.
-        String name = pd.getName();
-//        if ("name".equals(name)) {
-//            pd = new PropertyDescription(name, pd.getType(), null); //NOPMD Instance name case.
-//        } 
+        String name = pd.getName(); 
         
         // Check if the property is not already in the array
         for (int i = 0; i < m_properties.length; i++) {
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
index db8bbe5..5730806 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
@@ -41,6 +41,7 @@
 import org.apache.felix.ipojo.parser.ParseException;
 import org.apache.felix.ipojo.parser.ParseUtils;
 import org.apache.felix.ipojo.parser.PojoMetadata;
+import org.apache.felix.ipojo.util.Logger;
 import org.apache.felix.ipojo.util.Property;
 import org.osgi.framework.Bundle;
 
@@ -511,7 +512,7 @@
         PojoMetadata manipulation = getFactory().getPojoMetadata();
 
         for (int i = 0; i < provides.length; i++) {
-         // First : create the serviceSpecification list
+            // First : create the serviceSpecification list
             String[] serviceSpecification = manipulation.getInterfaces();
             String parent = manipulation.getSuperClass();
             Set all = null;
@@ -532,8 +533,9 @@
             if (serviceSpecificationStr != null) {
                 List itfs = ParseUtils.parseArraysAsList(serviceSpecificationStr);
                 for (int j = 0; j < itfs.size(); j++) {
-                    if (! all.contains(itfs.get(j))) {
-                        throw new ConfigurationException("The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname"));
+                    if (! all.contains(itfs.get(j)) && ! parent.equals((String) itfs.get(i))) {
+                        desc.getFactory().getLogger().log(Logger.WARNING, "The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname") + 
+                                " it might be a superclass.");
                     }
                 }
                 all = new HashSet(itfs);
