Fix issue FELIX-2132
Provides Service Controller (XSD, Annotation, API, Core and Tests)

Also update several tests to the new pax exam.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@915909 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/tests/core/annotations/pom.xml b/ipojo/tests/core/annotations/pom.xml
index d54fe9b..1942108 100644
--- a/ipojo/tests/core/annotations/pom.xml
+++ b/ipojo/tests/core/annotations/pom.xml
@@ -116,7 +116,7 @@
       </plugin>

       

       

-       <!-- <plugin>

+       <plugin>

         <groupId>org.apache.felix</groupId>

         <artifactId>maven-junit4osgi-plugin</artifactId>

         <version>1.1.0-SNAPSHOT</version>

@@ -132,7 +132,7 @@
             </configuration>

           </execution>

         </executions>

-      </plugin>-->

+      </plugin>

     </plugins>

   </build>

 </project>

diff --git a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java
index 2702235..15c5813 100644
--- a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java
+++ b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java
@@ -82,6 +82,16 @@
         

     }

     

+    public void testServiceController() {

+        Element meta = helper.getMetadata("org.apache.felix.ipojo.test.scenarios.component.PSServiceController");

+        Element[] provs = meta.getElements("provides");

+        assertNotNull("Provides exists ", provs);

+        System.out.println(provs[0].toString());

+        assertNotNull(provs[0].getElements("controller"));

+        assertEquals(1, provs[0].getElements("controller").length);

+        assertEquals("false", provs[0].getElements("controller")[0].getAttribute("value"));

+    }

+

     private Element getPropertyByName(Element[] props, String name) {

         for (int i = 0; i < props.length; i++) {

             String na = props[i].getAttribute("name");

diff --git a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java
new file mode 100644
index 0000000..13b905c
--- /dev/null
+++ b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java
@@ -0,0 +1,54 @@
+package org.apache.felix.ipojo.test.scenarios.component;

+

+import java.util.Properties;

+

+import org.apache.felix.ipojo.annotations.Component;

+import org.apache.felix.ipojo.annotations.Provides;

+import org.apache.felix.ipojo.annotations.ServiceController;

+import org.apache.felix.ipojo.test.scenarios.annotations.service.BarService;

+import org.apache.felix.ipojo.test.scenarios.annotations.service.FooService;

+

+@Component

+@Provides(specifications= {FooService.class, BarService.class})

+public class PSServiceController implements FooService, BarService {

+

+    @ServiceController(value=false)

+    public boolean controller;

+    

+    public boolean foo() {

+        return false;

+    }

+

+    public Properties fooProps() {

+        return null;

+    }

+

+    public boolean getBoolean() {

+        return false;

+    }

+

+    public double getDouble() {

+        return 0;

+    }

+

+    public int getInt() {

+        return 0;

+    }

+

+    public long getLong() {

+        return 0;

+    }

+

+    public Boolean getObject() {

+        return null;

+    }

+

+    public boolean bar() {

+        return false;

+    }

+

+    public Properties getProps() {

+        return null;

+    }

+

+}

diff --git a/ipojo/tests/core/service-providing/pom.xml b/ipojo/tests/core/service-providing/pom.xml
index 2e6ed9c..bdbf7e0 100644
--- a/ipojo/tests/core/service-providing/pom.xml
+++ b/ipojo/tests/core/service-providing/pom.xml
@@ -1,102 +1,120 @@
 <!--

-	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

-	regarding copyright ownership.  The ASF licenses this file

-	to you under the Apache License, Version 2.0 (the

-	"License"); you may not use this file except in compliance

-	with the License.  You may obtain a copy of the License at

+  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

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

 

-	http://www.apache.org/licenses/LICENSE-2.0

+  http://www.apache.org/licenses/LICENSE-2.0

 

-	Unless required by applicable law or agreed to in writing,

-	software distributed under the License is distributed on an

-	"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

-	KIND, either express or implied.  See the License for the

-	specific language governing permissions and limitations

-	under the License.

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

 -->

 <project>

-	<modelVersion>4.0.0</modelVersion>

-	<packaging>bundle</packaging>

-	<name>iPOJO Service Providing Test Suite</name>

-	<artifactId>tests.core.ps</artifactId>

-	<groupId>ipojo.tests</groupId>

-	<version>1.5.0-SNAPSHOT</version>

-	<dependencies>

-		<dependency>

-			<groupId>org.apache.felix</groupId>

-			<artifactId>org.apache.felix.ipojo</artifactId>

-			<version>${pom.version}</version>

-		</dependency>

-		<dependency>

-			<groupId>org.apache.felix</groupId>

-			<artifactId>org.apache.felix.ipojo.metadata</artifactId>

-			<version>${pom.version}</version>

-		</dependency>

-		<dependency>

-			<groupId>org.apache.felix</groupId>

-			<artifactId>org.osgi.core</artifactId>

-			<version>1.0.1</version>

-		</dependency>

-		<dependency>

-			<groupId>junit</groupId>

-			<artifactId>junit</artifactId>

-			<version>3.8.1</version>

-		</dependency>

-		<dependency>

-			<groupId>org.apache.felix</groupId>

-			<artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>

-			<version>1.1.0-SNAPSHOT</version>

-		</dependency>

-	</dependencies>

-	<build>

-		<plugins>

-			<plugin>

-				<groupId>org.apache.felix</groupId>

-				<artifactId>maven-bundle-plugin</artifactId>

-				<version>1.4.3</version>

-				<extensions>true</extensions>

-				<configuration>

-					<instructions>

-						<Export-Package>

-							org.apache.felix.ipojo.test.scenarios.ps.service

-						</Export-Package>

-						<Bundle-SymbolicName>

-							${pom.artifactId}

-						</Bundle-SymbolicName>

-						<Private-Package>

-							org.apache.felix.ipojo.test*

-						</Private-Package>

-						<Test-Suite>

-							org.apache.felix.ipojo.test.scenarios.ps.ProvidedServiceTestSuite

-						</Test-Suite>

-					</instructions>

-				</configuration>

-			</plugin>

-			<plugin>

-				<groupId>org.apache.felix</groupId>

-				<artifactId>maven-ipojo-plugin</artifactId>

-				<version>${pom.version}</version>

-				<executions>

-					<execution>

-						<goals>

-							<goal>ipojo-bundle</goal>

-						</goals>

-						<configuration>

-							<ignoreAnnotations>true</ignoreAnnotations>

-						</configuration>

-					</execution>

-				</executions>

-			</plugin>

-			<plugin>

-				<groupId>org.apache.maven.plugins</groupId>

-				<artifactId>maven-compiler-plugin</artifactId>

-				<configuration>

-					<source>1.4</source>

-					<target>1.4</target>

-				</configuration>

-			</plugin>

-		</plugins>

-	</build>

+  <modelVersion>4.0.0</modelVersion>

+  <packaging>bundle</packaging>

+  <name>iPOJO Service Providing Test Suite</name>

+  <artifactId>tests.core.ps</artifactId>

+  <groupId>ipojo.tests</groupId>

+  <version>1.5.0-SNAPSHOT</version>

+  <dependencies>

+    <dependency>

+      <groupId>org.apache.felix</groupId>

+      <artifactId>org.apache.felix.ipojo</artifactId>

+      <version>${pom.version}</version>

+    </dependency>

+    <dependency>

+      <groupId>org.apache.felix</groupId>

+      <artifactId>org.apache.felix.ipojo.metadata</artifactId>

+      <version>${pom.version}</version>

+    </dependency>

+    <dependency>

+      <groupId>org.apache.felix</groupId>

+      <artifactId>org.osgi.core</artifactId>

+      <version>1.0.1</version>

+    </dependency>

+    <dependency>

+      <groupId>junit</groupId>

+      <artifactId>junit</artifactId>

+      <version>3.8.1</version>

+    </dependency>

+    <dependency>

+      <groupId>org.apache.felix</groupId>

+      <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>

+      <version>1.1.0-SNAPSHOT</version>

+    </dependency>

+  </dependencies>

+  <build>

+    <plugins>

+      <plugin>

+        <groupId>org.apache.felix</groupId>

+        <artifactId>maven-bundle-plugin</artifactId>

+        <version>1.4.3</version>

+        <extensions>true</extensions>

+        <configuration>

+          <instructions>

+            <Export-Package>

+              org.apache.felix.ipojo.test.scenarios.ps.service

+            </Export-Package>

+            <Bundle-SymbolicName>

+              ${pom.artifactId}

+            </Bundle-SymbolicName>

+            <Private-Package>

+              org.apache.felix.ipojo.test*

+            </Private-Package>

+            <Test-Suite>

+              org.apache.felix.ipojo.test.scenarios.ps.ProvidedServiceTestSuite

+            </Test-Suite>

+          </instructions>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>org.apache.felix</groupId>

+        <artifactId>maven-ipojo-plugin</artifactId>

+        <version>${pom.version}</version>

+        <executions>

+          <execution>

+            <goals>

+              <goal>ipojo-bundle</goal>

+            </goals>

+            <configuration>

+              <ignoreAnnotations>true</ignoreAnnotations>

+            </configuration>

+          </execution>

+        </executions>

+      </plugin>

+      <plugin>

+        <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-compiler-plugin</artifactId>

+        <configuration>

+          <source>1.4</source>

+          <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/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java
new file mode 100644
index 0000000..988294f
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java
@@ -0,0 +1,56 @@
+package org.apache.felix.ipojo.test.scenarios.component.controller;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class ControllerCheckService implements FooService, CheckService {
+    
+    
+    private boolean controller;
+
+    public boolean foo() {
+        return controller;
+    }
+
+    public Properties fooProps() {
+        Properties props = new Properties();
+        props.put("controller", new Boolean(controller));
+        return props;
+    }
+
+    public boolean getBoolean() {
+        return false;
+    }
+
+    public double getDouble() {
+        return 0;
+    }
+
+    public int getInt() {
+        return 0;
+    }
+
+    public long getLong() {
+        return 0;
+    }
+
+    public Boolean getObject() {
+        return null;
+    }
+
+    public boolean check() {
+        System.out.println("Before : " + controller);
+        controller = ! controller; // Change
+        System.out.println("After : " + controller);
+        return controller;
+    }
+
+    public Properties getProps() {
+        Properties props = new Properties();
+        props.put("controller", new Boolean(controller));
+        return props;
+    }
+
+}
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java
new file mode 100644
index 0000000..bdfa92c
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java
@@ -0,0 +1,66 @@
+package org.apache.felix.ipojo.test.scenarios.component.controller;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class DoubleControllerCheckService implements FooService, CheckService {
+    
+    
+    private boolean controllerFoo;
+    private boolean controllerCS;
+
+    public boolean foo() {
+        controllerFoo = ! controllerFoo;
+        return controllerFoo;
+    }
+
+    public Properties fooProps() {
+        Properties props = new Properties();
+        props.put("controller", new Boolean(controllerFoo));
+        
+        controllerCS = true;
+        controllerFoo = true;
+        
+        return props;
+    }
+
+    public boolean getBoolean() {
+        return false;
+    }
+
+    public double getDouble() {
+        return 0;
+    }
+
+    public int getInt() {
+        return 0;
+    }
+
+    public long getLong() {
+        return 0;
+    }
+
+    public Boolean getObject() {
+        return null;
+    }
+
+    public boolean check() {
+        controllerCS = ! controllerCS;
+        return controllerCS;
+    }
+
+    public Properties getProps() {
+        Properties props = new Properties();
+        props.put("controller", new Boolean(controllerCS));
+        
+        // Invert both
+        controllerCS = ! controllerCS;
+        controllerFoo = ! controllerFoo;
+        
+        return props;
+        
+    }
+
+}
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
index 720c46a..5e9adc6 100644
--- a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
@@ -39,6 +39,7 @@
         ots.addTestSuite(ClassTest.class);

         ots.addTestSuite(OSGiPropertiesTest.class);

         ots.addTestSuite(NullCheck.class);

+        ots.addTestSuite(ServiceControllerTest.class);

         return ots;

     }

 

diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java
new file mode 100644
index 0000000..c325ece
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java
@@ -0,0 +1,168 @@
+/* 

+ * 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

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.felix.ipojo.test.scenarios.ps;

+

+import org.apache.felix.ipojo.ComponentInstance;

+import org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceDescription;

+import org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandlerDescription;

+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;

+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;

+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;

+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;

+

+public class ServiceControllerTest extends OSGiTestCase {

+    

+    IPOJOHelper helper;

+

+    public void setUp() {

+        helper = new IPOJOHelper(this);

+    }

+    

+    

+    public void tearDown() {

+        helper.dispose();

+    }

+    

+    

+    public void testComponentWithAController() {

+        ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-default");

+        // Controller set to true.

+        waitForService(FooService.class.getName(), null, 5000);

+        waitForService(CheckService.class.getName(), null, 5000);

+        

+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);

+        assertNotNull(check);

+        

+        assertFalse(check.check());

+        

+        // FooService should not be there anymore

+        assertNull(getServiceReference(FooService.class.getName()));

+        

+        assertTrue(check.check());

+        

+        assertNotNull(getServiceReference(FooService.class.getName()));

+        

+        ci.dispose();

+    }

+    

+    public void testComponentWithAControllerSetToFalse() {

+        ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-false");

+        // Controller set to false.

+        waitForService(CheckService.class.getName(), null, 5000);

+        assertNull(getServiceReference(FooService.class.getName()));

+

+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);

+        assertNotNull(check);

+        

+        assertTrue(check.check());

+        assertNotNull(getServiceReference(FooService.class.getName()));

+

+        assertFalse(check.check());

+        // FooService should not be there anymore

+        assertNull(getServiceReference(FooService.class.getName()));

+        

+        ci.dispose();

+    }

+    

+    public void testComponentWithTwoControllersSetToTrue() {

+        ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-truetrue");

+

+        waitForService(CheckService.class.getName(), null, 5000);

+        waitForService(FooService.class.getName(), null, 5000);

+

+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);

+        assertNotNull(check);

+        

+        check.check();

+       

+        assertNull(getServiceReference(CheckService.class.getName()));

+        assertNotNull(getServiceReference(FooService.class.getName()));

+

+        FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);

+        fs.foo();

+        

+        assertNull(getServiceReference(CheckService.class.getName()));

+        assertNull(getServiceReference(FooService.class.getName()));

+        

+        ci.dispose();

+    }

+    

+    public void testComponentWithTwoControllersSetToTrueAndFalse() {

+        ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-truefalse");

+

+        waitForService(CheckService.class.getName(), null, 5000);

+        

+        assertFalse(isServiceAvailable(FooService.class.getName()));

+

+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);

+        assertNotNull(check);

+        

+        check.getProps();

+        

+        assertFalse(isServiceAvailable(CheckService.class.getName()));

+        assertTrue(isServiceAvailable(FooService.class.getName()));

+       

+        FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);

+        fs.fooProps();

+        

+        assertTrue(isServiceAvailable(CheckService.class.getName()));

+        assertTrue(isServiceAvailable(FooService.class.getName()));

+        

+        ci.dispose();

+    }

+    

+    public void testArchitecture() {

+        ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-default");

+        // Controller set to true.

+        waitForService(FooService.class.getName(), null, 5000);

+        waitForService(CheckService.class.getName(), null, 5000);

+        

+        ProvidedServiceHandlerDescription pshd = null;

+        pshd = (ProvidedServiceHandlerDescription) ci.getInstanceDescription()

+            .getHandlerDescription("org.apache.felix.ipojo:provides");

+        

+        ProvidedServiceDescription ps = getPS(FooService.class.getName(), pshd.getProvidedServices());

+        assertEquals("true", ps.getController());

+        

+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);

+        assertNotNull(check);

+        

+        assertFalse(check.check());

+        

+        ps = getPS(FooService.class.getName(), pshd.getProvidedServices());

+        assertEquals("false", ps.getController());

+        

+        assertTrue(check.check());

+        

+        ps = getPS(FooService.class.getName(), pshd.getProvidedServices());

+        assertEquals("true", ps.getController());

+        

+    }

+    

+    private  ProvidedServiceDescription getPS(String itf, ProvidedServiceDescription[] svc) {

+        for (int i = 0; i < svc.length; i++) {

+            if (svc[i].getServiceSpecifications()[0].equals(itf)) {

+                return svc[i];

+            }

+        }

+        

+        fail("Service : " + itf + " not found");

+        return null;

+    }

+}

diff --git a/ipojo/tests/core/service-providing/src/main/resources/metadata.xml b/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
index 50c458d..6abd991 100644
--- a/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
+++ b/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
@@ -168,4 +168,46 @@
       <property field="prop2"/>

     </provides>

   </component>

+  

+  <!--  Service Controller -->

+  <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"

+    name="PS-Controller-1-default">

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">

+      <controller field="controller"/>

+    </provides>

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">

+    </provides>

+  </component>

+    <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"

+    name="PS-Controller-1-false">

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">

+      <property name="test2" type="string" value="test2"/>

+      <controller field="controller" value="false"/>

+      <property name="test" type="string" value="test"/>

+    </provides>

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">

+    </provides>

+  </component>

+  <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"

+    name="PS-Controller-2-truetrue">

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">

+      <property name="test2" type="string" value="test2"/>

+      <controller field="controllerFoo" value="true"/>

+      <property name="test" type="string" value="test"/>

+    </provides>

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">

+        <controller field="controllerCS" value="true"/>

+    </provides>

+  </component>

+  <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"

+    name="PS-Controller-2-truefalse">

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">

+      <property name="test2" type="string" value="test2"/>

+      <controller field="controllerFoo" value="false"/>

+      <property name="test" type="string" value="test"/>

+    </provides>

+    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">

+        <controller field="controllerCS" value="true"/>

+    </provides>

+  </component>

 </ipojo>

diff --git a/ipojo/tests/handler/transaction/pom.xml b/ipojo/tests/handler/transaction/pom.xml
index 79a47cd..e3320cc 100644
--- a/ipojo/tests/handler/transaction/pom.xml
+++ b/ipojo/tests/handler/transaction/pom.xml
@@ -32,13 +32,19 @@
       <artifactId>org.apache.felix.ipojo.handler.transaction</artifactId>
       <version>${pom.version}</version>
     </dependency>
+    
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.apache.felix.ipojo.test.helpers</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
   <!--
     Pax Exam API:
   -->
   <dependency>
     <groupId>org.ops4j.pax.exam</groupId>
     <artifactId>pax-exam</artifactId>
-    <version>1.1.0</version>
+    <version>1.2.0</version>
   </dependency>
   <!--
     During runtime Pax Exam will discover the OSGi container to use by
@@ -50,7 +56,7 @@
     <groupId>org.ops4j.pax.exam</groupId>
     <artifactId>pax-exam-container-default
     </artifactId>
-    <version>1.1.0</version>
+    <version>1.2.0</version>
   </dependency>
   <!--
     If your test code is based on JUnit you will have to have the Junit
@@ -59,7 +65,7 @@
   <dependency>
     <groupId>org.ops4j.pax.exam</groupId>
     <artifactId>pax-exam-junit</artifactId>
-    <version>1.1.0</version>
+    <version>1.2.0</version>
   </dependency>
   <dependency>
     <groupId>junit</groupId>
@@ -68,11 +74,11 @@
     <type>jar</type>
     <scope>test</scope>
   </dependency>
-
+  <!--  Tinybundles -->
   <dependency>
     <groupId>org.ops4j.pax.swissbox</groupId>
     <artifactId>pax-swissbox-tinybundles</artifactId>
-    <version>1.0.0</version>
+    <version>1.2.0</version>
   </dependency>
   <dependency>
     <groupId>org.apache.felix</groupId>
@@ -87,12 +93,12 @@
    <dependency>
      <groupId>org.ops4j.pax.logging</groupId>
      <artifactId>pax-logging-api</artifactId>
-     <version>1.3.0</version>
+     <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.logging</groupId>
      <artifactId>pax-logging-service</artifactId>
-     <version>1.3.0</version>
+     <version>1.4</version>
    </dependency>
 
   </dependencies>
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/IPOJOHelper.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/IPOJOHelper.java
deleted file mode 100644
index 0fbe4d9..0000000
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/IPOJOHelper.java
+++ /dev/null
@@ -1,730 +0,0 @@
-/* 
- * 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
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.ipojo.transaction.test;
-
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.felix.ipojo.ComponentInstance;
-import org.apache.felix.ipojo.Factory;
-import org.apache.felix.ipojo.Handler;
-import org.apache.felix.ipojo.HandlerFactory;
-import org.apache.felix.ipojo.ServiceContext;
-import org.apache.felix.ipojo.architecture.Architecture;
-import org.apache.felix.ipojo.metadata.Element;
-import org.apache.felix.ipojo.parser.ManifestMetadataParser;
-import org.apache.felix.ipojo.parser.ParseException;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.ManagedServiceFactory;
-
-/**
- * iPOJO Helper.
- * This helper helps getting {@link Factory}, and managing
- * {@link ComponentInstance}.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class IPOJOHelper {
-
-    /**
-     * The bundle context.
-     */
-    private BundleContext m_context;
-
-
-    /**
-     * List of instances.
-     */
-    private List<ComponentInstance> m_instances;
-
-    /**
-     * Creates a IPOJOHelper.
-     * @param tc the OSGi Test Case
-     */
-    public IPOJOHelper(BundleContext context) {
-        m_context = context;
-        m_instances = new ArrayList<ComponentInstance>();
-    }
-
-    /**
-     * Disposes created instances.
-     * @see org.apache.felix.ipojo.junit4osgi.Helper#dispose()
-     */
-    public void dispose() {
-        for (int i = 0; i < m_instances.size(); i++) {
-            ((ComponentInstance) m_instances.get(i)).dispose();
-        }
-        m_instances.clear();
-    }
-
-    /**
-     * Gets a created instance from the instance name.
-     * @param name the instance name.
-     * @return the created {@link ComponentInstance} or <code>null</code>
-     * if the instance was not created during the session.
-     */
-    public ComponentInstance getInstanceByName(String name) {
-        for (int i = 0; i < m_instances.size(); i++) {
-            if (((ComponentInstance) m_instances.get(i)).getInstanceName()
-                    .equals(name)) {
-                return (ComponentInstance) m_instances.get(i);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Creates a new component instance with the given name (and empty
-     * configuration), from the factory specified in the given bundle.
-     * 
-     * @param bundle the bundle from which the component factory is defined.
-     * @param factoryName the name of the component factory, defined in the
-     *            specified bundle.
-     * @param instanceName the name of the component instance to create.
-     * @return the newly created component instance.
-     */
-    public static ComponentInstance createComponentInstance(Bundle bundle,
-            String factoryName, String instanceName) {
-
-        // Create the instance configuration
-        Properties configuration = new Properties();
-        configuration.put("instance.name", instanceName);
-
-        return createComponentInstance(bundle, factoryName, configuration);
-    }
-
-    /**
-     * Creates a new component instance with the given configuration, from the
-     * factory specified in the given bundle.
-     * 
-     * @param bundle the bundle from which the component factory is defined.
-     * @param factoryName the name of the component factory, defined in the
-     *            specified bundle.
-     * @param configuration the configuration of the component instance to
-     *            create.
-     * @return the newly created component instance.
-     */
-    public static ComponentInstance createComponentInstance(Bundle bundle,
-            String factoryName, Dictionary configuration) {
-
-        // Retrieve the component factory.
-        Factory fact = getFactory(bundle, factoryName);
-
-        if (fact == null) {
-            // Factory not found...
-            throw new IllegalArgumentException(
-                    "Cannot find the component factory (" + factoryName
-                            + ") in the specified bundle ("
-                            + bundle.getSymbolicName() + ").");
-        }
-
-        try {
-            return fact.createComponentInstance(configuration);
-        } catch (Exception e) {
-            throw new IllegalArgumentException(
-                    "Cannot create the component instance with the given configuration:"
-                            + e.getMessage());
-        }
-    }
-
-    /**
-     * Creates a new component instance with the given name and configuration,
-     * from the factory specified in the given bundle.
-     * 
-     * @param bundle the bundle from which the component factory is defined.
-     * @param factoryName the name of the component factory, defined in the
-     *            specified bundle.
-     * @param instanceName the name of the component instance to create.
-     * @param configuration the configuration of the instance to create.
-     * @return the newly created component instance.
-     */
-    public static ComponentInstance createComponentInstance(Bundle bundle,
-            String factoryName, String instanceName, Dictionary configuration) {
-
-        // Add the instance name to the configuration
-        configuration.put("instance.name", instanceName);
-
-        return createComponentInstance(bundle, factoryName, configuration);
-    }
-
-    /**
-     * Creates a new component instance with the given name (and an empty
-     * configuration), from the factory specified in the given service context.
-     * 
-     * @param serviceContext the service context in which the component factory
-     *            service is registered.
-     * @param factoryName the name of the component factory, defined in the
-     *            specified service context.
-     * @param instanceName the name of the component instance to create.
-     * @return the newly created component instance.
-     */
-    public static ComponentInstance createComponentInstance(
-            ServiceContext serviceContext, String factoryName,
-            String instanceName) {
-
-        // Create the instance configuration
-        Properties configuration = new Properties();
-        configuration.put("instance.name", instanceName);
-
-        return createComponentInstance(serviceContext, factoryName,
-                configuration);
-    }
-
-    /**
-     * Creates a new component instance with the given name and configuration,
-     * from the factory specified in the given service context.
-     * 
-     * @param serviceContext the service context in which the component factory
-     *            service is registered.
-     * @param factoryName the name of the component factory, defined in the
-     *            specified service context.
-     * @param configuration the configuration of the instance to create.
-     * @return the newly created component instance.
-     */
-    public static ComponentInstance createComponentInstance(
-            ServiceContext serviceContext, String factoryName,
-            Dictionary configuration) {
-
-        // Retrieve the component factory.
-        Factory fact = getFactory(serviceContext, factoryName);
-
-        if (fact == null) {
-            // Factory not found...
-            throw new IllegalArgumentException(
-                    "Cannot find the component factory (" + factoryName
-                            + ") in the specified service context.");
-        }
-
-        try {
-            return fact.createComponentInstance(configuration);
-        } catch (Exception e) {
-            throw new IllegalArgumentException(
-                    "Cannot create the component instance with the given configuration: "
-                            + e.getMessage());
-        }
-    }
-
-    /**
-     * Creates a new component instance with the given name and configuration,
-     * from the factory specified in the given service context.
-     * 
-     * @param serviceContext the service context in which the component factory
-     *            service is registered.
-     * @param factoryName the name of the component factory, defined in the
-     *            specified service context.
-     * @param instanceName the name of the component instance to create.
-     * @param configuration the configuration of the instance to create.
-     * @return the newly created component instance.
-     */
-    public static ComponentInstance createComponentInstance(
-            ServiceContext serviceContext, String factoryName,
-            String instanceName, Dictionary configuration) {
-
-        // Add the instance name to the configuration
-        configuration.put("instance.name", instanceName);
-
-        return createComponentInstance(serviceContext, factoryName,
-                configuration);
-    }
-
-    /**
-     * Creates a new component instance with the given name (and empty
-     * configuration), from the factory specified in the local bundle.
-     * 
-     * @param factoryName the name of the component factory, defined in the
-     *            local bundle.
-     * @param instanceName the name of the component instance to create.
-     * @return the newly created component instance.
-     */
-    public ComponentInstance createComponentInstance(String factoryName,
-            String instanceName) {
-        ComponentInstance ci = createComponentInstance(m_context.getBundle(),
-                factoryName, instanceName);
-        m_instances.add(ci);
-        return ci;
-    }
-
-    /**
-     * Creates a new component instance with the given configuration, from the
-     * factory specified in the local bundle.
-     * 
-     * @param factoryName the name of the component factory, in the local
-     *            bundle.
-     * @param configuration the configuration of the component instance to
-     *            create.
-     * @return the newly created component instance.
-     */
-    public ComponentInstance createComponentInstance(String factoryName,
-            Dictionary configuration) {
-        ComponentInstance ci = createComponentInstance(m_context.getBundle(),
-                factoryName, configuration);
-        m_instances.add(ci);
-        return ci;
-    }
-
-    /**
-     * Creates a new component instance with no configuration, from the factory
-     * specified in the local bundle.
-     * 
-     * @param factoryName the name of the component factory, in the local
-     *            bundle.
-     * @return the newly created component instance.
-     */
-    public ComponentInstance createComponentInstance(String factoryName) {
-        ComponentInstance ci = createComponentInstance(m_context.getBundle(),
-                factoryName, (Dictionary) null);
-        m_instances.add(ci);
-        return ci;
-    }
-
-    /**
-     * Creates a new component instance with the given name and configuration,
-     * from the factory specified in the given bundle.
-     * 
-     * @param factoryName the name of the component factory, defined in the
-     *            specified bundle.
-     * @param instanceName the name of the component instance to create.
-     * @param configuration the configuration of the instance to create.
-     * @return the newly created component instance.
-     */
-    public ComponentInstance createComponentInstance(String factoryName,
-            String instanceName, Dictionary configuration) {
-        ComponentInstance ci = createComponentInstance(m_context.getBundle(),
-                factoryName, instanceName, configuration);
-        m_instances.add(ci);
-        return ci;
-    }
-
-    /**
-     * Returns the component factory with the given name in the local bundle.
-     * 
-     * @param factoryName the name of the factory to retrieve.
-     * @return the component factory with the given name in the local bundle, or
-     *         {@code null} if not found.
-     */
-    public Factory getFactory(String factoryName) {
-        return getFactory(m_context.getBundle(), factoryName);
-    }
-
-    /**
-     * Returns the handler factory with the given name in the local bundle.
-     * 
-     * @param factoryName the name of the handler factory to retrieve.
-     * @return the handler factory with the given name in the local bundle, or
-     *         {@code null} if not found.
-     */
-    public HandlerFactory getHandlerFactory(String factoryName) {
-        return getHandlerFactory(m_context.getBundle(), factoryName);
-    }
-
-    /**
-     * Returns the metadata description of the component defined in this bundle.
-     * 
-     * @param component the name of the locally defined component.
-     * @return the metadata description of the component with the given name,
-     *         defined in this given bundle, or {@code null} if not found.
-     */
-    public Element getMetadata(String component) {
-        return getMetadata(m_context.getBundle(), component);
-    }
-
-    /**
-     * Returns the component factory with the given name in the given bundle.
-     * 
-     * @param bundle the bundle from which the component factory is defined.
-     * @param factoryName the name of the defined factory.
-     * @return the component factory with the given name in the given bundle, or
-     *         {@code null} if not found.
-     */
-    public static Factory getFactory(Bundle bundle, String factoryName) {
-        ServiceReference[] refs;
-        try {
-            // Retrieves the component factories services in the bundle.
-            refs = bundle.getBundleContext().getServiceReferences(
-                    Factory.class.getName(),
-                    "(factory.name=" + factoryName + ")");
-            if (refs != null) {
-                return (Factory) bundle.getBundleContext().getService(refs[0]);
-            }
-
-            // Factory not found...
-            return null;
-
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException(
-                    "Cannot get the component factory services: "
-                            + e.getMessage());
-        }
-    }
-
-    /**
-     * Returns the component factory with the given name, registered in the
-     * given service context.
-     * 
-     * @param serviceContext the service context in which the factory service is
-     *            defined.
-     * @param factoryName the name of the factory.
-     * @return the component factory with the given name, registered in the
-     *         given service context.
-     */
-    public static Factory getFactory(ServiceContext serviceContext,
-            String factoryName) {
-        ServiceReference[] refs;
-        try {
-            // Retrieves the component factories services in the service
-            // context.
-            refs = serviceContext.getServiceReferences(Factory.class.getName(),
-                    "(factory.name=" + factoryName + ")");
-            if (refs != null) {
-                return (Factory) serviceContext.getService(refs[0]);
-            }
-            return null;
-
-        } catch (InvalidSyntaxException e) {
-            System.err.println("Cannot get the factory " + factoryName + " : "
-                    + e.getMessage());
-            return null;
-        }
-    }
-
-    /**
-     * Returns the handler factory with the given name in the given bundle.
-     * 
-     * @param bundle the bundle from which the handler factory is defined.
-     * @param factoryName the name of the handler factory to retrieve.
-     * @return the handler factory with the given name in the given bundle, or
-     *         {@code null} if not found.
-     */
-    public static HandlerFactory getHandlerFactory(Bundle bundle,
-            String factoryName) {
-        ServiceReference[] refs;
-        try {
-            // Retrieves the handler factories services in the bundle.
-            refs = bundle.getBundleContext().getServiceReferences(
-                    HandlerFactory.class.getName(),
-                    "(" + Handler.HANDLER_NAME_PROPERTY + "=" + factoryName
-                            + ")");
-            if (refs != null) {
-                return (HandlerFactory) bundle.getBundleContext().getService(
-                        refs[0]);
-            }
-
-            // Factory not found...
-            return null;
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException(
-                    "Cannot get the handler factory services: "
-                            + e.getMessage());
-        }
-    }
-
-    /**
-     * Returns the metadata description of the component with the given name,
-     * defined in the given bundle.
-     * 
-     * @param bundle the bundle from which the component is defined.
-     * @param component the name of the defined component.
-     * @return the metadata description of the component with the given name,
-     *         defined in the given bundle, or {@code null} if not found.
-     */
-    public static Element getMetadata(Bundle bundle, String component) {
-
-        // Retrieves the component description from the bundle's manifest.
-        String elem = (String) bundle.getHeaders().get("iPOJO-Components");
-        if (elem == null) {
-            throw new IllegalArgumentException(
-                    "Cannot find iPOJO-Components descriptor in the specified bundle ("
-                            + bundle.getSymbolicName()
-                            + "). Not an iPOJO bundle.");
-        }
-
-        // Parses the retrieved description and find the component with the
-        // given name.
-        try {
-            Element element = ManifestMetadataParser.parseHeaderMetadata(elem);
-            Element[] childs = element.getElements("component");
-            for (int i = 0; i < childs.length; i++) {
-                String name = childs[i].getAttribute("name");
-                String clazz = childs[i].getAttribute("classname");
-                if (name != null && name.equalsIgnoreCase(component)) {
-                    return childs[i];
-                }
-                if (clazz.equalsIgnoreCase(component)) {
-                    return childs[i];
-                }
-            }
-
-            // Component not found...
-            return null;
-
-        } catch (ParseException e) {
-            throw new IllegalStateException(
-                    "Cannot parse the components from specified bundle ("
-                            + bundle.getSymbolicName() + "): " + e.getMessage());
-        }
-    }
-
-    /**
-     * Returns the service object of a service registered in the specified
-     * service context, offering the specified interface and matching the given
-     * filter.
-     * 
-     * @param serviceContext the service context in which the service is
-     *            searched.
-     * @param itf the interface provided by the searched service.
-     * @param filter an additional filter (can be {@code null}).
-     * @return the service object provided by the specified bundle, offering the
-     *         specified interface and matching the given filter.
-     */
-    public static Object getServiceObject(ServiceContext serviceContext,
-            String itf, String filter) {
-        ServiceReference ref = getServiceReference(serviceContext, itf, filter);
-        if (ref != null) {
-            return serviceContext.getService(ref);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the service objects of the services registered in the specified
-     * service context, offering the specified interface and matching the given
-     * filter.
-     * 
-     * @param serviceContext the service context in which services are searched.
-     * @param itf the interface provided by the searched services.
-     * @param filter an additional filter (can be {@code null}).
-     * @return the service objects provided by the specified bundle, offering
-     *         the specified interface and matching the given filter.
-     */
-    public static Object[] getServiceObjects(ServiceContext serviceContext,
-            String itf, String filter) {
-        ServiceReference[] refs = getServiceReferences(serviceContext, itf,
-                filter);
-        if (refs != null) {
-            Object[] list = new Object[refs.length];
-            for (int i = 0; i < refs.length; i++) {
-                list[i] = serviceContext.getService(refs[i]);
-            }
-            return list;
-        } else {
-            return new Object[0];
-        }
-    }
-
-    /**
-     * Returns the service reference of a service registered in the specified
-     * service context, offering the specified interface and matching the given
-     * filter.
-     * 
-     * @param serviceContext the service context in which services are searched.
-     * @param itf the interface provided by the searched service.
-     * @param filter an additional filter (can be {@code null}).
-     * @return a service reference registered in the specified service context,
-     *         offering the specified interface and matching the given filter.
-     *         If no service is found, {@code null} is returned.
-     */
-    public static ServiceReference getServiceReference(
-            ServiceContext serviceContext, String itf, String filter) {
-        ServiceReference[] refs = getServiceReferences(serviceContext, itf,
-                filter);
-        if (refs.length != 0) {
-            return refs[0];
-        } else {
-            // No service found
-            return null;
-        }
-    }
-
-    /**
-     * Returns the service reference of the service registered in the specified
-     * service context, offering the specified interface and having the given
-     * persistent ID.
-     * 
-     * @param serviceContext the service context in which services are searched.
-     * @param itf the interface provided by the searched service.
-     * @param pid the persistent ID of the searched service.
-     * @return a service registered in the specified service context, offering
-     *         the specified interface and having the given persistent ID.
-     */
-    public static ServiceReference getServiceReferenceByPID(
-            ServiceContext serviceContext, String itf, String pid) {
-        String filter = "(" + "service.pid" + "=" + pid + ")";
-        ServiceReference[] refs = getServiceReferences(serviceContext, itf,
-                filter);
-        if (refs == null) {
-            return null;
-        } else if (refs.length == 1) {
-            return refs[0];
-        } else {
-            throw new IllegalStateException(
-                    "A service lookup by PID returned several providers ("
-                            + refs.length + ")" + " for " + itf + " with pid="
-                            + pid);
-        }
-    }
-
-    /**
-     * Returns the service reference of all the services registered in the
-     * specified service context, offering the specified interface and matching
-     * the given filter.
-     * 
-     * @param serviceContext the service context in which services are searched.
-     * @param itf the interface provided by the searched services.
-     * @param filter an additional filter (can be {@code null}).
-     * @return all the service references registered in the specified service
-     *         context, offering the specified interface and matching the given
-     *         filter. If no service matches, an empty array is returned.
-     */
-    public static ServiceReference[] getServiceReferences(
-            ServiceContext serviceContext, String itf, String filter) {
-        ServiceReference[] refs = null;
-        try {
-            // Get all the service references
-            refs = serviceContext.getServiceReferences(itf, filter);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException(
-                    "Cannot get service references: " + e.getMessage());
-        }
-        if (refs == null) {
-            return new ServiceReference[0];
-        } else {
-            return refs;
-        }
-    }
-
-    /**
-     * Returns the service reference of a service registered in the specified
-     * service context, offering the specified interface and having the given
-     * name.
-     * 
-     * @param serviceContext the service context in which services are searched.
-     * @param itf the interface provided by the searched service.
-     * @param name the name of the searched service.
-     * @return a service registered in the specified service context, offering
-     *         the specified interface and having the given name.
-     */
-    public static ServiceReference getServiceReferenceByName(
-            ServiceContext serviceContext, String itf, String name) {
-        String filter = null;
-        if (itf.equals(Factory.class.getName())
-                || itf.equals(ManagedServiceFactory.class.getName())) {
-            filter = "(" + "factory.name" + "=" + name + ")";
-        } else if (itf.equals(Architecture.class.getName())) {
-            filter = "(" + "architecture.instance" + "=" + name + ")";
-        } else {
-            filter = "(" + "instance.name" + "=" + name + ")";
-        }
-        return getServiceReference(serviceContext, itf, filter);
-    }
-
-    /**
-     * Checks the availability of a service inside the given service context.
-     * @param sc the service context
-     * @param itf the service interface to found
-     * @return <code>true</code> if the service is available in the service
-     *         context, <code>false</code> otherwise.
-     */
-    public static boolean isServiceAvailable(ServiceContext sc, String itf) {
-        ServiceReference ref = getServiceReference(sc, itf, null);
-        return ref != null;
-    }
-
-    /**
-     * Checks the availability of a service inside the given service context.
-     * @param sc the service context
-     * @param itf the service interface to found
-     * @param name the service provider name
-     * @return <code>true</code> if the service is available in the service
-     *         context, <code>false</code> otherwise.
-     */
-    public static boolean isServiceAvailableByName(ServiceContext sc,
-            String itf, String name) {
-        ServiceReference ref = getServiceReferenceByName(sc, itf, name);
-        return ref != null;
-    }
-
-    /**
-     * Checks the availability of a service inside the given service context.
-     * @param sc the service context
-     * @param itf the service interface to found
-     * @param pid the pid of the service
-     * @return <code>true</code> if the service is available in the service
-     *         context, <code>false</code> otherwise.
-     */
-    public static boolean isServiceAvailableByPID(ServiceContext sc,
-            String itf, String pid) {
-        ServiceReference ref = getServiceReferenceByPID(sc, itf, pid);
-        return ref != null;
-    }
-
-    /**
-     * Returns the service reference of a service provided by the specified
-     * bundle, offering the specified interface and having the given name.
-     * 
-     * @param bundle the bundle from which the service is searched.
-     * @param itf the interface provided by the searched service.
-     * @param name the name of the searched service.
-     * @return a service provided by the specified bundle, offering the
-     *         specified interface and having the given name.
-     */
-    public static ServiceReference getServiceReferenceByName(Bundle bundle,
-            String itf, String name) {
-        String filter = null;
-        if (itf.equals(Factory.class.getName())
-                || itf.equals(ManagedServiceFactory.class.getName())) {
-            filter = "(" + "factory.name" + "=" + name + ")";
-        } else if (itf.equals(Architecture.class.getName())) {
-            filter = "(" + "architecture.instance" + "=" + name + ")";
-        } else {
-            filter = "(" + "instance.name" + "=" + name + ")";
-        }
-        return OSGiHelper.getServiceReference(bundle, itf, filter);
-    }
-
-    /**
-     * Returns the service reference of a service provided by the local bundle,
-     * offering the specified interface and having the given name.
-     * 
-     * @param itf the interface provided by the searched service.
-     * @param name the name of the searched service.
-     * @return a service provided by the specified bundle, offering the
-     *         specified interface and having the given name.
-     */
-    public ServiceReference getServiceReferenceByName(String itf, String name) {
-        return getServiceReferenceByName(m_context.getBundle(), itf, name);
-    }
-
-    /**
-     * Checks if the service is available.
-     * @param itf the service interface
-     * @param name the service provider name
-     * @return <code>true</code> if the service is available, <code>false</code>
-     *         otherwise.
-     */
-    public boolean isServiceAvailableByName(String itf, String name) {
-        ServiceReference ref = getServiceReferenceByName(itf, name);
-        return ref != null;
-    }
-
-}
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/OSGiHelper.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/OSGiHelper.java
deleted file mode 100644
index 604ee18..0000000
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/OSGiHelper.java
+++ /dev/null
@@ -1,456 +0,0 @@
-package org.apache.felix.ipojo.transaction.test;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-import static org.junit.Assert.fail;
-
-
-public class OSGiHelper {
-    
-    /**
-     * The bundle context.
-     */
-    private BundleContext context;
-    
-    /**
-     * List of get references.
-     */
-    private List<ServiceReference> m_references = new ArrayList<ServiceReference>();
-    
-    public OSGiHelper(BundleContext context) {
-        this.context = context;
-    }
-    
-    public void dispose() {
-        // Unget services
-        for (int i = 0; i < m_references.size(); i++) {
-            context.ungetService((ServiceReference) m_references.get(i));
-        }
-        m_references.clear();
-    }
-    
-    /**
-     * Gets the Bundle Context.
-     * @return the bundle context.
-     */
-    public BundleContext getContext() {
-        return context;
-    }
-    
-    /**
-     * Returns the service object of a service provided by the specified bundle,
-     * offering the specified interface and matching the given filter.
-     * 
-     * @param bundle the bundle from which the service is searched.
-     * @param itf the interface provided by the searched service.
-     * @param filter an additional filter (can be {@code null}).
-     * @return the service object provided by the specified bundle, offering the
-     *         specified interface and matching the given filter.
-     */
-    public static Object getServiceObject(Bundle bundle, String itf,
-            String filter) {
-        ServiceReference ref = getServiceReference(bundle, itf, filter);
-        if (ref != null) {
-            return bundle.getBundleContext().getService(ref);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the service objects of the services provided by the specified
-     * bundle, offering the specified interface and matching the given filter.
-     * 
-     * @param bundle the bundle from which services are searched.
-     * @param itf the interface provided by the searched services.
-     * @param filter an additional filter (can be {@code null}).
-     * @return the service objects provided by the specified bundle, offering
-     *         the specified interface and matching the given filter.
-     */
-    public static Object[] getServiceObjects(Bundle bundle, String itf,
-            String filter) {
-        ServiceReference[] refs = getServiceReferences(bundle, itf, filter);
-        if (refs != null) {
-            Object[] list = new Object[refs.length];
-            for (int i = 0; i < refs.length; i++) {
-                list[i] = bundle.getBundleContext().getService(refs[i]);
-            }
-            return list;
-        } else {
-            return new Object[0];
-        }
-    }
-
-    /**
-     * Returns the service reference of a service provided by the specified
-     * bundle, offering the specified interface and matching the given filter.
-     * 
-     * @param bundle the bundle from which the service is searched.
-     * @param itf the interface provided by the searched service.
-     * @param filter an additional filter (can be {@code null}).
-     * @return a service reference provided by the specified bundle, offering
-     *         the specified interface and matching the given filter. If no
-     *         service is found, {@code null} is returned.
-     */
-    public static ServiceReference getServiceReference(Bundle bundle,
-            String itf, String filter) {
-        ServiceReference[] refs = getServiceReferences(bundle, itf, filter);
-        if (refs.length != 0) {
-            return refs[0];
-        } else {
-            // No service found
-            return null;
-        }
-    }
-
-    /**
-     * Checks if the service is available.
-     * @param itf the service interface
-     * @return <code>true</code> if the service is available, <code>false</code>
-     *         otherwise.
-     */
-    public boolean isServiceAvailable(String itf) {
-        ServiceReference ref = getServiceReference(itf, null);
-        return ref != null;
-    }
-
-    /**
-     * Checks if the service is available.
-     * @param itf the service interface
-     * @param pid the service pid
-     * @return <code>true</code> if the service is available, <code>false</code>
-     *         otherwise.
-     */
-    public boolean isServiceAvailableByPID(String itf, String pid) {
-        ServiceReference ref = getServiceReferenceByPID(itf, pid);
-        return ref != null;
-    }
-
-    /**
-     * Returns the service reference of the service provided by the specified
-     * bundle, offering the specified interface and having the given persistent
-     * ID.
-     * 
-     * @param bundle the bundle from which the service is searched.
-     * @param itf the interface provided by the searched service.
-     * @param pid the persistent ID of the searched service.
-     * @return a service provided by the specified bundle, offering the
-     *         specified interface and having the given persistent ID.
-     */
-    public static ServiceReference getServiceReferenceByPID(Bundle bundle,
-            String itf, String pid) {
-        String filter = "(" + "service.pid" + "=" + pid + ")";
-        ServiceReference[] refs = getServiceReferences(bundle, itf, filter);
-        if (refs == null) {
-            return null;
-        } else if (refs.length == 1) {
-            return refs[0];
-        } else {
-            throw new IllegalStateException(
-                    "A service lookup by PID returned several providers ("
-                            + refs.length + ")" + " for " + itf + " with pid="
-                            + pid);
-        }
-    }
-
-    /**
-     * Returns the service reference of all the services provided in the
-     * specified bundle, offering the specified interface and matching the given
-     * filter.
-     * 
-     * @param bundle the bundle from which services are searched.
-     * @param itf the interface provided by the searched services.
-     * @param filter an additional filter (can be {@code null}).
-     * @return all the service references provided in the specified bundle,
-     *         offering the specified interface and matching the given filter.
-     *         If no service matches, an empty array is returned.
-     */
-    public static ServiceReference[] getServiceReferences(Bundle bundle,
-            String itf, String filter) {
-        ServiceReference[] refs = null;
-        try {
-            // Get all the service references
-            refs = bundle.getBundleContext().getServiceReferences(itf, filter);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException(
-                    "Cannot get service references: " + e.getMessage());
-        }
-        if (refs == null) {
-            return new ServiceReference[0];
-        } else {
-            return refs;
-        }
-    }
-
-    /**
-     * Returns the service object of a service provided by the local bundle,
-     * offering the specified interface and matching the given filter.
-     * 
-     * @param itf the interface provided by the searched service.
-     * @param filter an additional filter (can be {@code null}).
-     * @return the service object provided by the local bundle, offering the
-     *         specified interface and matching the given filter.
-     */
-    public Object getServiceObject(String itf, String filter) {
-        ServiceReference ref = getServiceReference(itf, filter);
-        if (ref != null) {
-            m_references.add(ref);
-            return context.getService(ref);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the service object associated with this service reference.
-     * 
-     * @param ref service reference
-     * @return the service object.
-     */
-    public Object getServiceObject(ServiceReference ref) {
-        if (ref != null) {
-            m_references.add(ref);
-            return context.getService(ref);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the service objects of the services provided by the local bundle,
-     * offering the specified interface and matching the given filter.
-     * 
-     * @param itf the interface provided by the searched services.
-     * @param filter an additional filter (can be {@code null}).
-     * @return the service objects provided by the local bundle, offering the
-     *         specified interface and matching the given filter.
-     */
-    public Object[] getServiceObjects(String itf, String filter) {
-        ServiceReference[] refs = getServiceReferences(itf, filter);
-        if (refs != null) {
-            Object[] list = new Object[refs.length];
-            for (int i = 0; i < refs.length; i++) {
-                m_references.add(refs[i]);
-                list[i] = context.getService(refs[i]);
-            }
-            return list;
-        } else {
-            return new Object[0];
-        }
-    }
-
-    /**
-     * Returns the service reference of a service provided by the local bundle,
-     * offering the specified interface and matching the given filter.
-     * 
-     * @param itf the interface provided by the searched service.
-     * @param filter an additional filter (can be {@code null}).
-     * @return a service reference provided by the local bundle, offering the
-     *         specified interface and matching the given filter. If no service
-     *         is found, {@code null} is returned.
-     */
-    public ServiceReference getServiceReference(String itf, String filter) {
-        return getServiceReference(context.getBundle(), itf, filter);
-    }
-
-    /**
-     * Returns the service reference of a service provided offering the
-     * specified interface.
-     * 
-     * @param itf the interface provided by the searched service.
-     * @return a service reference provided by the local bundle, offering the
-     *         specified interface and matching the given filter. If no service
-     *         is found, {@code null} is returned.
-     */
-    public ServiceReference getServiceReference(String itf) {
-        return getServiceReference(context.getBundle(), itf, null);
-    }
-
-    /**
-     * Returns the service reference of the service provided by the local
-     * bundle, offering the specified interface and having the given persistent
-     * ID.
-     * 
-     * @param itf the interface provided by the searched service.
-     * @param pid the persistent ID of the searched service.
-     * @return a service provided by the local bundle, offering the specified
-     *         interface and having the given persistent ID.
-     */
-    public ServiceReference getServiceReferenceByPID(String itf, String pid) {
-        return getServiceReferenceByPID(context.getBundle(), itf, pid);
-    }
-
-    /**
-     * Returns the service reference of all the services provided in the local
-     * bundle, offering the specified interface and matching the given filter.
-     * 
-     * @param itf the interface provided by the searched services.
-     * @param filter an additional filter (can be {@code null}).
-     * @return all the service references provided in the local bundle, offering
-     *         the specified interface and matching the given filter. If no
-     *         service matches, an empty array is returned.
-     */
-    public ServiceReference[] getServiceReferences(String itf, String filter) {
-        return getServiceReferences(context.getBundle(), itf, filter);
-    }
-    
-    /**
-     * Gets the package admin exposed by the framework.
-     * Fails if the package admin is not available. 
-     * @return the package admin service.
-     */
-    public PackageAdmin getPackageAdmin() {
-        PackageAdmin pa = (PackageAdmin) getServiceObject(PackageAdmin.class.getName(), null);
-        if (pa == null) {
-            fail("No package admin available");
-        }
-        return pa;
-    }
-    
-    /**
-     * Refresh the packages.
-     * Fails if the package admin service is not available.
-     */
-    public void refresh() {
-        getPackageAdmin().refreshPackages(null);
-    }
-    
-    /**
-     * Waits for a service. Fails on timeout.
-     * If timeout is set to 0, it sets the timeout to 10s.
-     * @param itf the service interface
-     * @param filter  the filter
-     * @param timeout the timeout
-     */
-    public void waitForService(String itf, String filter, long timeout) {
-        if (timeout == 0) {
-            timeout = 10000; // Default 10 secondes.
-        }
-        ServiceReference[] refs = getServiceReferences(itf, filter);
-        long begin = System.currentTimeMillis();
-        if (refs.length != 0) {
-            return;
-        } else {
-            while(refs.length == 0) {
-                try {
-                    Thread.sleep(5);
-                } catch (InterruptedException e) {
-                    // Interrupted
-                }
-                long now = System.currentTimeMillis();
-                
-                if ((now - begin) > timeout) {
-                    fail("Timeout ... no services matching with the request after " + timeout + "ms");
-                }
-                refs = getServiceReferences(itf, filter);
-            }
-        }
-    }
-    
-    
-    /**
-     * Installs a bundle.
-     * Fails if the bundle cannot be installed.
-     * Be aware that you have to uninstall the bundle yourself.
-     * @param url bundle url
-     * @return the installed bundle
-     */
-    public Bundle installBundle(String url) {
-        try {
-            return context.installBundle(url);
-        } catch (BundleException e) {
-            fail("Cannot install the bundle " + url + " : " + e.getMessage());
-        }
-        return null; // Can not happen
-    }
-    
-    /**
-     * Installs a bundle.
-     * Fails if the bundle cannot be installed.
-     * Be aware that you have to uninstall the bundle yourself.
-     * @param url bundle url
-     * @param stream input stream containing the bundle
-     * @return the installed bundle
-     */
-    public Bundle installBundle(String url, InputStream stream) {
-        try {
-            return context.installBundle(url, stream);
-        } catch (BundleException e) {
-            fail("Cannot install the bundle " + url + " : " + e.getMessage());
-        }
-        return null; // Can not happen
-    }
-    
-    /**
-     * Installs and starts a bundle.
-     * Fails if the bundle cannot be installed or an error occurs
-     * during startup. Be aware that you have to uninstall the bundle
-     * yourself.
-     * @param url the bundle url
-     * @return the Bundle object.
-     */
-    public Bundle installAndStart(String url) {
-        Bundle bundle = installBundle(url);
-        try {
-            bundle.start();
-        } catch (BundleException e) {
-           fail("Cannot start the bundle " + url + " : " + e.getMessage());
-        }
-        return bundle;
-    }
-    
-    /**
-     * Installs and starts a bundle.
-     * Fails if the bundle cannot be installed or an error occurs
-     * during startup. Be aware that you have to uninstall the bundle
-     * yourself.
-     * @param url the bundle url
-     * @param stream input stream containing the bundle
-     * @return the Bundle object.
-     */
-    public Bundle installAndStart(String url, InputStream stream) {
-        Bundle bundle = installBundle(url, stream);
-        try {
-            bundle.start();
-        } catch (BundleException e) {
-           fail("Cannot start the bundle " + url + " : " + e.getMessage());
-        }
-        return bundle;
-    }
-    
-    /**
-     * Get the bundle by its id.
-     * @param bundleId the bundle id.
-     * @return the bundle with the given id.
-     */
-    public Bundle getBundle(long bundleId) {
-        return context.getBundle(bundleId);
-    }
-    
-    /**
-     * Gets a bundle by its symbolic name.
-     * Fails if no bundle matches.
-     * @param name the symbolic name of the bundle
-     * @return the bundle object.
-     */
-    public Bundle getBundle(String name) {
-        Bundle[] bundles = context.getBundles();
-        for (int i = 0; i < bundles.length; i++) {
-            if (name.equals(bundles[i].getSymbolicName())) {
-                return bundles[i];
-            }
-        }
-        fail("No bundles with the given symbolic name " + name);
-        return null; // should not happen
-    }
-
-}
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java
index a7a9658..f46f7f4 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java
@@ -1,16 +1,16 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import org.apache.felix.ipojo.metadata.Element;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.ComponentUsingAnnotations;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -60,33 +60,24 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+            .add(CheckService.class)
+            .add(Foo.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+            .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build( TinyBundles.withBnd());
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
+        InputStream fooimpl = TinyBundles.newBundle()
+            .add(FooImpl.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
 
-        String test = TinyBundles.newBundle()
-        .addClass(ComponentUsingAnnotations.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Transaction Annotation Test")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "annotations.jar"), new File(TEST, "annotation.xml"))  ).toExternalForm();
+        InputStream test = TinyBundles.newBundle()
+            .add(ComponentUsingAnnotations.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"TransactionAnnotationTest")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "annotations.jar"), new File(TEST, "annotation.xml"))  );
 
 
         Option[] opt =  options(
@@ -96,17 +87,14 @@
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
-                    )
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                 )
-
-                ;
+                );
         return opt;
     }
 
@@ -154,7 +142,8 @@
 
     private Bundle getBundle() {
         for(Bundle b : context.getBundles()) {
-           if ("Transaction Annotation Test".equals(b.getSymbolicName())) {
+            System.out.println(b.getSymbolicName());
+           if ("TransactionAnnotationTest".equals(b.getSymbolicName())) {
                return b;
            }
         }
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInstallation.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInstallation.java
index b957c7c..4f0b92a 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInstallation.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInstallation.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -19,6 +17,8 @@
 
 import org.apache.felix.ipojo.ComponentInstance;
 import org.apache.felix.ipojo.HandlerFactory;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -29,6 +29,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -37,6 +38,7 @@
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 
 @RunWith( JUnit4TestRunner.class )
@@ -69,58 +71,61 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+            .add(CheckService.class)
+            .add(Foo.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+            .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build();
+        
+//        try {
+//            StreamUtils.copy(service, new FileOutputStream(new File(ROOT, "service.jar")));
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
+        InputStream fooimpl = TinyBundles.newBundle()
+            .add(FooImpl.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
 
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Required Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "requires.jar"), new File(TEST, "requires.xml"))  ).toExternalForm();
+        InputStream test = TinyBundles.newBundle()
+            .add(FooDelegator.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"RequiredTransactionPropagation")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "requires.jar"), new File(TEST, "requires.xml"))  );
 
 
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+                
         return opt;
     }
 
     @Test
-    public void install() throws NotSupportedException, SystemException, IllegalStateException, SecurityException, HeuristicMixedException, HeuristicRollbackException, RollbackException {
+    public void install() throws NotSupportedException, SystemException, IllegalStateException, SecurityException, HeuristicMixedException, HeuristicRollbackException, RollbackException, InvalidSyntaxException {
         Bundle[] bundles = context.getBundles();
         for (Bundle b : bundles) {
             Assert.assertTrue(b.getSymbolicName(), b.getState() == Bundle.ACTIVE);
@@ -148,10 +153,12 @@
         Assert.assertEquals(ComponentInstance.VALID, prov.getState());
         Assert.assertEquals(ComponentInstance.VALID, under.getState());
 
-        ref = ipojo.getServiceReferenceByName(CheckService.class.getName(), under.getInstanceName());
-        Assert.assertNotNull(ref);
+        ServiceReference[] refs = context.getAllServiceReferences(CheckService.class.getName(), "(instance.name=" + under.getInstanceName() +")");
+        
+//        ref = ipojo.getServiceReferenceByName(CheckService.class.getName(), under.getInstanceName());
+        Assert.assertNotNull(refs);
 
-        ((CheckService) osgi.getServiceObject(ref)).doSomethingGood();
+        ((CheckService) osgi.getServiceObject(refs[0])).doSomethingGood();
     }
 
 }
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInvalidation.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInvalidation.java
index 548df24..e6c4a69 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInvalidation.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestInvalidation.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -70,54 +71,49 @@
         ROOT.mkdirs();
 
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+            .add(CheckService.class)
+            .add(Foo.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+            .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
+        InputStream fooimpl = TinyBundles.newBundle()
+            .add(FooImpl.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
 
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Required Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "requires.jar"), new File(TEST, "requires.xml"))  ).toExternalForm();
+        InputStream test = TinyBundles.newBundle()
+            .add(FooDelegator.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"RequiredTransactionPropagation")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "requires.jar"), new File(TEST, "requires.xml"))  );
 
 
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
         return opt;
     }
 
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestMandatory.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestMandatory.java
index 03d2e43..69c43e3 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestMandatory.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestMandatory.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -69,54 +70,50 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+            .add(CheckService.class)
+            .add(Foo.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+            .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
-
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Mandatory Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "mandatory.jar"), new File(TEST, "mandatory.xml"))  ).toExternalForm();
-
-
+        InputStream fooimpl = TinyBundles.newBundle()
+            .add(FooImpl.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
+        
+        InputStream test = TinyBundles.newBundle()
+            .add(FooDelegator.class)
+            .set(Constants.BUNDLE_SYMBOLICNAME,"MandatoryTransactionPropagation")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+            .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "mandatory.jar"), new File(TEST, "mandatory.xml")) );
+        
+        
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+        
         return opt;
     }
 
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNever.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNever.java
index 609f9f5..ac63000 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNever.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNever.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -68,54 +69,49 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+        .add(CheckService.class)
+        .add(Foo.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+        .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT,"FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
-
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Mandatory Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "never.jar"), new File(TEST, "never.xml"))  ).toExternalForm();
-
-
+        InputStream fooimpl = TinyBundles.newBundle()
+        .add(FooImpl.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
+    
+        InputStream test = TinyBundles.newBundle()
+        .add(FooDelegator.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"NeverTransactionPropagation")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "never.jar"), new File(TEST, "never.xml"))  );
+    
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+        
         return opt;
     }
 
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNotSupported.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNotSupported.java
index bd07984..ad5d311 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNotSupported.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestNotSupported.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -68,54 +69,49 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+        .add(CheckService.class)
+        .add(Foo.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+        .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
-
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Required Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "notsupported.jar"), new File(TEST, "notsupported.xml"))  ).toExternalForm();
-
-
+        InputStream fooimpl = TinyBundles.newBundle()
+        .add(FooImpl.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
+    
+        InputStream test = TinyBundles.newBundle()
+        .add(FooDelegator.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"NotSupportedTransactionPropagation")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "notsupported.jar"), new File(TEST, "notsupported.xml"))  );
+    
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+       
         return opt;
     }
 
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequires.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequires.java
index 5dfd591..4299d2d 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequires.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequires.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -69,54 +70,49 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+        .add(CheckService.class)
+        .add(Foo.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+        .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
-
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Required Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "requires.jar"), new File(TEST, "requires.xml"))  ).toExternalForm();
-
-
+        InputStream fooimpl = TinyBundles.newBundle()
+        .add(FooImpl.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
+    
+        InputStream test = TinyBundles.newBundle()
+        .add(FooDelegator.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"RequiresTransactionPropagation")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "requires.jar"), new File(TEST, "requires.xml"))   );
+    
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+       
         return opt;
     }
 
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequiresNew.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequiresNew.java
index b7a231b..c033233 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequiresNew.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestRequiresNew.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -69,54 +70,51 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+       
+        InputStream service = TinyBundles.newBundle()
+        .add(CheckService.class)
+        .add(Foo.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+        .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
-
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Required Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "requiresnew.jar"), new File(TEST, "requiresnew.xml"))  ).toExternalForm();
-
-
+        InputStream fooimpl = TinyBundles.newBundle()
+        .add(FooImpl.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
+    
+        InputStream test = TinyBundles.newBundle()
+        .add(FooDelegator.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"RequiresNewTransactionPropagation")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "requiresnew.jar"), new File(TEST, "requiresnew.xml"))  );
+    
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+        
+        
         return opt;
     }
 
diff --git a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestSupported.java b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestSupported.java
index b2eea67..5fb7016 100644
--- a/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestSupported.java
+++ b/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestSupported.java
@@ -1,14 +1,12 @@
 package org.apache.felix.ipojo.transaction.test;
 
-import static org.ops4j.pax.exam.CoreOptions.bundle;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.CoreOptions.provision;
 import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
 
 import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
 
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -20,6 +18,8 @@
 import javax.transaction.TransactionManager;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
 import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
 import org.apache.felix.ipojo.transaction.test.component.FooDelegator;
 import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -30,6 +30,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Customizer;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.Configuration;
@@ -68,54 +69,50 @@
     public static Option[] configure() {
         ROOT.mkdirs();
 
-        URL service = TinyBundles.newBundle()
-            .addClass(CheckService.class)
-            .addClass(Foo.class)
-           .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
-                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                .set(Constants.IMPORT_PACKAGE, "javax.transaction")
-                )
-            .build( TinyBundles.asURL());
+        InputStream service = TinyBundles.newBundle()
+        .add(CheckService.class)
+        .add(Foo.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+        .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build();
 
-        String fooimpl = TinyBundles.newBundle()
-            .addClass(FooImpl.class)
-            .prepare(
-                    with()
-                    .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
-                    .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
-                )
-                .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  ).toExternalForm();
-
-        String test = TinyBundles.newBundle()
-        .addClass(FooDelegator.class)
-        .prepare(
-                with()
-                .set(Constants.BUNDLE_SYMBOLICNAME,"Required Transaction Propgatation")
-                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
-            )
-            .build( new BundleAsiPOJO(new File(ROOT, "supported.jar"), new File(TEST, "supported.xml"))  ).toExternalForm();
-
-
+        InputStream fooimpl = TinyBundles.newBundle()
+        .add(FooImpl.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml"))  );
+    
+        InputStream test = TinyBundles.newBundle()
+        .add(FooDelegator.class)
+        .set(Constants.BUNDLE_SYMBOLICNAME,"SupportedTransactionPropagation")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+        .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "supported.jar"), new File(TEST, "supported.xml"))    );
+    
         Option[] opt =  options(
-
                 provision(
                         mavenBundle().groupId("org.ops4j.pax.logging").artifactId("pax-logging-api").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
-                        mavenBundle()
-                            .groupId( "org.ops4j.pax.swissbox" )
-                            .artifactId( "pax-swissbox-tinybundles" )
-                            .version(asInProject()),
-                        bundle(service.toExternalForm()),
-                        bundle(fooimpl),
-                        bundle(test)
+                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+                ),
+                provision(
+                        service,
+                        fooimpl,
+                        test
                     )
-                )
-
-                ;
+                ,
+                new Customizer() {
+                    @Override
+                    public InputStream customizeTestProbe( InputStream testProbe )
+                    {
+                       return TinyBundles.modifyBundle(testProbe)
+                           .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+                           .build();
+                    }
+                });
+        
+       
         return opt;
     }
 
diff --git a/ipojo/tests/integration-tests/pom.xml b/ipojo/tests/integration-tests/pom.xml
index 38a79f1..1530e62 100644
--- a/ipojo/tests/integration-tests/pom.xml
+++ b/ipojo/tests/integration-tests/pom.xml
@@ -262,7 +262,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.eventadmin</artifactId>
-      <version>1.0.0</version>
+      <version>1.2.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>