diff --git a/ipojo/distributions/ipojo-felix-quicktart/pom.xml b/ipojo/distributions/ipojo-felix-quicktart/pom.xml
deleted file mode 100644
index b43ad73..0000000
--- a/ipojo/distributions/ipojo-felix-quicktart/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>org.apache.felix.ipojo.distributions</artifactId>
-        <version>1.10.2-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>ipojo-felix-quicktart</artifactId>
-
-    <packaging>pom</packaging>
-
-    <description>
-        Build a distribution of Felix including iPOJO core and gogo commands
-    </description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.main.distribution</artifactId>
-            <type>zip</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.gogo</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptors>
-                        <descriptor>src/main/assembly/distribution.xml</descriptor>
-                    </descriptors>
-                    <attach>true</attach>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/ipojo-felix-quicktart/src/main/assembly/distribution.xml b/ipojo/distributions/ipojo-felix-quicktart/src/main/assembly/distribution.xml
deleted file mode 100644
index c44be44..0000000
--- a/ipojo/distributions/ipojo-felix-quicktart/src/main/assembly/distribution.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-
-    <id>distribution</id>
-
-    <formats>
-        <format>zip</format>
-        <format>tar.gz</format>
-    </formats>
-
-    <dependencySets>
-        <!-- unpack Felix distribution -->
-        <dependencySet>
-            <includes>
-                <include>*:org.apache.felix.main.distribution:*</include>
-            </includes>
-            <unpack>true</unpack>
-            <outputDirectory>.</outputDirectory>
-            <unpackOptions>
-                <excludes>
-                    <exclude>**/doc/**</exclude>
-                </excludes>
-            </unpackOptions>
-        </dependencySet>
-
-        <dependencySet>
-            <includes>
-                <include>*:org.apache.felix.ipojo:*</include>
-                <include>*:org.apache.felix.ipojo.gogo:*</include>
-            </includes>
-            <unpack>false</unpack>
-            <outputDirectory>./felix-framework-${felix.version}/bundle</outputDirectory>
-        </dependencySet>
-    </dependencySets>
-
-</assembly>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/pom.xml b/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/pom.xml
deleted file mode 100644
index b4d6c95..0000000
--- a/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <packaging>bundle</packaging>
-
-    <artifactId>hello.client.annotations</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Private-Package>
-                            ipojo.example.hello.client
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-ipojo-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>ipojo-bundle</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/src/main/java/ipojo/example/hello/client/HelloClient.java b/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/src/main/java/ipojo/example/hello/client/HelloClient.java
deleted file mode 100644
index 1170f3c..0000000
--- a/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/src/main/java/ipojo/example/hello/client/HelloClient.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package ipojo.example.hello.client;
-
-import ipojo.example.hello.Hello;
-import org.apache.felix.ipojo.annotations.*;
-
-/**
- * A simple Hello service client. This client use annotation instead of XML metadata.
- * If no Hello provider are available, it uses a default implementation.
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-@Component(name = "AnnotatedHelloClient")
-@Instantiate
-public class HelloClient implements Runnable {
-
-    /**
-     * Delay between two invocations.
-     */
-    private static final int DELAY = 10000;
-    /**
-     * Hello services. Injected by the container.
-     */
-    @Requires(optional = true, defaultimplementation = MyDummyHello.class)
-    private Hello hello;
-    /**
-     * End flag.
-     */
-    private boolean m_end;
-
-    /**
-     * Run method.
-     *
-     * @see Runnable#run()
-     */
-    public void run() {
-        while (!m_end) {
-            try {
-                invokeHelloServices();
-                Thread.sleep(DELAY);
-            } catch (InterruptedException ie) {
-                /* will recheck end */
-            }
-        }
-    }
-
-    /**
-     * Invoke hello services.
-     */
-    public void invokeHelloServices() {
-        System.out.println(hello.sayHello("Clement "));
-    }
-
-    /**
-     * Starting.
-     */
-    @Validate
-    public void starting() {
-        Thread thread = new Thread(this);
-        m_end = false;
-        thread.start();
-    }
-
-    /**
-     * Stopping.
-     */
-    @Invalidate
-    public void stopping() {
-        m_end = true;
-    }
-}
diff --git a/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/src/main/java/ipojo/example/hello/client/MyDummyHello.java b/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/src/main/java/ipojo/example/hello/client/MyDummyHello.java
deleted file mode 100644
index 16e09c3..0000000
--- a/ipojo/distributions/maven-tutorial/annotations/hello.client.annotations/src/main/java/ipojo/example/hello/client/MyDummyHello.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package ipojo.example.hello.client;
-
-import ipojo.example.hello.Hello;
-
-public class MyDummyHello implements Hello {
-
-    public String sayHello(String name) {
-        return "Bonjour";
-    }
-
-}
diff --git a/ipojo/distributions/maven-tutorial/annotations/hello.felix.annotations/pom.xml b/ipojo/distributions/maven-tutorial/annotations/hello.felix.annotations/pom.xml
deleted file mode 100644
index 60ac6f4..0000000
--- a/ipojo/distributions/maven-tutorial/annotations/hello.felix.annotations/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>hello.felix.annotations</artifactId>
-
-    <description>A project building a Felix with the annotated Hello service and client</description>
-
-    <packaging>pom</packaging>
-
-    <dependencies>
-        <!-- our project  -->
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.impl.annotations</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.client.annotations</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <version>2.7</version>
-                <executions>
-
-                    <execution>
-                        <id>unpack-felix</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>unpack-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>org.apache.felix.main.distribution</includeArtifactIds>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-
-                    <execution>
-                        <id>copy-bundles</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>
-                                hello.service,
-                                hello.impl.annotations,
-                                hello.client.annotations,
-                                org.apache.felix.log,org.apache.felix.ipojo,
-                                org.apache.felix.ipojo.arch.gogo
-                            </includeArtifactIds>
-                            <outputDirectory>${project.build.directory}/felix-framework-${felix.version}/bundle
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/annotations/hello.impl.annotations/pom.xml b/ipojo/distributions/maven-tutorial/annotations/hello.impl.annotations/pom.xml
deleted file mode 100644
index 3aa6684..0000000
--- a/ipojo/distributions/maven-tutorial/annotations/hello.impl.annotations/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>hello.impl.annotations</artifactId>
-
-    <packaging>bundle</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Private-Package>
-                            ipojo.example.hello.impl
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-ipojo-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>ipojo-bundle</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/annotations/hello.impl.annotations/src/main/java/ipojo/example/hello/impl/HelloImpl.java b/ipojo/distributions/maven-tutorial/annotations/hello.impl.annotations/src/main/java/ipojo/example/hello/impl/HelloImpl.java
deleted file mode 100644
index 93ccaa9..0000000
--- a/ipojo/distributions/maven-tutorial/annotations/hello.impl.annotations/src/main/java/ipojo/example/hello/impl/HelloImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package ipojo.example.hello.impl;
-
-import ipojo.example.hello.Hello;
-
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Provides;
-import org.apache.felix.ipojo.annotations.ServiceProperty;
-
-/**
- * Component implementing the Hello service.
- * This class used annotations to describe the component type. 
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-@Component
-@Provides
-@Instantiate // Declare an instance of the component
-public class HelloImpl implements Hello {
-    
-    
-    @ServiceProperty
-    public String boo = "boo";
-    
-    @ServiceProperty
-    public String bla = "bla";
-
-    
-    /**
-     * Returns an 'Hello' message.
-     * @param name : name
-     * @return Hello message
-     * @see ipojo.example.hello.Hello#sayHello(String)
-     */
-    public String sayHello(String name) { return "hello " + name + " @";  }
-}
diff --git a/ipojo/distributions/maven-tutorial/hello.service/pom.xml b/ipojo/distributions/maven-tutorial/hello.service/pom.xml
deleted file mode 100644
index e188c91..0000000
--- a/ipojo/distributions/maven-tutorial/hello.service/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-<project>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-    </parent>
-
-    <packaging>bundle</packaging>
-
-    <artifactId>hello.service</artifactId>
-    <name>Hello Service</name>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            ipojo.example.hello
-                        </Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/ipojo/distributions/maven-tutorial/hello.service/src/main/java/ipojo/example/hello/Hello.java b/ipojo/distributions/maven-tutorial/hello.service/src/main/java/ipojo/example/hello/Hello.java
deleted file mode 100644
index e0c25da..0000000
--- a/ipojo/distributions/maven-tutorial/hello.service/src/main/java/ipojo/example/hello/Hello.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/* 
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package ipojo.example.hello;
-
-/**
- * Hello Interface.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public interface Hello {
-
-    /**
-     * Returns a message like: "Hello $user_name".
-     * @param name the name
-     * @return the hello message
-     */
-    String sayHello(String name);
-}
diff --git a/ipojo/distributions/maven-tutorial/pom.xml b/ipojo/distributions/maven-tutorial/pom.xml
deleted file mode 100644
index 9439b27..0000000
--- a/ipojo/distributions/maven-tutorial/pom.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.apache.felix</groupId>
-    <artifactId>maven-tutorial</artifactId>
-    <version>1.10.2-SNAPSHOT</version>
-
-    <packaging>pom</packaging>
-
-    <description>
-        The iPOJO Maven tutorial
-    </description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.main.distribution</artifactId>
-            <type>zip</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.gogo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-        </dependency>
-    </dependencies>
-
-    <modules>
-       <module>hello.service</module>
-
-        <!-- XML -->
-        <module>xml/hello.impl.xml</module>
-        <module>xml/hello.client.xml</module>
-        <module>xml/hello.felix.xml</module>
-
-        <!-- Annotation -->
-        <module>annotations/hello.impl.annotations</module>
-        <module>annotations/hello.client.annotations</module>
-        <module>annotations/hello.felix.annotations</module>
-    </modules>
-
-    <properties>
-        <felix.version>4.2.1</felix.version>
-    </properties>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.ipojo</artifactId>
-                <version>1.10.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.ipojo.gogo</artifactId>
-                <version>1.10.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.main.distribution</artifactId>
-                <version>4.2.1</version>
-                <type>zip</type>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-                <version>1.10.1</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.felix</groupId>
-                    <artifactId>maven-bundle-plugin</artifactId>
-                    <version>2.3.7</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.felix</groupId>
-                    <artifactId>maven-ipojo-plugin</artifactId>
-                    <version>1.10.1</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.4</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-
-        <plugins>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptorRefs>
-                        <ref>project</ref>
-                    </descriptorRefs>
-                    <attach>true</attach>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.client.xml/pom.xml b/ipojo/distributions/maven-tutorial/xml/hello.client.xml/pom.xml
deleted file mode 100644
index c0430fd..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.client.xml/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <packaging>bundle</packaging>
-
-    <artifactId>hello.client.xml</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Private-Package>
-                            ipojo.example.hello.client
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-ipojo-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>ipojo-bundle</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.client.xml/src/main/java/ipojo/example/hello/client/HelloClient.java b/ipojo/distributions/maven-tutorial/xml/hello.client.xml/src/main/java/ipojo/example/hello/client/HelloClient.java
deleted file mode 100644
index 85e2ff5..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.client.xml/src/main/java/ipojo/example/hello/client/HelloClient.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package ipojo.example.hello.client;
-
-import ipojo.example.hello.Hello;
-
-/**
- * Hello Service simple client.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class HelloClient implements Runnable {
-
-    /**
-     *  Delay between two invocations. 
-     */
-    private static final int DELAY = 10000;
-    
-    /** 
-     * Hello services. 
-     * Injected by the container.
-     * */
-    private Hello[] hellos; // Service dependency
-
-    /** 
-     * End flag.
-     *  */
-    private boolean end;
-
-    /** 
-     * Name property.
-     * Injected by the container.
-     * */
-    private String name;
-
-    /**
-     * Run method.
-     * @see Runnable#run()
-     */
-    public void run() {
-        while (!end) {
-            try {
-                invokeHelloServices();
-                Thread.sleep(DELAY);
-            } catch (InterruptedException ie) {
-                /* will recheck end */
-            }
-        }
-    }
-
-    /**
-     * Invoke hello services.
-     */
-    public void invokeHelloServices() {
-        for (Hello hello : hellos) {
-            System.out.println(hello.sayHello(name));
-        }
-    }
-
-    /**
-     * Starting.
-     */
-    public void starting() {
-        Thread thread = new Thread(this);
-        end = false;
-        thread.start();
-    }
-
-    /**
-     * Stopping.
-     */
-    public void stopping() {
-        end = true;
-    }
-}
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.client.xml/src/main/resources/metadata.xml b/ipojo/distributions/maven-tutorial/xml/hello.client.xml/src/main/resources/metadata.xml
deleted file mode 100644
index 3687ca4..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.client.xml/src/main/resources/metadata.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd"
-       xmlns="org.apache.felix.ipojo">
-	<component classname="ipojo.example.hello.client.HelloClient"
-		architecture="true">
-        <!-- Declare the service dependency -->
-		<requires field="hellos" />
-
-        <!-- Lifecycle callbacks -->
-		<callback transition="validate" method="starting" />
-		<callback transition="invalidate" method="stopping" />
-
-        <!-- A simple property coming from the instance configuration -->
-        <properties>
-			<property field="name" name="name" />
-		</properties>
-	</component>
-
-    <!--
-    Declaration of an instance of the component specified above.
-    Notice the instance property 'name' setting the value of the component's property
-    -->
-	<instance component="ipojo.example.hello.client.HelloClient">
-		<property name="name" value="iPOJO" />
-	</instance>
-
-</ipojo>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.felix.xml/pom.xml b/ipojo/distributions/maven-tutorial/xml/hello.felix.xml/pom.xml
deleted file mode 100644
index 136b908..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.felix.xml/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>hello.felix.xml</artifactId>
-
-    <description>A project building a Felix with the XML Hello service and client</description>
-
-    <packaging>pom</packaging>
-
-    <dependencies>
-        <!-- our project  -->
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.impl.xml</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.client.xml</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <version>2.7</version>
-                <executions>
-
-                    <execution>
-                        <id>unpack-felix</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>unpack-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>org.apache.felix.main.distribution</includeArtifactIds>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-
-                    <execution>
-                        <id>copy-bundles</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>
-                                hello.service,
-                                hello.impl.xml,
-                                hello.client.xml,
-                                org.apache.felix.log,org.apache.felix.ipojo,
-                                org.apache.felix.ipojo.arch.gogo
-                            </includeArtifactIds>
-                            <outputDirectory>${project.build.directory}/felix-framework-${felix.version}/bundle
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/pom.xml b/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/pom.xml
deleted file mode 100644
index 41eabf3..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-tutorial</artifactId>
-        <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>hello.impl.xml</artifactId>
-
-    <packaging>bundle</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>hello.service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Private-Package>
-                            ipojo.example.hello.impl
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-ipojo-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>ipojo-bundle</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/src/main/java/ipojo/example/hello/impl/HelloImpl.java b/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/src/main/java/ipojo/example/hello/impl/HelloImpl.java
deleted file mode 100644
index 6fd36e3..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/src/main/java/ipojo/example/hello/impl/HelloImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package ipojo.example.hello.impl;
-
-import ipojo.example.hello.Hello;
-
-/**
- * Component implementing the Hello service.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class HelloImpl implements Hello {
-    
-    /**
-     * Returns an 'Hello' message.
-     * @param name : name
-     * @return Hello message
-     * @see ipojo.example.hello.Hello#sayHello(String)
-     */
-    public String sayHello(String name) { return "hello " + name;  }
-}
diff --git a/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/src/main/resources/metadata.xml b/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/src/main/resources/metadata.xml
deleted file mode 100644
index 59d9666..0000000
--- a/ipojo/distributions/maven-tutorial/xml/hello.impl.xml/src/main/resources/metadata.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<iPOJO>
-	<component className="ipojo.example.hello.impl.HelloImpl"
-		name="HelloProvider" architecture="true">
-		<provides />
-	</component>
-	<instance component="HelloProvider" name="HelloService" />
-</iPOJO>
\ No newline at end of file
diff --git a/ipojo/distributions/pom.xml b/ipojo/distributions/pom.xml
index 609311b..d331399 100644
--- a/ipojo/distributions/pom.xml
+++ b/ipojo/distributions/pom.xml
@@ -34,10 +34,7 @@
     </description>
 
     <modules>
-        <module>ipojo-felix-quicktart</module>
         <module>ipojo-webconsole-quicktart</module>
-        <module>ten-minutes-tutorial</module>
-        <module>maven-tutorial</module>
         <module>handler-tutorial</module>
     </modules>
 
diff --git a/ipojo/distributions/ten-minutes-tutorial/pom.xml b/ipojo/distributions/ten-minutes-tutorial/pom.xml
deleted file mode 100644
index 52dc32b..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/pom.xml
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>org.apache.felix.ipojo.distributions</artifactId>
-        <version>1.10.2-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>ten-minutes-tutorial</artifactId>
-
-    <description>This project builds the 10 minutes tutorial package</description>
-
-
-    <properties>
-        <felix.version>4.2.1</felix.version>
-        <ipojo.ant.version>1.10.1</ipojo.ant.version>
-        <ipojo.runtime.version>1.10.1</ipojo.runtime.version>
-        <bnd.version>1.50.0</bnd.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <version>2.7</version>
-                <executions>
-
-                    <execution>
-                        <id>unpack-felix</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>unpack-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>org.apache.felix.main.distribution</includeArtifactIds>
-                            <outputDirectory>${project.build.directory}/dist</outputDirectory>
-                        </configuration>
-                    </execution>
-
-                    <execution>
-                        <id>copy-ant-tasks</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>
-                                org.apache.felix.ipojo.ant,
-                                bnd
-                            </includeArtifactIds>
-                            <outputDirectory>${project.build.directory}/dist/tasks
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-
-                    <execution>
-                        <id>copy-bundles</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <includeArtifactIds>
-                                org.apache.felix.ipojo.properties.handler,
-                                org.apache.felix.ipojo.properties.consumer,
-                                org.apache.felix.ipojo,
-                                org.apache.felix.ipojo.gogo
-                            </includeArtifactIds>
-                            <outputDirectory>${project.build.directory}/dist/felix-framework-${felix.version}/bundle
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!--
-             we also copy properties file to the distribution folder,
-             the properties are stored in src/main/resources/props
-             -->
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>2.6</version>
-                <executions>
-                    <execution>
-                        <id>copy-skeleton</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/dist
-                            </outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>src/main/skeleton</directory>
-                                    <filtering>true</filtering>
-                                </resource>
-                            </resources>
-                            <includeEmptyDirs>true</includeEmptyDirs>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>copy-solution</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/dist/solution
-                            </outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>src/main/solution</directory>
-                                    <filtering>true</filtering>
-                                </resource>
-                            </resources>
-                            <includeEmptyDirs>true</includeEmptyDirs>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.7</version>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <configuration>
-                            <target>
-                                <ant dir="target/dist" target="clean"/>
-                                <ant dir="target/dist" target="package"/>
-                                <ant dir="target/dist" target="dist"/>
-                            </target>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <version>1.8</version>
-                <executions>
-                    <execution>
-                        <id>attach-artifacts</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>attach-artifact</goal>
-                        </goals>
-                        <configuration>
-                            <artifacts>
-                                <artifact>
-                                    <file>${project.build.directory}/dist/dist/tutorial.zip</file>
-                                    <type>zip</type>
-                                </artifact>
-                            </artifacts>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.ant</artifactId>
-            <version>${ipojo.ant.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>biz.aQute</groupId>
-            <artifactId>bnd</artifactId>
-            <version>${bnd.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.main.distribution</artifactId>
-            <type>zip</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo</artifactId>
-            <version>${ipojo.runtime.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.gogo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-        </dependency>
-    </dependencies>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.ipojo</artifactId>
-                <version>1.10.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.ipojo.gogo</artifactId>
-                <version>1.10.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.main.distribution</artifactId>
-                <version>4.2.1</version>
-                <type>zip</type>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-                <version>1.10.1</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-</project>
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/build.xml
deleted file mode 100644
index 86f682b..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/build.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.checker.example" default="package" basedir=".">
-	
-	<target name="clean">
-		<ant dir="spell.services" target="clean"/>
-		<ant dir="spell.english" target="clean"/>
-		<ant dir="spell.checker" target="clean"/>
-		<ant dir="spell.checker.gui" target="clean"/>
-		<ant dir="solution" target="clean"/>
-		<delete dir="felix-framework-${felix.version}/felix-cache"/>
-		<delete dir="dist"/>
-	</target>
-	
-	<target name="package">
-		<ant dir="spell.services" target="package"/>
-		<ant dir="spell.english" target="package"/>
-		<ant dir="spell.checker" target="package"/>
-		<ant dir="spell.checker.gui" target="package"/>
-		<ant dir="solution" target="package"/>	
-	</target>
-	
-	<target name="dist" depends="clean">
-		<mkdir dir="dist"/>
-		<zip destfile="dist/tutorial.zip">
-			<fileset dir=".">
-				<exclude name="build.xml"/>
-				<exclude name="dist"/>
-				<exclude name=".*"/>
-				<exclude name="*/_*"/>
-			</fileset>	
-		</zip>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/build.xml
deleted file mode 100644
index 78999e6..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.checker.gui" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="lib.dir" value="libs"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../tasks/bnd-${bnd.version}.jar"/>
-	<taskdef name="ipojo" classpath="../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar"
-		classname="org.apache.felix.ipojo.task.IPojoTask"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-		<delete dir="${lib.dir}"/>
-	</target>
-	
-	<target name="buildclasspath">
-		<copy file="../spell.services/output/spell.services.jar" todir="${lib.dir}"/>
-        <copy file="../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar" todir="${lib.dir}"/>
-	</target>
-
-    <path id="classpath">
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    </path>
-
-	<target name="compile" depends="clean, buildclasspath">
-		<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-				 classpathref="classpath"
-		  />
-
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}" 
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-		
-		<ipojo
-				input="${output.dir}/${ant.project.name}.jar"
-		/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/spell.checker.gui.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/spell.checker.gui.bnd
deleted file mode 100644
index f367fa1..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/spell.checker.gui.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Private-Package: spell.gui
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/src/spell/gui/SpellCheckerGui.java b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/src/spell/gui/SpellCheckerGui.java
deleted file mode 100644
index b288c2d..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/src/spell/gui/SpellCheckerGui.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.gui;
-
-import org.apache.felix.ipojo.annotations.*;
-import spell.services.SpellChecker;
-
-import javax.swing.*;
-
-/**
- * A very simple Gui interacting with the CheckSpeller service
- */
-@Component // It's a component
-@Instantiate // We declarare an instance
-public class SpellCheckerGui extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Swing component where the user write the passage to check.
-     */
-    private JTextField passage = null;
-
-    /**
-     * Area where the result is displayed.
-     */
-    private JLabel result = null;
-
-    /**
-     * Service dependency on the SpellChecker.
-     */
-    @Requires // It's a service dependency
-    private SpellChecker checker;
-
-    /**
-     * Constructor.
-     * Initialize the GUI.
-     */
-    public SpellCheckerGui() {
-        super();
-        initComponents();
-        this.setTitle("Spellchecker Gui");
-    }
-
-    /**
-     * Initialize the Swing Gui.
-     */
-    private void initComponents() {
-        java.awt.GridBagConstraints gridBagConstraints;
-
-        // The check button
-        JButton checkButton = new JButton();
-        result = new JLabel();
-        passage = new JTextField();
-
-        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); // Stop Felix...
-        getContentPane().setLayout(new java.awt.GridBagLayout());
-
-        checkButton.setText("Check");
-        checkButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent e) {
-                check();
-            }
-        });
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 1;
-        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
-        getContentPane().add(checkButton, gridBagConstraints);
-
-        result.setPreferredSize(new java.awt.Dimension(175, 20));
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 2;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
-        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
-        getContentPane().add(result, gridBagConstraints);
-
-        passage.setPreferredSize(new java.awt.Dimension(175, 20));
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 0;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
-        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
-        getContentPane().add(passage, gridBagConstraints);
-
-        pack();
-    }
-
-    /**
-     * Check Button action.
-     * Collects the user input and checks it.
-     */
-    private void check() {
-        // TODO
-    }
-
-    /**
-     * Start callback.
-     * This method will be called when the instance becomes valid.
-     * It set the Gui visibility to true.
-     */
-    @Validate
-    public void start() {
-        // TODO
-    }
-
-    /**
-     * Stop callback.
-     * This method will be called when the instance becomes invalid or stops.
-     * It deletes the Gui.
-     */
-    @Invalidate
-    public void stop() {
-        // TODO
-    }
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/build.xml
deleted file mode 100644
index 559991f..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.checker" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="lib.dir" value="libs"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../tasks/bnd-${bnd.version}.jar"/>
-	<taskdef name="ipojo" classpath="../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar"
-		classname="org.apache.felix.ipojo.task.IPojoTask"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-		<delete dir="${lib.dir}"/>
-	</target>
-	
-	<target name="buildclasspath">
-		<copy file="../spell.services/output/spell.services.jar" todir="${lib.dir}"/>
-        <copy file="../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar" todir="${lib.dir}"/>
-	</target>
-
-    <path id="classpath">
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    </path>
-
-	<target name="compile" depends="clean, buildclasspath">
-	<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-				 classpathref="classpath"
-		  />
-
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}" 
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-		
-		<ipojo
-				input="${output.dir}/${ant.project.name}.jar"
-		/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/spell.checker.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/spell.checker.bnd
deleted file mode 100644
index 8405db2..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/spell.checker.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Private-Package: spell.checker
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/src/spell/checker/SpellCheck.java b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/src/spell/checker/SpellCheck.java
deleted file mode 100644
index 4710a3e..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/src/spell/checker/SpellCheck.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package spell.checker;
-
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Provides;
-import org.apache.felix.ipojo.annotations.Requires;
-import spell.services.DictionaryService;
-import spell.services.SpellChecker;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-//TODO
-public class SpellCheck implements SpellChecker {
-
-    //TODO
-
-    /**
-     * Implements SpellChecker.check(). Checks the given passage for misspelled words.
-     *
-     * @param passage the passage to spell check.
-     * @return An array of misspelled words or null if no words are misspelled.
-     */
-    public String[] check(String passage) {
-        //TODO
-        return new String[] {};
-    }
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/build.xml
deleted file mode 100644
index 75ffd2f..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.english" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="lib.dir" value="libs"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../tasks/bnd-${bnd.version}.jar"/>
-	<taskdef name="ipojo" classpath="../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar"
-		classname="org.apache.felix.ipojo.task.IPojoTask"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-		<delete dir="${lib.dir}"/>
-	</target>
-	
-	<target name="buildclasspath">
-		<copy file="../spell.services/output/spell.services.jar" todir="${lib.dir}"/>
-        <copy file="../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar" todir="${lib.dir}"/>
-	</target>
-
-    <path id="classpath">
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    </path>
-
-	<target name="compile" depends="clean, buildclasspath">
-		<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-				 classpathref="classpath"
-		  />
-
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}"
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-		
-		<ipojo
-				input="${output.dir}/${ant.project.name}.jar"
-		/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/spell.english.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/spell.english.bnd
deleted file mode 100644
index e68a9f2..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/spell.english.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Private-Package: spell.english
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/src/spell/english/EnglishDictionary.java b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/src/spell/english/EnglishDictionary.java
deleted file mode 100644
index 4386dc5..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/src/spell/english/EnglishDictionary.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.english;
-
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Provides;
-import spell.services.DictionaryService;
-
-/**
- * An implementation of the Dictionary service containing English words
- * see DictionaryService for details of the service.
- **/
-@Component // It's an iPOJO Component
-@Provides // We provide a service
-@Instantiate // We declare an instance of our component
-public class EnglishDictionary implements DictionaryService {
-
-    /**
-     * Implements DictionaryService.checkWord(). Determines
-     * if the passed in word is contained in the dictionary.
-     * @param word the word to be checked.
-     * @return true if the word is in the dictionary,
-     *         false otherwise.
-     **/
-    public boolean checkWord(String word) {
-        //TODO
-        return false;
-    }
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/build.xml
deleted file mode 100644
index 0f87b8f..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/build.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.services" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../tasks/bnd-${bnd.version}.jar"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-	</target>
-
-	<target name="compile" depends="clean">
-		<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-		  />
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}" 
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/spell.services.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/spell.services.bnd
deleted file mode 100644
index d976ef0..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/spell.services.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Export-Package: spell.services
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/DictionaryService.java b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/DictionaryService.java
deleted file mode 100644
index 8fdbfb5..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/DictionaryService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.services;
-
-public interface DictionaryService {
-
-    /**
-     * Check for the existence of a word.
-     * @param word the word to be checked.
-     * @return true if the word is in the dictionary,
-     *         false otherwise.
-     **/
-    public boolean checkWord(String word);
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/SpellChecker.java b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/SpellChecker.java
deleted file mode 100644
index e1874a7..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/SpellChecker.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.services;
-
-public interface SpellChecker
-{
-    //TODO
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/build.xml
deleted file mode 100644
index bf8d10d..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/build.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.checker.example" default="package" basedir=".">
-	
-	<target name="clean">
-		<ant dir="spell.services" target="clean"/>
-		<ant dir="spell.english" target="clean"/>
-		<ant dir="spell.checker" target="clean"/>
-		<ant dir="spell.checker.gui" target="clean"/>
-	</target>
-	
-	<target name="package">
-		<ant dir="spell.services" target="package"/>
-		<ant dir="spell.english" target="package"/>
-		<ant dir="spell.checker" target="package"/>
-		<ant dir="spell.checker.gui" target="package"/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/build.xml
deleted file mode 100644
index cecf4dd..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.checker.gui" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="lib.dir" value="libs"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../../tasks/bnd-${bnd.version}.jar"/>
-	<taskdef name="ipojo" classpath="../../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar"
-		classname="org.apache.felix.ipojo.task.IPojoTask"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-		<delete dir="${lib.dir}"/>
-	</target>
-	
-	<target name="buildclasspath">
-		<copy file="../spell.services/output/spell.services.jar" todir="${lib.dir}"/>
-        <copy file="../../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar" todir="${lib.dir}"/>
-	</target>
-
-    <path id="classpath">
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    </path>
-
-	<target name="compile" depends="clean, buildclasspath">
-		<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-				 classpathref="classpath"
-		  />
-
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}" 
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-		
-		<ipojo
-				input="${output.dir}/${ant.project.name}.jar"
-		/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/spell.checker.gui.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/spell.checker.gui.bnd
deleted file mode 100644
index f367fa1..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/spell.checker.gui.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Private-Package: spell.gui
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/src/spell/gui/SpellCheckerGui.java b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/src/spell/gui/SpellCheckerGui.java
deleted file mode 100644
index 8aa867e..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/src/spell/gui/SpellCheckerGui.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.gui;
-
-import org.apache.felix.ipojo.annotations.*;
-import spell.services.SpellChecker;
-
-import javax.swing.*;
-
-/**
- * A very simple Gui interacting with the CheckSpeller service
- */
-@Component
-@Instantiate
-public class SpellCheckerGui extends JFrame {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Swing component where the user write the passage to check.
-     */
-    private JTextField passage = null;
-
-    /**
-     * Area where the result is displayed.
-     */
-    private JLabel result = null;
-
-    /**
-     * Service dependency on the SpellChecker.
-     */
-    @Requires
-    private SpellChecker checker;
-
-    /**
-     * Constructor.
-     * Initialize the GUI.
-     */
-    public SpellCheckerGui() {
-        super();
-        initComponents();
-        this.setTitle("Spellchecker Gui");
-    }
-
-    /**
-     * Initialize the Swing Gui.
-     */
-    private void initComponents() {
-        java.awt.GridBagConstraints gridBagConstraints;
-
-        // The check button
-        JButton checkButton = new JButton();
-        result = new JLabel();
-        passage = new JTextField();
-
-        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); // Stop Felix...
-        getContentPane().setLayout(new java.awt.GridBagLayout());
-
-        checkButton.setText("Check");
-        checkButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent e) {
-                check();
-            }
-        });
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 1;
-        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
-        getContentPane().add(checkButton, gridBagConstraints);
-
-        result.setPreferredSize(new java.awt.Dimension(175, 20));
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 2;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
-        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
-        getContentPane().add(result, gridBagConstraints);
-
-        passage.setPreferredSize(new java.awt.Dimension(175, 20));
-        gridBagConstraints = new java.awt.GridBagConstraints();
-        gridBagConstraints.gridx = 0;
-        gridBagConstraints.gridy = 0;
-        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
-        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
-        getContentPane().add(passage, gridBagConstraints);
-
-        pack();
-    }
-
-    /**
-     * Check Button action.
-     * Collects the user input and checks it.
-     */
-    private void check() {
-        String[] result = checker.check(passage.getText());
-        if (result != null) {
-            this.result.setText(result.length + " word(s) are misspelled");
-        } else {
-            this.result.setText("All words are correct");
-        }
-    }
-
-    /**
-     * Start callback.
-     * This method will be called when the instance becomes valid.
-     * It set the Gui visibility to true.
-     */
-    @Validate
-    public void start() {
-        this.setVisible(true);
-    }
-
-    /**
-     * Stop callback.
-     * This method will be called when the instance becomes invalid or stops.
-     * It deletes the Gui.
-     */
-    @Invalidate
-    public void stop() {
-        this.dispose();
-    }
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/build.xml
deleted file mode 100644
index 62edb7b..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/build.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="spell.checker" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="lib.dir" value="libs"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../../tasks/bnd-${bnd.version}.jar"/>
-	<taskdef name="ipojo" classpath="../../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar"
-		classname="org.apache.felix.ipojo.task.IPojoTask"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-		<delete dir="${lib.dir}"/>
-	</target>
-	
-	<target name="buildclasspath">
-		<copy file="../spell.services/output/spell.services.jar" todir="${lib.dir}"/>
-        <copy file="../../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar" todir="${lib.dir}"/>
-	</target>
-
-    <path id="classpath">
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    </path>
-
-	<target name="compile" depends="clean, buildclasspath">
-	<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-				 classpathref="classpath"
-		  />
-
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}" 
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-		
-		<ipojo
-				input="${output.dir}/${ant.project.name}.jar"
-		/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/spell.checker.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/spell.checker.bnd
deleted file mode 100644
index 8405db2..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/spell.checker.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Private-Package: spell.checker
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/src/spell/checker/SpellCheck.java b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/src/spell/checker/SpellCheck.java
deleted file mode 100644
index 8d8a35a..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/src/spell/checker/SpellCheck.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.checker;
-
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Provides;
-import org.apache.felix.ipojo.annotations.Requires;
-import spell.services.DictionaryService;
-import spell.services.SpellChecker;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-@Component
-@Provides
-@Instantiate
-public class SpellCheck implements SpellChecker {
-
-    @Requires // This is a service dependency.
-    private DictionaryService dictionary;
-
-    /**
-     * Implements SpellChecker.check(). Checks the given passage for misspelled words.
-     *
-     * @param passage the passage to spell check.
-     * @return An array of misspelled words or null if no words are misspelled.
-     */
-    public String[] check(String passage) {
-        // No misspelled words for an empty string.
-        if ((passage == null) || (passage.length() == 0)) {
-            return null;
-        }
-
-        List<String> errorList = new ArrayList<String>();
-
-        // Tokenize the passage using spaces and punctuation.
-        StringTokenizer st = new StringTokenizer(passage, " ,.!?;:");
-
-        // Loop through each word in the passage.
-        while (st.hasMoreTokens()) {
-            String word = st.nextToken();
-
-            // Check the current word.
-            if (!dictionary.checkWord(word)) {
-                // If the word is not correct, then add it
-                // to the incorrect word list.
-                errorList.add(word);
-            }
-        }
-
-        // Return null if no words are incorrect.
-        if (errorList.size() == 0) {
-            return null;
-        }
-
-        // Return the array of incorrect words.
-        System.out.println("Wrong words:" + errorList);
-        return errorList.toArray(new String[errorList.size()]);
-    }
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/build.xml
deleted file mode 100644
index 946ac59..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/build.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.english" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="lib.dir" value="libs"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../../tasks/bnd-${bnd.version}.jar"/>
-	<taskdef name="ipojo" classpath="../../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar"
-		classname="org.apache.felix.ipojo.task.IPojoTask"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-		<delete dir="${lib.dir}"/>
-	</target>
-	
-	<target name="buildclasspath">
-		<copy file="../spell.services/output/spell.services.jar" todir="${lib.dir}"/>
-        <copy file="../../tasks/org.apache.felix.ipojo.ant-${ipojo.ant.version}.jar" todir="${lib.dir}"/>
-	</target>
-
-    <path id="classpath">
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    </path>
-
-	<target name="compile" depends="clean, buildclasspath">
-		<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-				 classpathref="classpath"
-		  />
-
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}"
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-		
-		<ipojo
-				input="${output.dir}/${ant.project.name}.jar"
-		/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/spell.english.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/spell.english.bnd
deleted file mode 100644
index e68a9f2..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/spell.english.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Private-Package: spell.english
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/src/spell/english/EnglishDictionary.java b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/src/spell/english/EnglishDictionary.java
deleted file mode 100644
index c261e7b..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/src/spell/english/EnglishDictionary.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.english;
-
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Provides;
-import spell.services.DictionaryService;
-
-/**
- * An implementation of the Dictionary service containing English words
- * see DictionaryService for details of the service.
- **/
-@Component // It's an iPOJO Component
-@Provides // We provide a service
-@Instantiate // We declare an instance of our component
-public class EnglishDictionary implements DictionaryService {
-
-    // The set of words contained in the dictionary.
-    String[] dictionary = { "welcome", "to", "the", "ipojo", "tutorial" };
-
-    /**
-     * Implements DictionaryService.checkWord(). Determines
-     * if the passed in word is contained in the dictionary.
-     * @param word the word to be checked.
-     * @return true if the word is in the dictionary,
-     *         false otherwise.
-     **/
-    public boolean checkWord(String word) {
-        word = word.toLowerCase();
-
-        // This is very inefficient
-        for (String dict : dictionary) {
-            if (dict.equals(word)) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/build.xml b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/build.xml
deleted file mode 100644
index 0b4e2fa..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/build.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<project name="spell.services" default="package" basedir="">
-	
-	<property name="src.dir" value="src"/>
-	<property name="build.dir" value="output/classes"/>
-	<property name="output.dir" value="output"/>
-	
-	<taskdef resource="aQute/bnd/ant/taskdef.properties"
-		      classpath="../../tasks/bnd-${bnd.version}.jar"/>
-	
-	<target name="clean">
-		<delete dir="${build.dir}"/>
-		<delete dir="${output.dir}"/>
-	</target>
-
-	<target name="compile" depends="clean">
-		<mkdir dir="${output.dir}"/>
-		<mkdir dir="${build.dir}"/>
-
-		<javac   srcdir="${src.dir}"
-		         destdir="${build.dir}"
-		         debug="on"
-		  />
-	</target>
-
-	<target name="package" depends="compile">
-		<bnd
-	   	  classpath="${build.dir}" 
-	      failok="false" 
-	      exceptions="true" 
-	      files="${ant.project.name}.bnd"
-		  output="${output.dir}"/>
-	</target>
-
-</project>
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/spell.services.bnd b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/spell.services.bnd
deleted file mode 100644
index d976ef0..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/spell.services.bnd
+++ /dev/null
@@ -1 +0,0 @@
-Export-Package: spell.services
\ No newline at end of file
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/DictionaryService.java b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/DictionaryService.java
deleted file mode 100644
index 5f53d62..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/DictionaryService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.services;
-
-public interface DictionaryService {
-    
-    /**
-     * Check for the existence of a word.
-     * @param word the word to be checked.
-     * @return true if the word is in the dictionary,
-     *         false otherwise.
-     **/
-    public boolean checkWord(String word);
-
-}
diff --git a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/SpellChecker.java b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/SpellChecker.java
deleted file mode 100644
index e6c0cf2..0000000
--- a/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/SpellChecker.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package spell.services;
-
-/**
- * A simple service interface that defines a spell checker service.
- * A spell checker service checks the spelling of all words in a
- * given passage. A passage is any number of words separated by
- * a space character and the following punctuation marks: comma,
- * period, exclamation mark, question mark, semi-colon, and colon.
-**/
-public interface SpellChecker
-{
-    /**
-     * Checks a given passage for spelling errors. A passage is any
-     * number of words separated by a space and any of the following
-     * punctuation marks: comma (,), period (.), exclamation mark (!),
-     * question mark (?), semi-colon (;), and colon(:).
-     * @param passage the passage to spell check.
-     * @return An array of misspelled words or null if no
-     *         words are misspelled.
-    **/
-    public String[] check(String passage);
-}
