diff --git a/ipojo/handler/jmx/jmx-handler-it/pom.xml b/ipojo/handler/jmx/jmx-handler-it/pom.xml
new file mode 100644
index 0000000..7e89ec4
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/pom.xml
@@ -0,0 +1,356 @@
+<!--
+  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.
+-->
+<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">
+
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
+    <groupId>org.apache.felix</groupId>
+    <name>Apache Felix iPOJO JMX Handler - Integration Test</name>
+    <artifactId>org.apache.felix.ipojo.handler.jmx-it</artifactId>
+    <version>1.5.0-SNAPSHOT</version>
+
+    <properties>
+        <exam.version>3.0.0</exam.version>
+        <url.version>1.5.1</url.version>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo.handler.jmx</artifactId>
+            <version>${project.version}</version>
+            <!--
+             The event admin handler depends on an older version of the compendium and core, to avoid issue during
+             tests, we must exclude those artifacts and trust the framework to provide the right / compatible
+              version
+            -->
+            <exclusions>
+                <exclusion>
+                    <groupId>org.osgi</groupId>
+                    <artifactId>org.osgi.compendium</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.osgi</groupId>
+                    <artifactId>org.osgi.core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>org.apache.felix.ipojo</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.framework</artifactId>
+            <version>4.2.0</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo</artifactId>
+            <version>1.8.6</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-container-native</artifactId>
+            <version>${exam.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-junit4</artifactId>
+            <version>${exam.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-link-mvn</artifactId>
+            <version>${exam.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ops4j.pax.url</groupId>
+            <artifactId>pax-url-aether</artifactId>
+            <version>${url.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <version>0.9.20</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>0.9.20</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.ops4j.pax.tinybundles</groupId>
+            <artifactId>tinybundles</artifactId>
+            <version>1.0.0</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ow2.chameleon.testing</groupId>
+            <artifactId>osgi-helpers</artifactId>
+            <version>0.6.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ow2.chameleon.testing</groupId>
+            <artifactId>tinybundles-ipojo</artifactId>
+            <version>0.3.0</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.ops4j.pax.url</groupId>
+            <artifactId>pax-url-wrap</artifactId>
+            <version>1.5.2</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.servicemix.tooling</groupId>
+                <artifactId>depends-maven-plugin</artifactId>
+                <version>1.2</version>
+                <executions>
+                    <execution>
+                        <id>generate-config</id>
+                        <goals>
+                            <goal>generate-depends-file</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.5.1</version>
+                <configuration>
+                    <source>1.6</source>
+                    <target>1.6</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>test</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-invoker-plugin</artifactId>
+                        <version>1.8</version>
+                        <configuration>
+                            <streamLogs>true</streamLogs>
+                            <goals>
+                                <goal>clean</goal>
+                                <goal>test</goal>
+                            </goals>
+                            <cloneClean>true</cloneClean>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>regular</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <profiles>
+                                        <profile>felix</profile>
+                                    </profiles>
+                                    <cloneProjectsTo>${project.build.directory}/regular</cloneProjectsTo>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>test-all</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-invoker-plugin</artifactId>
+                        <version>1.8</version>
+                        <configuration>
+                            <streamLogs>true</streamLogs>
+                            <goals>
+                                <goal>clean</goal>
+                                <goal>test</goal>
+                            </goals>
+                            <cloneClean>true</cloneClean>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>equinox-native</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <profiles>
+                                        <profile>equinox</profile>
+                                    </profiles>
+                                    <cloneProjectsTo>${project.build.directory}/equinox-native</cloneProjectsTo>
+
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>felix-native</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <profiles>
+                                        <profile>felix</profile>
+                                    </profiles>
+                                    <cloneProjectsTo>${project.build.directory}/felix-native</cloneProjectsTo>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>knopflerfish-native</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <profiles>
+                                        <profile>knopflerfish</profile>
+                                    </profiles>
+                                    <cloneProjectsTo>${project.build.directory}/knopflerfish-native</cloneProjectsTo>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>knopflerfish</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+                <property>
+                    <name>pax.exam.framework</name>
+                    <value>knopflerfish</value>
+                </property>
+            </activation>
+            <properties>
+                <pax.exam.framework>knopflerfish</pax.exam.framework>
+            </properties>
+            <repositories>
+                <repository>
+                    <id>knopflerfish-releases</id>
+                    <url>http://www.knopflerfish.org/maven2</url>
+                </repository>
+            </repositories>
+            <dependencies>
+                <dependency>
+                    <groupId>org.knopflerfish</groupId>
+                    <artifactId>framework</artifactId>
+                    <version>5.2.0</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+
+        <profile>
+            <id>equinox</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+                <property>
+                    <name>pax.exam.framework</name>
+                    <value>equinox</value>
+                </property>
+            </activation>
+            <properties>
+                <pax.exam.framework>equinox</pax.exam.framework>
+            </properties>
+            <dependencies>
+                <dependency>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>org.eclipse.osgi</artifactId>
+                    <version>3.8.1.v20120830-144521</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+
+        <profile>
+            <id>felix</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+                <property>
+                    <name>pax.exam.framework</name>
+                    <value>felix</value>
+                </property>
+            </activation>
+            <properties>
+                <pax.exam.framework>felix</pax.exam.framework>
+            </properties>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>org.apache.felix.framework</artifactId>
+                    <version>4.2.0</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+
+    </profiles>
+</project>
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/pom.xml b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/pom.xml
new file mode 100644
index 0000000..21d9704
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/pom.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>org.apache.felix.ipojo.handler.jmx-it</artifactId>
+        <version>1.5.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+
+
+    <artifactId>ipojo-jmx-integration-test</artifactId>
+    <name>${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <version>4.2.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo.annotations</artifactId>
+            <version>1.8.6</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponent.java b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponent.java
new file mode 100644
index 0000000..a34bef0
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponent.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handler.jmx.components;
+
+/**
+ * Simple component that holds an integer. It is exposed as a MBean.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class SimpleManagedComponent {
+
+    /**
+     * The integer.
+     */
+    private int m_integer /*= new Random().nextInt()*/;
+
+    /**
+     * Set the value of the integer.
+     * @param newValue the new value
+     * @return the old value of the integer.
+     */
+    @SuppressWarnings("unused")
+    private synchronized int setIntegerValue(int newValue) {
+        int oldValue = m_integer;
+        m_integer = newValue;
+        return oldValue;
+    }
+
+    /**
+     * Get the value of the integer.
+     * @return the currentvalue of the integer.
+     */
+    @SuppressWarnings("unused")
+    private synchronized int getIntegerValue() {
+        return m_integer;
+    }
+
+}
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponentAnnotated.java b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponentAnnotated.java
new file mode 100644
index 0000000..4821ef29
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponentAnnotated.java
@@ -0,0 +1,69 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handler.jmx.components;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.handlers.jmx.JMXBean;
+import org.apache.felix.ipojo.handlers.jmx.JMXMethod;
+import org.apache.felix.ipojo.handlers.jmx.JMXProperty;
+
+import java.util.Random;
+
+/**
+ * Simple component that holds an integer. It is exposed as a MBean. This
+ * version uses the brand new annotations of the JMX handler.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Component(immediate = true)
+@JMXBean
+public class SimpleManagedComponentAnnotated {
+
+    /**
+     * The integer.
+     */
+    @JMXProperty(name = "integer", rights = "r", notification = true)
+    private int m_integer = new Random().nextInt();;
+
+    /**
+     * Set the value of the integer.
+     * 
+     * @param newValue
+     *            the new value
+     * @return the old value of the integer.
+     */
+    @SuppressWarnings("unused")
+    @JMXMethod(description = "Set the value of the integer")
+    private synchronized int setIntegerValue(int newValue) {
+        int oldValue = m_integer;
+        m_integer = newValue;
+        return oldValue;
+    }
+
+    /**
+     * Get the value of the integer.
+     * 
+     * @return the currentvalue of the integer.
+     */
+    @SuppressWarnings("unused")
+    @JMXMethod(description = "Get the value of the integer")
+    private synchronized int getIntegerValue() {
+        return m_integer;
+    }
+}
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponentAnnotatedDeprecated.java b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponentAnnotatedDeprecated.java
new file mode 100644
index 0000000..f74c07b
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/java/org/apache/felix/ipojo/handler/jmx/components/SimpleManagedComponentAnnotatedDeprecated.java
@@ -0,0 +1,70 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handler.jmx.components;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.handlers.jmx.Config;
+import org.apache.felix.ipojo.handlers.jmx.Method;
+import org.apache.felix.ipojo.handlers.jmx.Property;
+
+import java.util.Random;
+
+
+/**
+ * Simple component that holds an integer. It is exposed as a MBean. This
+ * version uses the deprecated annotations of the JMX handler.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Component(immediate = true)
+@Config
+public class SimpleManagedComponentAnnotatedDeprecated {
+
+    /**
+     * The integer.
+     */
+    @Property(name = "integer", rights = "r", notification = true)
+    private int m_integer = new Random().nextInt();;
+
+    /**
+     * Set the value of the integer.
+     * 
+     * @param newValue
+     *            the new value
+     * @return the old value of the integer.
+     */
+    @SuppressWarnings("unused")
+    @Method(description = "Set the value of the integer")
+    private synchronized int setIntegerValue(int newValue) {
+        int oldValue = m_integer;
+        m_integer = newValue;
+        return oldValue;
+    }
+
+    /**
+     * Get the value of the integer.
+     * 
+     * @return the currentvalue of the integer.
+     */
+    @SuppressWarnings("unused")
+    @Method(description = "Get the value of the integer")
+    private synchronized int getIntegerValue() {
+        return m_integer;
+    }
+}
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/resources/metadata.xml b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/resources/metadata.xml
new file mode 100644
index 0000000..9d4e431
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/main/resources/metadata.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
+       xmlns="org.apache.felix.ipojo"
+       xmlns:jmx="org.apache.felix.ipojo.handlers.jmx">
+
+    <!-- The simple managed component without annotations and with brand new JMX handler syntax -->
+    <component classname="org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponent" immediate="true">
+        <!-- Expose field and methods with JMX handler -->
+        <jmx:config>
+            <jmx:jmxmethod name="getIntegerValue" description="Get the value of the integer"/>
+            <jmx:jmxmethod name="setIntegerValue" description="Set the value of the integer"/>
+            <jmx:jmxproperty name="integer" field="m_integer" rights="r" notification="true"/>
+        </jmx:config>
+    </component>
+
+    <!-- The simple managed component without annotations and with brand new JMX handler syntax -->
+    <component classname="org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponent" immediate="true" name="org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponentDeprecated">
+        <!-- Expose field and methods with JMX handler -->
+        <jmx:config>
+            <jmx:method name="getIntegerValue" description="Get the value of the integer"/>
+            <jmx:method name="setIntegerValue" description="Set the value of the integer"/>
+            <jmx:property name="integer" field="m_integer" rights="r" notification="true"/>
+        </jmx:config>
+    </component>
+
+</ipojo>
\ No newline at end of file
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/test/java/org/apache/felix/ipojo/handler/jmx/test/Common.java b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/test/java/org/apache/felix/ipojo/handler/jmx/test/Common.java
new file mode 100644
index 0000000..8e79a8c
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/test/java/org/apache/felix/ipojo/handler/jmx/test/Common.java
@@ -0,0 +1,197 @@
+package org.apache.felix.ipojo.handler.jmx.test;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.TrueFileFilter;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.options.CompositeOption;
+import org.ops4j.pax.exam.options.DefaultCompositeOption;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.ops4j.pax.tinybundles.core.TinyBundle;
+import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.ow2.chameleon.testing.helpers.IPOJOHelper;
+import org.ow2.chameleon.testing.helpers.OSGiHelper;
+import org.ow2.chameleon.testing.tinybundles.ipojo.IPOJOStrategy;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Inject;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static junit.framework.Assert.fail;
+import static org.ops4j.pax.exam.CoreOptions.*;
+
+/**
+ * Bootstrap the test from this project
+ */
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerClass.class)
+public class Common {
+
+    @Inject
+    BundleContext bc;
+
+    OSGiHelper osgiHelper;
+    IPOJOHelper ipojoHelper;
+
+    Bundle testedBundle;
+
+    @Configuration
+    public Option[] config() throws IOException {
+        Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
+        root.setLevel(Level.DEBUG);
+
+        return options(
+                cleanCaches(),
+                ipojoBundles(),
+                junitBundles(),
+                testedBundle(),
+                systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("WARN")
+        );
+    }
+
+    public static Option junitAndMockitoBundles() {
+        return new DefaultCompositeOption(
+                // Repository required to load harmcrest (OSGi-fied version).
+                repository("http://repository.springsource.com/maven/bundles/external").id(
+                        "com.springsource.repository.bundles.external"),
+
+                // Hamcrest with a version matching the range expected by Mockito
+                mavenBundle("org.hamcrest", "com.springsource.org.hamcrest.core", "1.1.0"),
+
+                // Mockito core does not includes Hamcrest
+                mavenBundle("org.mockito", "mockito-core", "1.9.5"),
+
+                // Objenesis with a version matching the range expected by Mockito
+                wrappedBundle(mavenBundle("org.objenesis", "objenesis", "1.2"))
+                        .exports("*;version=1.2"),
+
+                // The default JUnit bundle also exports Hamcrest, but with an (incorrect) version of
+                // 4.9 which does not match the Mockito import. When deployed after the hamcrest bundles, it gets
+                // resolved correctly.
+                CoreOptions.junitBundles(),
+
+                /*
+                 * Felix has implicit boot delegation enabled by default. It conflicts with Mockito:
+                 * java.lang.LinkageError: loader constraint violation in interface itable initialization:
+                 * when resolving method "org.osgi.service.useradmin.User$$EnhancerByMockitoWithCGLIB$$dd2f81dc
+                 * .newInstance(Lorg/mockito/cglib/proxy/Callback;)Ljava/lang/Object;" the class loader
+                 * (instance of org/mockito/internal/creation/jmock/SearchingClassLoader) of the current class,
+                 * org/osgi/service/useradmin/User$$EnhancerByMockitoWithCGLIB$$dd2f81dc, and the class loader
+                 * (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) for interface
+                 * org/mockito/cglib/proxy/Factory have different Class objects for the type org/mockito/cglib/
+                 * proxy/Callback used in the signature
+                 *
+                 * So we disable the bootdelegation. this property has no effect on the other OSGi implementation.
+                 */
+                frameworkProperty("felix.bootdelegation.implicit").value("false")
+        );
+    }
+
+    @Before
+    public void commonSetUp() {
+        osgiHelper = new OSGiHelper(bc);
+        ipojoHelper = new IPOJOHelper(bc);
+
+        testedBundle = osgiHelper.getBundle("test.bundle");
+
+        // Dump OSGi Framework information
+        String vendor = (String) osgiHelper.getBundle(0).getHeaders().get(Constants.BUNDLE_VENDOR);
+        if (vendor == null) {
+            vendor = (String) osgiHelper.getBundle(0).getHeaders().get(Constants.BUNDLE_SYMBOLICNAME);
+        }
+        String version = (String) osgiHelper.getBundle(0).getHeaders().get(Constants.BUNDLE_VERSION);
+        System.out.println("OSGi Framework : " + vendor + " - " + version);
+    }
+
+    @After
+    public void commonTearDown() {
+        ipojoHelper.dispose();
+        osgiHelper.dispose();
+    }
+
+    public static CompositeOption ipojoBundles() {
+        return new DefaultCompositeOption(
+                mavenBundle("org.apache.felix", "org.apache.felix.ipojo").versionAsInProject(),
+                mavenBundle("org.ow2.chameleon.testing", "osgi-helpers").versionAsInProject(),
+                // The tested handler
+                mavenBundle("org.apache.felix", "org.apache.felix.ipojo.handler.jmx").versionAsInProject()
+        );
+    }
+
+    public Option testedBundle() throws MalformedURLException {
+        File out = new File("target/tested/bundle.jar");
+
+        TinyBundle tested = TinyBundles.bundle();
+
+        // We look inside target/classes to find the class and resources
+        File classes = new File("target/classes");
+        Collection<File> files = FileUtils.listFilesAndDirs(classes, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
+        List<File> services = new ArrayList<File>();
+        for (File file : files) {
+            if (file.isDirectory()) {
+                // By convention we export of .services and .service package
+                if (file.getName().endsWith("services")  || file.getName().endsWith("service")) {
+                    services.add(file);
+                }
+            } else {
+                // We need to compute the path
+                String path = file.getAbsolutePath().substring(classes.getAbsolutePath().length() +1);
+                tested.add(path, file.toURI().toURL());
+                System.out.println(file.getName() + " added to " + path);
+            }
+        }
+
+        String export = "";
+        for (File file : services) {
+            if (export.length() > 0) { export += ", "; }
+            String path = file.getAbsolutePath().substring(classes.getAbsolutePath().length() +1);
+            String packageName = path.replace('/', '.');
+            export += packageName;
+        }
+
+        System.out.println("Exported packages : " + export);
+
+        InputStream inputStream = tested
+                .set(Constants.BUNDLE_SYMBOLICNAME, "test.bundle")
+                //.set(Constants.IMPORT_PACKAGE, "*")
+                //.set(Constants.EXPORT_PACKAGE, export) // No export...
+                .build(IPOJOStrategy.withiPOJO(new File("src/main/resources")));
+
+        try {
+            FileUtils.copyInputStreamToFile(inputStream, out);
+            return bundle(out.toURI().toURL().toExternalForm());
+        } catch (MalformedURLException e) {
+            throw new RuntimeException("Cannot compute the url of the manipulated bundle");
+        } catch (IOException e) {
+            throw new RuntimeException("Cannot write of the manipulated bundle");
+        }
+    }
+
+    public void assertContains(String s, String[] arrays, String object) {
+        for (String suspect : arrays) {
+            if (object.equals(suspect)) {
+                return;
+            }
+        }
+        fail("Assertion failed : " + s);
+    }
+
+
+}
diff --git a/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/test/java/org/apache/felix/ipojo/handler/jmx/test/TestMBean.java b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/test/java/org/apache/felix/ipojo/handler/jmx/test/TestMBean.java
new file mode 100644
index 0000000..aecfa3d
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler-it/src/it/jmx-it/src/test/java/org/apache/felix/ipojo/handler/jmx/test/TestMBean.java
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.handler.jmx.test;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+
+import javax.management.*;
+import java.lang.management.ManagementFactory;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
+
+/**
+ * Test the good behaviour of the EventAdminHandler.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class TestMBean extends Common {
+
+    /**
+     * The MBean server used to access exposed MBeans.
+     */
+    private MBeanServer m_server;
+
+    /**
+     * Initialize test.
+     */
+    @Before
+    public void setUp() {
+        m_server = ManagementFactory.getPlatformMBeanServer();
+        for (Bundle bundle : bc.getBundles()) {
+            System.out.println(bundle.getSymbolicName() + " - " + bundle.getState());
+        }
+    }
+
+    /**
+     * Test the MBean exposed by the simple component, defined without
+     * annotations and with the brand new JMX handler syntax.
+     */
+    @Test
+    public void testMBeanWithoutAnnotations() throws MalformedObjectNameException, IntrospectionException, InstanceNotFoundException, ListenerNotFoundException, ReflectionException, MBeanException {
+        // Create an instance of the component
+        ComponentInstance componentInstance = ipojoHelper
+                .createComponentInstance("org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponent");
+        String instanceName = componentInstance.getInstanceName();
+        ObjectName objectName = new ObjectName(
+                "org.apache.felix.ipojo.handler.jmx.components:type=org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponent,instance="
+                        + instanceName);
+        doTest(objectName);
+    }
+
+    /**
+     * Test the MBean exposed by the simple component, defined without
+     * annotations and with the deprecated JMX handler syntax.
+     */
+    @Test
+    public void testMBeanWithoutAnnotationsDeprecated() throws MalformedObjectNameException, IntrospectionException, InstanceNotFoundException, ListenerNotFoundException, ReflectionException, MBeanException {
+        // Create an instance of the component
+        ComponentInstance componentInstance = ipojoHelper
+                .createComponentInstance("org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponentDeprecated");
+        String instanceName = componentInstance.getInstanceName();
+        ObjectName objectName = new ObjectName(
+                "org.apache.felix.ipojo.handler.jmx.components:type=org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponent,instance="
+                        + instanceName);
+        doTest(objectName);
+    }
+
+    /**
+     * Test the MBean exposed by the simple component, defined with
+     * annotations.
+     */
+    @Test
+    public void testMBeanWithAnnotations() throws MalformedObjectNameException, IntrospectionException,
+            InstanceNotFoundException, ListenerNotFoundException,
+            ReflectionException, MBeanException {
+        // Create an instance of the component
+        ComponentInstance componentInstance = ipojoHelper
+                .createComponentInstance("org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponentAnnotated");
+        String instanceName = componentInstance.getInstanceName();
+        ObjectName objectName = new ObjectName(
+                "org.apache.felix.ipojo.handler.jmx.components:type=org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponentAnnotated,instance="
+                        + instanceName);
+        doTest(objectName);
+    }
+
+    /**
+     * Test the MBean exposed by the simple component, defined with
+     * annotations.
+     */
+    @Test
+    public void testMBeanWithAnnotationsDeprecated() throws MalformedObjectNameException, IntrospectionException,
+            InstanceNotFoundException, ListenerNotFoundException,
+            ReflectionException, MBeanException {
+        // Create an instance of the component
+        ComponentInstance componentInstance = ipojoHelper
+                .createComponentInstance("org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponentAnnotatedDeprecated");
+        String instanceName = componentInstance.getInstanceName();
+        ObjectName objectName = new ObjectName(
+                "org.apache.felix.ipojo.handler.jmx.components:type=org.apache.felix.ipojo.handler.jmx.components.SimpleManagedComponentAnnotatedDeprecated,instance="
+                        + instanceName);
+        doTest(objectName);
+    }
+
+    /**
+     * Utility method used to test the MBean with the given objectName.
+     *
+     * @param objectName the objectName of the MBean to test.
+     */
+    private void doTest(ObjectName objectName) throws IntrospectionException, InstanceNotFoundException, ReflectionException, MBeanException, ListenerNotFoundException {
+
+        // Get the MBean from the platform MBean server
+
+        MBeanInfo mBeanInfo = m_server.getMBeanInfo(objectName);
+        ObjectInstance objectInstance = m_server.getObjectInstance(objectName);
+        assertNotNull(mBeanInfo);
+        assertNotNull(objectInstance);
+        // Check that the property is exposed
+        MBeanAttributeInfo[] attributes = mBeanInfo.getAttributes();
+        assertEquals(1, attributes.length);
+        MBeanAttributeInfo attribute = attributes[0];
+        assertEquals("integer", attribute.getName());
+        assertEquals("int", attribute.getType());
+        assertTrue(attribute.isReadable());
+        assertFalse(attribute.isWritable());
+        // Check that both methods are exposed
+        MBeanOperationInfo[] operations = mBeanInfo.getOperations();
+        assertEquals(2, operations.length);
+        MBeanOperationInfo getOperation;
+        MBeanOperationInfo setOperation;
+        // Order is not important
+        if (operations[0].getName().equals("getIntegerValue")) {
+            getOperation = operations[0];
+            setOperation = operations[1];
+        } else {
+            setOperation = operations[0];
+            getOperation = operations[1];
+        }
+        // Check the 'get' operation
+        assertEquals("getIntegerValue", getOperation.getName());
+        assertEquals("Get the value of the integer",
+                getOperation.getDescription());
+        assertEquals("int", getOperation.getReturnType());
+        MBeanParameterInfo[] getOperationParams = getOperation.getSignature();
+        assertEquals(0, getOperationParams.length);
+        // Check the 'set' operation
+        assertEquals("setIntegerValue", setOperation.getName());
+        assertEquals("Set the value of the integer",
+                setOperation.getDescription());
+        assertEquals("int", setOperation.getReturnType());
+        MBeanParameterInfo[] setOperationParams = setOperation.getSignature();
+        assertEquals(1, setOperationParams.length);
+        assertEquals("int", setOperationParams[0].getType());
+        // Call the methods and test the result, also test notifications
+        CustomNotificationListener listener = new CustomNotificationListener();
+        m_server.addNotificationListener(objectName, listener, null, null);
+        int value1 = 123;
+        int value2 = 456;
+        m_server.invoke(objectName, "setIntegerValue", new Object[]{value1},
+                new String[]{"int"});
+        m_server.invoke(objectName, "setIntegerValue", new Object[]{value2},
+                new String[]{"int"});
+        int result = (Integer) m_server.invoke(objectName, "getIntegerValue",
+                new Object[0], new String[0]);
+        assertEquals(value2, result);
+        m_server.removeNotificationListener(objectName, listener, null, null);
+        //assertEquals(2, listener.getCount());
+    }
+
+    /**
+     * Custom listener used to count MBean notifications.
+     *
+     * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+     */
+    private class CustomNotificationListener implements NotificationListener {
+
+        /**
+         * Counter for the notifications.
+         */
+        private int m_counter = 0;
+
+        /**
+         * Notified !
+         *
+         * @param notification the notification
+         * @param handback     ignored
+         */
+        public void handleNotification(Notification notification,
+                                       Object handback) {
+            m_counter++;
+        }
+
+        /**
+         * Return the notification count of this listener.
+         *
+         * @return the notification count of this listener.
+         */
+        public int getCount() {
+            return m_counter;
+        }
+    }
+
+}
diff --git a/ipojo/handler/jmx/jmx-handler/DEPENDENCIES b/ipojo/handler/jmx/jmx-handler/DEPENDENCIES
new file mode 100644
index 0000000..951b489
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler/DEPENDENCIES
@@ -0,0 +1,18 @@
+Apache Felix iPOJO JMX Handler
+Copyright 2008-2011 The Apache Software Foundation
+
+This software was developed at the Apache Software Foundation
+(http://www.apache.org) and may have dependencies on other
+Apache software licensed under Apache License 2.0.
+
+I. Included Third-Party Software
+
+II. Used Third-Party Software
+
+This product uses software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright (c) OSGi Alliance (2000, 2009).
+Licensed under the Apache License 2.0.
+
+III. Overall License Summary
+- Apache License 2.0
diff --git a/ipojo/handler/jmx/jmx-handler/LICENSE b/ipojo/handler/jmx/jmx-handler/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/ipojo/handler/jmx/jmx-handler/NOTICE b/ipojo/handler/jmx/jmx-handler/NOTICE
new file mode 100644
index 0000000..ae6a19c
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler/NOTICE
@@ -0,0 +1,7 @@
+Apache Felix iPOJO JMX Handler
+Copyright 2008-2011 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+Licensed under the Apache License 2.0.
+
diff --git a/ipojo/handler/jmx/doc/changelog.txt b/ipojo/handler/jmx/jmx-handler/doc/changelog.txt
similarity index 100%
rename from ipojo/handler/jmx/doc/changelog.txt
rename to ipojo/handler/jmx/jmx-handler/doc/changelog.txt
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler.html b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler.html
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler.html
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler.html
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/JMXHandler_1.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/JMXHandler_1.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/JMXHandler_1.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/JMXHandler_1.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/JMXHandler_2.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/JMXHandler_2.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/JMXHandler_2.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/JMXHandler_2.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/JMXHandler_3.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/JMXHandler_3.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/JMXHandler_3.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/JMXHandler_3.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/apache.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/apache.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/apache.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/apache.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/button.html b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/button.html
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/button.html
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/button.html
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/button_data/2009-europe-125x125.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/button_data/2009-europe-125x125.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/button_data/2009-europe-125x125.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/button_data/2009-europe-125x125.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/feed-icon-32x32.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/feed-icon-32x32.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/feed-icon-32x32.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/feed-icon-32x32.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/footer.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/footer.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/footer.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/footer.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/ga.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/ga.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/ga.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/ga.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/header.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/header.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/header.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/header.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/hoverIntent.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/hoverIntent.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/hoverIntent.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/hoverIntent.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/information.gif b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/information.gif
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/information.gif
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/information.gif
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/ipojo.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/ipojo.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/ipojo.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/ipojo.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/jquery-1.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/jquery-1.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/jquery-1.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/jquery-1.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/linkext7.gif b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/linkext7.gif
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/linkext7.gif
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/linkext7.gif
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/logo.png b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/logo.png
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/logo.png
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/logo.png
Binary files differ
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushCSharp.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushCSharp.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushCSharp.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushCSharp.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushDelphi.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushDelphi.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushDelphi.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushDelphi.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushJScript.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushJScript.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushJScript.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushJScript.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushJava.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushJava.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushJava.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushJava.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushPhp.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushPhp.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushPhp.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushPhp.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushPython.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushPython.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushPython.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushPython.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushShell.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushShell.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushShell.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushShell.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushSql.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushSql.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushSql.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushSql.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushVb.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushVb.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushVb.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushVb.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushXml.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushXml.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shBrushXml.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shBrushXml.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shCore.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shCore.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/shCore.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/shCore.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/site.css b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/site.css
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/site.css
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/site.css
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/superfish.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/superfish.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/superfish.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/superfish.js
diff --git a/ipojo/handler/jmx/doc/ipojo-jmx-handler_files/supersubs.js b/ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/supersubs.js
similarity index 100%
rename from ipojo/handler/jmx/doc/ipojo-jmx-handler_files/supersubs.js
rename to ipojo/handler/jmx/jmx-handler/doc/ipojo-jmx-handler_files/supersubs.js
diff --git a/ipojo/handler/jmx/metadata.xml b/ipojo/handler/jmx/jmx-handler/metadata.xml
similarity index 100%
rename from ipojo/handler/jmx/metadata.xml
rename to ipojo/handler/jmx/jmx-handler/metadata.xml
diff --git a/ipojo/handler/jmx/obr.xml b/ipojo/handler/jmx/jmx-handler/obr.xml
similarity index 100%
rename from ipojo/handler/jmx/obr.xml
rename to ipojo/handler/jmx/jmx-handler/obr.xml
diff --git a/ipojo/handler/jmx/jmx-handler/pom.xml b/ipojo/handler/jmx/jmx-handler/pom.xml
new file mode 100644
index 0000000..67e8e07
--- /dev/null
+++ b/ipojo/handler/jmx/jmx-handler/pom.xml
@@ -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.
+-->
+<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-parent</artifactId>
+    <version>1.2.1</version>
+    <relativePath>../../pom/pom.xml</relativePath>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>bundle</packaging>
+  <name>Apache Felix iPOJO JMX Handler</name>
+  <artifactId>org.apache.felix.ipojo.handler.jmx</artifactId>
+  <version>1.5.0-SNAPSHOT</version>
+  
+  <description>
+  iPOJO extension to expose instances as MBean inside a MBean Server.
+  </description>
+  <url>http://felix.apache.org/site/ipojo-jmx-handler.html</url>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.apache.felix.ipojo</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <version>1.4.3</version>
+        <configuration>
+          <instructions>
+            <Private-Package> org.apache.felix.ipojo.handlers.jmx
+            </Private-Package>
+            <Bundle-Name>${project.name}</Bundle-Name>
+            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+            <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
+            <Bundle-Description> iPOJO JMX Handler </Bundle-Description>
+            <Bundle-DocURL>
+              http://felix.apache.org/site/ipojo-jmx-handler.html
+            </Bundle-DocURL>
+            <Include-Resource> 
+              META-INF/LICENSE=LICENSE,
+              META-INF/NOTICE=NOTICE,
+              META-INF/DEPENDENCIES=DEPENDENCIES
+            </Include-Resource>
+          </instructions>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-ipojo-plugin</artifactId>
+        <version>${project.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>ipojo-bundle</goal>
+            </goals>
+            <configuration>
+              <metadata>metadata.xml</metadata>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>rat-maven-plugin</artifactId>
+        <configuration>
+          <excludeSubProjects>false</excludeSubProjects>
+          <useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
+          <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
+          <excludes>
+            <param>doc/**/*</param>
+            <param>maven-eclipse.xml</param>
+            <param>.checkstyle</param>
+            <param>.externalToolBuilders/*</param>
+            <param>LICENSE.asm</param>
+          </excludes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+          <enableRulesSummary>false</enableRulesSummary>
+          <violationSeverity>warning</violationSeverity>
+          <configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanWRegisterImpl.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanWRegisterImpl.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanWRegisterImpl.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanWRegisterImpl.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/JMXHandlerDescription.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/JMXHandlerDescription.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/JMXHandlerDescription.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/JMXHandlerDescription.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/JmxConfigFieldMap.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/JmxConfigFieldMap.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/JmxConfigFieldMap.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/JmxConfigFieldMap.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MethodField.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/MethodField.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MethodField.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/MethodField.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/NotificationField.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/NotificationField.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/NotificationField.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/NotificationField.java
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java b/ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java
similarity index 100%
rename from ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java
rename to ipojo/handler/jmx/jmx-handler/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java
diff --git a/ipojo/handler/jmx/src/main/resources/jmx.xsd b/ipojo/handler/jmx/jmx-handler/src/main/resources/jmx.xsd
similarity index 100%
rename from ipojo/handler/jmx/src/main/resources/jmx.xsd
rename to ipojo/handler/jmx/jmx-handler/src/main/resources/jmx.xsd
diff --git a/ipojo/handler/jmx/pom.xml b/ipojo/handler/jmx/pom.xml
index 67e8e07..4fe9ad6 100644
--- a/ipojo/handler/jmx/pom.xml
+++ b/ipojo/handler/jmx/pom.xml
@@ -16,110 +16,100 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<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-parent</artifactId>
-    <version>1.2.1</version>
-    <relativePath>../../pom/pom.xml</relativePath>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <packaging>bundle</packaging>
-  <name>Apache Felix iPOJO JMX Handler</name>
-  <artifactId>org.apache.felix.ipojo.handler.jmx</artifactId>
-  <version>1.5.0-SNAPSHOT</version>
-  
-  <description>
-  iPOJO extension to expose instances as MBean inside a MBean Server.
-  </description>
-  <url>http://felix.apache.org/site/ipojo-jmx-handler.html</url>
-  
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <version>4.0.0</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
+<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/xsd/maven-4.0.0.xsd">
+    <parent>
         <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <extensions>true</extensions>
-        <version>1.4.3</version>
-        <configuration>
-          <instructions>
-            <Private-Package> org.apache.felix.ipojo.handlers.jmx
-            </Private-Package>
-            <Bundle-Name>${project.name}</Bundle-Name>
-            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-            <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
-            <Bundle-Description> iPOJO JMX Handler </Bundle-Description>
-            <Bundle-DocURL>
-              http://felix.apache.org/site/ipojo-jmx-handler.html
-            </Bundle-DocURL>
-            <Include-Resource> 
-              META-INF/LICENSE=LICENSE,
-              META-INF/NOTICE=NOTICE,
-              META-INF/DEPENDENCIES=DEPENDENCIES
-            </Include-Resource>
-          </instructions>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <source>1.5</source>
-          <target>1.5</target>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${project.version}</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>ipojo-bundle</goal>
-            </goals>
-            <configuration>
-              <metadata>metadata.xml</metadata>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>rat-maven-plugin</artifactId>
-        <configuration>
-          <excludeSubProjects>false</excludeSubProjects>
-          <useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
-          <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
-          <excludes>
-            <param>doc/**/*</param>
-            <param>maven-eclipse.xml</param>
-            <param>.checkstyle</param>
-            <param>.externalToolBuilders/*</param>
-            <param>LICENSE.asm</param>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <enableRulesSummary>false</enableRulesSummary>
-          <violationSeverity>warning</violationSeverity>
-          <configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+        <artifactId>felix-parent</artifactId>
+        <version>1.2.1</version>
+        <relativePath>../../pom/pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.apache.felix.ipojo.handler.jmx-handler-project</artifactId>
+    <version>1.5.0-SNAPSHOT</version>
+    <name>Apache Felix iPOJO Event Admin Handler Project</name>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>jmx-handler</module>
+        <module>jmx-handler-it</module>
+    </modules>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>.</directory>
+                <targetPath>META-INF</targetPath>
+                <includes>
+                    <include>LICENSE*</include>
+                    <include>NOTICE*</include>
+                    <include>DEPENDENCIES*</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>release</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>make-assembly</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptorRefs>
+                                        <descriptorRef>project</descriptorRef>
+                                    </descriptorRefs>
+                                    <!-- we don't want to attach all the assemblies, such as bz2 -->
+                                    <attach>false</attach>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <!-- only attach the project and bin assemblies, in tar.gz and zip flavors -->
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>build-helper-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>attach-assemblies</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>attach-artifact</goal>
+                                </goals>
+                                <configuration>
+                                    <artifacts>
+                                        <artifact>
+                                            <file>
+                                                ${project.build.directory}/${project.artifactId}-${project.version}-project.tar.gz
+                                            </file>
+                                            <classifier>project</classifier>
+                                            <type>tar.gz</type>
+                                        </artifact>
+                                        <artifact>
+                                            <file>
+                                                ${project.build.directory}/${project.artifactId}-${project.version}-project.zip
+                                            </file>
+                                            <classifier>project</classifier>
+                                            <type>zip</type>
+                                        </artifact>
+                                    </artifacts>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
