diff --git a/org.apache.felix.examples.spellcheckservice/pom.xml b/org.apache.felix.examples.spellcheckservice/pom.xml
new file mode 100644
index 0000000..5491f6a
--- /dev/null
+++ b/org.apache.felix.examples.spellcheckservice/pom.xml
@@ -0,0 +1,44 @@
+<project>
+  <parent>
+    <groupId>org.apache.felix</groupId>
+    <artifactId>felix</artifactId>
+    <version>0.8-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>osgi-bundle</packaging>
+  <name>Apache Felix Examples: Spell Check Service</name>
+  <artifactId>org.apache.felix.examples.spellcheckservice</artifactId>
+  <dependencies>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>org.osgi</artifactId>
+      <version>${pom.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix.plugins</groupId>
+        <artifactId>maven-osgi-plugin</artifactId>
+        <version>${pom.version}</version>
+        <extensions>true</extensions>
+        <configuration>
+          <osgiManifest>
+            <bundleName>Spell Check Service Example</bundleName>
+            <bundleVendor>Apache Software Foundation</bundleVendor>
+            <bundleDescription>
+              A bundle that registers a spell checking service.
+            </bundleDescription>
+            <bundleActivator>
+              org.apache.felix.examples.spellcheckservice.impl.Activator
+            </bundleActivator>
+            <exportPackage>
+              org.apache.felix.examples.spellcheckservice
+            </exportPackage>
+          </osgiManifest>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/org.apache.felix.examples.spellcheckservice/src/main/java/org/apache/felix/examples/dictionaryservice/DictionaryService.java b/org.apache.felix.examples.spellcheckservice/src/main/java/org/apache/felix/examples/dictionaryservice/DictionaryService.java
new file mode 100644
index 0000000..c38efcf
--- /dev/null
+++ b/org.apache.felix.examples.spellcheckservice/src/main/java/org/apache/felix/examples/dictionaryservice/DictionaryService.java
@@ -0,0 +1,36 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.felix.examples.dictionaryservice;
+
+
+/**
+ * A simple service interface that defines a dictionary service. A dictionary
+ * service simply verifies the existence of a word.
+ * 
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+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/org.apache.felix.examples.spellcheckservice/src/main/java/org/apache/felix/examples/dictionaryservice/impl/Activator.java b/org.apache.felix.examples.spellcheckservice/src/main/java/org/apache/felix/examples/dictionaryservice/impl/Activator.java
new file mode 100644
index 0000000..5da2ded
--- /dev/null
+++ b/org.apache.felix.examples.spellcheckservice/src/main/java/org/apache/felix/examples/dictionaryservice/impl/Activator.java
@@ -0,0 +1,95 @@
+/*
+ *   Copyright 2006 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.felix.examples.dictionaryservice.impl;
+
+
+import java.util.Properties;
+
+import org.apache.felix.examples.dictionaryservice.DictionaryService;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * This class implements a simple bundle that uses the bundle context to
+ * register an English language dictionary service with the OSGi framework. The
+ * dictionary service interface is defined in a separate class file and is
+ * implemented by an inner class.
+ * 
+ * @author <a href="mailto:felix-dev@incubator.apache.org">Felix Project Team</a>
+ */
+public class Activator implements BundleActivator
+{
+    /**
+     * Implements BundleActivator.start(). Registers an instance of a dictionary
+     * service using the bundle context; attaches properties to the service that
+     * can be queried when performing a service look-up.
+     * 
+     * @param context the framework context for the bundle.
+     */
+    public void start( BundleContext context )
+    {
+        Properties props = new Properties();
+        props.put( "Language", "English" );
+        context.registerService( DictionaryService.class.getName(), new DictionaryImpl(), props );
+    }
+
+
+    /**
+     * Implements BundleActivator.stop(). Does nothing since the framework will
+     * automatically unregister any registered services.
+     * 
+     * @param context the framework context for the bundle.
+     */
+    public void stop( BundleContext context )
+    {
+        // NOTE: The service is automatically unregistered.
+    }
+
+    
+    /**
+     * A private inner class that implements a dictionary service; see
+     * DictionaryService for details of the service.
+     */
+    private static class DictionaryImpl implements DictionaryService
+    {
+        // The set of words contained in the dictionary.
+        String[] m_dictionary = { "welcome", "to", "the", "osgi", "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 ( int i = 0; i < m_dictionary.length; i++ )
+            {
+                if ( m_dictionary[i].equals( word ) )
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+}
