Remove duplicate dependencies:

- moved all bundles from `cnf/lib` to `cnf/localrepo`;
- refacted the unit tests of the processlauncher project to use TestNG instead of JUnit;
- moved the itests from the processlauncher project to their own itest project;
- removed some redundant PAX exam libraries as we're using Bnd's integration test functionality.



git-svn-id: https://svn.apache.org/repos/asf/ace/trunk@1726222 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/cnf/lib/commons-logging/commons-logging-1.1.1.jar b/cnf/lib/commons-logging/commons-logging-1.1.1.jar
deleted file mode 100644
index 1deef14..0000000
--- a/cnf/lib/commons-logging/commons-logging-1.1.1.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/gson/gson-1.7.1.jar b/cnf/lib/gson/gson-1.7.1.jar
deleted file mode 100644
index eb54274..0000000
--- a/cnf/lib/gson/gson-1.7.1.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/index.xml.gz b/cnf/lib/index.xml.gz
index c84ec82..e26148a 100644
--- a/cnf/lib/index.xml.gz
+++ b/cnf/lib/index.xml.gz
Binary files differ
diff --git a/cnf/lib/junit/junit-4.8.2.jar b/cnf/lib/junit/junit-4.8.2.jar
deleted file mode 100644
index 5b4bb84..0000000
--- a/cnf/lib/junit/junit-4.8.2.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-exam-container-native/pax-exam-container-native-2.3.0.jar b/cnf/lib/pax-exam-container-native/pax-exam-container-native-2.3.0.jar
deleted file mode 100644
index d855db8..0000000
--- a/cnf/lib/pax-exam-container-native/pax-exam-container-native-2.3.0.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-exam-inject/pax-exam-inject-2.3.0.jar b/cnf/lib/pax-exam-inject/pax-exam-inject-2.3.0.jar
deleted file mode 100644
index 5085904..0000000
--- a/cnf/lib/pax-exam-inject/pax-exam-inject-2.3.0.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-exam-junit4/pax-exam-junit4-2.3.0.jar b/cnf/lib/pax-exam-junit4/pax-exam-junit4-2.3.0.jar
deleted file mode 100644
index 5257ab0..0000000
--- a/cnf/lib/pax-exam-junit4/pax-exam-junit4-2.3.0.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-exam-link-mvn/pax-exam-link-mvn-2.3.0.jar b/cnf/lib/pax-exam-link-mvn/pax-exam-link-mvn-2.3.0.jar
deleted file mode 100644
index d1bb571..0000000
--- a/cnf/lib/pax-exam-link-mvn/pax-exam-link-mvn-2.3.0.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-exam/pax-exam-2.3.0.jar b/cnf/lib/pax-exam/pax-exam-2.3.0.jar
deleted file mode 100644
index fcd5410..0000000
--- a/cnf/lib/pax-exam/pax-exam-2.3.0.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-url-aether/pax-url-aether-1.3.5.jar b/cnf/lib/pax-url-aether/pax-url-aether-1.3.5.jar
deleted file mode 100644
index 7408917..0000000
--- a/cnf/lib/pax-url-aether/pax-url-aether-1.3.5.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-url-assembly/pax-url-assembly-1.3.5.jar b/cnf/lib/pax-url-assembly/pax-url-assembly-1.3.5.jar
deleted file mode 100644
index 1285478..0000000
--- a/cnf/lib/pax-url-assembly/pax-url-assembly-1.3.5.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-url-link/pax-url-link-1.3.5.jar b/cnf/lib/pax-url-link/pax-url-link-1.3.5.jar
deleted file mode 100644
index 724ec5a..0000000
--- a/cnf/lib/pax-url-link/pax-url-link-1.3.5.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/pax-url-wrap/pax-url-wrap-1.3.5.jar b/cnf/lib/pax-url-wrap/pax-url-wrap-1.3.5.jar
deleted file mode 100644
index 2d076a1..0000000
--- a/cnf/lib/pax-url-wrap/pax-url-wrap-1.3.5.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/repository.xml b/cnf/lib/repository.xml
index 6446fad..ff560aa 100644
--- a/cnf/lib/repository.xml
+++ b/cnf/lib/repository.xml
@@ -1,30 +1,167 @@
-<repository>
- <resource id='ant/1.8.4' symbolicname='ant' uri='ant/ant-1.8.4.jar' version='1.8.4'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='ant'/><p n='version' t='version' v='1.8.4'/></capability></resource>
- <resource id='aopalliance/1.0' symbolicname='aopalliance' uri='aopalliance/aopalliance-1.0.jar' version='1.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='aopalliance'/><p n='version' t='version' v='1.0'/></capability></resource>
- <resource id='bcprov-jdk14/1.40' symbolicname='bcprov-jdk14' uri='bcprov-jdk14/bcprov-jdk14-1.40.jar' version='1.40'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='bcprov-jdk14'/><p n='version' t='version' v='1.40'/></capability></resource>
- <resource id='commons-codec/1.4' symbolicname='commons-codec' uri='commons-codec/commons-codec-1.4.jar' version='1.4'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-codec'/><p n='version' t='version' v='1.4'/></capability></resource>
- <resource id='commons-collections/3.2.1' symbolicname='commons-collections' uri='commons-collections/commons-collections-3.2.1.jar' version='3.2.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-collections'/><p n='version' t='version' v='3.2.1'/></capability></resource>
- <resource id='commons-io/2.0.1' symbolicname='commons-io' uri='commons-io/commons-io-2.0.1.jar' version='2.0.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-io'/><p n='version' t='version' v='2.0.1'/></capability></resource>
- <resource id='commons-lang/2.4' symbolicname='commons-lang' uri='commons-lang/commons-lang-2.4.jar' version='2.4'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-lang'/><p n='version' t='version' v='2.4'/></capability></resource>
- <resource id='commons-logging/1.1.1' symbolicname='commons-logging' uri='commons-logging/commons-logging-1.1.1.jar' version='1.1.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-logging'/><p n='version' t='version' v='1.1.1'/></capability></resource>
- <resource id='gson/1.7.1' symbolicname='gson' uri='gson/gson-1.7.1.jar' version='1.7.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='gson'/><p n='version' t='version' v='1.7.1'/></capability></resource>
- <resource id='javax.inject/1.0.0' symbolicname='javax.inject' uri='javax.inject/javax.inject-1.0.0.jar' version='1.0.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='javax.inject'/><p n='version' t='version' v='1.0.0'/></capability></resource>
- <resource id='jsr250-api/1.0' symbolicname='jsr250-api' uri='jsr250-api/jsr250-api-1.0.jar' version='1.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='jsr250-api'/><p n='version' t='version' v='1.0'/></capability></resource>
- <resource id='jsr305/1.3.9' symbolicname='jsr305' uri='jsr305/jsr305-1.3.9.jar' version='1.3.9'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='jsr305'/><p n='version' t='version' v='1.3.9'/></capability></resource>
- <resource id='junit/4.8.2' symbolicname='junit' uri='junit/junit-4.8.2.jar' version='4.8.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='junit'/><p n='version' t='version' v='4.8.2'/></capability></resource>
- <resource id='kxml2/2.3.0' symbolicname='kxml2' uri='kxml2/kxml2-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='kxml2'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='oauth/20100527' symbolicname='oauth' uri='oauth/oauth-20100527.jar' version='20100527'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='oauth'/><p n='version' t='version' v='20100527'/></capability></resource>
- <resource id='pax-exam/2.3.0' symbolicname='pax-exam' uri='pax-exam/pax-exam-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-container-native/2.3.0' symbolicname='pax-exam-container-native' uri='pax-exam-container-native/pax-exam-container-native-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-container-native'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-inject/2.3.0' symbolicname='pax-exam-inject' uri='pax-exam-inject/pax-exam-inject-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-inject'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-junit4/2.3.0' symbolicname='pax-exam-junit4' uri='pax-exam-junit4/pax-exam-junit4-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-junit4'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-link-mvn/2.3.0' symbolicname='pax-exam-link-mvn' uri='pax-exam-link-mvn/pax-exam-link-mvn-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-link-mvn'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-url-aether/1.3.5' symbolicname='pax-url-aether' uri='pax-url-aether/pax-url-aether-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-aether'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='pax-url-assembly/1.3.5' symbolicname='pax-url-assembly' uri='pax-url-assembly/pax-url-assembly-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-assembly'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='pax-url-link/1.3.5' symbolicname='pax-url-link' uri='pax-url-link/pax-url-link-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-link'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='pax-url-wrap/1.3.5' symbolicname='pax-url-wrap' uri='pax-url-wrap/pax-url-wrap-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-wrap'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='testng/6.5.2' symbolicname='testng' uri='testng/testng-6.5.2.jar' version='6.5.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='testng'/><p n='version' t='version' v='6.5.2'/></capability></resource>
- <resource id='velocity/1.6.2' symbolicname='velocity' uri='velocity/velocity-1.6.2.jar' version='1.6.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='velocity'/><p n='version' t='version' v='1.6.2'/></capability></resource>
- <resource id='xpp3/1.1.4.c' symbolicname='xpp3' uri='xpp3/xpp3-1.1.4.c.jar' version='1.1.4.c'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='xpp3'/><p n='version' t='version' v='1.1.4.c'/></capability></resource>
- <resource id='xstream/1.2.2' symbolicname='xstream' uri='xstream/xstream-1.2.2.jar' version='1.2.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='xstream'/><p n='version' t='version' v='1.2.2'/></capability></resource>
-</repository>
+<?xml version='1.0' encoding='utf-8'?>
+<?xml-stylesheet type='text/xsl' href='http://www.osgi.org/www/obr2html.xsl'?>
+
+<repository lastmodified='20160122145511.091' name='Untitled'>
+  <resource id='Untitled--1059228687/0.0.0' symbolicname='Untitled--1059228687' uri='aopalliance/aopalliance-1.0.jar' version='0.0.0'>
+    <size>
+      4467
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--1059228687'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--1877161092/0.0.0' symbolicname='Untitled--1877161092' uri='oauth/oauth-20100527.jar' version='0.0.0'>
+    <size>
+      44209
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--1877161092'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--767182726/0.0.0' symbolicname='Untitled--767182726' uri='jsr305/jsr305-1.3.9.jar' version='0.0.0'>
+    <size>
+      33015
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--767182726'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--93366089/0.0.0' symbolicname='Untitled--93366089' uri='kxml2/kxml2-2.3.0.jar' version='0.0.0'>
+    <size>
+      43858
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--93366089'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--978492559/0.0.0' symbolicname='Untitled--978492559' uri='ant/ant-1.8.4.jar' version='0.0.0'>
+    <size>
+      1941731
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--978492559'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-170591100/0.0.0' symbolicname='Untitled-170591100' uri='testng/testng-6.5.2.jar' version='0.0.0'>
+    <size>
+      1273045
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-170591100'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-2104301348/0.0.0' symbolicname='Untitled-2104301348' uri='xstream/xstream-1.2.2.jar' version='0.0.0'>
+    <size>
+      373194
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-2104301348'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-494417045/0.0.0' symbolicname='Untitled-494417045' uri='jsr250-api/jsr250-api-1.0.jar' version='0.0.0'>
+    <size>
+      5848
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-494417045'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-522443489/0.0.0' symbolicname='Untitled-522443489' uri='velocity/velocity-1.6.2.jar' version='0.0.0'>
+    <size>
+      420975
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-522443489'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-524384939/0.0.0' symbolicname='Untitled-524384939' uri='bcprov-jdk14/bcprov-jdk14-1.40.jar' version='0.0.0'>
+    <size>
+      1589656
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-524384939'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-876183438/0.0.0' symbolicname='Untitled-876183438' uri='xpp3/xpp3-1.1.4.c.jar' version='0.0.0'>
+    <size>
+      120069
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-876183438'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='com.google.gson/1.7.0' presentationname='Gson' symbolicname='com.google.gson' uri='gson/gson-1.7.1.jar' version='1.7.0'>
+    <description>
+      Google Gson library
+    </description>
+    <size>
+      173590
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='Gson'/>
+      <p n='symbolicname' v='com.google.gson'/>
+      <p n='version' t='version' v='1.7.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.annotations'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.reflect'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.stream'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.internal'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <require extend='false' filter='(|(ee=J2SE-1.5))' multiple='false' name='ee' optional='false'>
+      Execution Environment (|(ee=J2SE-1.5))
+    </require>
+  </resource>
+  <resource id='javax.inject/1.0.0' presentationname='javax.inject' symbolicname='javax.inject' uri='javax.inject/javax.inject-1.0.0.jar' version='1.0.0'>
+    <size>
+      2954
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='javax.inject'/>
+      <p n='symbolicname' v='javax.inject'/>
+      <p n='version' t='version' v='1.0.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='javax.inject'/>
+      <p n='version' t='version' v='1.0.0'/>
+    </capability>
+  </resource>
+</repository>
\ No newline at end of file
diff --git a/cnf/localrepo/index.xml b/cnf/localrepo/index.xml
index 7bc5b7e..ba130a0 100644
--- a/cnf/localrepo/index.xml
+++ b/cnf/localrepo/index.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<repository increment="1453375031000" name="Local" xmlns="http://www.osgi.org/xmlns/repository/v1.0.0">
+<repository increment="1453471155000" name="Local" xmlns="http://www.osgi.org/xmlns/repository/v1.0.0">
   <resource>
     <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="aws-common"/>
@@ -5003,6 +5003,33 @@
   </resource>
   <resource>
     <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="javax.inject"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="1.0.0"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="210831b73725eb71d2311f87219947a17b42a86d5ec83d3dc2c350dcb85e8836"/>
+      <attribute name="url" value="javax.inject/javax.inject-1.0.0.jar"/>
+      <attribute name="size" type="Long" value="2954"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="javax.inject"/>
+      <attribute name="bundle-version" type="Version" value="1.0.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="javax.inject"/>
+      <attribute name="bundle-version" type="Version" value="1.0.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="javax.inject"/>
+      <attribute name="version" type="Version" value="1.0.0"/>
+      <attribute name="bundle-symbolic-name" value="javax.inject"/>
+      <attribute name="bundle-version" type="Version" value="1.0.0"/>
+    </capability>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="javax.servlet"/>
       <attribute name="type" value="osgi.bundle"/>
       <attribute name="version" type="Version" value="2.5.0.v200910301333"/>
@@ -6712,63 +6739,360 @@
   </resource>
   <resource>
     <capability namespace="osgi.identity">
-      <attribute name="osgi.identity" value="org.apache.commons.io"/>
+      <attribute name="osgi.identity" value="org.apache.commons.codec"/>
       <attribute name="type" value="osgi.bundle"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
     </capability>
     <capability namespace="osgi.content">
-      <attribute name="osgi.content" value="c1cd4480f5201e5d2979fd97fa7949bde0e778b84c87b383aa133586bb17f4f1"/>
-      <attribute name="url" value="org.apache.commons.io/org.apache.commons.io-2.0.0.jar"/>
-      <attribute name="size" type="Long" value="161213"/>
+      <attribute name="osgi.content" value="6aa4234c74f3a1035751a25822545867c8c3727125a642b6e049665d1863631b"/>
+      <attribute name="url" value="org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar"/>
+      <attribute name="size" type="Long" value="58160"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.net"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.language"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.digest"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.binary"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.binary)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.digest)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.language)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.net)(version&gt;=1.4.0))"/>
+    </requirement>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.apache.commons.collections"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="87363a4c94eaabeefd8b930cb059f66b64c9f7d632862f23de3012da7660047b"/>
+      <attribute name="url" value="org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar"/>
+      <attribute name="size" type="Long" value="575389"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.map"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.buffer"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.comparators"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.collection"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.bag"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.iterators"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.bidimap"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.set"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.functors"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.list"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.keyvalue"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.bag)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.bidimap)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.buffer)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.collection)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.comparators)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.functors)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.iterators)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.keyvalue)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.list)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.map)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.set)(version&gt;=3.2.1))"/>
+    </requirement>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.apache.commons.io"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="2a3f5a206480863aae9dff03f53c930c3add6912f8785498d59442c7ebb98c5c"/>
+      <attribute name="url" value="org.apache.commons.io/org.apache.commons.io-2.0.1.jar"/>
+      <attribute name="size" type="Long" value="159509"/>
       <attribute name="mime" value="application/vnd.osgi.bundle"/>
     </capability>
     <capability namespace="osgi.wiring.bundle">
       <attribute name="osgi.wiring.bundle" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.host">
       <attribute name="osgi.wiring.host" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.output"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.comparator"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.monitor"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.input"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.filefilter"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
   </resource>
   <resource>
     <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.apache.commons.lang"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="2c73b940c91250bc98346926270f13a6a10bb6e29d2c9316a70d134e382c873e"/>
+      <attribute name="url" value="org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar"/>
+      <attribute name="size" type="Long" value="261809"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.math"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.enums"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.builder"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.exception"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.enum"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.mutable"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.text"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.time"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.builder)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.enum)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.enums)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.exception)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.math)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.mutable)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.text)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.time)(version&gt;=2.4.0))"/>
+    </requirement>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="org.apache.felix.configadmin"/>
       <attribute name="type" value="osgi.bundle"/>
       <attribute name="version" type="Version" value="1.8.0"/>
@@ -8224,110 +8548,6 @@
   </resource>
   <resource>
     <capability namespace="osgi.identity">
-      <attribute name="osgi.identity" value="org.ops4j.base.store"/>
-      <attribute name="type" value="osgi.bundle"/>
-      <attribute name="version" type="Version" value="1.2.2"/>
-    </capability>
-    <capability namespace="osgi.content">
-      <attribute name="osgi.content" value="653b19a591c28fcb8d5d89f4e61064a711362fdd73f0a05a01e1596b8a7901c3"/>
-      <attribute name="url" value="org.ops4j.base.store/org.ops4j.base.store-1.2.2.jar"/>
-      <attribute name="size" type="Long" value="7323"/>
-      <attribute name="mime" value="application/vnd.osgi.bundle"/>
-    </capability>
-    <capability namespace="osgi.wiring.bundle">
-      <attribute name="osgi.wiring.bundle" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-    </capability>
-    <capability namespace="osgi.wiring.host">
-      <attribute name="osgi.wiring.host" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.store.intern"/>
-      <attribute name="version" type="Version" value="1.2.2"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-      <directive name="uses" value="org.ops4j.store,org.ops4j.io,org.apache.commons.logging"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.store"/>
-      <attribute name="version" type="Version" value="1.2.2"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-      <directive name="uses" value="org.ops4j.store.intern"/>
-    </capability>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(osgi.wiring.package=org.apache.commons.logging)"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.io)(version&gt;=1.2.2))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.store)(version&gt;=1.2.2))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.store.intern)(version&gt;=1.2.2))"/>
-    </requirement>
-  </resource>
-  <resource>
-    <capability namespace="osgi.identity">
-      <attribute name="osgi.identity" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="type" value="osgi.bundle"/>
-      <attribute name="version" type="Version" value="1.3.1"/>
-      <directive name="singleton" value="true"/>
-    </capability>
-    <capability namespace="osgi.content">
-      <attribute name="osgi.content" value="062d7f19cfd92453993def343a0938c31e368a2f29671cd91bfe2e605c3cc679"/>
-      <attribute name="url" value="org.ops4j.pax.swissbox.tinybundles/org.ops4j.pax.swissbox.tinybundles-1.3.1.jar"/>
-      <attribute name="size" type="Long" value="29253"/>
-      <attribute name="mime" value="application/vnd.osgi.bundle"/>
-    </capability>
-    <capability namespace="osgi.wiring.bundle">
-      <attribute name="osgi.wiring.bundle" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-    </capability>
-    <capability namespace="osgi.wiring.host">
-      <attribute name="osgi.wiring.host" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.pax.swissbox.tinybundles.core"/>
-      <attribute name="version" type="Version" value="1.3.1"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-      <directive name="uses" value="org.ops4j.store"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.pax.swissbox.tinybundles.dp"/>
-      <attribute name="version" type="Version" value="1.3.1"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-      <directive name="uses" value="org.osgi.framework,org.ops4j.store,org.ops4j.pax.swissbox.tinybundles.core"/>
-    </capability>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.logging)(version&gt;=1.0.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.io)(version&gt;=1.2.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(osgi.wiring.package=org.ops4j.pax.swissbox.bnd)"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.pax.swissbox.tinybundles.core)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.pax.swissbox.tinybundles.dp)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.store)(version&gt;=1.2.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.osgi.framework)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-  </resource>
-  <resource>
-    <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="org.osgi.impl.bundle.bindex"/>
       <attribute name="type" value="osgi.bundle"/>
       <attribute name="version" type="Version" value="2.2.0"/>
diff --git a/cnf/localrepo/index.xml.sha b/cnf/localrepo/index.xml.sha
index c5f629a..b4ae48b 100644
--- a/cnf/localrepo/index.xml.sha
+++ b/cnf/localrepo/index.xml.sha
@@ -1 +1 @@
-7baf16715ecdbf5757c81d49267876c78f1c0cd1c0010d9e6f2ab13f04624bc8
\ No newline at end of file
+268ea703ab955c27bac260c994c9c12aaa72566cddf6b7ac053fbc8d34cf9d05
\ No newline at end of file
diff --git a/cnf/lib/javax.inject/javax.inject-1.0.0.jar b/cnf/localrepo/javax.inject/javax.inject-1.0.0.jar
similarity index 100%
rename from cnf/lib/javax.inject/javax.inject-1.0.0.jar
rename to cnf/localrepo/javax.inject/javax.inject-1.0.0.jar
Binary files differ
diff --git a/cnf/lib/commons-codec/commons-codec-1.4.jar b/cnf/localrepo/org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar
similarity index 100%
rename from cnf/lib/commons-codec/commons-codec-1.4.jar
rename to cnf/localrepo/org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar
Binary files differ
diff --git a/cnf/lib/commons-collections/commons-collections-3.2.1.jar b/cnf/localrepo/org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar
similarity index 100%
rename from cnf/lib/commons-collections/commons-collections-3.2.1.jar
rename to cnf/localrepo/org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar
Binary files differ
diff --git a/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.0.jar b/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.0.jar
deleted file mode 100644
index dac59d8..0000000
--- a/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.0.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/lib/commons-io/commons-io-2.0.1.jar b/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.1.jar
similarity index 100%
rename from cnf/lib/commons-io/commons-io-2.0.1.jar
rename to cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.1.jar
Binary files differ
diff --git a/cnf/lib/commons-lang/commons-lang-2.4.jar b/cnf/localrepo/org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar
similarity index 100%
rename from cnf/lib/commons-lang/commons-lang-2.4.jar
rename to cnf/localrepo/org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar
Binary files differ
diff --git a/cnf/localrepo/org.ops4j.base.store/org.ops4j.base.store-1.2.2.jar b/cnf/localrepo/org.ops4j.base.store/org.ops4j.base.store-1.2.2.jar
deleted file mode 100644
index 0209ed5..0000000
--- a/cnf/localrepo/org.ops4j.base.store/org.ops4j.base.store-1.2.2.jar
+++ /dev/null
Binary files differ
diff --git a/cnf/localrepo/org.ops4j.pax.swissbox.tinybundles/org.ops4j.pax.swissbox.tinybundles-1.3.1.jar b/cnf/localrepo/org.ops4j.pax.swissbox.tinybundles/org.ops4j.pax.swissbox.tinybundles-1.3.1.jar
deleted file mode 100644
index 6a5855c..0000000
--- a/cnf/localrepo/org.ops4j.pax.swissbox.tinybundles/org.ops4j.pax.swissbox.tinybundles-1.3.1.jar
+++ /dev/null
Binary files differ
diff --git a/org.apache.ace.deployment/bnd.bnd b/org.apache.ace.deployment/bnd.bnd
index 25728c7..f5e7097 100644
--- a/org.apache.ace.deployment/bnd.bnd
+++ b/org.apache.ace.deployment/bnd.bnd
@@ -1,11 +1,9 @@
--buildpath: ${^-buildpath},\
+-buildpath: \
+	${^-buildpath},\
 	osgi.core,\
 	osgi.cmpn,\
 	javax.servlet,\
 	org.apache.felix.dependencymanager,\
-	org.ops4j.pax.swissbox.tinybundles,\
-	org.ops4j.base.store,\
-	commons-logging,\
 	com.vaadin,\
 	org.apache.ace.authentication.api;version=latest,\
 	org.apache.ace.identification.api;version=latest,\
diff --git a/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java b/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java
index 8c1eb22..5c0b0e4 100644
--- a/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java
+++ b/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java
@@ -20,10 +20,7 @@
 
 import static org.apache.ace.test.utils.TestUtils.BROKEN;
 import static org.apache.ace.test.utils.TestUtils.UNIT;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.newBundle;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -41,6 +38,7 @@
 import org.apache.ace.deployment.provider.DeploymentProvider;
 import org.apache.ace.deployment.util.test.TestProvider;
 import org.apache.ace.test.constants.TestConstants;
+import org.apache.ace.test.utils.FileUtils;
 import org.apache.ace.test.utils.TestUtils;
 import org.osgi.service.log.LogService;
 import org.osgi.service.useradmin.User;
@@ -60,23 +58,10 @@
     protected void setUp() throws Exception {
         m_generator = new StreamGeneratorImpl();
         m_provider = new TestProvider();
-        InputStream is = newBundle().build(); // TODO this is a very trivial bundle, put more data in?
-        File temp = File.createTempFile("bundle", "jar");
-        temp.deleteOnExit();
-        FileOutputStream fos = new FileOutputStream(temp);
-        byte[] buf = new byte[4096];
-        int b = is.read(buf);
-        while (b != -1) {
-            fos.write(buf, 0, b);
-            b = is.read(buf);
-        }
-        fos.close();
-        is.close();
-        URL url = temp.toURI().toURL();
-        
-        m_provider.addData("A1.jar", "A1", url, "1.0.0", true);
-        m_provider.addData("A2.jar", "A2", url, "1.0.0", false);
-        m_provider.addData("A3.jar", "A3", url, "1.0.0", true);
+
+        m_provider.addData("A1.jar", "A1", FileUtils.createEmptyBundle(null, "org.apache.ace.test.bundle.A1").toURI().toURL(), "1.0.0", true);
+        m_provider.addData("A2.jar", "A2", FileUtils.createEmptyBundle(null, "org.apache.ace.test.bundle.A2").toURI().toURL(), "1.0.0", false);
+        m_provider.addData("A3.jar", "A3", FileUtils.createEmptyBundle(null, "org.apache.ace.test.bundle.A3").toURI().toURL(), "1.0.0", true);
         TestUtils.configureObject(m_generator, DeploymentProvider.class, m_provider);
         TestUtils.configureObject(m_generator, LogService.class);
         TestUtils.configureObject(m_generator, ConnectionFactory.class, new MockConnectionFactory());
diff --git a/org.apache.ace.processlauncher.itest/.classpath b/org.apache.ace.processlauncher.itest/.classpath
new file mode 100644
index 0000000..efeacc9
--- /dev/null
+++ b/org.apache.ace.processlauncher.itest/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="bin" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="aQute.bnd.classpath.container"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.apache.ace.processlauncher.itest/.project b/org.apache.ace.processlauncher.itest/.project
new file mode 100644
index 0000000..3d0a3b7
--- /dev/null
+++ b/org.apache.ace.processlauncher.itest/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.ace.processlauncher.itest</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>bndtools.core.bndbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>bndtools.core.bndnature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.apache.ace.processlauncher.itest/bnd.bnd b/org.apache.ace.processlauncher.itest/bnd.bnd
new file mode 100644
index 0000000..40536ee
--- /dev/null
+++ b/org.apache.ace.processlauncher.itest/bnd.bnd
@@ -0,0 +1,24 @@
+Test-Cases: ${classes;CONCRETE;EXTENDS;org.apache.ace.it.IntegrationTestBase}
+-buildpath: \
+	${^-buildpath},\
+	org.apache.felix.dependencymanager,\
+	junit.osgi,\
+	osgi.core,\
+	osgi.cmpn,\
+	org.apache.ace.test;version=latest,\
+	org.apache.ace.processlauncher;version=latest
+-runfw: org.apache.felix.framework;version='[4,5)'
+-runvm: -ea
+-runbundles: \
+	osgi.cmpn,\
+	org.apache.felix.log,\
+	org.apache.felix.dependencymanager,\
+	org.apache.felix.configadmin,\
+	org.apache.ace.test;version=latest,\
+	org.apache.ace.processlauncher;version=latest
+Private-Package: org.apache.ace.processlauncher.itest
+Bundle-Version: 1.0.0
+Bundle-Name: Apache ACE ProcessLauncher Integration Test
+Bundle-Description: Registers a service factory and ProcessLauncher service
+Bundle-Category: itest
+-baseline:
diff --git a/org.apache.ace.processlauncher.itest/build.xml b/org.apache.ace.processlauncher.itest/build.xml
new file mode 100644
index 0000000..23063e2
--- /dev/null
+++ b/org.apache.ace.processlauncher.itest/build.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="project" default="build"> 
+	<import file="../cnf/build.xml"/>
+</project>
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/ProcessLauncherRespawnIntegrationTest.java b/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java
similarity index 83%
rename from org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/ProcessLauncherRespawnIntegrationTest.java
rename to org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java
index f81a009..08a433f 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/ProcessLauncherRespawnIntegrationTest.java
+++ b/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java
@@ -16,19 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ace.processlauncher.test.osgi;
+package org.apache.ace.processlauncher.itest;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertTrue;
-import static junit.framework.Assert.fail;
-import static org.apache.ace.processlauncher.test.impl.TestUtil.getOSName;
-import static org.apache.ace.processlauncher.test.impl.TestUtil.sleep;
-import static org.ops4j.pax.exam.CoreOptions.cleanCaches;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-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.apache.ace.processlauncher.itest.TestUtil.getOSName;
+import static org.apache.ace.processlauncher.itest.TestUtil.sleep;
 
 import java.io.File;
 import java.io.IOException;
@@ -36,73 +27,31 @@
 import java.io.OutputStream;
 import java.util.Properties;
 
-import javax.inject.Inject;
-
-import junit.framework.AssertionFailedError;
-
+import org.apache.ace.it.IntegrationTestBase;
 import org.apache.ace.processlauncher.LaunchConfiguration;
 import org.apache.ace.processlauncher.ProcessLauncherService;
 import org.apache.ace.processlauncher.ProcessLifecycleListener;
 import org.apache.ace.processlauncher.ProcessStreamListener;
-import org.apache.ace.processlauncher.impl.ProcessLauncherServiceImpl;
-import org.apache.ace.processlauncher.test.impl.TestUtil;
-import org.apache.felix.dm.DependencyManager;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 
+import junit.framework.AssertionFailedError;
+
 /**
  * Integration test for {@link ProcessLauncherService}.
  */
-@RunWith(JUnit4TestRunner.class)
-public class ProcessLauncherRespawnIntegrationTest {
+public class ProcessLauncherRespawnIntegrationTest extends IntegrationTestBase {
 
-    @Inject
-    private BundleContext m_context;
-    private DependencyManager m_dependencyManager;
-
-    /**
-     * @return the PAX-exam configuration, never <code>null</code>.
-     */
-    @Configuration
-    public Option[] config() {
-        // Craft the correct options for PAX-URL wrap: to use Bnd and make a correct bundle...
-        String bndOptions =
-            String.format("Bundle-Activator=%1$s.osgi.Activator&" + "Export-Package=%1$s,%1$s.util&"
-                + "Private-Package=%1$s.impl,%1$s.osgi", ProcessLauncherService.class.getPackage().getName());
-
-        return options(cleanCaches(),
-            junitBundles(),
-            provision(mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.log").version("1.0.1")), //
-            provision(mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.dependencymanager")
-                .version("3.0.0")), //
-            provision(mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.configadmin")
-                .version("1.2.8")), //
-            provision("wrap:assembly:./target/classes$" + bndOptions) //
-        );
-    }
-
-    /**
-     * Common set up for each test case.
-     */
-    @Before
-    public void setUp() {
-        m_dependencyManager = new DependencyManager(m_context);
-    }
+    private final BundleContext m_context = FrameworkUtil.getBundle(getClass()).getBundleContext();
 
     /**
      * Tests that a new process will be respawned if its exit value is non-equal to two.
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testRespawnProcessWithExitValueTwoOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -122,7 +71,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testRespawnProcessWithExitValueZeroOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -143,7 +91,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testRespawnProcessWithProcessStreamListenersOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -171,7 +118,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testRespawnProcessWithProcessLifecycleListenersOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -242,7 +188,7 @@
             launchConfig.put("executable.processLifecycleListener", lcFilter);
         }
 
-        configureFactory(ProcessLauncherServiceImpl.PID, launchConfig);
+        configureFactory(ProcessLauncherService.PID, launchConfig);
 
         // Wait until the processes are done...
         sleep(1000);
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/ProcessLauncherServiceIntegrationTest.java b/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherServiceIntegrationTest.java
similarity index 85%
rename from org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/ProcessLauncherServiceIntegrationTest.java
rename to org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherServiceIntegrationTest.java
index c80d9f3..34cde2c 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/ProcessLauncherServiceIntegrationTest.java
+++ b/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherServiceIntegrationTest.java
@@ -16,84 +16,36 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ace.processlauncher.test.osgi;
+package org.apache.ace.processlauncher.itest;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.fail;
-import static org.apache.ace.processlauncher.test.impl.TestUtil.getOSName;
-import static org.apache.ace.processlauncher.test.impl.TestUtil.sleep;
-import static org.ops4j.pax.exam.CoreOptions.cleanCaches;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-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.apache.ace.processlauncher.itest.TestUtil.getOSName;
+import static org.apache.ace.processlauncher.itest.TestUtil.sleep;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Properties;
 
-import javax.inject.Inject;
-
-import junit.framework.AssertionFailedError;
-
+import org.apache.ace.it.IntegrationTestBase;
 import org.apache.ace.processlauncher.LaunchConfiguration;
 import org.apache.ace.processlauncher.ProcessLauncherService;
 import org.apache.ace.processlauncher.ProcessStreamListener;
-import org.apache.ace.processlauncher.impl.ProcessLauncherServiceImpl;
-import org.apache.felix.dm.DependencyManager;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.apache.felix.dm.Component;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 
+import junit.framework.AssertionFailedError;
+
 /**
  * Integration test for {@link ProcessLauncherService}.
  */
-@RunWith(JUnit4TestRunner.class)
-public class ProcessLauncherServiceIntegrationTest {
+public class ProcessLauncherServiceIntegrationTest extends IntegrationTestBase {
 
-    @Inject
-    private BundleContext m_context;
-    @Inject
+    private final BundleContext m_context = FrameworkUtil.getBundle(getClass()).getBundleContext();
     private ProcessLauncherService m_instance;
-    private DependencyManager m_dependencyManager;
-
-    /**
-     * @return the PAX-exam configuration, never <code>null</code>.
-     */
-    @Configuration
-    public Option[] config() {
-        // Craft the correct options for PAX-URL wrap: to use Bnd and make a correct bundle...
-        String bndOptions =
-            String.format("Bundle-Activator=%1$s.osgi.Activator&" + "Export-Package=%1$s,%1$s.util&"
-                + "Private-Package=%1$s.impl,%1$s.osgi", ProcessLauncherService.class.getPackage().getName());
-
-        return options(cleanCaches(),
-            junitBundles(),
-            provision(mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.log").version("1.0.1")), //
-            provision(mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.dependencymanager")
-                .version("3.0.0")), //
-            provision(mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.configadmin")
-                .version("1.2.8")), //
-            provision("wrap:assembly:./target/classes$" + bndOptions) //
-        );
-    }
-
-    /**
-     * Common set up for each test case.
-     */
-    @Before
-    public void setUp() {
-        m_dependencyManager = new DependencyManager(m_context);
-    }
 
     /**
      * Tests that manually providing a launch configuration to a {@link ProcessLauncherService} will
@@ -101,7 +53,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testLaunchProcessWithExitValueOneOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -136,12 +87,11 @@
     }
 
     /**
-     * Tests that manually providing a launch configuration to a {@link ProcessLauncherServiceImpl}
+     * Tests that manually providing a launch configuration to a {@link ProcessLauncherService}
      * will cause a new process to be started and terminated.
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testLaunchProcessWithExitValueZeroOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -181,7 +131,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testLaunchProcessWithMultipleRegisteredProcessStreamListenerOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -233,7 +182,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testLaunchProcessWithoutRegisteredProcessStreamListenerOnUnixBasedHostsFail() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -282,7 +230,6 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
     public void testLaunchProcessWithRegisteredProcessStreamListenerOnUnixBasedHostsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -347,9 +294,8 @@
             extraFilter = String.format("%s(%s=%s)", extraFilter, key, value);
             props.setProperty(key, value);
         }
-
-        m_dependencyManager.add(m_dependencyManager.createComponent().setInterface(className, props)
-            .setImplementation(processStreamListener));
+        
+        m_context.registerService(className, processStreamListener, props);
 
         if (extraFilter.trim().isEmpty()) {
             return String.format("(%s=%s)", Constants.OBJECTCLASS, className);
@@ -391,6 +337,15 @@
         return instance;
     }
 
+    @Override
+    protected Component[] getDependencies() {
+        return new Component[] {
+            createComponent()
+                .setImplementation(this)
+                .add(createServiceDependency().setService(ProcessLauncherService.class).setRequired(true))
+        };
+    }
+
     /**
      * Creates a factory configuration with the given properties, just like {@link #configure}.
      * 
diff --git a/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/TestUtil.java b/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/TestUtil.java
new file mode 100644
index 0000000..63f5300
--- /dev/null
+++ b/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/TestUtil.java
@@ -0,0 +1,125 @@
+/*
+ * 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.ace.processlauncher.itest;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * Provides some convenience methods commonly used in the unit tests of ace-launcher.
+ */
+public final class TestUtil {
+
+    /**
+     * Creates a new {@link TestUtil} instance, not used.
+     */
+    private TestUtil() {
+        // No-op
+    }
+
+    /**
+     * Returns the name of the running operating system.
+     * 
+     * @return the OS-name, in lower case.
+     */
+    public static String getOSName() {
+        return System.getProperty("os.name", "").toLowerCase();
+    }
+
+    /**
+     * Obtains the file denoted by the given path as resource, and treats it as properties file.
+     * 
+     * @param path the path to the resource to load, cannot be <code>null</code>.
+     * @return a properties file, never <code>null</code>.
+     * @throws IOException in case of I/O problems reading the properties file;
+     * @throws RuntimeException in case the given path is not a valid resource file.
+     */
+    public static Properties getProperties(String path) throws IOException {
+        InputStream is = TestUtil.class.getResourceAsStream(path);
+        if (is == null) {
+            throw new RuntimeException("File not found: " + path);
+        }
+        try {
+            Properties props = new Properties();
+            props.load(is);
+            return props;
+        }
+        finally {
+            is.close();
+        }
+    }
+
+    /**
+     * Sleeps for a given amount of milliseconds.
+     * 
+     * @param delayInMillis the delay to sleep, in milliseconds.
+     */
+    public static void sleep(int delayInMillis) {
+        try {
+            Thread.sleep(delayInMillis);
+        }
+        catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        }
+    }
+
+    /**
+     * Reads an entire file denoted by the given argument and returns its content as string.
+     * 
+     * @param file the file to read, cannot be <code>null</code>.
+     * @return the file contents, never <code>null</code>.
+     * @throws IOException in case of I/O problems reading the file.
+     */
+    public static String slurpFile(File file) throws IOException {
+        StringBuilder sb = new StringBuilder();
+        FileReader fr = new FileReader(file);
+        int ch;
+        try {
+            while ((ch = fr.read()) >= 0) {
+                sb.append((char) ch);
+            }
+        }
+        finally {
+            fr.close();
+        }
+        return sb.toString();
+    }
+    
+    /**
+     * Creates a unique temporary directory.
+     * 
+     * @return the unique temporary directory
+     */
+    public static File createTempDir() throws IOException {
+
+        File baseDir = new File(System.getProperty("java.io.tmpdir"));
+        String baseName = System.currentTimeMillis() + "-";
+
+        for (int counter = 0; counter < 1000; counter++) {
+            File tempDir = new File(baseDir, baseName + counter);
+            if (tempDir.mkdir()) {
+                return tempDir;
+            }
+        }
+        throw new IOException("Failed to create tmp directory");
+    }
+}
diff --git a/org.apache.ace.processlauncher/bnd.bnd b/org.apache.ace.processlauncher/bnd.bnd
index 6716e2c..395bf7e 100644
--- a/org.apache.ace.processlauncher/bnd.bnd
+++ b/org.apache.ace.processlauncher/bnd.bnd
@@ -1,25 +1,17 @@
--buildpath: ${^-buildpath},\
+-buildpath: \
+	${^-buildpath},\
 	org.apache.felix.dependencymanager,\
 	org.mockito.mockito-all,\
 	osgi.core,\
 	osgi.cmpn,\
-	junit;version=4.8.2,\
-	javax.inject;version=1.0.0,\
-	org.ops4j.pax.exam;version=2.3.0,\
-	pax-exam-container-native;version=2.3.0,\
-	org.ops4j.pax.exam.inject;version=2.3.0,\
-	pax-exam-junit4;version=2.3.0,\
-	pax-exam-link-mvn;version=2.3.0,\
-	org.ops4j.pax.url.mvn;version=1.3.5,\
-	org.ops4j.pax.url.assembly;version=1.3.5,\
-	org.ops4j.pax.url.link;version=1.3.5,\
-	org.ops4j.pax.url.wrap;version=1.3.5,\
-	slf4j.simple,\
 	org.apache.ace.test;version=latest
-Private-Package: org.apache.ace.processlauncher.osgi,\
+Private-Package: \
+	org.apache.ace.processlauncher.osgi,\
 	org.apache.ace.processlauncher.impl
-Bundle-Activator: org.apache.ace.processlauncher.osgi.Activator
-Export-Package: org.apache.ace.processlauncher,\
+Bundle-Activator: \
+	org.apache.ace.processlauncher.osgi.Activator
+Export-Package: \
+	org.apache.ace.processlauncher,\
 	org.apache.ace.processlauncher.util
 Bundle-Version: 1.0.1
 Bundle-Name: Apache ACE ProcessLauncher
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationFactoryTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationFactoryTest.java
index 57c7276..b374c5f 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationFactoryTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationFactoryTest.java
@@ -18,23 +18,29 @@
  */
 package org.apache.ace.processlauncher.test.impl;
 
-import java.util.Properties;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.fail;
 
-import junit.framework.TestCase;
+import java.util.Properties;
 
 import org.apache.ace.processlauncher.LaunchConfiguration;
 import org.apache.ace.processlauncher.impl.LaunchConfigurationFactory;
 import org.osgi.service.cm.ConfigurationException;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link LaunchConfigurationFactory}.
  */
-public final class LaunchConfigurationFactoryTest extends TestCase {
+public final class LaunchConfigurationFactoryTest {
 
     private static void assertArrayEquals(Object[] expected, Object[] actual) {
-        assertEquals("Array length mismatch!", expected.length, actual.length);
+        assertEquals(expected.length, actual.length, "Array length mismatch!");
         for (int i = 0; i < expected.length; i++) {
-            assertEquals("Array element (" + i + ") mismatch!", expected[i], actual[i]);
+            assertEquals(expected[i], actual[i], "Array element (" + i + ") mismatch!");
         }
     }
 
@@ -43,6 +49,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationBasedOnPropertiesFileOk() throws Exception {
         Properties props = TestUtil.getProperties("launch.properties");
         assertNotNull(props);
@@ -62,6 +69,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithCompleteConfigOk() throws ConfigurationException {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "1");
@@ -85,6 +93,7 @@
     /**
      * Tests that an incomplete configuration causes an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithEmptyExecutableNameFail() {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "1");
@@ -104,6 +113,7 @@
     /**
      * Tests that an incomplete configuration causes an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithInvalidInstanceCountFail() {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "0");
@@ -125,6 +135,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithInvalidProcessStreamListenerFilterFail() throws ConfigurationException {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "1");
@@ -167,6 +178,7 @@
     /**
      * Tests that an incomplete configuration causes an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithNonNumericInstanceCountFail() {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "foo");
@@ -188,6 +200,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithNullConfigFail() throws ConfigurationException {
         try {
             LaunchConfigurationFactory.create(null);
@@ -201,6 +214,7 @@
     /**
      * Tests that an incomplete configuration causes an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithNullExecutableArgumentsFail() {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "1");
@@ -219,6 +233,7 @@
     /**
      * Tests that an incomplete configuration causes an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithNullExecutableNameFail() {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.INSTANCE_COUNT, "1");
@@ -237,6 +252,7 @@
     /**
      * Tests that an incomplete configuration causes an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateWithNullInstanceCountFail() {
         Properties props = new Properties();
         props.put(LaunchConfigurationFactory.EXECUTABLE_NAME, "/path/to/foo");
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationTest.java
index 46b6065..a965036 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationTest.java
@@ -18,19 +18,27 @@
  */
 package org.apache.ace.processlauncher.test.impl;
 
-import junit.framework.TestCase;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 import org.apache.ace.processlauncher.LaunchConfiguration;
 import org.apache.ace.processlauncher.impl.LaunchConfigurationImpl;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link LaunchConfigurationImpl}.
  */
-public final class LaunchConfigurationTest extends TestCase {
+public final class LaunchConfigurationTest {
 
     /**
      * Test that creating a valid {@link LaunchConfigurationImpl} works.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationOk() {
         LaunchConfiguration launchConfig = new LaunchConfigurationImpl(1, "/path/to/foo", new String[0], null, false);
         assertNotNull(launchConfig);
@@ -40,6 +48,7 @@
      * Test that the {@link LaunchConfigurationImpl} constructor validates the executable name
      * properly.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationWithEmptyExecutableNameFail() {
         try {
             new LaunchConfigurationImpl(1, "", new String[0], null, false);
@@ -54,6 +63,7 @@
      * Test that the {@link LaunchConfigurationImpl} constructor validates the instance count
      * properly.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationWithNegativeInstanceCountFail() {
         try {
             new LaunchConfigurationImpl(-1, "/path/to/foo", new String[0], null, false);
@@ -68,6 +78,7 @@
      * Test that the {@link LaunchConfigurationImpl} constructor validates the executable arguments
      * properly.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationWithNullExecutableArgsFail() {
         try {
             new LaunchConfigurationImpl(1, "/path/to/foo", null, null, false);
@@ -82,6 +93,7 @@
      * Test that the {@link LaunchConfigurationImpl} constructor validates the executable name
      * properly.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationWithNullExecutableNameFail() {
         try {
             new LaunchConfigurationImpl(1, null, new String[0], null, false);
@@ -96,6 +108,7 @@
      * Test that the {@link LaunchConfigurationImpl} constructor validates the instance count
      * properly.
      */
+    @Test(groups = { UNIT })
     public void testCreateLaunchConfigurationWithZeroInstanceCountFail() {
         try {
             new LaunchConfigurationImpl(0, "/path/to/foo", new String[0], null, false);
@@ -110,6 +123,7 @@
      * Test that the {@link LaunchConfigurationImpl#getCommandLine()} method works properly when one
      * executable arguments are given.
      */
+    @Test(groups = { UNIT })
     public void testGetCommandLineWithOneArgumentsOk() {
         LaunchConfiguration launchConfig =
             new LaunchConfigurationImpl(1, "/path/to/foo", new String[] { "-bar" }, null, false);
@@ -126,6 +140,7 @@
      * Test that the {@link LaunchConfigurationImpl#getCommandLine()} method works properly when no
      * executable arguments are given.
      */
+    @Test(groups = { UNIT })
     public void testGetCommandLineWithoutArgumentsOk() {
         LaunchConfiguration launchConfig =
             new LaunchConfigurationImpl(1, "cwd", "/path/to/foo", new String[0], 0, "(foo=bar)", "(qux=quu)", false);
@@ -144,6 +159,7 @@
      * Test that the {@link LaunchConfigurationImpl#getCommandLine()} method works properly when two
      * executable arguments are given.
      */
+    @Test(groups = { UNIT })
     public void testGetCommandLineWithTwoArgumentsOk() {
         LaunchConfiguration launchConfig =
             new LaunchConfigurationImpl(1, "/path/to/foo", new String[] { "-qux", "-bar" }, null, true);
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherServiceImplTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherServiceImplTest.java
index e9912c3..34e4821 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherServiceImplTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherServiceImplTest.java
@@ -18,14 +18,17 @@
  */
 package org.apache.ace.processlauncher.test.impl;
 
+import static org.apache.ace.test.utils.TestUtils.UNIT;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
 
 import java.util.Dictionary;
 import java.util.Properties;
 
-import junit.framework.TestCase;
-
 import org.apache.ace.processlauncher.impl.LaunchConfigurationFactory;
 import org.apache.ace.processlauncher.impl.ProcessLauncherServiceImpl;
 import org.apache.ace.processlauncher.impl.ProcessManager;
@@ -33,11 +36,13 @@
 import org.apache.ace.test.utils.TestUtils;
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.log.LogService;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link ProcessLauncherServiceImpl}.
  */
-public class ProcessLauncherServiceImplTest extends TestCase {
+public class ProcessLauncherServiceImplTest {
 
     private ProcessLauncherServiceImpl m_service;
     private Dictionary<Object, Object> m_launchConfig;
@@ -48,6 +53,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testAddConfigurationWorksOk() throws ConfigurationException {
         final String pid = "existing-pid";
 
@@ -62,6 +68,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testDeleteExistingConfigurationOk() throws ConfigurationException {
         final String pid = "existing-pid";
 
@@ -75,6 +82,7 @@
     /**
      * Tests that deleting a non-existing launch configuration doesn't cause an exception.
      */
+    @Test(groups = { UNIT })
     public void testDeleteNonExistingConfigurationOk() {
         m_service.deleted("non-existing-pid");
     }
@@ -82,6 +90,7 @@
     /**
      * Tests that the getName method doesn't return <code>null</code>.
      */
+    @Test(groups = { UNIT })
     public void testGetNameOk() {
         assertNotNull(m_service.getName());
     }
@@ -91,6 +100,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testGetRunningProcessCountOk() throws Exception {
         final String pid = "existing-pid";
 
@@ -104,6 +114,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testReplacingConfigurationWorksOk() throws ConfigurationException {
         final String pid = "existing-pid";
 
@@ -122,6 +133,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testShutdownRemovesAllConfigurationsOk() throws Exception {
         assertEquals(0, m_service.getLaunchConfigurationCount());
 
@@ -141,6 +153,7 @@
      * 
      * @throws ConfigurationException not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testUpdateConfigurationWorksOk() throws ConfigurationException {
         final String pid = "existing-pid";
 
@@ -158,7 +171,7 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Override
+    @BeforeMethod
     protected void setUp() throws Exception {
         m_service = new ProcessLauncherServiceImpl();
         m_service.setLogger(TestUtils.createNullObject(LogService.class));
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherTest.java
index 6a9ee3e..5b8a65e 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherTest.java
@@ -20,6 +20,13 @@
 
 import static org.apache.ace.processlauncher.test.impl.TestUtil.getOSName;
 import static org.apache.ace.processlauncher.test.impl.TestUtil.sleep;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -28,19 +35,18 @@
 import java.io.OutputStream;
 import java.util.Properties;
 
-import junit.framework.TestCase;
-
 import org.apache.ace.processlauncher.LaunchConfiguration;
 import org.apache.ace.processlauncher.ProcessLifecycleListener;
 import org.apache.ace.processlauncher.ProcessStreamListener;
 import org.apache.ace.processlauncher.impl.LaunchConfigurationImpl;
 import org.apache.ace.processlauncher.impl.ProcessLauncher;
 import org.apache.ace.processlauncher.util.InputStreamRedirector;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link ProcessLauncher}.
  */
-public class ProcessLauncherTest extends TestCase {
+public class ProcessLauncherTest {
 
     /**
      * Tests that an existing executable (Java) can be called with valid arguments and its output
@@ -48,6 +54,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallAlreadyRunningProcessCausesExceptionFail() throws Exception {
         String execName = determineJavaExecutable();
 
@@ -71,6 +78,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testLifecycleMethodsAreCalledOk() throws Exception {
         String execName = determineJavaExecutable();
 
@@ -95,6 +103,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallCleanupOnRunningProcessFails() throws Exception {
         String execName = determineJavaExecutable();
 
@@ -119,6 +128,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallCleanupOnTerminatedProcessOk() throws Exception {
         String execName = determineJavaExecutable();
 
@@ -139,6 +149,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallExistingExecutableWithoutArgumentOk() throws Exception {
         String execName = determineJavaExecutable();
 
@@ -150,7 +161,7 @@
         Integer exitValue = launcher.waitForTermination();
 
         assertNotNull(exitValue);
-        assertEquals(0, exitValue.intValue());
+        assertEquals(1, exitValue.intValue());
         // Both methods should return the same exit value!
         assertEquals(exitValue, launcher.getExitValue());
 
@@ -160,7 +171,7 @@
 
         // Make sure the test doesn't fail when the usage text is translated or
         // something...
-        assertTrue(stdout, stdout.contains("Usage: java"));
+        assertTrue(stdout.contains("Usage: java"), stdout);
     }
 
     /**
@@ -169,6 +180,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallExistingExecutableWithUnknownArgumentsOk() throws Exception {
         String execName = determineJavaExecutable();
         String execArgs = "-nonExistingArg";
@@ -190,6 +202,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallExistingExecutableWithValidArgumentOk() throws Exception {
         String execName = determineJavaExecutable();
         String execArgs = "-version";
@@ -210,7 +223,7 @@
 
         // Make sure the test doesn't fail when the usage text is translated or
         // something...
-        assertTrue(stdout, stdout.contains("java version"));
+        assertTrue(stdout.contains("java version"), stdout);
     }
 
     /**
@@ -218,6 +231,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testCallNonExistingExecutableOk() throws Exception {
         String execName = "/path/to/java";
         String execArgs = "-version";
@@ -237,6 +251,7 @@
      * Tests that attempting to create a new {@link ProcessLauncher} without a valid launch
      * configuration yields an exception.
      */
+    @Test(groups = { UNIT })
     public void testCreateProcessLauncherWithoutLaunchConfigurationFail() {
         try {
             new ProcessLauncher(null);
@@ -251,6 +266,7 @@
      * Tests that attempting to obtain the exit value without a launched process yields a null
      * value.
      */
+    @Test(groups = { UNIT })
     public void testGetExitValueWithoutLaunchedProcessReturnsNull() {
         String execName = determineJavaExecutable();
         String execArgs = "-version";
@@ -266,6 +282,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testInteractWithProcessOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -304,6 +321,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testInteractWithProcessThroughArgumentsOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -341,6 +359,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testProcessStdinIsProperlyClosedOk() throws Exception {
         // Test will not work on Windows!
         if (getOSName().contains("windows")) {
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessManagerImplTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessManagerImplTest.java
index 9b9b719..b55cf40 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessManagerImplTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessManagerImplTest.java
@@ -21,22 +21,25 @@
 import static org.apache.ace.processlauncher.test.impl.TestUtil.createTempDir;
 import static org.apache.ace.processlauncher.test.impl.TestUtil.getOSName;
 import static org.apache.ace.processlauncher.test.impl.TestUtil.sleep;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 
-import junit.framework.TestCase;
-
 import org.apache.ace.processlauncher.LaunchConfiguration;
 import org.apache.ace.processlauncher.impl.LaunchConfigurationImpl;
 import org.apache.ace.processlauncher.impl.ProcessManager;
 import org.apache.ace.processlauncher.impl.ProcessManagerImpl;
 import org.apache.ace.test.utils.TestUtils;
 import org.osgi.service.log.LogService;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link ProcessManager}.
  */
-public class ProcessManagerImplTest extends TestCase {
+public class ProcessManagerImplTest {
     
     private ProcessManagerImpl m_processManager;
 
@@ -45,6 +48,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testLaunchProcessOnUnixDerivativeOk() throws Exception {
         // This test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -77,6 +81,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testLaunchProcessOnWindowsOk() throws Exception {
         // This test will only work on Windows!
         if (!getOSName().contains("windows")) {
@@ -109,6 +114,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testRespawnProcessOnUnixDerivativeOk() throws Exception {
         // This test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -146,7 +152,7 @@
         assertEquals(processCountBefore, m_processManager.getRunningProcessesCount());
 
         String testResult = TestUtil.slurpFile(tmpFile);
-        assertTrue(testResult, testResult.matches("(?s)^0\n1\n2\n$"));
+        assertTrue(testResult.matches("(?s)^0\n1\n2\n$"), testResult);
     }
 
     /**
@@ -154,6 +160,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testShutdownOnUnixDerivativeOk() throws Exception {
         // This test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -187,6 +194,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testShutdownOnWindowsOk() throws Exception {
         // This test will only work on Windows!
         if (!getOSName().contains("windows")) {
@@ -220,6 +228,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testTerminateProcessOnUnixDerivativeOk() throws Exception {
         // This test will not work on Windows!
         if (getOSName().contains("windows")) {
@@ -252,6 +261,7 @@
      * 
      * @throws Exception not part of this test case.
      */
+    @Test(groups = { UNIT })
     public void testTerminateProcessOnWindowsOk() throws Exception {
         // This test will not work on Windows!
         if (!getOSName().contains("windows")) {
@@ -282,7 +292,7 @@
     /**
      * Set up for this test case.
      */
-    @Override
+    @BeforeTest
     protected void setUp() {
         m_processManager = new ProcessManagerImpl();
         TestUtils.configureObject(m_processManager, LogService.class);
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/StringSplitterTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/StringSplitterTest.java
index 60ef495..033a7f7 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/StringSplitterTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/StringSplitterTest.java
@@ -19,19 +19,21 @@
 package org.apache.ace.processlauncher.test.impl;
 
 import static org.apache.ace.processlauncher.impl.StringSplitter.split;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+import static org.testng.Assert.assertEquals;
 
 import org.apache.ace.processlauncher.impl.StringSplitter;
-
-import junit.framework.TestCase;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link StringSplitter}.
  */
-public class StringSplitterTest extends TestCase {
+public class StringSplitterTest {
 
     /**
      * Test double quoted command line argument.
      */
+    @Test(groups = { UNIT })
     public void testDoubleQuotedCommandLineArgumentOk() {
         String[] result =
             split("\\\"fwOption=org.osgi.framework.system.packages.extra=org.w3c.dom.tral,org.w3c.dom.html,org.w3c.dom.ranges,sun.reflect,org.osgi.service.deploymentadmin;version=\"1.0\",org.osgi.service.deploymentadmin.spi;version=\"1.0\",org.osgi.service.cm;version=\"1.3\",org.osgi.service.event;version=\"1.2\",org.osgi.service.log;version=\"1.3\",org.osgi.service.metatype;version=\"1.1\",org.apache.ace.log;version=\"0.8.0\"\\\"");
@@ -43,6 +45,7 @@
     /**
      * Test double quoted string.
      */
+    @Test(groups = { UNIT })
     public void testDoubleQuotedStringOk() {
         String[] result = split("\"hello world\"");
         assertArrayEquals(new String[] { "\"hello world\"" }, result);
@@ -51,6 +54,7 @@
     /**
      * Test double quoted string with trailing text.
      */
+    @Test(groups = { UNIT })
     public void testDoubleQuotedStringWithTrailingTextOk() {
         String[] result = split("\"hello world\" foo-bar");
         assertArrayEquals(new String[] { "\"hello world\"", "foo-bar" }, result);
@@ -59,6 +63,7 @@
     /**
      * Test double quoted words.
      */
+    @Test(groups = { UNIT })
     public void testDoubleQuotedWordsOk() {
         String[] result = split("\"hello\" \"world\"");
         assertArrayEquals(new String[] { "\"hello\"", "\"world\"" }, result);
@@ -67,6 +72,7 @@
     /**
      * Test double quoted words omit quotes.
      */
+    @Test(groups = { UNIT })
     public void testDoubleQuotedWordsOmitQuotesOk() {
         String[] result = split("\"hello\" \"world\"", false /* includeQuotes */);
         assertArrayEquals(new String[] { "hello", "world" }, result);
@@ -75,6 +81,7 @@
     /**
      * Test escaped backslash in string.
      */
+    @Test(groups = { UNIT })
     public void testEscapedBackslashInStringOk() {
         String[] result = split("hello\\\\ world");
         assertArrayEquals(new String[] { "hello\\", "world" }, result);
@@ -83,6 +90,7 @@
     /**
      * Test escaped backslash string in double quotes.
      */
+    @Test(groups = { UNIT })
     public void testEscapedBackslashStringInDoubleQuotesOk() {
         String[] result = split("\"hello\\\\ world\"");
         assertArrayEquals(new String[] { "\"hello\\ world\"" }, result);
@@ -91,6 +99,7 @@
     /**
      * Test escaped double quoted in single quoted string.
      */
+    @Test(groups = { UNIT })
     public void testEscapedDoubleQuotedInSingleQuotedStringOk() {
         String[] result = split("'\"hello world\"'");
         assertArrayEquals(new String[] { "'\"hello world\"'" }, result);
@@ -99,6 +108,7 @@
     /**
      * Test escaped double quoted string.
      */
+    @Test(groups = { UNIT })
     public void testEscapedDoubleQuotedStringOk() {
         String[] result = split("\\\"hello world\\\"");
         assertArrayEquals(new String[] { "\"hello", "world\"" }, result);
@@ -107,6 +117,7 @@
     /**
      * Test escaped key value pair.
      */
+    @Test(groups = { UNIT })
     public void testEscapedKeyValuePairOk() {
         String[] result = split("key=\\'qux qoo\\'");
         assertArrayEquals(new String[] { "key='qux", "qoo'" }, result);
@@ -115,6 +126,7 @@
     /**
      * Test escaped single quoted in double quoted string.
      */
+    @Test(groups = { UNIT })
     public void testEscapedSingleQuotedInDoubleQuotedStringOk() {
         String[] result = split("\"\\'hello world\\'\"");
         assertArrayEquals(new String[] { "\"'hello world'\"" }, result);
@@ -123,6 +135,7 @@
     /**
      * Test escaped single quoted string.
      */
+    @Test(groups = { UNIT })
     public void testEscapedSingleQuotedStringOk() {
         String[] result = split("\\'hello world\\'");
         assertArrayEquals(new String[] { "\'hello", "world\'" }, result);
@@ -131,6 +144,7 @@
     /**
      * Test escaped space string in double quotes.
      */
+    @Test(groups = { UNIT })
     public void testEscapedSpaceStringInDoubleQuotesOk() {
         String[] result = split("\"hello\\ world\"");
         assertArrayEquals(new String[] { "\"hello world\"" }, result);
@@ -139,6 +153,7 @@
     /**
      * Test escaped space string.
      */
+    @Test(groups = { UNIT })
     public void testEscapedSpaceStringOk() {
         String[] result = split("hello\\ world");
         assertArrayEquals(new String[] { "hello world" }, result);
@@ -147,6 +162,7 @@
     /**
      * Test key value pair in double quotes.
      */
+    @Test(groups = { UNIT })
     public void testKeyValuePairInDoubleQuotesOk() {
         String[] result = split("\"key=\\\"qux qoo\\\"\"");
         assertArrayEquals(new String[] { "\"key=\"qux qoo\"\"" }, result);
@@ -155,6 +171,7 @@
     /**
      * Test key value pair.
      */
+    @Test(groups = { UNIT })
     public void testKeyValuePairOk() {
         String[] result = split("key='qux qoo'");
         assertArrayEquals(new String[] { "key='qux qoo'" }, result);
@@ -163,6 +180,7 @@
     /**
      * Test os gi import package value.
      */
+    @Test(groups = { UNIT })
     public void testOSGiImportPackageValueOk() {
         String[] result = split("\"org.foo.bar;version=\"1\",org.qux.quu;version=\"2\"\"");
         assertArrayEquals(new String[] { "\"org.foo.bar;version=\"1\",org.qux.quu;version=\"2\"\"" }, result);
@@ -171,6 +189,7 @@
     /**
      * Test single quoted string.
      */
+    @Test(groups = { UNIT })
     public void testSingleQuotedStringOk() {
         String[] result = split("'hello world'");
         assertArrayEquals(new String[] { "'hello world'" }, result);
@@ -179,6 +198,7 @@
     /**
      * Test single quoted words.
      */
+    @Test(groups = { UNIT })
     public void testSingleQuotedWordsOk() {
         String[] result = split("'hello' 'world'");
         assertArrayEquals(new String[] { "'hello'", "'world'" }, result);
@@ -187,6 +207,7 @@
     /**
      * Test single quoted words omit quotes.
      */
+    @Test(groups = { UNIT })
     public void testSingleQuotedWordsOmitQuotesOk() {
         String[] result = split("'hello' 'world'", false /* includeQuotes */);
         assertArrayEquals(new String[] { "hello", "world" }, result);
@@ -195,6 +216,7 @@
     /**
      * Test split empty string.
      */
+    @Test(groups = { UNIT })
     public void testSplitEmptyStringOk() {
         String[] result = split("");
         assertArrayEquals(new String[0], result);
@@ -203,6 +225,7 @@
     /**
      * Test split null value.
      */
+    @Test(groups = { UNIT })
     public void testSplitNullValueOk() {
         String[] result = split(null);
         assertArrayEquals(new String[0], result);
@@ -211,6 +234,7 @@
     /**
      * Test split on tab.
      */
+    @Test(groups = { UNIT })
     public void testSplitOnTabOk() {
         String[] result = split("hello\tworld");
         assertArrayEquals(new String[] { "hello", "world" }, result);
@@ -219,6 +243,7 @@
     /**
      * Test split whitespaces only.
      */
+    @Test(groups = { UNIT })
     public void testSplitWhitespacesOnlyOk() {
         String[] result = split(" \t  ");
         assertArrayEquals(new String[0], result);
@@ -227,6 +252,7 @@
     /**
      * Test unquoted command line argument.
      */
+    @Test(groups = { UNIT })
     public void testUnquotedCommandLineArgumentOk() {
         String[] result =
             split("fwOption=org.osgi.framework.system.packages.extra=org.w3c.dom.tral,org.w3c.dom.html,org.w3c.dom.ranges,sun.reflect,org.osgi.service.deploymentadmin;version=\"1.0\",org.osgi.service.deploymentadmin.spi;version=\"1.0\",org.osgi.service.cm;version=\"1.3\",org.osgi.service.event;version=\"1.2\",org.osgi.service.log;version=\"1.3\",org.osgi.service.metatype;version=\"1.1\",org.apache.ace.log;version=\"0.8.0\"");
@@ -238,6 +264,7 @@
     /**
      * Test unquoted string.
      */
+    @Test(groups = { UNIT })
     public void testUnquotedStringOk() {
         String[] result = split("hello world");
         assertArrayEquals(new String[] { "hello", "world" }, result);
diff --git a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/util/InputStreamRedirectorTest.java b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/util/InputStreamRedirectorTest.java
index fd7eae3..412f1a6 100644
--- a/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/util/InputStreamRedirectorTest.java
+++ b/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/util/InputStreamRedirectorTest.java
@@ -18,14 +18,15 @@
  */
 package org.apache.ace.processlauncher.test.util;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertTrue;
 import static org.apache.ace.processlauncher.test.impl.TestUtil.sleep;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,8 +35,8 @@
 import java.io.OutputStream;
 
 import org.apache.ace.processlauncher.util.InputStreamRedirector;
-import org.junit.Test;
 import org.mockito.Mockito;
+import org.testng.annotations.Test;
 
 /**
  * Test cases for {@link InputStreamRedirector}.
@@ -47,7 +48,7 @@
      * 
      * @throws IOException not part of this test case.
      */
-    @Test
+    @Test(groups = { UNIT })
     public void testInputStreamEOFCausesOutputStreamToBeClosedOk() throws IOException {
         InputStream myIS = new ByteArrayInputStream("hello world!".getBytes());
         OutputStream mockOS = mock(OutputStream.class);
@@ -63,7 +64,7 @@
      * 
      * @throws IOException not part of this test case.
      */
-    @Test
+    @Test(groups = { UNIT })
     public void testInputStreamIsVerbatimelyCopiedToOutputStreamOk() throws IOException {
         String input = "hello world!";
 
@@ -81,7 +82,7 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
+    @Test(groups = { UNIT })
     public void testInterruptRedirectorOk() throws Exception {
         InputStream myIS = createBlockingInputStream();
         OutputStream myOS = mock(OutputStream.class);
@@ -108,7 +109,7 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
+    @Test(groups = { UNIT })
     public void testRecoverFromExceptionInInputStreamWithoutOutputStreamOk() throws Exception {
         InputStream myIS = createExceptionThrowingInputStream();
         ByteArrayOutputStream myOS = new ByteArrayOutputStream();
@@ -130,7 +131,7 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
+    @Test(groups = { UNIT })
     public void testRecoverFromExceptionInInputStreamWithOutputStreamOk() throws Exception {
         InputStream myIS = createExceptionThrowingInputStream();
         OutputStream myOS = mock(OutputStream.class);
@@ -148,7 +149,7 @@
      * 
      * @throws Exception not part of this test case.
      */
-    @Test
+    @Test(groups = { UNIT })
     public void testWithoutOutputStreamOk() throws Exception {
         InputStream myIS = new ByteArrayInputStream("hello world!".getBytes());
 
diff --git a/org.apache.ace.test/src/org/apache/ace/test/utils/FileUtils.java b/org.apache.ace.test/src/org/apache/ace/test/utils/FileUtils.java
index 36b938f..78146dd 100644
--- a/org.apache.ace.test/src/org/apache/ace/test/utils/FileUtils.java
+++ b/org.apache.ace.test/src/org/apache/ace/test/utils/FileUtils.java
@@ -23,6 +23,8 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.channels.FileChannel;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
 
 public class FileUtils {
 
@@ -44,6 +46,18 @@
         return tempFile;
     }
 
+    public static File createEmptyBundle(File baseDirectory, String bsn) throws IOException {
+        File result = createTempFile(baseDirectory, ".jar");
+
+        Manifest m = new Manifest();
+        m.getMainAttributes().putValue("Bundle-ManifestVersion", "2");
+        m.getMainAttributes().putValue("Bundle-SymbolicName", bsn);
+        
+        try (FileOutputStream fos = new FileOutputStream(result); JarOutputStream jos = new JarOutputStream(fos, m)) {
+        }
+        return result;
+    }
+
     public static void copy(File input, File output) throws IOException {
         FileInputStream fis = new FileInputStream(input);
         FileOutputStream fos = new FileOutputStream(output);
diff --git a/org.apache.ace.verifier/bnd.bnd b/org.apache.ace.verifier/bnd.bnd
index 08e0653..d0cc878 100644
--- a/org.apache.ace.verifier/bnd.bnd
+++ b/org.apache.ace.verifier/bnd.bnd
@@ -3,9 +3,6 @@
 	osgi.cmpn;version=4.3.1,\
 	javax.servlet,\
 	org.apache.felix.dependencymanager,\
-	org.ops4j.pax.swissbox.tinybundles,\
-	org.ops4j.base.store,\
-	commons-logging,\
 	com.vaadin,\
 	org.apache.ace.authentication.api;version=latest,\
 	org.apache.ace.identification.api;version=latest,\
diff --git a/org.apache.ace.verifier/test/org/apache/ace/deployment/verifier/impl/VerifierTest.java b/org.apache.ace.verifier/test/org/apache/ace/deployment/verifier/impl/VerifierTest.java
index 0b65639..87d911e 100644
--- a/org.apache.ace.verifier/test/org/apache/ace/deployment/verifier/impl/VerifierTest.java
+++ b/org.apache.ace.verifier/test/org/apache/ace/deployment/verifier/impl/VerifierTest.java
@@ -37,113 +37,113 @@
 import org.testng.AssertJUnit;
 import org.testng.annotations.Test;
 
-@SuppressWarnings({"deprecation"})
+@SuppressWarnings({ "deprecation" })
 public class VerifierTest {
     @Test(groups = { UNIT })
-	public void testResolve() throws BundleException {
-		VerifierService verifier = new VerifierServiceImpl();
-		VerifyEnvironment env = verifier.createEnvironment(new HashMap<String, String>() {
-			{
-				put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, VerifierService.EE_1_6);
-				put(Constants.FRAMEWORK_OS_NAME, "macosx");
-				put(Constants.FRAMEWORK_OS_VERSION, "10.5");
-			}
-		}, new VerifyReporter() {
-			
-			public void reportWire(BundleRevision importer,
-					BundleRequirement reqirement, BundleRevision exporter,
-					BundleCapability capability) {
-				System.out.println("WIRE: " + importer + " - " + reqirement + " - " + capability + " -> " + exporter);
-			}
-			
-			public void reportLog(LogEntry logEntry) {
-				System.out.println("Log(" + logEntry.getTime() + "): " + logEntry.getLevel() + " " + logEntry.getMessage());
-				if (logEntry.getException() != null) {
-					logEntry.getException().printStackTrace();
-				}
-			}
-			
-			public void reportException(Exception ex) {
-				ex.printStackTrace();
-			}
-		});
-		Set<BundleRevision> bundles = new HashSet<BundleRevision>();
-		bundles.add(env.addBundle(0, new HashMap<String, String>(){
-			{
-				put(Constants.BUNDLE_MANIFESTVERSION, "2");
-				put(Constants.BUNDLE_SYMBOLICNAME, FelixConstants.SYSTEM_BUNDLE_SYMBOLICNAME);
-				put(Constants.EXPORT_PACKAGE, VerifierService.SYSTEM_PACKAGES + "," + VerifierService.JRE_1_6_PACKAGES);
-			}
-		}));
-		bundles.add(env.addBundle(1, new HashMap<String, String>() {
-			{
-				put(Constants.BUNDLE_MANIFESTVERSION, "2");
-				put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo");
-				put(Constants.IMPORT_PACKAGE, "org.foo, org.osgi.framework");
-			}
-		}));
-		bundles.add(env.addBundle(2, new HashMap<String, String>() {
-			{
-				put(Constants.BUNDLE_MANIFESTVERSION, "2");
-				put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo2");
-				put(Constants.EXPORT_PACKAGE, "org.foo" +
-						"");
-			}
-		}));
-		AssertJUnit.assertTrue(" Unable to resolve resolvable state.", env.verifyResolve(bundles, null, null));
-	}
-	
+    public void testResolve() throws BundleException {
+        VerifierService verifier = new VerifierServiceImpl();
+        VerifyEnvironment env = verifier.createEnvironment(new HashMap<String, String>() {
+            {
+                put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, VerifierService.EE_1_6);
+                put(Constants.FRAMEWORK_OS_NAME, "macosx");
+                put(Constants.FRAMEWORK_OS_VERSION, "10.5");
+            }
+        }, new VerifyReporter() {
+
+            public void reportWire(BundleRevision importer,
+                BundleRequirement reqirement, BundleRevision exporter,
+                BundleCapability capability) {
+                System.out.println("WIRE: " + importer + " - " + reqirement + " - " + capability + " -> " + exporter);
+            }
+
+            public void reportLog(LogEntry logEntry) {
+                System.out.println("Log(" + logEntry.getTime() + "): " + logEntry.getLevel() + " " + logEntry.getMessage());
+                if (logEntry.getException() != null) {
+                    logEntry.getException().printStackTrace();
+                }
+            }
+
+            public void reportException(Exception ex) {
+                ex.printStackTrace();
+            }
+        });
+        Set<BundleRevision> bundles = new HashSet<BundleRevision>();
+        bundles.add(env.addBundle(0, new HashMap<String, String>() {
+            {
+                put(Constants.BUNDLE_MANIFESTVERSION, "2");
+                put(Constants.BUNDLE_SYMBOLICNAME, FelixConstants.SYSTEM_BUNDLE_SYMBOLICNAME);
+                put(Constants.EXPORT_PACKAGE, VerifierService.SYSTEM_PACKAGES + "," + VerifierService.JRE_1_6_PACKAGES);
+            }
+        }));
+        bundles.add(env.addBundle(1, new HashMap<String, String>() {
+            {
+                put(Constants.BUNDLE_MANIFESTVERSION, "2");
+                put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo");
+                put(Constants.IMPORT_PACKAGE, "org.foo, org.osgi.framework");
+            }
+        }));
+        bundles.add(env.addBundle(2, new HashMap<String, String>() {
+            {
+                put(Constants.BUNDLE_MANIFESTVERSION, "2");
+                put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo2");
+                put(Constants.EXPORT_PACKAGE, "org.foo" +
+                    "");
+            }
+        }));
+        AssertJUnit.assertTrue(" Unable to resolve resolvable state.", env.verifyResolve(bundles, null, null));
+    }
+
     @Test(groups = { UNIT })
-	public void testResolveFail() throws BundleException {
-		VerifierService verifier = new VerifierServiceImpl();
-		VerifyEnvironment env = verifier.createEnvironment(new HashMap<String, String>(){
-			{
-				put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, VerifierService.EE_1_6);
-				put(Constants.FRAMEWORK_OS_NAME, "macosx");
-				put(Constants.FRAMEWORK_OS_VERSION, "10.5");
-			}
-		}, new VerifyReporter() {
-			
-			public void reportWire(BundleRevision importer,
-					BundleRequirement reqirement, BundleRevision exporter,
-					BundleCapability capability) {
-				System.out.println("WIRE: " + importer + " - " + reqirement + " - " + capability + " -> " + exporter);
-			}
-			
-			public void reportLog(LogEntry logEntry) {
-				System.out.println("Log(" + logEntry.getTime() + "): " + logEntry.getLevel() + " " + logEntry.getMessage());
-				if (logEntry.getException() != null) {
-					logEntry.getException().printStackTrace();
-				}
-			}
-			
-			public void reportException(Exception ex) {
-				ex.printStackTrace();
-			}
-		});
-		Set<BundleRevision> bundles = new HashSet<BundleRevision>();
-		bundles.add(env.addBundle(0, new HashMap<String, String>(){
-			{
-				put(Constants.BUNDLE_MANIFESTVERSION, "2");
-				put(Constants.BUNDLE_SYMBOLICNAME, FelixConstants.SYSTEM_BUNDLE_SYMBOLICNAME);
-				put(Constants.EXPORT_PACKAGE, VerifierService.SYSTEM_PACKAGES + "," + VerifierService.JRE_1_6_PACKAGES);
-			}
-		}));
-		bundles.add(env.addBundle(1, new HashMap<String, String>() {
-			{
-				put(Constants.BUNDLE_MANIFESTVERSION, "2");
-				put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo");
-				put(Constants.IMPORT_PACKAGE, "org.foo");
-			}
-		}));
-		bundles.add(env.addBundle(2, new HashMap<String, String>() {
-			{
-				put(Constants.BUNDLE_MANIFESTVERSION, "2");
-				put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo2");
-				put(Constants.EXPORT_PACKAGE, "org.foo2" +
-						"");
-			}
-		}));
-		AssertJUnit.assertFalse("Resolving unresolvable", env.verifyResolve(bundles, null, null));
-	}
+    public void testResolveFail() throws BundleException {
+        VerifierService verifier = new VerifierServiceImpl();
+        VerifyEnvironment env = verifier.createEnvironment(new HashMap<String, String>() {
+            {
+                put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, VerifierService.EE_1_6);
+                put(Constants.FRAMEWORK_OS_NAME, "macosx");
+                put(Constants.FRAMEWORK_OS_VERSION, "10.5");
+            }
+        }, new VerifyReporter() {
+
+            public void reportWire(BundleRevision importer,
+                BundleRequirement reqirement, BundleRevision exporter,
+                BundleCapability capability) {
+                System.out.println("WIRE: " + importer + " - " + reqirement + " - " + capability + " -> " + exporter);
+            }
+
+            public void reportLog(LogEntry logEntry) {
+                System.out.println("Log(" + logEntry.getTime() + "): " + logEntry.getLevel() + " " + logEntry.getMessage());
+                if (logEntry.getException() != null) {
+                    logEntry.getException().printStackTrace();
+                }
+            }
+
+            public void reportException(Exception ex) {
+                ex.printStackTrace();
+            }
+        });
+        Set<BundleRevision> bundles = new HashSet<BundleRevision>();
+        bundles.add(env.addBundle(0, new HashMap<String, String>() {
+            {
+                put(Constants.BUNDLE_MANIFESTVERSION, "2");
+                put(Constants.BUNDLE_SYMBOLICNAME, FelixConstants.SYSTEM_BUNDLE_SYMBOLICNAME);
+                put(Constants.EXPORT_PACKAGE, VerifierService.SYSTEM_PACKAGES + "," + VerifierService.JRE_1_6_PACKAGES);
+            }
+        }));
+        bundles.add(env.addBundle(1, new HashMap<String, String>() {
+            {
+                put(Constants.BUNDLE_MANIFESTVERSION, "2");
+                put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo");
+                put(Constants.IMPORT_PACKAGE, "org.foo");
+            }
+        }));
+        bundles.add(env.addBundle(2, new HashMap<String, String>() {
+            {
+                put(Constants.BUNDLE_MANIFESTVERSION, "2");
+                put(Constants.BUNDLE_SYMBOLICNAME, "org.test.foo2");
+                put(Constants.EXPORT_PACKAGE, "org.foo2" +
+                    "");
+            }
+        }));
+        AssertJUnit.assertFalse("Resolving unresolvable", env.verifyResolve(bundles, null, null));
+    }
 }