diff --git a/ipojo/handler/whiteboard/pom.xml b/ipojo/handler/whiteboard/pom.xml
index 673b698..c6251a7 100644
--- a/ipojo/handler/whiteboard/pom.xml
+++ b/ipojo/handler/whiteboard/pom.xml
@@ -16,8 +16,7 @@
   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">
+<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>felix-parent</artifactId>
@@ -25,106 +24,92 @@
         <relativePath>../../../pom/pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <packaging>bundle</packaging>
-    <name>Apache Felix iPOJO White Board Pattern Handler</name>
-    <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId>
-    <groupId>org.apache.felix</groupId>
+    <artifactId>org.apache.felix.ipojo.handler.whiteboard-handler-project</artifactId>
     <version>1.6.1-SNAPSHOT</version>
+    <name>Apache Felix iPOJO Whiteboard Handler Project</name>
+    <packaging>pom</packaging>
 
-    <description>
-        iPOJO extension to easily implement a white-board pattern (host).
-    </description>
-    <url>
-        http://felix.apache.org/site/white-board-pattern-handler.html
-    </url>
+    <modules>
+        <module>whiteboard-handler</module>
+        <module>whiteboard-handler-it</module>
+    </modules>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo</artifactId>
-            <version>1.6.4</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>
-                <configuration>
-                    <instructions>
-                        <Bundle-Name>${project.name}</Bundle-Name>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
-                        <Bundle-Description>iPOJO White-Board Pattern Handler
-                        </Bundle-Description>
-                        <Bundle-DocURL>
-                            http://felix.apache.org/site/white-board-pattern-handler.html
-                        </Bundle-DocURL>
-                        <Private-Package>org.apache.felix.ipojo.handler.wbp
-                        </Private-Package>
-                        <Bundle-Name>${project.name}</Bundle-Name>
-                        <Include-Resource>
-                            META-INF/LICENSE=LICENSE,
-                            META-INF/NOTICE=NOTICE,
-                            META-INF/DEPENDENCIES=DEPENDENCIES
-                        </Include-Resource>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-ipojo-plugin</artifactId>
-                <version>1.6.0</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>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <target>1.5</target>
-                    <source>1.5</source>
-                </configuration>
-            </plugin>
-        </plugins>
+        <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>
diff --git a/ipojo/handler/whiteboard/whiteboard-handler-it/pom.xml b/ipojo/handler/whiteboard/whiteboard-handler-it/pom.xml
new file mode 100644
index 0000000..8bed968
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/pom.xml
@@ -0,0 +1,362 @@
+<!--
+  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>pom</packaging>
+    <name>Apache Felix iPOJO Whiteboard Handler - Integration Test</name>
+    <artifactId>org.apache.felix.ipojo.handler.whiteboard-it</artifactId>
+    <version>1.6.1-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.whiteboard</artifactId>
+            <version>${project.version}</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>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.9</version>
+            <scope>test</scope>
+        </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/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/pom.xml b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/pom.xml
new file mode 100644
index 0000000..d1bfcef
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-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.whiteboard-it</artifactId>
+        <version>1.6.1-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+
+
+    <artifactId>ipojo-whiteboard-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/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/components/FooProvider.java b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/components/FooProvider.java
new file mode 100644
index 0000000..5fc011b
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/components/FooProvider.java
@@ -0,0 +1,17 @@
+package org.apache.felix.ipojo.handler.whiteboard.components;
+
+import org.apache.felix.ipojo.handler.whiteboard.services.FooService;
+
+public class FooProvider implements FooService {
+    
+    public String foo;
+
+    public void foo() { 
+        if (foo.equals("foo")) {
+            foo = "bar";
+        } else {
+            foo = "foo";
+        }
+    }
+    
+}
diff --git a/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/components/FooWhiteBoardPattern.java b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/components/FooWhiteBoardPattern.java
new file mode 100644
index 0000000..95092ed
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/components/FooWhiteBoardPattern.java
@@ -0,0 +1,75 @@
+package org.apache.felix.ipojo.handler.whiteboard.components;
+
+import org.apache.felix.ipojo.handler.whiteboard.services.Observable;
+import org.osgi.framework.ServiceReference;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class FooWhiteBoardPattern implements Observable {
+
+    List list = new ArrayList();
+    int modifications = 0;
+
+    long validate_time = 0;
+    long first_arrival_time = 0;
+    long first_departure_time = 0;
+    long invalidate_time = 0;
+
+    public void onArrival(ServiceReference ref) {
+    	if (first_arrival_time == 0) {
+    		first_arrival_time = System.currentTimeMillis();
+    		try {
+				Thread.sleep(10);
+			} catch (InterruptedException e) {	}
+    	}
+        list.add(ref);
+    }
+
+    public void onDeparture(ServiceReference ref) {
+        list.remove(ref);
+        if (first_departure_time == 0) {
+        	first_departure_time = System.currentTimeMillis();
+    		try {
+				Thread.sleep(10);
+			} catch (InterruptedException e) {	}
+    	}
+    }
+
+    public void onModification(ServiceReference ref) {
+        modifications = modifications + 1;
+    }
+
+    public Map getObservations() {
+        Map map = new HashMap();
+        map.put("list", list);
+        map.put("modifications", new Integer(modifications));
+        map.put("validate", new Long(validate_time));
+        map.put("invalidate", new Long(invalidate_time));
+        map.put("arrival", new Long(first_arrival_time));
+        map.put("departure", new Long(first_departure_time));
+        return map;
+    }
+
+    public void start() {
+    	if (validate_time == 0) {
+    		validate_time = System.currentTimeMillis();
+    		try {
+				Thread.sleep(10);
+			} catch (InterruptedException e) {	}
+    	}
+    }
+
+    public void stop() {
+    	if (invalidate_time == 0) {
+    		invalidate_time = System.currentTimeMillis();
+    		try {
+				Thread.sleep(10);
+			} catch (InterruptedException e) {	}
+    	}
+    }
+
+
+}
diff --git a/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/services/FooService.java b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/services/FooService.java
new file mode 100644
index 0000000..c016a2f
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/services/FooService.java
@@ -0,0 +1,7 @@
+package org.apache.felix.ipojo.handler.whiteboard.services;
+
+public interface FooService {
+    
+    public void foo();
+
+}
diff --git a/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/services/Observable.java b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/services/Observable.java
new file mode 100644
index 0000000..94e9a84
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/java/org/apache/felix/ipojo/handler/whiteboard/services/Observable.java
@@ -0,0 +1,9 @@
+package org.apache.felix.ipojo.handler.whiteboard.services;
+
+import java.util.Map;
+
+public interface Observable {
+    
+    public Map getObservations();
+
+}
diff --git a/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/resources/metadata.xml b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/resources/metadata.xml
new file mode 100644
index 0000000..a3b227e
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/main/resources/metadata.xml
@@ -0,0 +1,46 @@
+<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:wbp="org.apache.felix.ipojo.whiteboard">
+    <component classname="org.apache.felix.ipojo.handler.whiteboard.components.FooProvider" name="fooprovider">
+        <provides>
+            <property field="foo" value="foo"/>
+        </provides>
+    </component>
+
+    <component classname="org.apache.felix.ipojo.handler.whiteboard.components.FooWhiteBoardPattern" name="under-providers">
+        <wbp:wbp
+                filter="(objectclass=org.apache.felix.ipojo.handler.whiteboard.services.FooService)"
+                onArrival="onArrival" onDeparture="onDeparture" onModification="onModification"
+                />
+        <provides/>
+    </component>
+
+    <component classname="org.apache.felix.ipojo.handler.whiteboard.components.FooWhiteBoardPattern" name="under-properties">
+        <wbp:wbp filter="(foo=foo)" onArrival="onArrival" onDeparture="onDeparture"
+                 onModification="onModification"
+                />
+        <provides/>
+    </component>
+
+    <component classname="org.apache.felix.ipojo.handler.whiteboard.components.FooWhiteBoardPattern" name="under-providers-2">
+        <wbp:whiteboards>
+            <wbp:wbp
+                    filter="(objectclass=org.apache.felix.ipojo.handler.whiteboard.services.FooService)"
+                    onArrival="onArrival" onDeparture="onDeparture" onModification="onModification"
+                    />
+        </wbp:whiteboards>
+        <provides/>
+    </component>
+
+    <component classname="org.apache.felix.ipojo.handler.whiteboard.components.FooWhiteBoardPattern" name="under-providers-lifecycle">
+        <wbp:wbp
+                filter="(objectclass=org.apache.felix.ipojo.handler.whiteboard.services.FooService)"
+                onArrival="onArrival" onDeparture="onDeparture" onModification="onModification"
+                />
+        <provides/>
+        <callback transition="validate" method="start"/>
+        <callback transition="invalidate" method="stop"/>
+    </component>
+</ipojo>
\ No newline at end of file
diff --git a/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/test/java/org/apache/felix/ipojo/handler/whiteboard/test/Common.java b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/test/java/org/apache/felix/ipojo/handler/whiteboard/test/Common.java
new file mode 100644
index 0000000..1dd0898
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/test/java/org/apache/felix/ipojo/handler/whiteboard/test/Common.java
@@ -0,0 +1,197 @@
+package org.apache.felix.ipojo.handler.whiteboard.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.whiteboard").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)
+                .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/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/test/java/org/apache/felix/ipojo/handler/whiteboard/test/TestWhiteboardPatternHandler.java b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/test/java/org/apache/felix/ipojo/handler/whiteboard/test/TestWhiteboardPatternHandler.java
new file mode 100644
index 0000000..b8fa7f9
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler-it/src/it/whiteboard-it/src/test/java/org/apache/felix/ipojo/handler/whiteboard/test/TestWhiteboardPatternHandler.java
@@ -0,0 +1,283 @@
+package org.apache.felix.ipojo.handler.whiteboard.test;
+
+import org.apache.felix.ipojo.*;
+import org.apache.felix.ipojo.handler.whiteboard.services.FooService;
+import org.apache.felix.ipojo.handler.whiteboard.services.Observable;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class TestWhiteboardPatternHandler extends Common {
+
+    Factory provFactory;
+    Factory factory, factory2, factory3, factory4;
+
+    @Before
+    public void setUp() {
+        provFactory = ipojoHelper.getFactory("fooprovider");
+        factory = ipojoHelper.getFactory("under-providers");
+        factory2 = ipojoHelper.getFactory("under-properties");
+        factory3 = ipojoHelper.getFactory("under-providers-lifecycle");
+        factory4 = ipojoHelper.getFactory("under-providers-2");
+    }
+
+    @Test
+    public void testServiceProviders() throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+        ComponentInstance ci = factory.createComponentInstance(new Properties());
+
+        ServiceReference ref = ipojoHelper.getServiceReferenceByName(Observable.class.getName(), ci.getInstanceName());
+        assertNotNull("Check Observable availability", ref);
+        Observable obs = (Observable) osgiHelper.getServiceObject(ref);
+
+        Map map = obs.getObservations();
+        assertEquals("Check empty list", ((List) map.get("list")).size(), 0);
+
+        Properties p1 = new Properties();
+        p1.put("foo", "foo");
+        ComponentInstance prov1 = provFactory.createComponentInstance(p1);
+
+        map = obs.getObservations();
+        assertEquals("Check list #1", ((List) map.get("list")).size(), 1);
+
+        Properties p2 = new Properties();
+        p2.put("foo", "foo");
+        ComponentInstance prov2 = provFactory.createComponentInstance(p2);
+
+        map = obs.getObservations();
+        assertEquals("Check list #2", ((List) map.get("list")).size(), 2);
+
+        prov1.stop();
+
+        map = obs.getObservations();
+        assertEquals("(1) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov2.stop();
+
+        map = obs.getObservations();
+        assertEquals("(2) Check list #0", ((List) map.get("list")).size(), 0);
+
+        prov2.start();
+
+        map = obs.getObservations();
+        assertEquals("(3) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov1.start();
+
+        map = obs.getObservations();
+        assertEquals("(4) Check list #2", ((List) map.get("list")).size(), 2);
+
+        prov1.dispose();
+
+        map = obs.getObservations();
+        assertEquals("(5) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov2.dispose();
+
+        map = obs.getObservations();
+        assertEquals("(6) Check list #0", ((List) map.get("list")).size(), 0);
+
+        bc.ungetService(ref);
+        ci.dispose();
+    }
+
+    @Test
+    public void testPropertiesProviders() throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+        ComponentInstance ci = factory2.createComponentInstance(new Properties());
+
+        ServiceReference ref = ipojoHelper.getServiceReferenceByName(Observable.class.getName(), ci.getInstanceName());
+        assertNotNull("Check Observable availability", ref);
+        Observable obs = (Observable) osgiHelper.getServiceObject(ref);
+
+        Map map = obs.getObservations();
+        assertEquals("Check empty list", ((List) map.get("list")).size(), 0);
+
+        Properties p1 = new Properties();
+        p1.put("foo", "foo");
+        ComponentInstance prov1 = provFactory.createComponentInstance(p1);
+        ServiceReference ref1 = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), prov1.getInstanceName());
+        FooService fs1 = (FooService) osgiHelper.getServiceObject(ref1);
+
+        map = obs.getObservations();
+        assertEquals("Check list #1", ((List) map.get("list")).size(), 1);
+
+        Properties p2 = new Properties();
+        p2.put("foo", "foo");
+        ComponentInstance prov2 = provFactory.createComponentInstance(p2);
+        ServiceReference ref2 = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), prov2.getInstanceName());
+        FooService fs2 = (FooService) osgiHelper.getServiceObject(ref2);
+
+        map = obs.getObservations();
+        assertEquals("Check list #2", ((List) map.get("list")).size(), 2);
+
+        fs1.foo();
+
+        map = obs.getObservations();
+        assertEquals("(1) Check list #1", ((List) map.get("list")).size(), 1);
+
+        fs2.foo();
+
+        map = obs.getObservations();
+        assertEquals("(2) Check list #0", ((List) map.get("list")).size(), 0);
+
+        fs2.foo();
+
+        map = obs.getObservations();
+        assertEquals("(3) Check list #1", ((List) map.get("list")).size(), 1);
+
+        fs1.foo();
+
+        map = obs.getObservations();
+        assertEquals("(4) Check list #2", ((List) map.get("list")).size(), 2);
+
+        prov1.dispose();
+
+        map = obs.getObservations();
+        assertEquals("(5) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov2.dispose();
+
+        map = obs.getObservations();
+        assertEquals("(6) Check list #0", ((List) map.get("list")).size(), 0);
+
+        bc.ungetService(ref1);
+        bc.ungetService(ref2);
+        bc.ungetService(ref);
+        ci.dispose();
+    }
+
+    @Test
+    public void testModifications() throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+        ComponentInstance ci = factory.createComponentInstance(new Properties());
+
+        ServiceReference ref = ipojoHelper.getServiceReferenceByName(Observable.class.getName(), ci.getInstanceName());
+        assertNotNull("Check Observable availability", ref);
+        Observable obs = (Observable) osgiHelper.getServiceObject(ref);
+
+        Map map = obs.getObservations();
+        assertEquals("Check empty list", ((List) map.get("list")).size(), 0);
+
+        Properties p1 = new Properties();
+        p1.put("foo", "foo");
+        ComponentInstance prov1 = provFactory.createComponentInstance(p1);
+
+        map = obs.getObservations();
+        assertEquals("Check list #1", ((List) map.get("list")).size(), 1);
+        assertEquals("Check modification #0", ((Integer) map.get("modifications")).intValue(), 0);
+
+        ServiceReference ref2 = osgiHelper.getServiceReference(FooService.class.getName(), null);
+        assertNotNull("Check FooService availability", ref2);
+
+        FooService fs = (FooService) osgiHelper.getServiceObject(ref2);
+        fs.foo();
+
+        map = obs.getObservations();
+        assertEquals("Check list #1", ((List) map.get("list")).size(), 1);
+        assertEquals("Check modification #1 (" + map.get("modifications") + ")", ((Integer) map.get("modifications")).intValue(), 1);
+
+        fs.foo();
+
+        map = obs.getObservations();
+        assertEquals("Check list #1", ((List) map.get("list")).size(), 1);
+        assertEquals("Check modification #2", ((Integer) map.get("modifications")).intValue(), 2);
+
+        prov1.dispose();
+        map = obs.getObservations();
+        assertEquals("Check list #0", ((List) map.get("list")).size(), 0);
+        assertEquals("Check modification #2", ((Integer) map.get("modifications")).intValue(), 2);
+
+        bc.ungetService(ref);
+        bc.ungetService(ref2);
+        ci.dispose();
+    }
+
+    @Test
+    public void testLifecycleCompliance() throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+        // First expose a service.
+        Properties p1 = new Properties();
+        p1.put("foo", "foo");
+        ComponentInstance prov1 = provFactory.createComponentInstance(p1);
+
+        ComponentInstance ci = factory3.createComponentInstance(new Properties());
+
+        ServiceReference ref = ipojoHelper.getServiceReferenceByName(Observable.class.getName(), ci.getInstanceName());
+        assertNotNull("Check Observable availability", ref);
+        Observable obs = (Observable) osgiHelper.getServiceObject(ref);
+
+        Map map = obs.getObservations();
+        // Check time
+        Long validate = (Long) map.get("validate");
+        Long arrival = (Long) map.get("arrival");
+
+        // Validate must be call before.
+        assertTrue(validate + " <?> " + arrival, validate < arrival);
+
+        prov1.dispose();
+        ci.dispose();
+
+    }
+
+    @Test
+    public void testServiceProvidersWhiteWhiteboards() throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+        ComponentInstance ci = factory4.createComponentInstance(new Properties());
+
+        ServiceReference ref = ipojoHelper.getServiceReferenceByName(Observable.class.getName(), ci.getInstanceName());
+        assertNotNull("Check Observable availability", ref);
+        Observable obs = (Observable) osgiHelper.getServiceObject(ref);
+
+        Map map = obs.getObservations();
+        assertEquals("Check empty list", ((List) map.get("list")).size(), 0);
+
+        Properties p1 = new Properties();
+        p1.put("foo", "foo");
+        ComponentInstance prov1 = provFactory.createComponentInstance(p1);
+
+        map = obs.getObservations();
+        assertEquals("Check list #1", ((List) map.get("list")).size(), 1);
+
+        Properties p2 = new Properties();
+        p2.put("foo", "foo");
+        ComponentInstance prov2 = provFactory.createComponentInstance(p2);
+
+        map = obs.getObservations();
+        assertEquals("Check list #2", ((List) map.get("list")).size(), 2);
+
+        prov1.stop();
+
+        map = obs.getObservations();
+        assertEquals("(1) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov2.stop();
+
+        map = obs.getObservations();
+        assertEquals("(2) Check list #0", ((List) map.get("list")).size(), 0);
+
+        prov2.start();
+
+        map = obs.getObservations();
+        assertEquals("(3) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov1.start();
+
+        map = obs.getObservations();
+        assertEquals("(4) Check list #2", ((List) map.get("list")).size(), 2);
+
+        prov1.dispose();
+
+        map = obs.getObservations();
+        assertEquals("(5) Check list #1", ((List) map.get("list")).size(), 1);
+
+        prov2.dispose();
+
+        map = obs.getObservations();
+        assertEquals("(6) Check list #0", ((List) map.get("list")).size(), 0);
+
+        bc.ungetService(ref);
+        ci.dispose();
+    }
+}
diff --git a/ipojo/handler/whiteboard/whiteboard-handler/DEPENDENCIES b/ipojo/handler/whiteboard/whiteboard-handler/DEPENDENCIES
new file mode 100644
index 0000000..d7c64fa
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler/DEPENDENCIES
@@ -0,0 +1,18 @@
+Apache Felix iPOJO Whiteboard Pattern 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/whiteboard/whiteboard-handler/LICENSE b/ipojo/handler/whiteboard/whiteboard-handler/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-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/whiteboard/whiteboard-handler/NOTICE b/ipojo/handler/whiteboard/whiteboard-handler/NOTICE
new file mode 100644
index 0000000..6d95dad
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler/NOTICE
@@ -0,0 +1,6 @@
+Apache Felix iPOJO Whiteboard Pattern 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/whiteboard/doc/changelog.txt b/ipojo/handler/whiteboard/whiteboard-handler/doc/changelog.txt
similarity index 100%
rename from ipojo/handler/whiteboard/doc/changelog.txt
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/changelog.txt
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler.html b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler.html
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler.html
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler.html
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/apache.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/apache.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/apache.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/apache.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/button.html b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/button.html
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/button.html
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/button.html
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/button_data/2009-europe-125x125.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/button_data/2009-europe-125x125.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/button_data/2009-europe-125x125.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/button_data/2009-europe-125x125.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/feed-icon-32x32.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/feed-icon-32x32.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/feed-icon-32x32.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/feed-icon-32x32.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/footer.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/footer.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/footer.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/footer.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/ga.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/ga.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/ga.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/ga.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/header.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/header.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/header.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/header.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/hoverIntent.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/hoverIntent.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/hoverIntent.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/hoverIntent.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/information.gif b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/information.gif
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/information.gif
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/information.gif
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/ipojo.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/ipojo.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/ipojo.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/ipojo.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/jquery-1.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/jquery-1.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/jquery-1.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/jquery-1.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/linkext7.gif b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/linkext7.gif
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/linkext7.gif
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/linkext7.gif
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/logo.png b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/logo.png
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/logo.png
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/logo.png
Binary files differ
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushCSharp.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushCSharp.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushCSharp.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushCSharp.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushDelphi.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushDelphi.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushDelphi.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushDelphi.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushJScript.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushJScript.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushJScript.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushJScript.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushJava.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushJava.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushJava.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushJava.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushPhp.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushPhp.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushPhp.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushPhp.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushPython.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushPython.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushPython.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushPython.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushShell.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushShell.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushShell.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushShell.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushSql.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushSql.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushSql.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushSql.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushVb.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushVb.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushVb.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushVb.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushXml.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushXml.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shBrushXml.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shBrushXml.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shCore.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shCore.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/shCore.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shCore.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/site.css b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/site.css
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/site.css
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/site.css
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/superfish.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/superfish.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/superfish.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/superfish.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/supersubs.js b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/supersubs.js
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/supersubs.js
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/supersubs.js
diff --git a/ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/warning.gif b/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/warning.gif
similarity index 100%
rename from ipojo/handler/whiteboard/doc/white-board-pattern-handler_files/warning.gif
rename to ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/warning.gif
Binary files differ
diff --git a/ipojo/handler/whiteboard/metadata.xml b/ipojo/handler/whiteboard/whiteboard-handler/metadata.xml
similarity index 100%
rename from ipojo/handler/whiteboard/metadata.xml
rename to ipojo/handler/whiteboard/whiteboard-handler/metadata.xml
diff --git a/ipojo/handler/whiteboard/obr.xml b/ipojo/handler/whiteboard/whiteboard-handler/obr.xml
similarity index 100%
rename from ipojo/handler/whiteboard/obr.xml
rename to ipojo/handler/whiteboard/whiteboard-handler/obr.xml
diff --git a/ipojo/handler/whiteboard/whiteboard-handler/pom.xml b/ipojo/handler/whiteboard/whiteboard-handler/pom.xml
new file mode 100644
index 0000000..673b698
--- /dev/null
+++ b/ipojo/handler/whiteboard/whiteboard-handler/pom.xml
@@ -0,0 +1,130 @@
+<!--
+  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 White Board Pattern Handler</name>
+    <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId>
+    <groupId>org.apache.felix</groupId>
+    <version>1.6.1-SNAPSHOT</version>
+
+    <description>
+        iPOJO extension to easily implement a white-board pattern (host).
+    </description>
+    <url>
+        http://felix.apache.org/site/white-board-pattern-handler.html
+    </url>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo</artifactId>
+            <version>1.6.4</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>
+                <configuration>
+                    <instructions>
+                        <Bundle-Name>${project.name}</Bundle-Name>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
+                        <Bundle-Description>iPOJO White-Board Pattern Handler
+                        </Bundle-Description>
+                        <Bundle-DocURL>
+                            http://felix.apache.org/site/white-board-pattern-handler.html
+                        </Bundle-DocURL>
+                        <Private-Package>org.apache.felix.ipojo.handler.wbp
+                        </Private-Package>
+                        <Bundle-Name>${project.name}</Bundle-Name>
+                        <Include-Resource>
+                            META-INF/LICENSE=LICENSE,
+                            META-INF/NOTICE=NOTICE,
+                            META-INF/DEPENDENCIES=DEPENDENCIES
+                        </Include-Resource>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-ipojo-plugin</artifactId>
+                <version>1.6.0</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>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <target>1.5</target>
+                    <source>1.5</source>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/ipojo/handler/whiteboard/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java b/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java
similarity index 100%
rename from ipojo/handler/whiteboard/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java
rename to ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java
diff --git a/ipojo/handler/whiteboard/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java b/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java
similarity index 100%
rename from ipojo/handler/whiteboard/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java
rename to ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java
diff --git a/ipojo/handler/whiteboard/src/main/resources/whiteboard-pattern.xsd b/ipojo/handler/whiteboard/whiteboard-handler/src/main/resources/whiteboard-pattern.xsd
similarity index 100%
rename from ipojo/handler/whiteboard/src/main/resources/whiteboard-pattern.xsd
rename to ipojo/handler/whiteboard/whiteboard-handler/src/main/resources/whiteboard-pattern.xsd
