diff --git a/dependencymanager/samples/pom.xml b/dependencymanager/samples/pom.xml
new file mode 100644
index 0000000..7b91f6c
--- /dev/null
+++ b/dependencymanager/samples/pom.xml
@@ -0,0 +1,61 @@
+<?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/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.apache.felix</groupId>
+    <artifactId>felix</artifactId>
+    <version>1.0.4</version>
+    <relativePath>../../pom/pom.xml</relativePath>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <name>Apache Felix Dependency Manager Samples</name>
+  <version>3.0.0-SNAPSHOT</version>
+  <artifactId>org.apache.felix.dependencymanager.samples</artifactId>
+  <dependencies>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <version>4.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <version>4.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>org.apache.felix.dependencymanager</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+          <useDefaultManifestFile>false</useDefaultManifestFile>
+         <compilerArgument>-g</compilerArgument>
+          <compilerVersion>1.5</compilerVersion>
+        </configuration> 
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/dependencymanager/samples/src/main/java/samples/dependonconfiguration/Activator.java b/dependencymanager/samples/src/main/java/samples/dependonconfiguration/Activator.java
new file mode 100644
index 0000000..9364f24
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/dependonconfiguration/Activator.java
@@ -0,0 +1,18 @@
+package samples.dependonconfiguration;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+
+public class Activator extends DependencyActivatorBase {
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
+        manager.add(createService()
+            .setImplementation(Task.class)
+            .add(createConfigurationDependency()
+                .setPid("config.pid")
+            )
+        );
+    }
+    
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {}
+}
diff --git a/dependencymanager/samples/src/main/java/samples/dependonconfiguration/Task.java b/dependencymanager/samples/src/main/java/samples/dependonconfiguration/Task.java
new file mode 100644
index 0000000..4c439b4
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/dependonconfiguration/Task.java
@@ -0,0 +1,23 @@
+package samples.dependonconfiguration;
+
+import java.util.Dictionary;
+
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+
+public class Task implements ManagedService {
+    private String m_interval;
+
+    public void execute() {
+        System.out.println("Scheduling task with interval " + m_interval);
+    }
+
+    public void updated(Dictionary properties) throws ConfigurationException {
+        if (properties != null) {
+            m_interval = (String) properties.get("interval");
+            if (m_interval == null) {
+                throw new ConfigurationException("interval", "must be specified");
+            }
+        }
+    }
+}
diff --git a/dependencymanager/samples/src/main/java/samples/dependonservice/Activator.java b/dependencymanager/samples/src/main/java/samples/dependonservice/Activator.java
new file mode 100644
index 0000000..0a0ee26
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/dependonservice/Activator.java
@@ -0,0 +1,24 @@
+package samples.dependonservice;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
+        manager.add(createService()
+            .setImplementation(DataGenerator.class)
+            .add(createServiceDependency()
+                .setService(Store.class)
+                .setRequired(true)
+            )
+            .add(createServiceDependency()
+                .setService(LogService.class)
+                .setRequired(false)
+            )
+        );
+    }
+    
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {}
+}
diff --git a/dependencymanager/samples/src/main/java/samples/dependonservice/DataGenerator.java b/dependencymanager/samples/src/main/java/samples/dependonservice/DataGenerator.java
new file mode 100644
index 0000000..f24ef43
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/dependonservice/DataGenerator.java
@@ -0,0 +1,15 @@
+package samples.dependonservice;
+
+import org.osgi.service.log.LogService;
+
+public class DataGenerator {
+    private volatile Store m_store;
+    private volatile LogService m_log;
+    
+    public void generate() {
+        for (int i = 0; i < 10; i++) {
+            m_store.put("#" + i, "value_" + i);
+        }
+        m_log.log(LogService.LOG_INFO, "Data generated.");
+    }
+}
diff --git a/dependencymanager/samples/src/main/java/samples/dependonservice/Store.java b/dependencymanager/samples/src/main/java/samples/dependonservice/Store.java
new file mode 100644
index 0000000..8d111cf
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/dependonservice/Store.java
@@ -0,0 +1,6 @@
+package samples.dependonservice;
+
+public interface Store {
+    public void put(String key, Object value);
+    public Object get(String key);
+}
diff --git a/dependencymanager/samples/src/main/java/samples/registerservice/Activator.java b/dependencymanager/samples/src/main/java/samples/registerservice/Activator.java
new file mode 100644
index 0000000..9b437fd
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/registerservice/Activator.java
@@ -0,0 +1,16 @@
+package samples.registerservice;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+
+public class Activator extends DependencyActivatorBase {
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
+        manager.add(createService()
+            .setInterface(Store.class.getName(), null)
+            .setImplementation(MemoryStore.class)
+        );
+    }
+    
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {}
+}
diff --git a/dependencymanager/samples/src/main/java/samples/registerservice/MemoryStore.java b/dependencymanager/samples/src/main/java/samples/registerservice/MemoryStore.java
new file mode 100644
index 0000000..5b44151
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/registerservice/MemoryStore.java
@@ -0,0 +1,16 @@
+package samples.registerservice;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MemoryStore implements Store {
+    private Map m_map = new HashMap();
+
+    public Object get(String key) {
+        return m_map.get(key);
+    }
+
+    public void put(String key, Object value) {
+        m_map.put(key, value);
+    }
+}
diff --git a/dependencymanager/samples/src/main/java/samples/registerservice/Store.java b/dependencymanager/samples/src/main/java/samples/registerservice/Store.java
new file mode 100644
index 0000000..90dcf5b
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/registerservice/Store.java
@@ -0,0 +1,6 @@
+package samples.registerservice;
+
+public interface Store {
+    public void put(String key, Object value);
+    public Object get(String key);
+}
diff --git a/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/Activator.java b/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/Activator.java
new file mode 100644
index 0000000..4fb8883
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/Activator.java
@@ -0,0 +1,20 @@
+package samples.trackingserviceswithcallbacks;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+
+public class Activator extends DependencyActivatorBase {
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
+        manager.add(createService()
+            .setImplementation(DocumentTranslator.class)
+            .add(createServiceDependency()
+                .setService(Translator.class)
+                .setRequired(false)
+                .setCallbacks("added", "removed")
+            )
+        );
+    }
+    
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {}
+}
diff --git a/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/DocumentTranslator.java b/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/DocumentTranslator.java
new file mode 100644
index 0000000..41848eb
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/DocumentTranslator.java
@@ -0,0 +1,27 @@
+package samples.trackingserviceswithcallbacks;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.text.Document;
+
+public class DocumentTranslator {
+    private List<Translator> m_translators = new ArrayList<Translator>();
+    
+    public void added(Translator translator) {
+        m_translators.add(translator);
+    }
+    
+    public void removed(Translator translator) {
+        m_translators.remove(translator);
+    }
+    
+    public Document translate(Document document, String from, String to) {
+        for (Translator translator : m_translators) {
+            if (translator.canTranslate(from, to)) {
+                return translator.translate(document, from, to);
+            }
+        }
+        return null;
+    }
+}
diff --git a/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/Translator.java b/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/Translator.java
new file mode 100644
index 0000000..de7ac30
--- /dev/null
+++ b/dependencymanager/samples/src/main/java/samples/trackingserviceswithcallbacks/Translator.java
@@ -0,0 +1,8 @@
+package samples.trackingserviceswithcallbacks;
+
+import javax.swing.text.Document;
+
+public interface Translator {
+    public boolean canTranslate(String from, String to);
+    public Document translate(Document document, String from, String to);
+}
