diff --git a/ipojo/tests/manipulator/creation/pom.xml b/ipojo/tests/manipulator/creation/pom.xml
index 068e821..742f8a2 100644
--- a/ipojo/tests/manipulator/creation/pom.xml
+++ b/ipojo/tests/manipulator/creation/pom.xml
@@ -104,6 +104,24 @@
           <target>1.4</target>
         </configuration>
       </plugin>
+
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-junit4osgi-plugin</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <configuration>
+              <org.osgi.http.port>8083</org.osgi.http.port>
+              </configuration>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CallSuperSuperConstructorWithNew.java b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CallSuperSuperConstructorWithNew.java
new file mode 100644
index 0000000..6f0892f
--- /dev/null
+++ b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CallSuperSuperConstructorWithNew.java
@@ -0,0 +1,10 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class CallSuperSuperConstructorWithNew extends ParentClass2 {
+
+    public CallSuperSuperConstructorWithNew() {
+        super(new String("test"));
+        System.out.println("plop");
+    }
+
+}
diff --git a/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ParentClass2.java b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ParentClass2.java
new file mode 100644
index 0000000..39bea4e
--- /dev/null
+++ b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ParentClass2.java
@@ -0,0 +1,9 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class ParentClass2 extends SuperParentClass {
+
+    public ParentClass2(String n) {
+        super(n);
+    }
+
+}
diff --git a/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SuperParentClass.java b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SuperParentClass.java
new file mode 100644
index 0000000..2b87f4a
--- /dev/null
+++ b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SuperParentClass.java
@@ -0,0 +1,17 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class SuperParentClass {
+
+    private String name;
+
+    public SuperParentClass(final String n) {
+        System.out.println("Hello from super super !");
+        name = n;
+    }
+
+    public SuperParentClass(final StringBuffer n) {
+        name = n.toString();
+    }
+
+
+}
diff --git a/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/manipulation/POJOCreation.java b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/manipulation/POJOCreation.java
index b9fa25f..bd30524 100644
--- a/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/manipulation/POJOCreation.java
+++ b/ipojo/tests/manipulator/creation/src/main/java/org/apache/felix/ipojo/test/scenarios/manipulation/POJOCreation.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -33,96 +33,96 @@
  * Check the different method to create POJO object.
  */
 public class POJOCreation extends OSGiTestCase {
-    
+
     private IPOJOHelper helper;
-	
-	private ComponentInstance ci_lazzy;
-	private ComponentInstance ci_immediate;
-	private ComponentInstance ci_immediate_singleton;
-	
-	private Architecture lazzyArch;
-	private Architecture immeArch;
-	private Architecture immeArchSing;
-	
-	
+
+    private ComponentInstance ci_lazzy;
+    private ComponentInstance ci_immediate;
+    private ComponentInstance ci_immediate_singleton;
+
+    private Architecture lazzyArch;
+    private Architecture immeArch;
+    private Architecture immeArchSing;
+
+
     private ComponentInstance ci_lazzy_sing;
     private ComponentInstance ci_lazzy_sev;
-   
+
     private Architecture lazzyArchSing;
     private Architecture lazzyArchSev;
     private ComponentInstance ci_lazzy_singM;
     private ComponentInstance ci_lazzy_sevM;
-   
+
     private Architecture lazzyArchSingM;
     private Architecture lazzyArchSevM;
-	
-	public void setUp() {
-	    helper = new IPOJOHelper(this);
-	    
-		String factName = "ManipulationCreation-FooProviderType-1";
-		String compName = "FooProvider-1";
-		ci_lazzy = helper.createComponentInstance(factName ,compName);
-		
-		String factName2 = "ManipulationCreation-ImmediateFooProviderType";
-		String compName2 = "FooProvider-2";
-		ci_immediate = helper.createComponentInstance(factName2, compName2);
-		
-		String factName3 = "ManipulationCreation-ImmediateFooProviderTypeSingleton";
+
+    public void setUp() {
+        helper = new IPOJOHelper(this);
+
+        String factName = "ManipulationCreation-FooProviderType-1";
+        String compName = "FooProvider-1";
+        ci_lazzy = helper.createComponentInstance(factName ,compName);
+
+        String factName2 = "ManipulationCreation-ImmediateFooProviderType";
+        String compName2 = "FooProvider-2";
+        ci_immediate = helper.createComponentInstance(factName2, compName2);
+
+        String factName3 = "ManipulationCreation-ImmediateFooProviderTypeSingleton";
         String compName3 = "FooProvider-3";
         ci_immediate_singleton = helper.createComponentInstance(factName3, compName3);
-        
+
         String factName4 = "ManipulationCreation-FooProviderType-1-Sing";
         String compName4 = "FooProvider-1-Sing";
         ci_lazzy_sing = helper.createComponentInstance(factName4, compName4);
-        
+
         String factName5 = "ManipulationCreation-FooProviderType-1-Sev";
         String compName5 = "FooProvider-1-Sev";
         ci_lazzy_sev = helper.createComponentInstance(factName5, compName5);
-        
+
         String factName6 = "ManipulationCreation-FooProviderType-1-SingM";
         String compName6 = "FooProvider-1-SingM";
         ci_lazzy_singM = helper.createComponentInstance(factName6, compName6);
-        
+
         String factName7 = "ManipulationCreation-FooProviderType-1-SevM";
         String compName7 = "FooProvider-1-SevM";
         ci_lazzy_sevM = helper.createComponentInstance(factName7, compName7);
-		
-		lazzyArch = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName+")");
-		immeArch =   (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName2+")");
-		immeArchSing = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName3+")");
-		lazzyArchSing = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName4+")");
-		lazzyArchSev = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName5+")");
-		lazzyArchSingM = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName6+")");
-		lazzyArchSevM = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName7+")");
-	}
-	
-	public void tearDown() {
-		lazzyArch = null;
-		immeArch = null;
-		immeArchSing = null;
-		lazzyArchSing = null;
-		lazzyArchSev = null;
-		lazzyArchSingM = null;
+
+        lazzyArch = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName+")");
+        immeArch =   (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName2+")");
+        immeArchSing = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName3+")");
+        lazzyArchSing = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName4+")");
+        lazzyArchSev = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName5+")");
+        lazzyArchSingM = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName6+")");
+        lazzyArchSevM = (Architecture) getServiceObject(Architecture.class.getName(), "(architecture.instance="+compName7+")");
+    }
+
+    public void tearDown() {
+        lazzyArch = null;
+        immeArch = null;
+        immeArchSing = null;
+        lazzyArchSing = null;
+        lazzyArchSev = null;
+        lazzyArchSingM = null;
         lazzyArchSevM = null;
         helper.dispose();
-	}
-	
-	/**
-	 * Check lazy creation.
-	 */
-	public void testLazyCreation() {
-		assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
-		ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy.getInstanceName());
-		assertNotNull("Check that a FooService from " + ci_lazzy.getInstanceName() + " is available",ref);
-		FooService fs = (FooService) getServiceObject(ref);
-		assertTrue("Check the FooService invocation", fs.foo());
-		assertEquals("Check the creation of 1 object",1,  ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
-	}
-	
-	/**
-	 * Check lazy and singleton creation.
-	 */
-	public void testLazyCreationSingleton() {
+    }
+
+    /**
+     * Check lazy creation.
+     */
+    public void testLazyCreation() {
+        assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
+        ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy.getInstanceName());
+        assertNotNull("Check that a FooService from " + ci_lazzy.getInstanceName() + " is available",ref);
+        FooService fs = (FooService) getServiceObject(ref);
+        assertTrue("Check the FooService invocation", fs.foo());
+        assertEquals("Check the creation of 1 object",1,  ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
+    }
+
+    /**
+     * Check lazy and singleton creation.
+     */
+    public void testLazyCreationSingleton() {
         assertEquals("Check that no objects are created ", 0,  ((PrimitiveInstanceDescription) lazzyArchSing.getInstanceDescription()).getCreatedObjects().length);
         ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy_sing.getInstanceName());
         assertNotNull("Check that a FooService from " + ci_lazzy_sing.getInstanceName() + " is available",ref);
@@ -130,11 +130,11 @@
         assertTrue("Check the FooService invocation", fs.foo());
         assertEquals("Check the creation of 1 object",1,  ((PrimitiveInstanceDescription) lazzyArchSing.getInstanceDescription()).getCreatedObjects().length);
     }
-	
-	/**
-	 * Check lazy and "several" creation.
-	 */
-	public void testLazyCreationSeveral() {
+
+    /**
+     * Check lazy and "several" creation.
+     */
+    public void testLazyCreationSeveral() {
         assertEquals("Check that no objects are created ", 0,  ((PrimitiveInstanceDescription) lazzyArchSev.getInstanceDescription()).getCreatedObjects().length);
         ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy_sev.getInstanceName());
         assertNotNull("Check that a FooService from " + ci_lazzy_sev.getInstanceName() + " is available", ref);
@@ -144,19 +144,19 @@
         assertTrue("Check the FooService invocation-2", fs2.foo());
         assertEquals("Check the creation of 1 object",1, ((PrimitiveInstanceDescription) lazzyArchSev.getInstanceDescription()).getCreatedObjects().length);
     }
-	
-	/**
-	 * Check immediate creation.
-	 */
-	public void testImmediateCreation() {
-		assertEquals("Check that one object is created ", 1, ((PrimitiveInstanceDescription) immeArch.getInstanceDescription()).getCreatedObjects().length);
-		ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_immediate.getInstanceName());
-		assertNotNull("Check that a FooService from " + ci_immediate.getInstanceName() + " is available", ref);
-		FooService fs = (FooService) getServiceObject(ref);
-		assertTrue("Check the FooService invocation", fs.foo());
-		assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) immeArch.getInstanceDescription()).getCreatedObjects().length);
-	}
-    
+
+    /**
+     * Check immediate creation.
+     */
+    public void testImmediateCreation() {
+        assertEquals("Check that one object is created ", 1, ((PrimitiveInstanceDescription) immeArch.getInstanceDescription()).getCreatedObjects().length);
+        ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_immediate.getInstanceName());
+        assertNotNull("Check that a FooService from " + ci_immediate.getInstanceName() + " is available", ref);
+        FooService fs = (FooService) getServiceObject(ref);
+        assertTrue("Check the FooService invocation", fs.foo());
+        assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) immeArch.getInstanceDescription()).getCreatedObjects().length);
+    }
+
     /**
      * Check bundle context injection.
      */
@@ -173,12 +173,12 @@
      * Test immediate singleton creation.
      */
     public void testImmediateSingletonCreation() {
-    	assertEquals("Check that one object is created ", 1, ((PrimitiveInstanceDescription) immeArchSing.getInstanceDescription()).getCreatedObjects().length);
-    	ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_immediate_singleton.getInstanceName());
-    	assertNotNull("Check that a FooService from " + ci_immediate_singleton.getInstanceName() + " is available",ref);
-    	FooService fs = (FooService) getServiceObject(ref);
-    	assertTrue("Check the FooService invocation", fs.foo());
-    	assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) immeArchSing.getInstanceDescription()).getCreatedObjects().length);
+        assertEquals("Check that one object is created ", 1, ((PrimitiveInstanceDescription) immeArchSing.getInstanceDescription()).getCreatedObjects().length);
+        ServiceReference ref = helper.getServiceReferenceByName(FooService.class.getName(), ci_immediate_singleton.getInstanceName());
+        assertNotNull("Check that a FooService from " + ci_immediate_singleton.getInstanceName() + " is available",ref);
+        FooService fs = (FooService) getServiceObject(ref);
+        assertTrue("Check the FooService invocation", fs.foo());
+        assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) immeArchSing.getInstanceDescription()).getCreatedObjects().length);
     }
 
     /**
@@ -212,7 +212,7 @@
         // Only one object as the getService method is called only once (service factory) despite the policy="method".
         assertEquals("Check the creation of 1 object",1, ((PrimitiveInstanceDescription) lazzyArchSevM.getInstanceDescription()).getCreatedObjects().length);
     }
-    
+
     /**
      * Test a custom constructor.
      * Not manipulated.
@@ -224,7 +224,7 @@
         assertEquals("Check foo", "foo", props.get("foo"));
         assertEquals("Check context", getContext(), props.get("context"));
     }
-    
+
     public void testSuperCall() {
         try {
             helper.createComponentInstance("org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructor");
@@ -232,7 +232,7 @@
             fail(e.getMessage());
         }
     }
-    
+
     public void testSuperCallWithNew() {
         try {
             helper.createComponentInstance("org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructorWithNew");
@@ -240,7 +240,15 @@
             fail(e.getMessage());
         }
     }
-    
+
+    public void testSuperSuperCallWithNew() {
+        try {
+            helper.createComponentInstance("org.apache.felix.ipojo.test.scenarios.component.CallSuperSuperConstructorWithNew");
+        } catch (Throwable e) {
+            fail(e.getMessage());
+        }
+    }
+
     public void testSuperCallWithBC() {
         try {
             helper.createComponentInstance("org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructorWithBC");
@@ -248,7 +256,7 @@
             fail(e.getMessage());
         }
     }
-    
-    
+
+
 
 }
\ No newline at end of file
diff --git a/ipojo/tests/manipulator/creation/src/main/resources/metadata.xml b/ipojo/tests/manipulator/creation/src/main/resources/metadata.xml
index 3fdacde..c8cd937 100644
--- a/ipojo/tests/manipulator/creation/src/main/resources/metadata.xml
+++ b/ipojo/tests/manipulator/creation/src/main/resources/metadata.xml
@@ -3,72 +3,73 @@
     xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
     xmlns="org.apache.felix.ipojo"
 >
-	<!-- Simple provider  used for manipulation analysis -->
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-FooProviderType-1" architecture="true">
-		<provides />
-	</component>
-	
-	<!-- Non lazzy service provider, to check instantiation -->
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-ImmediateFooProviderType" immediate="true"
-		architecture="true">
-		<provides />
-	</component>
-	
-	<!-- Type checking different creation policy -->
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-FooProviderType-1-Sing" factory-method="singleton"
-		architecture="true">
-		<provides />
-	</component>
-	
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-FooProviderType-1-Sev" factory-method="several"
-		architecture="true">
-		<provides />
-	</component>
-	
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-FooProviderType-1-SingM" factory-method="singleton"
-		architecture="true">
-		<provides/>
-	</component>
-	
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-FooProviderType-1-SevM" factory-method="several"
-		architecture="true">
-		<provides/>
-	</component>
-	
-	<component
-		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-		name="ManipulationCreation-ImmediateFooProviderTypeSingleton" immediate="true"
-		factory-method="singleton" architecture="true">
-		<provides />
-	</component>
-	
-	
-	<!-- Try calling super constructors -->
-	 <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructor" immediate="true"/>
-     <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructorWithNew" immediate="true"/>
-	 <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructorWithBC" immediate="true"/>
-	 
-	 <!--  Several constructors -->
-	 <component classname="org.apache.felix.ipojo.test.scenarios.component.SeveralConstructors">
-	 	<provides/>
-	 </component>
-	 <!--  No Empty constructor -->
-	 <component classname="org.apache.felix.ipojo.test.scenarios.component.NoEmptyConstructor">
-	 	<provides/>
-	 </component>
-	 <component classname="org.apache.felix.ipojo.test.scenarios.component.NoEmptyConstructorWithParentClass">
-	 	<provides/>
-	 </component>
+  <!-- Simple provider  used for manipulation analysis -->
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-FooProviderType-1" architecture="true">
+    <provides />
+  </component>
+
+  <!-- Non lazzy service provider, to check instantiation -->
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-ImmediateFooProviderType" immediate="true"
+    architecture="true">
+    <provides />
+  </component>
+
+  <!-- Type checking different creation policy -->
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-FooProviderType-1-Sing" factory-method="singleton"
+    architecture="true">
+    <provides />
+  </component>
+
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-FooProviderType-1-Sev" factory-method="several"
+    architecture="true">
+    <provides />
+  </component>
+
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-FooProviderType-1-SingM" factory-method="singleton"
+    architecture="true">
+    <provides/>
+  </component>
+
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-FooProviderType-1-SevM" factory-method="several"
+    architecture="true">
+    <provides/>
+  </component>
+
+  <component
+    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+    name="ManipulationCreation-ImmediateFooProviderTypeSingleton" immediate="true"
+    factory-method="singleton" architecture="true">
+    <provides />
+  </component>
+
+
+  <!-- Try calling super constructors -->
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructor" immediate="true"/>
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructorWithNew" immediate="true"/>
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperConstructorWithBC" immediate="true"/>
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.CallSuperSuperConstructorWithNew" immediate="true"/>
+
+   <!--  Several constructors -->
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.SeveralConstructors">
+     <provides/>
+   </component>
+   <!--  No Empty constructor -->
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.NoEmptyConstructor">
+     <provides/>
+   </component>
+   <component classname="org.apache.felix.ipojo.test.scenarios.component.NoEmptyConstructorWithParentClass">
+     <provides/>
+   </component>
 </ipojo>
