diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/InnerClasses.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/InnerClasses.java
index 8e94123..ac33a79 100644
--- a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/InnerClasses.java
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/InnerClasses.java
@@ -1,6 +1,7 @@
 package org.apache.felix.ipojo.runtime.core.components;
 
 import org.apache.felix.ipojo.runtime.core.services.CheckService;
+import org.apache.felix.ipojo.runtime.core.services.Job;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -37,6 +38,7 @@
         props.put("privateInner", new PrivateNested().doSomething());
         props.put("constructorInner", new ConstructorNested().doSomething());
         props.put("staticInner", new StaticNested().doSomething());
+        props.put("packageStaticInner", new PackageStaticNested().doSomething());
         
         Job anonymous = new Job()  {
             public Map doSomething() {
@@ -139,6 +141,16 @@
             return map;
         }
     }
+
+    static class PackageStaticNested implements Job {
+        private Map map = new HashMap();
+
+        public Map doSomething() {
+            map.put("static", new Boolean(true));
+            map.put("staticint", new Integer(staticint));
+            return map;
+        }
+    }
     
     protected class ConstructorNested implements Job {
         Map map = new HashMap();
@@ -163,6 +175,3 @@
 
 }
 
-interface Job {
-    public Map doSomething();
-}
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/Switches.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/Switches.java
new file mode 100644
index 0000000..9667de4
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/components/Switches.java
@@ -0,0 +1,69 @@
+package org.apache.felix.ipojo.runtime.core.components;
+
+import org.apache.felix.ipojo.runtime.core.services.CheckService;
+import org.apache.felix.ipojo.runtime.core.services.Color;
+
+import java.util.Properties;
+
+/**
+ * A component checking switch construct with integer and enumeration.
+ */
+public class Switches implements CheckService {
+
+    private static enum Stuff {
+        FOO,
+        BAR
+    }
+
+    private String switchOnInteger(int i) {
+        switch (i) {
+            case 0:
+                return "0";
+            case 1:
+                return "1";
+            case 2:
+                return "2";
+            default:
+                return "3";
+        }
+    }
+
+    private String switchOnEnum(Color color) {
+        switch (color) {
+            case RED:
+                return "RED";
+            case GREEN:
+                return "GREEN";
+            case BLUE:
+                return "BLUE";
+            default:
+                return "COLOR";
+        }
+    }
+
+    private String switchOnStuff(Stuff stuff) {
+        switch (stuff) {
+            case FOO : return "foo";
+            case BAR : return "bar";
+            default: return "";
+        }
+    }
+
+    @Override
+    public boolean check() {
+        return true;
+    }
+
+    @Override
+    public Properties getProps() {
+        Properties properties = new Properties();
+        properties.put("switchOnInteger1", switchOnInteger(1));
+        properties.put("switchOnInteger4", switchOnInteger(4));
+
+        properties.put("switchOnEnumRed", switchOnEnum(Color.RED));
+
+        properties.put("switchOnStuffFoo", switchOnStuff(Stuff.FOO));
+
+        return properties;
+    }
+}
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/services/Color.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/services/Color.java
new file mode 100644
index 0000000..b47f9a6
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/services/Color.java
@@ -0,0 +1,11 @@
+package org.apache.felix.ipojo.runtime.core.services;
+
+/**
+ * An enumeration.
+ */
+public enum Color {
+
+    RED,
+    GREEN,
+    BLUE
+}
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/services/Job.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/services/Job.java
new file mode 100644
index 0000000..3f9c3cf
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/java/org/apache/felix/ipojo/runtime/core/services/Job.java
@@ -0,0 +1,10 @@
+package org.apache.felix.ipojo.runtime.core.services;
+
+import java.util.Map;
+
+/**
+ *
+ */
+public interface Job {
+    public Map doSomething();
+}
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/resources/metadata.xml b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/resources/metadata.xml
index 7650c4f..3bf8562 100644
--- a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/resources/metadata.xml
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/main/resources/metadata.xml
@@ -34,4 +34,8 @@
 			<property field="publicInt"/>
 		</provides>
 	</component>
+
+    <component classname="org.apache.felix.ipojo.runtime.core.components.Switches">
+        <provides/>
+    </component>
 </ipojo>
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestNestedClasses.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestNestedClasses.java
index 0baa6a7..7dfd220 100644
--- a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestNestedClasses.java
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestNestedClasses.java
@@ -145,6 +145,16 @@
     }
 
     @Test
+    public void testPackageStaticInnerClass() {
+        Map data = (Map) service.getProps().get("packageStaticInner");
+        assertNotNull("Check data existence", data);
+
+        assertEquals("Check static", new Boolean(true), data.get("static"));
+        assertEquals("Check static int", new Integer(6), data.get("staticint"));
+
+    }
+
+    @Test
     public void testAnonymousInnerClass() {
         Map data = (Map) service.getProps().get("anonymous");
         assertNotNull("Check data existence", data);
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypes.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypes.java
index 303175c..ff1a9a1 100644
--- a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypes.java
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypes.java
@@ -77,16 +77,16 @@
 
     @Test
     public void testFloat() {
-        assertEquals("Check - 1", prim.getFloat(), 1.1f);
+        assertEquals("Check - 1", prim.getFloat(), 1.1f, 0);
         prim.setFloat(2.2f);
-        assertEquals("Check - 2", prim.getFloat(), 2.2f);
+        assertEquals("Check - 2", prim.getFloat(), 2.2f, 0);
     }
 
     @Test
     public void testDouble() {
-        assertEquals("Check - 1", prim.getDouble(), 1.1);
+        assertEquals("Check - 1", prim.getDouble(), 1.1, 0);
         prim.setDouble(2.2);
-        assertEquals("Check - 2", prim.getDouble(), 2.2);
+        assertEquals("Check - 2", prim.getDouble(), 2.2, 0);
     }
 
     @Test
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypesWithNumberInNames.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypesWithNumberInNames.java
index 709cbbe..5fb5138 100644
--- a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypesWithNumberInNames.java
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestPrimitiveTypesWithNumberInNames.java
@@ -82,16 +82,16 @@
 
     @Test
     public void testFloat() {
-        assertEquals("Check - 1", prim.getFloat(), 1.1f);
+        assertEquals("Check - 1", prim.getFloat(), 1.1f, 0);
         prim.setFloat(2.2f);
-        assertEquals("Check - 2", prim.getFloat(), 2.2f);
+        assertEquals("Check - 2", prim.getFloat(), 2.2f, 0);
     }
 
     @Test
     public void testDouble() {
-        assertEquals("Check - 1", prim.getDouble(), 1.1);
+        assertEquals("Check - 1", prim.getDouble(), 1.1, 0);
         prim.setDouble(2.2);
-        assertEquals("Check - 2", prim.getDouble(), 2.2);
+        assertEquals("Check - 2", prim.getDouble(), 2.2, 0);
     }
 
     @Test
diff --git a/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestSwitches.java b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestSwitches.java
new file mode 100644
index 0000000..2ba51d9
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/ipojo-manipulator-manipulation-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestSwitches.java
@@ -0,0 +1,60 @@
+package org.apache.felix.ipojo.runtime.core;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.runtime.core.services.CheckService;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.ops4j.pax.exam.ProbeBuilder;
+import org.ops4j.pax.exam.TestProbeBuilder;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Properties;
+
+import static junit.framework.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class TestSwitches extends Common {
+
+    private ComponentInstance instance;
+    private CheckService service;
+
+    @Before
+    public void setUp() {
+        instance = ipojoHelper.createComponentInstance("org.apache.felix.ipojo.runtime.core.components.Switches");
+
+        ServiceReference ref = ipojoHelper.getServiceReferenceByName(CheckService.class.getName(), instance.getInstanceName());
+        assertNotNull("Check service availability", ref);
+        service = (CheckService) osgiHelper.getServiceObject(ref);
+    }
+
+    @After
+    public void tearDown() {
+        service = null;
+    }
+
+    @ProbeBuilder
+    public TestProbeBuilder probe(TestProbeBuilder builder) {
+        builder.setHeader(Constants.IMPORT_PACKAGE, "org.osgi.framework, org.apache.felix.ipojo, " +
+                "org.ow2.chameleon.testing.helpers," +
+                "org.apache.felix.ipojo.architecture, org.apache.felix.ipojo.handlers.dependency," +
+                "org.apache.felix.ipojo.runtime.core.services, org.apache.felix.ipojo.runtime.core.components");
+        builder.setHeader(Constants.DYNAMICIMPORT_PACKAGE, "org.ops4j.pax.exam,org.junit,javax.inject," +
+                "org.ops4j.pax.exam.options,junit.framework");
+        builder.setHeader("Bundle-ManifestVersion", "2");
+        return builder;
+    }
+
+    @Test
+    public void testSwitches() {
+        Properties properties = service.getProps();
+        assertEquals(properties.get("switchOnInteger1"), "1");
+        assertEquals(properties.get("switchOnInteger4"), "3");
+
+
+        assertEquals(properties.get("switchOnEnumRed"), "RED");
+    }
+
+
+}
diff --git a/ipojo/manipulator/manipulator/pom.xml b/ipojo/manipulator/manipulator/pom.xml
index 35a5636..69d624f 100644
--- a/ipojo/manipulator/manipulator/pom.xml
+++ b/ipojo/manipulator/manipulator/pom.xml
@@ -61,6 +61,12 @@
           <version>4.2.0</version>
           <scope>test</scope>
       </dependency>
+      <dependency>
+          <groupId>commons-io</groupId>
+          <artifactId>commons-io</artifactId>
+          <version>2.4</version>
+          <scope>test</scope>
+      </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatedClassLoader.java b/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatedClassLoader.java
index 12afa5f..995f07e 100644
--- a/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatedClassLoader.java
+++ b/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatedClassLoader.java
@@ -18,27 +18,44 @@
  */
 package org.apache.felix.ipojo.manipulation;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * A classloader used to load manipulated classes.
  */
-class ManipulatedClassLoader extends ClassLoader {
+public class ManipulatedClassLoader extends ClassLoader {
 
     private String name;
     private byte[] clazz;
 
+    private Map<String, byte[]> inners = new HashMap<String, byte[]>();
+
     public ManipulatedClassLoader(String name, byte[] clazz) {
         this.name = name;
         this.clazz = clazz;
     }
 
+    public void addInnerClasses(Map<String, byte[]> inn) {
+        inners = inn;
+    }
+
     public Class findClass(String name) throws ClassNotFoundException {
         if (name.equals(this.name)) {
             return defineClass(name, clazz, 0, clazz.length);
         }
+        if (inners.containsKey(name)) {
+            return defineClass(name, inners.get(name), 0, inners.get(name).length);
+
+        }
         return super.findClass(name);
     }
 
     public Class loadClass(String arg0) throws ClassNotFoundException {
+        if (inners.containsKey(arg0)) {
+            return defineClass(arg0, inners.get(arg0), 0, inners.get(arg0).length);
+
+        }
         return super.loadClass(arg0);
     }
 }
diff --git a/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatorTest.java b/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatorTest.java
index a6d333c..b1ff382 100644
--- a/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatorTest.java
+++ b/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/ManipulatorTest.java
@@ -195,8 +195,7 @@
 
     }
 
-    //TODO CE - 19/10/2011 Why do we have a classloader issue in this test
-    public void _testManipulatingTheInner() throws Exception {
+    public void testManipulatingTheInner() throws Exception {
         Manipulator manipulator = new Manipulator();
         byte[] clazz = manipulator.manipulate(getBytesFromFile(new File("target/test-classes/test/PojoWithInner.class")));
         ManipulatedClassLoader classloader = new ManipulatedClassLoader("test.PojoWithInner", clazz);
diff --git a/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/switches/TestSwitches.java b/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/switches/TestSwitches.java
new file mode 100644
index 0000000..f98264b
--- /dev/null
+++ b/ipojo/manipulator/manipulator/src/test/java/org/apache/felix/ipojo/manipulation/switches/TestSwitches.java
@@ -0,0 +1,99 @@
+package org.apache.felix.ipojo.manipulation.switches;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.felix.ipojo.manipulation.ManipulatedClassLoader;
+import org.apache.felix.ipojo.manipulation.Manipulator;
+import org.junit.Assert;
+import org.junit.Test;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.util.CheckClassAdapter;
+import test.switches.Color;
+
+import java.io.*;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Checks the manipulation of switch constructs
+ */
+public class TestSwitches {
+
+
+    @Test
+    public void testSwitchOnInteger() throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
+        Manipulator manipulator = new Manipulator();
+        byte[] clazz = manipulator.manipulate(getBytesFromFile(new File
+                ("target/test-classes/test/switches/Switches.class")));
+        ManipulatedClassLoader classloader = new ManipulatedClassLoader("test.switches.Switches", clazz);
+
+        ClassReader reader = new ClassReader(clazz);
+        CheckClassAdapter.verify(reader, false, new PrintWriter(new File("/tmp/class_dump")));
+
+        Class cl = classloader.findClass("test.switches.Switches");
+        Object o = cl.newInstance();
+
+        Method method = cl.getMethod("switchOnInteger", new Class[] { Integer.TYPE});
+        int zero = (Integer) method.invoke(o, 0);
+        int one = (Integer) method.invoke(o, 1);
+        int two = (Integer) method.invoke(o, 2);
+        int three = (Integer) method.invoke(o, 4);
+
+        Assert.assertEquals(zero, 0);
+        Assert.assertEquals(one, 1);
+        Assert.assertEquals(two, 2);
+        Assert.assertEquals(three, 3);
+    }
+
+    @Test
+    public void testSwitchOnEnum() throws IOException, ClassNotFoundException, IllegalAccessException,
+            InstantiationException, NoSuchMethodException, InvocationTargetException {
+        Manipulator manipulator = new Manipulator();
+        byte[] clazz = manipulator.manipulate(getBytesFromFile(new File
+                ("target/test-classes/test/switches/Switches.class")));
+        ManipulatedClassLoader classloader = new ManipulatedClassLoader("test.switches.Switches", clazz);
+        Map<String, byte[]> inners = new HashMap<String, byte[]>();
+
+        inners.put("test.switches.Switches$1", getBytesFromFile(new File
+                ("target/test-classes/test/switches/Switches$1.class")));
+        classloader.addInnerClasses(inners);
+
+        FileUtils.writeByteArrayToFile(new File("target/Switches.class"), clazz);
+
+        Class cl = classloader.findClass("test.switches.Switches");
+        Object o = cl.newInstance();
+
+        Method method = cl.getMethod("switchOnEnum", new Class[] { Color.class});
+        int one = (Integer) method.invoke(o, Color.RED);
+        int two = (Integer) method.invoke(o, Color.GREEN);
+        int three = (Integer) method.invoke(o, Color.BLUE);
+
+        Assert.assertEquals(one, 1);
+        Assert.assertEquals(two, 2);
+        Assert.assertEquals(three, 3);
+    }
+
+    public static byte[] getBytesFromFile(File file) throws IOException {
+        InputStream is = new FileInputStream(file);
+        long length = file.length();
+        byte[] bytes = new byte[(int)length];
+
+        // Read in the bytes
+        int offset = 0;
+        int numRead = 0;
+        while (offset < bytes.length
+                && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
+            offset += numRead;
+        }
+
+        // Ensure all the bytes have been read in
+        if (offset < bytes.length) {
+            throw new IOException("Could not completely read file "+file.getName());
+        }
+
+        // Close the input stream and return bytes
+        is.close();
+        return bytes;
+    }
+}
diff --git a/ipojo/manipulator/manipulator/src/test/java/test/PojoWithInner.java b/ipojo/manipulator/manipulator/src/test/java/test/PojoWithInner.java
index 8094889..2170541 100644
--- a/ipojo/manipulator/manipulator/src/test/java/test/PojoWithInner.java
+++ b/ipojo/manipulator/manipulator/src/test/java/test/PojoWithInner.java
@@ -25,9 +25,14 @@
 	// This is a simple POJO
 
 	public boolean doSomething() {
+        System.out.println(new MySecondInner().i);
 		return m_result.getInner();
 	}
 
+    class MySecondInner {
+        int i = 0;
+    }
+
 	public class MyInner {
 
 		public boolean getInner() {
diff --git a/ipojo/manipulator/manipulator/src/test/java/test/switches/Color.java b/ipojo/manipulator/manipulator/src/test/java/test/switches/Color.java
new file mode 100644
index 0000000..462e742
--- /dev/null
+++ b/ipojo/manipulator/manipulator/src/test/java/test/switches/Color.java
@@ -0,0 +1,8 @@
+package test.switches;
+
+/**
+ * An enum.
+ */
+public enum Color {
+    RED, GREEN, BLUE
+}
diff --git a/ipojo/manipulator/manipulator/src/test/java/test/switches/Switches.java b/ipojo/manipulator/manipulator/src/test/java/test/switches/Switches.java
new file mode 100644
index 0000000..a4ef6cf
--- /dev/null
+++ b/ipojo/manipulator/manipulator/src/test/java/test/switches/Switches.java
@@ -0,0 +1,25 @@
+package test.switches;
+
+/**
+ * A component using switch on integers and enum.
+ */
+public class Switches {
+
+
+    public int switchOnInteger(int i) {
+        switch (i) {
+            case 0 : return 0;
+            case 1 : return 1;
+            case 2 : return 2;
+            default: return 3;
+        }
+    }
+
+    public int switchOnEnum(Color c) {
+        switch (c) {
+            case RED: return 1;
+            case GREEN: return 2;
+            default: return 3;
+        }
+    }
+}
diff --git a/ipojo/runtime/core-it/src/it/ipojo-core-configuration-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestBothProperties.java b/ipojo/runtime/core-it/src/it/ipojo-core-configuration-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestBothProperties.java
index ec56790..29ef311 100644
--- a/ipojo/runtime/core-it/src/it/ipojo-core-configuration-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestBothProperties.java
+++ b/ipojo/runtime/core-it/src/it/ipojo-core-configuration-test/src/test/java/org/apache/felix/ipojo/runtime/core/TestBothProperties.java
@@ -102,8 +102,8 @@
         assertEquals("Check s", s, new Short("1"));
         assertEquals("Check i", i, new Integer("1"));
         assertEquals("Check l", l, new Long("1"));
-        assertEquals("Check d", d, new Double("1"));
-        assertEquals("Check f", f, new Float("1"));
+        assertEquals("Check d", d, new Double("1"), 0);
+        assertEquals("Check f", f, new Float("1"), 0);
         assertEquals("Check c", c, new Character('a'));
         assertEquals("Check bool", bool, new Boolean("true"));
 
@@ -145,8 +145,8 @@
         assertEquals("2) Check s", s, new Short("2"));
         assertEquals("2) Check i", i, new Integer("2"));
         assertEquals("2) Check l", l, new Long("2"));
-        assertEquals("2) Check d", d, new Double("2"));
-        assertEquals("2) Check f", f, new Float("2"));
+        assertEquals("2) Check d", d, new Double("2"), 0);
+        assertEquals("2) Check f", f, new Float("2"), 0);
         assertEquals("2) Check c", c, new Character('b'));
         assertEquals("2) Check bool", bool, new Boolean("false"));
 
@@ -190,8 +190,8 @@
         assertEquals("Check s", s, new Short("1"));
         assertEquals("Check i", i, new Integer("1"));
         assertEquals("Check l", l, new Long("1"));
-        assertEquals("Check d", d, new Double("1"));
-        assertEquals("Check f", f, new Float("1"));
+        assertEquals("Check d", d, new Double("1"), 0);
+        assertEquals("Check f", f, new Float("1"), 0);
         assertEquals("Check c", c, new Character('a'));
         assertEquals("Check bool", bool, new Boolean("true"));
 
@@ -233,8 +233,8 @@
         assertEquals("2) Check s", s, new Short("2"));
         assertEquals("2) Check i", i, new Integer("2"));
         assertEquals("2) Check l", l, new Long("2"));
-        assertEquals("2) Check d", d, new Double("2"));
-        assertEquals("2) Check f", f, new Float("2"));
+        assertEquals("2) Check d", d, new Double("2"), 0);
+        assertEquals("2) Check f", f, new Float("2"), 0);
         assertEquals("2) Check c", c, new Character('b'));
         assertEquals("2) Check bool", bool, new Boolean("false"));
 
@@ -286,9 +286,9 @@
         assertEquals("Check l 0", l[0], 1);
         assertEquals("Check l 1", l[1], 2);
         assertEquals("Check l 2", l[2], 3);
-        assertEquals("Check d 0", d[0], 1.0);
-        assertEquals("Check d 1", d[1], 2.0);
-        assertEquals("Check d 2", d[2], 3.0);
+        assertEquals("Check d 0", d[0], 1.0, 0);
+        assertEquals("Check d 1", d[1], 2.0, 0);
+        assertEquals("Check d 2", d[2], 3.0, 0);
         assertEquals("Check f 0", f[0], 1.0, 0);
         assertEquals("Check f 1", f[1], 2.0, 0);
         assertEquals("Check f 2", f[2], 3.0, 0);
@@ -345,9 +345,9 @@
         assertEquals("2) Check l 0", l[0], 3);
         assertEquals("2) Check l 1", l[1], 2);
         assertEquals("2) Check l 2", l[2], 1);
-        assertEquals("2) Check d 0", d[0], 3.0);
-        assertEquals("2) Check d 1", d[1], 2.0);
-        assertEquals("2) Check d 2", d[2], 1.0);
+        assertEquals("2) Check d 0", d[0], 3.0, 0);
+        assertEquals("2) Check d 1", d[1], 2.0, 0);
+        assertEquals("2) Check d 2", d[2], 1.0, 0);
         assertEquals("2) Check f 0", f[0], 3.0, 0);
         assertEquals("2) Check f 1", f[1], 2.0, 0);
         assertEquals("2) Check f 2", f[2], 1.0, 0);
@@ -406,9 +406,9 @@
         assertEquals("Check l 0", l[0], 1);
         assertEquals("Check l 1", l[1], 2);
         assertEquals("Check l 2", l[2], 3);
-        assertEquals("Check d 0", d[0], 1.0);
-        assertEquals("Check d 1", d[1], 2.0);
-        assertEquals("Check d 2", d[2], 3.0);
+        assertEquals("Check d 0", d[0], 1.0, 0);
+        assertEquals("Check d 1", d[1], 2.0, 0);
+        assertEquals("Check d 2", d[2], 3.0, 0);
         assertEquals("Check f 0", f[0], 1, 0);
         assertEquals("Check f 1", f[1], 2, 0);
         assertEquals("Check f 2", f[2], 3, 0);
@@ -465,9 +465,9 @@
         assertEquals("2) Check l 0", l[0], 3);
         assertEquals("2) Check l 1", l[1], 2);
         assertEquals("2) Check l 2", l[2], 1);
-        assertEquals("2) Check d 0", d[0], 3.0);
-        assertEquals("2) Check d 1", d[1], 2.0);
-        assertEquals("2) Check d 2", d[2], 1.0);
+        assertEquals("2) Check d 0", d[0], 3.0, 0);
+        assertEquals("2) Check d 1", d[1], 2.0, 0);
+        assertEquals("2) Check d 2", d[2], 1.0, 0);
         assertEquals("2) Check f 0", f[0], 3, 0);
         assertEquals("2) Check f 1", f[1], 2, 0);
         assertEquals("2) Check f 2", f[2], 1, 0);
@@ -652,8 +652,8 @@
         assertEquals("Check s", s, new Short("0"));
         assertEquals("Check i", i, new Integer("0"));
         assertEquals("Check l", l, new Long("0"));
-        assertEquals("Check d", d, new Double("0"));
-        assertEquals("Check f", f, new Float("0"));
+        assertEquals("Check d", d, new Double("0"), 0);
+        assertEquals("Check f", f, new Float("0"), 0);
         assertEquals("Check c", c, new Character((char) 0));
         assertEquals("Check bool", bool, new Boolean(false));
 
@@ -695,8 +695,8 @@
         assertEquals("2) Check s", s, new Short("2"));
         assertEquals("2) Check i", i, new Integer("2"));
         assertEquals("2) Check l", l, new Long("2"));
-        assertEquals("2) Check d", d, new Double("2"));
-        assertEquals("2) Check f", f, new Float("2"));
+        assertEquals("2) Check d", d, new Double("2"), 0);
+        assertEquals("2) Check f", f, new Float("2"), 0);
         assertEquals("2) Check c", c, new Character('b'));
         assertEquals("2) Check bool", bool, new Boolean("false"));
 
@@ -791,9 +791,9 @@
         assertEquals("2) Check l 0", l[0], 3);
         assertEquals("2) Check l 1", l[1], 2);
         assertEquals("2) Check l 2", l[2], 1);
-        assertEquals("2) Check d 0", d[0], 3.0);
-        assertEquals("2) Check d 1", d[1], 2.0);
-        assertEquals("2) Check d 2", d[2], 1.0);
+        assertEquals("2) Check d 0", d[0], 3.0, 0);
+        assertEquals("2) Check d 1", d[1], 2.0, 0);
+        assertEquals("2) Check d 2", d[2], 1.0, 0);
         assertEquals("2) Check f 0", f[0], 3, 0);
         assertEquals("2) Check f 1", f[1], 2, 0);
         assertEquals("2) Check f 2", f[2], 1, 0);
diff --git a/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-optional-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/di/TestDelayedOptionalDependencies.java b/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-optional-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/di/TestDelayedOptionalDependencies.java
index 93b6291..838a2f7 100644
--- a/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-optional-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/di/TestDelayedOptionalDependencies.java
+++ b/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-optional-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/di/TestDelayedOptionalDependencies.java
@@ -119,7 +119,7 @@
         assertNotNull("Check FS invocation (object) - 1", props.get("object"));
         assertEquals("Check FS invocation (int) - 1", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 1", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider.stop();
 
@@ -142,7 +142,7 @@
         assertNull("Check FS invocation (object) - 2", props.get("object"));
         assertEquals("Check FS invocation (int) - 2", ((Integer) props.get("int")).intValue(), 5);
         assertEquals("Check FS invocation (long) - 2", ((Long) props.get("long")).longValue(), 5);
-        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 5.0);
+        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 5.0, 0);
 
         id = null;
         cs = null;
@@ -177,7 +177,7 @@
         assertNotNull("Check FS invocation (object) - 1", props.get("object"));
         assertEquals("Check FS invocation (int) - 1", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 1", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider.stop();
 
@@ -200,7 +200,7 @@
         assertNull("Check FS invocation (object) - 2", props.get("object"));
         assertEquals("Check FS invocation (int) - 2", ((Integer) props.get("int")).intValue(), 5);
         assertEquals("Check FS invocation (long) - 2", ((Long) props.get("long")).longValue(), 5);
-        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 5.0);
+        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 5.0, 0);
 
         id = null;
         cs = null;
diff --git a/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-policies/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/policies/TestStaticMultipleDependencies.java b/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-policies/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/policies/TestStaticMultipleDependencies.java
index a24591e..e1c36e8 100644
--- a/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-policies/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/policies/TestStaticMultipleDependencies.java
+++ b/ipojo/runtime/core-it/src/it/ipojo-core-service-dependency-policies/src/test/java/org/apache/felix/ipojo/runtime/core/test/dependencies/policies/TestStaticMultipleDependencies.java
@@ -114,7 +114,7 @@
         assertEquals("check ref unbind callback invocation - 1", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 1", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 1", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider2.start();
         ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), instance1.getInstanceName());
@@ -133,7 +133,7 @@
         assertEquals("check ref unbind callback invocation - 2", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 2", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 2", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider1.stop();
         // instance is stopped and then restarted, so bound to fooprovider 2.
@@ -173,7 +173,7 @@
         assertEquals("check ref unbind callback invocation - 1", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 1", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 1", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider2.start();
         id = ((Architecture) getContext().getService(arch_ref)).getInstanceDescription();
@@ -191,7 +191,7 @@
         assertEquals("check ref unbind callback invocation - 2", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 2", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 2", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider1.stop();
 
@@ -231,7 +231,7 @@
         assertEquals("check ref unbind callback invocation - 1", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 1", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 1", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider2.start();
         id = ((Architecture) getContext().getService(arch_ref)).getInstanceDescription();
@@ -249,7 +249,7 @@
         assertEquals("check ref unbind callback invocation - 2", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 2", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 2", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider1.stop();
         // Instance stopped and then restarted, bound to foo provider 2.
@@ -289,7 +289,7 @@
         assertEquals("check ref unbind callback invocation - 1", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 1", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 1", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 1", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider2.start();
         id = ((Architecture) getContext().getService(arch_ref)).getInstanceDescription();
@@ -307,7 +307,7 @@
         assertEquals("check ref unbind callback invocation - 2", ((Integer) props.get("refU")).intValue(), 0);
         assertEquals("Check FS invocation (int) - 2", ((Integer) props.get("int")).intValue(), 1);
         assertEquals("Check FS invocation (long) - 2", ((Long) props.get("long")).longValue(), 1);
-        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0);
+        assertEquals("Check FS invocation (double) - 2", ((Double) props.get("double")).doubleValue(), 1.0, 0);
 
         fooProvider1.stop();
         // Stop and then restarted, bound to foo provider 2.
