diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java
index 5a98d3a..adbb126 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/DependencyDescription.java
@@ -143,6 +143,10 @@
         return m_dependency.getSpecification().getName();
     }
 
+    /**
+     * Gets the described dependency.
+     * @return the dependency.
+     */
     public Dependency getDependency() {
         return m_dependency;
     }
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 9fbefc9..37e7dd1 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
@@ -352,7 +352,7 @@
      * service.
      * This method also notifies the creation strategy of the publication.
      */
-    protected void registerService() {
+    public void registerService() {
         ServiceRegistration reg = null;
         Properties serviceProperties = null;
         synchronized (this) {
@@ -420,9 +420,9 @@
     }
 
     /**
-     * Unregisters the service.
+     * Withdraws the service from the service registry.
      */
-    protected void unregisterService() {
+    public void unregisterService() {
         ServiceReference ref = null;
         synchronized (this) {
             // Create a copy of the service reference in the case we need
diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
index 6584273..310fee0 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription.java
@@ -44,7 +44,7 @@
     /**
      * The describe provided service.
      */
-    private ProvidedService m_ps;
+    private final ProvidedService m_ps;
 
     /**
      * Constructor.
@@ -55,6 +55,14 @@
     }
 
     /**
+     * Gets the represented provided service.
+     * @return the provided service
+     */
+    public ProvidedService getProvidedService() {
+        return m_ps;
+    }
+
+    /**
      * Gets the list of provided service specifications.
      * @return the provided contract name.
      */
@@ -98,7 +106,7 @@
 
     /**
      * Gets provided service state.
-     * @return the state of the provided service (UNREGISTERED | REGISTRED).
+     * @return the state of the provided service (UNREGISTERED | REGISTERED).
      */
     public int getState() {
         return m_ps.getState();
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 1b623b9..49f62ae 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
@@ -1072,23 +1072,23 @@
             // Leaving the locked region to invoke callbacks
             releaseWriteLockIfHeld();
 
-                for (ServiceReference ref : departures) {
-                    onServiceDeparture(ref);
-                    // Notify service unbinding to listeners
-                    Object svc = services.get(ref);
-                    notifyListeners(DependencyEventType.UNBINDING, ref, svc);
-                }
-                for (ServiceReference ref : arrivals) {
-                    onServiceArrival(ref);
-                    // Notify service binding to listeners
-                    Object svc = services.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???
-                }
+            for (ServiceReference ref : departures) {
+                onServiceDeparture(ref);
+                // Notify service unbinding to listeners
+                Object svc = services.get(ref);
+                notifyListeners(DependencyEventType.UNBINDING, ref, svc);
+            }
+            for (ServiceReference ref : arrivals) {
+                onServiceArrival(ref);
+                // Notify service binding to listeners
+                Object svc = services.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???
+            }
 
             // Did our state changed ?
             // this method will manage its own synchronization.
