diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dependencymanager/dependencies/BundleDependency.java b/dependencymanager/core/src/main/java/org/apache/felix/dependencymanager/dependencies/BundleDependency.java
index 6d0f72e..24edcb1 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dependencymanager/dependencies/BundleDependency.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dependencymanager/dependencies/BundleDependency.java
@@ -122,7 +122,9 @@
 		Filter filter = m_filter;
 		if (filter != null) {
 			Dictionary headers = bundle.getHeaders();
+//			System.out.println("HEADERS: " + headers);
 			if (!m_filter.match(headers)) {
+			    System.out.println("NO MATCH: " + bundle);
 				return null;
 			}
 		}
@@ -133,13 +135,12 @@
 		System.out.println("ADDED " + bundle + " " + event);
         if (makeAvailable()) {
             m_service.dependencyAvailable(this);
+            if (!isRequired()) {
+                invokeAdded(bundle);
+            }
         }
         else {
             m_service.dependencyChanged(this);
-        }
-        // try to invoke callback, if specified, but only for optional dependencies
-        // because callbacks for required dependencies are handled differently
-        if (!isRequired()) {
             invokeAdded(bundle);
         }
 	}
@@ -148,7 +149,7 @@
 		System.out.println("MODIFIED " + bundle + " " + event);
         m_service.dependencyChanged(this);
         // only invoke the changed callback if the service itself is "active"
-        if (((ServiceImpl) m_service).isRegistered()) {
+        if (m_service.isRegistered()) {
             invokeChanged(bundle);
         }
 	}
@@ -157,10 +158,12 @@
 		System.out.println("REMOVED " + bundle + " " + event);
         if (makeUnavailable()) {
             m_service.dependencyUnavailable(this);
+            if (!isRequired()) {
+                invokeRemoved(bundle);
+            }
         }
-        // try to invoke callback, if specified, but only for optional dependencies
-        // because callbacks for required dependencies are handled differently
-        if (!isRequired()) {
+        else {
+            m_service.dependencyChanged(this);
             invokeRemoved(bundle);
         }
 	}
@@ -188,20 +191,16 @@
     public void invokeAdded(Bundle serviceInstance) {
         Object[] callbackInstances = getCallbackInstances();
         if ((callbackInstances != null) && (m_callbackAdded != null)) {
-                invokeCallbackMethod(callbackInstances, m_callbackAdded, serviceInstance);
+            invokeCallbackMethod(callbackInstances, m_callbackAdded, serviceInstance);
         }
     }
 
     public void invokeChanged(Bundle serviceInstance) {
         Object[] callbackInstances = getCallbackInstances();
         if ((callbackInstances != null) && (m_callbackChanged != null)) {
-//                if (m_reference == null) {
-//                    Thread.dumpStack();
-//                }
-                invokeCallbackMethod(callbackInstances, m_callbackChanged, serviceInstance);
+            invokeCallbackMethod(callbackInstances, m_callbackChanged, serviceInstance);
         }
     }
-
     
     public void invokeRemoved() {
         invokeRemoved(m_bundleInstance);
@@ -210,16 +209,10 @@
     public void invokeRemoved(Bundle serviceInstance) {
         Object[] callbackInstances = getCallbackInstances();
         if ((callbackInstances != null) && (m_callbackRemoved != null)) {
-//                if (m_reference == null) {
-//                    Thread.dumpStack();
-//                }
-                invokeCallbackMethod(callbackInstances, m_callbackRemoved, serviceInstance);
+            invokeCallbackMethod(callbackInstances, m_callbackRemoved, serviceInstance);
         }
     }
     
-
-    
-    
     private void invokeCallbackMethod(Object[] instances, String methodName, Object service) {
         for (int i = 0; i < instances.length; i++) {
             try {
diff --git a/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/BundleDependencyTest.java b/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/BundleDependencyTest.java
index dffffa1..923d990 100644
--- a/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/BundleDependencyTest.java
+++ b/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/BundleDependencyTest.java
@@ -31,13 +31,9 @@
     @Test
     public void testBundleDependencies(BundleContext context) {
         DependencyManager m = new DependencyManager(context, new Logger(context));
-        // helper class that ensures certain steps get executed in sequence
-        Ensure e = new Ensure();
         // create a service provider and consumer
-        Consumer c = new Consumer(e);
+        Consumer c = new Consumer();
         Service consumer = m.createService().setImplementation(c).add(m.createBundleDependency().setCallbacks("add", "remove"));
-//        Service consumerWithFilter = m.createService().setImplementation(new Consumer(e)).add(m.createBundleDependency().setFilter(""));
-//        Service consumerWithStateMask = m.createService().setImplementation(new Consumer(e)).add(m.createBundleDependency().setStateMask(0));
         // add the service consumer
         m.add(consumer);
         // check if at least one bundle was found
@@ -46,16 +42,21 @@
         m.remove(consumer);
         // check if all bundles were removed correctly
         c.doubleCheck();
+        
+        // helper class that ensures certain steps get executed in sequence
+        Ensure e = new Ensure();
+        Service consumerWithFilter = m.createService().setImplementation(new FilteredConsumer(e)).add(m.createBundleDependency().setFilter("(Bundle-SymbolicName=org.apache.felix.dependencymanager)").setCallbacks("add", "remove"));
+        // add a consumer with a filter
+        m.add(consumerWithFilter);
+        e.step(2);
+        // remove the consumer again
+        m.remove(consumerWithFilter);
+        e.step(4);
     }
     
     static class Consumer {
-        private final Ensure m_ensure;
         private int m_count = 0;
 
-        public Consumer(Ensure e) {
-            m_ensure = e;
-        }
-        
         public void add(Bundle b) {
             Assert.assertNotNull("bundle instance must not be null", b);
             m_count++;
@@ -73,4 +74,20 @@
             Assert.assertTrue("all bundles we found should have been removed again", m_count == 0);
         }
     }
+    
+    static class FilteredConsumer {
+        private final Ensure m_ensure;
+
+        public FilteredConsumer(Ensure e) {
+            m_ensure = e;
+        }
+        
+        public void add(Bundle b) {
+            m_ensure.step(1);
+        }
+        
+        public void remove(Bundle b) {
+            m_ensure.step(3);
+        }
+    }
 }
diff --git a/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/Ensure.java b/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/Ensure.java
index 73e1e2a..bdac0bd 100644
--- a/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/Ensure.java
+++ b/dependencymanager/test/src/test/java/org/apache/felix/dependencymanager/test/Ensure.java
@@ -26,8 +26,16 @@
  * can also have threads wait until you arrive at a certain step.
  */
 public class Ensure {
+    private static final boolean DEBUG = true;
+    private static long INSTANCE = 0;
     private static final int RESOLUTION = 100;
-    int step = 1;
+    int step = 0;
+    
+    public Ensure() {
+        if (DEBUG) {
+            INSTANCE++;
+        }
+    }
 
     /**
      * Mark this point as step <code>nr</code>.
@@ -35,8 +43,11 @@
      * @param nr the step we are in
      */
     public synchronized void step(int nr) {
-        Assert.assertEquals(nr, step);
         step++;
+        Assert.assertEquals(nr, step);
+        if (DEBUG) {
+            System.out.println("[Ensure " + INSTANCE + "] step " + step);
+        }
         notifyAll();
     }
 
@@ -51,15 +62,21 @@
      */
     public synchronized void waitForStep(int nr, int timeout) {
         final int initialTimeout = timeout;
-        while (step <= nr && timeout > 0) {
+        if (DEBUG) {
+            System.out.println("[Ensure " + INSTANCE + "] waiting for step " + nr);
+        }
+        while (step < nr && timeout > 0) {
             try {
                 wait(RESOLUTION);
                 timeout -= RESOLUTION;
             }
             catch (InterruptedException e) {}
         }
-        if (step <= nr) {
+        if (step < nr) {
             throw new IllegalStateException("Timed out waiting for " + initialTimeout + " ms for step " + nr + ", we are still at step " + step);
         }
+        if (DEBUG) {
+            System.out.println("[Ensure " + INSTANCE + "] arrived at step " + nr);
+        }
     }
 }
