diff --git a/ipojo/distributions/ten-minutes-tutorial/pom.xml b/ipojo/distributions/ten-minutes-tutorial/pom.xml
new file mode 100644
index 0000000..647b7f2
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/pom.xml
@@ -0,0 +1,251 @@
+<?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.9.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>ten-minutes-tutorial</artifactId>
+    <version>1.9.0-SNAPSHOT</version>
+
+    <description>This project builds the 10 minutes tutorial package</description>
+
+
+    <properties>
+        <felix.version>4.2.1</felix.version>
+        <ipojo.ant.version>1.9.0-SNAPSHOT</ipojo.ant.version>
+        <ipojo.runtime.version>1.9.0-SNAPSHOT</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.arch.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.arch.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.8.6</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>org.apache.felix.ipojo.arch.gogo</artifactId>
+                <version>1.0.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.8.6</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
new file mode 100644
index 0000000..86f682b
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/build.xml
@@ -0,0 +1,54 @@
+<?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
new file mode 100644
index 0000000..78999e6
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/build.xml
@@ -0,0 +1,74 @@
+<?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
new file mode 100644
index 0000000..f367fa1
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/spell.checker.gui.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..b288c2d
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker.gui/src/spell/gui/SpellCheckerGui.java
@@ -0,0 +1,133 @@
+/*
+ * 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
new file mode 100644
index 0000000..559991f
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/build.xml
@@ -0,0 +1,74 @@
+<?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
new file mode 100644
index 0000000..8405db2
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/spell.checker.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..4710a3e
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.checker/src/spell/checker/SpellCheck.java
@@ -0,0 +1,48 @@
+/*
+ * 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
new file mode 100644
index 0000000..75ffd2f
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/build.xml
@@ -0,0 +1,74 @@
+<?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
new file mode 100644
index 0000000..e68a9f2
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/spell.english.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..4386dc5
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.english/src/spell/english/EnglishDictionary.java
@@ -0,0 +1,46 @@
+/*
+ * 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
new file mode 100644
index 0000000..0f87b8f
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/build.xml
@@ -0,0 +1,55 @@
+<?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
new file mode 100644
index 0000000..d976ef0
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/spell.services.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..8fdbfb5
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/DictionaryService.java
@@ -0,0 +1,30 @@
+/*
+ * 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
new file mode 100644
index 0000000..e1874a7
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/skeleton/spell.services/src/spell/services/SpellChecker.java
@@ -0,0 +1,24 @@
+/*
+ * 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
new file mode 100644
index 0000000..bf8d10d
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/build.xml
@@ -0,0 +1,38 @@
+<?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
new file mode 100644
index 0000000..cecf4dd
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/build.xml
@@ -0,0 +1,74 @@
+<?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
new file mode 100644
index 0000000..f367fa1
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/spell.checker.gui.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..8aa867e
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker.gui/src/spell/gui/SpellCheckerGui.java
@@ -0,0 +1,138 @@
+/*
+ * 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
new file mode 100644
index 0000000..62edb7b
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/build.xml
@@ -0,0 +1,55 @@
+<?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
new file mode 100644
index 0000000..8405db2
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/spell.checker.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..8d8a35a
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.checker/src/spell/checker/SpellCheck.java
@@ -0,0 +1,78 @@
+/*
+ * 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
new file mode 100644
index 0000000..946ac59
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/build.xml
@@ -0,0 +1,74 @@
+<?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
new file mode 100644
index 0000000..e68a9f2
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/spell.english.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..c261e7b
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.english/src/spell/english/EnglishDictionary.java
@@ -0,0 +1,56 @@
+/*
+ * 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
new file mode 100644
index 0000000..0b4e2fa
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/build.xml
@@ -0,0 +1,55 @@
+<?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
new file mode 100644
index 0000000..d976ef0
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/spell.services.bnd
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..5f53d62
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/DictionaryService.java
@@ -0,0 +1,31 @@
+/*
+ * 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
new file mode 100644
index 0000000..e6c0cf2
--- /dev/null
+++ b/ipojo/distributions/ten-minutes-tutorial/src/main/solution/spell.services/src/spell/services/SpellChecker.java
@@ -0,0 +1,40 @@
+/*
+ * 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);
+}
