diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/CreationStrategy.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/CreationStrategy.java
index d0f1ae8..a1d6899 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/CreationStrategy.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/CreationStrategy.java
@@ -46,7 +46,7 @@
     
     /**
      * Checks if the given method object is the
-     * {@link IPOJOServiceFactory#getService(ComponentInstance)}
+     * {@link org.apache.felix.ipojo.IPOJOServiceFactory#getService(org.apache.felix.ipojo.ComponentInstance)}
      * method.
      * @param method the method to check
      * @return <code>true</code> if the method is the getService method
@@ -61,7 +61,7 @@
     
     /**
      * Checks if the given method object is the
-     * {@link IPOJOServiceFactory#ungetService(ComponentInstance, Object)}
+     * {@link org.apache.felix.ipojo.IPOJOServiceFactory#ungetService(org.apache.felix.ipojo.ComponentInstance, Object)}
      * method.
      * @param method the method to check
      * @return <code>true</code> if the method is the ungetService method
diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
index d9b1461..9fbefc9 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
@@ -359,9 +359,7 @@
             if (m_serviceRegistration != null) {
                 return;
             } else {
-                if (m_handler.getInstanceManager().getState() == ComponentInstance.VALID
-                        && m_serviceRegistration == null
-                        && isAtLeastAServiceControllerValid()) {
+                if (m_handler.getInstanceManager().getState() == ComponentInstance.VALID && isAtLeastAServiceControllerValid()) {
                     // Build the service properties list
 
                     BundleContext bc = m_handler.getInstanceManager().getContext();
diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
index 6d49b9f..7f4996d 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
@@ -781,15 +781,20 @@
 
         // Now call callbacks, the lock is not held anymore
         // Only one of the list is not empty..
-        for (ServiceReference ref : arrivals) {
-            onServiceArrival(ref);
-            // Notify service binding to listeners
-            notifyListeners(DependencyEventType.BINDING, ref, getService(ref, false));
-        }
-        for (ServiceReference ref : departures) {
-            onServiceDeparture(ref);
-            // Notify service unbinding to listeners
-            notifyListeners(DependencyEventType.UNBINDING, ref, getService(ref, false));
+        try {
+            acquireReadLockIfNotHeld();
+            for (ServiceReference ref : arrivals) {
+                onServiceArrival(ref);
+                // Notify service binding to listeners
+                notifyListeners(DependencyEventType.BINDING, ref, m_serviceObjects.get(ref));
+            }
+            for (ServiceReference ref : departures) {
+                onServiceDeparture(ref);
+                // Notify service unbinding to listeners
+                notifyListeners(DependencyEventType.UNBINDING, ref, m_serviceObjects.get(ref));
+            }
+        } finally {
+            releaseReadLockIfHeld();
         }
 
 
@@ -974,10 +979,11 @@
                         m_state = BROKEN;
 
                         // We are going to call callbacks, releasing the lock.
+                        Object svc = m_serviceObjects.get(ref);
                         releaseWriteLockIfHeld();
 
                         // Notify listeners
-                        notifyListeners(DependencyEventType.UNBINDING, ref, getService(ref, false));
+                        notifyListeners(DependencyEventType.UNBINDING, ref, svc);
                         notifyListeners(DependencyEventType.DEPARTURE, ref, null);
 
                         invalidate();  // This will invalidate the instance.
@@ -1056,24 +1062,30 @@
                 }
             }
 
-            // Leaving the locked region to invoke callbacks
+            // Leaving the locked region to invoke callbacks, but grab the read lock
             releaseWriteLockIfHeld();
-            for (ServiceReference ref : departures) {
-                onServiceDeparture(ref);
-                // Notify service unbinding to listeners
-                notifyListeners(DependencyEventType.UNBINDING, ref, getService(ref, false));
+            try {
+                acquireReadLockIfNotHeld();
+                for (ServiceReference ref : departures) {
+                    onServiceDeparture(ref);
+                    // Notify service unbinding to listeners
+                    Object svc = m_serviceObjects.get(ref);
+                    notifyListeners(DependencyEventType.UNBINDING, ref, svc);
+                }
+                for (ServiceReference ref : arrivals) {
+                    onServiceArrival(ref);
+                    // Notify service binding to listeners
+                    Object svc = m_serviceObjects.get(ref);
+                    notifyListeners(DependencyEventType.BINDING, ref, svc);
+                }
+                // Do we have a modified service ?
+                if (set.modified != null && m_boundServices.contains(set.modified)) {
+                    onServiceModification(set.modified);
+                    // TODO call boundServiceModified on listeners???
+                }
+            } finally {
+                releaseReadLockIfHeld();
             }
-            for (ServiceReference ref : arrivals) {
-                onServiceArrival(ref);
-                // Notify service binding to listeners
-                notifyListeners(DependencyEventType.BINDING, ref, getService(ref, false));
-            }
-            // Do we have a modified service ?
-            if (set.modified != null && m_boundServices.contains(set.modified)) {
-                onServiceModification(set.modified);
-                // TODO call boundServiceModified on listeners???
-            }
-
 
             // Did our state changed ?
             // this method will manage its own synchronization.
