diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
index 98e2366..9fb6b64 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
@@ -277,11 +277,25 @@
             if (m_callbacks[j].getMethodType() == DependencyCallback.BIND) {
                 if (isAggregate()) {
                     for (int i = 0; i < refs.length; i++) {
-                        invokeCallback(m_callbacks[j], refs[i], getService(refs[i]), pojo);
+                        Object svc = getService(refs[i]);
+                        if (svc != null) {
+                            invokeCallback(m_callbacks[j], refs[i], svc, pojo);
+                        } else {
+                            // The service left already, or the service object cannot be created.
+                            // We consider it as a departure.
+                            removedService(refs[i],  null);
+                        }
                     }
                 } else {
                     // Take the first reference.
-                    invokeCallback(m_callbacks[j], refs[0], getService(refs[0]), pojo);
+                    Object svc = getService(refs[0]);
+                    if (svc != null) {
+                        invokeCallback(m_callbacks[j], refs[0], svc, pojo);
+                    } else {
+                        // The service left already, or the service object cannot be created.
+                        // We consider it as a departure.
+                        removedService(refs[0],  null);
+                    }
                 }
             }
         }
@@ -353,7 +367,16 @@
         if (m_handler.getInstanceManager().getState() > InstanceManager.STOPPED && m_handler.getInstanceManager().getPojoObjects() != null) {
             for (int i = 0; m_callbacks != null && i < m_callbacks.length; i++) {
                 if (m_callbacks[i].getMethodType() == DependencyCallback.BIND) {
-                    invokeCallback(m_callbacks[i], ref, getService(ref), null);
+                    Object svc = getService(ref);
+                    System.out.println("Svc injected in the bind method : " + svc);
+                    if (svc != null) {
+                        invokeCallback(m_callbacks[i], ref, svc, null);
+                    } else {
+                        // We can't get the service object (https://issues.apache.org/jira/browse/FELIX-3896).
+                        // This is probably because the service is leaving.
+                        // We consider it as a departure.
+                        removedService(ref, null);
+                    }
                 }
             }
         }
