diff --git a/jmood/pom.xml b/jmood/pom.xml
index beb80ec..feac759 100644
--- a/jmood/pom.xml
+++ b/jmood/pom.xml
@@ -1,92 +1,105 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <parent>
-    <groupId>org.apache.felix</groupId>
-    <artifactId>felix</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
-    <relativePath>../pom/pom.xml</relativePath>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <packaging>osgi-bundle</packaging>
-  <name>JMood JMX Management Agent</name>
-  <version>0.9.0-SNAPSHOT</version>
-  <artifactId>${groupId}.jmood</artifactId>
-  <dependencies>
-    <dependency>
-      <groupId>${pom.groupId}</groupId>
-      <artifactId>org.apache.felix.framework</artifactId>
-      <version>0.9.0-SNAPSHOT</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${pom.groupId}</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <version>1.1.0-SNAPSHOT</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${pom.groupId}</groupId>
-      <artifactId>org.osgi.compendium</artifactId>
-      <version>0.9.0-SNAPSHOT</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.1</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-  <build>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix.plugins</groupId>
-        <artifactId>maven-osgi-plugin</artifactId>
-        <version>0.9.0-SNAPSHOT</version>
-        <extensions>true</extensions>
-        <configuration>
-          <osgiManifest >
-            <bundleName>${name}</bundleName>
-            <bundleActivator>${artifactId}.Activator</bundleActivator>
-            <bundleDescription>JMood management agent</bundleDescription>
-            <bundleSymbolicName>${artifactId}</bundleSymbolicName>
-            <exportPackage>
-            <!-- TODO -->
-            </exportPackage>
-            <!--Automatic resolution includes not available, unused, mx4j stuff-->
- 			<importPackage>
-			org.osgi.framework, org.osgi.util.tracker, org.osgi.service.log, org.osgi.service.packageadmin, org.osgi.service.startlevel, org.osgi.service.permissionadmin, org.osgi.service.useradmin, org.osgi.service.cm, javax.management, javax.management.remote
-			</importPackage>
-          </osgiManifest>
-        </configuration>
-      </plugin>
-     <plugin>
-      <groupId>org.apache.maven.plugins</groupId>
-      <artifactId>maven-surefire-plugin</artifactId>
-      <configuration>
-      <!--
-      Current tests are (unfinished) integration tests, and need 
-      to have the bundle available, so there's a chicken-egg problem there. Temporal workaround: omit tests in pom
-      -->
-      
-        <skip>true</skip>
-      </configuration>
-    </plugin>
-      
-    </plugins>
-  </build>
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </reporting>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>felix</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <relativePath>../pom/pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>bundle</packaging>
+    <name>JMood JMX Management Agent</name>
+    <version>0.9.0-SNAPSHOT</version>
+    <artifactId>${groupId}.jmood</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>org.apache.felix.framework</artifactId>
+            <version>1.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <version>1.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <version>0.9.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        
+        <!-- Building on Java prior to Java 5 requires these -->
+        <dependency>
+            <groupId>mx4j</groupId>
+            <artifactId>mx4j</artifactId>
+            <version>3.0.1</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>mx4j</groupId>
+            <artifactId>mx4j-remote</artifactId>
+            <version>3.0.1</version>
+            <scope>provided</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>1.0.0</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-Activator>
+                            org.apache.felix.jmood.Activator
+                        </Bundle-Activator>
+                        <Private-Package>
+                            org.apache.felix.jmood.*
+                        </Private-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <!--
+                        Current tests are (unfinished) integration tests, and need 
+                        to have the bundle available, so there's a chicken-egg problem there. Temporal workaround: omit tests in pom
+                    -->
+
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+    </build>
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>
+                    maven-project-info-reports-plugin
+                </artifactId>
+            </plugin>
+        </plugins>
+    </reporting>
 </project>
diff --git a/jmood/src/main/java/org/apache/felix/jmood/compendium/ConfigAdminManager.java b/jmood/src/main/java/org/apache/felix/jmood/compendium/ConfigAdminManager.java
index 2a01db4..1d7ed55 100644
--- a/jmood/src/main/java/org/apache/felix/jmood/compendium/ConfigAdminManager.java
+++ b/jmood/src/main/java/org/apache/felix/jmood/compendium/ConfigAdminManager.java
@@ -109,7 +109,7 @@
         //FIXME this should not be invoked
         //if created, the configuration is attached to the management agent's location
 		ac.debug("ConfigAdmin, getting config for pid: "+pid);
-		if (pid.contains(":")) throw new IllegalArgumentException("pid not compliant with jmx. Please remove ':' from the pid");
+		if (pid.indexOf(':') >= 0) throw new IllegalArgumentException("pid not compliant with jmx. Please remove ':' from the pid");
 		ConfigurationAdmin cad=ac.getConfigurationAdmin();
 		if (cad != null) {
 			Configuration config = cad.getConfiguration(pid);
@@ -129,7 +129,7 @@
 	public String getConfiguration(String pid, String location)
 		throws Exception {
 		//":" is reserved in objectnames, as a work around we do not permit pids containing it
-			if (pid.contains(":")) throw new IllegalArgumentException("pid not compliant with jmx. Please remove ':' from the pid");
+			if (pid.indexOf(':') >= 0) throw new IllegalArgumentException("pid not compliant with jmx. Please remove ':' from the pid");
 			ConfigurationAdmin cad=ac.getConfigurationAdmin();
 		if (cad != null) {
 			Configuration config = cad.getConfiguration(pid, location);
diff --git a/jmood/src/test/java/org/apache/felix/jmood/FelixLauncher.java b/jmood/src/test/java/org/apache/felix/jmood/FelixLauncher.java
index e4e7720..dff7ad6 100644
--- a/jmood/src/test/java/org/apache/felix/jmood/FelixLauncher.java
+++ b/jmood/src/test/java/org/apache/felix/jmood/FelixLauncher.java
@@ -16,26 +16,20 @@
  */
 package org.apache.felix.jmood;
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.logging.Logger;
-
-import javax.management.MBeanServerConnection;
 
 import org.apache.felix.framework.Felix;
-import org.apache.felix.framework.util.MutablePropertyResolver;
-import org.apache.felix.framework.util.MutablePropertyResolverImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 public class FelixLauncher {
 
-    private MutablePropertyResolver props;
+    private Map props;
 	private Felix framework;
 	private List bundles;
 	private List packages;
@@ -47,12 +41,10 @@
 		clearCache(cacheDir);
     	cacheDir.mkdir();
         
-        framework = new Felix();
-		Map m=new HashMap();
 		bundles=new ArrayList();
 		packages=new ArrayList();
 
-        props = new MutablePropertyResolverImpl(m);
+        props = new HashMap();
         props.put("felix.cache.profiledir", cacheDir.getAbsolutePath());
 
     }
@@ -64,7 +56,7 @@
 		if(!packages.contains(packageName))
 		packages.add(packageName);
 	}
-	public void start(){
+	public void start() throws BundleException {
 		StringBuffer autostart=new StringBuffer();
 		for (int i=0; i<bundles.size(); i++){
 			String bundle=(String)bundles.get(i);
@@ -81,12 +73,13 @@
 		
         props.put(Constants.FRAMEWORK_SYSTEMPACKAGES, spkg.toString());
 
-        framework.start(props,null);
+        framework = new Felix(props, null);
+        framework.start();
 	}
 	public void blockingStart() throws Exception{
 		this.start();
         int to=0;
-        while(framework.getStatus()!=Felix.RUNNING_STATUS) {
+        while(framework.getState()!=Bundle.ACTIVE) {
             Thread.sleep(10);
             to++;
             if(to>100) throw new Exception("timeout");
@@ -94,7 +87,8 @@
 
 	}
 	public void shutdown(){
-		framework.shutdown();
+		framework.stopAndWait();
+		framework = null;
 		clearCache(cacheDir);
 	}
 
