diff --git a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java
index 95e5d02..ea18919 100644
--- a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java
+++ b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -23,56 +23,56 @@
 import java.util.Comparator;
 
 /**
- * This annotation declares an modify method.
+ * This annotation declares a modify method.
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 @Target(ElementType.METHOD)
 public @interface Modified {
-    
+
     /**
      * Set the dependency filter.
      * Default : no filter
      */
     String filter() default "";
-    
+
     /**
      * Set if the dependency is an aggregate dependency.
      * Default : false
      */
     boolean aggregate() default false;
-    
-    
+
+
     /**
      * Set if the dependency is optional.
      * Default : false
      */
     boolean optional() default false;
-    
+
     /**
      * Set the required specification.
      * Default : empty (try to discover).
      */
     String specification() default "";
-    
+
     /**
      * Set the dependency id.
      * Default : empty.
      */
     String id() default "";
-    
+
     /**
      * Set the binding policy.
      * Acceptable policy are dynamic, static and dynamic-priority.
      * Default: dynamic.
      */
     String policy() default "dynamic";
-    
+
     /**
      * Set the comparator.
      * The indicated class must implement {@link Comparator}
      */
     Class comparator() default Comparator.class;
-    
+
     /**
      * Set the from attribute.
      */
diff --git a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/PostRegistration.java b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/PostRegistration.java
new file mode 100644
index 0000000..f3f537d
--- /dev/null
+++ b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/PostRegistration.java
@@ -0,0 +1,14 @@
+package org.apache.felix.ipojo.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+
+/**
+ * This annotation declares a post-service-registration method.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Target(ElementType.METHOD)
+public @interface PostRegistration {
+
+}
diff --git a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/PostUnregistration.java b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/PostUnregistration.java
new file mode 100644
index 0000000..704d753
--- /dev/null
+++ b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/PostUnregistration.java
@@ -0,0 +1,14 @@
+package org.apache.felix.ipojo.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+
+/**
+ * This annotation declares a post-service-unregistration method.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Target(ElementType.METHOD)
+public @interface PostUnregistration {
+
+}
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
index 433b461..7357c9e 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedService.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -35,6 +35,7 @@
 import org.apache.felix.ipojo.ConfigurationException;
 import org.apache.felix.ipojo.IPOJOServiceFactory;
 import org.apache.felix.ipojo.InstanceManager;
+import org.apache.felix.ipojo.util.Callback;
 import org.apache.felix.ipojo.util.Property;
 import org.apache.felix.ipojo.util.SecurityHelper;
 import org.osgi.framework.Bundle;
@@ -107,18 +108,28 @@
      * Service Object creation policy.
      */
     private CreationStrategy m_strategy;
-    
+
     /**
      * Were the properties updated during the processing.
      */
     private volatile boolean m_wasUpdated;
-    
+
     /**
      * Service Controller.
      */
     private ServiceController m_controller;
 
     /**
+     * Post-Registration callback.
+     */
+    private Callback m_postRegistration;
+
+    /**
+     * Post-Unregistration callback.
+     */
+    private Callback m_postUnregistration;
+
+    /**
      * Creates a provided service object.
      *
      * @param handler the the provided service handler.
@@ -136,7 +147,7 @@
         try {
             addProperty(new Property("instance.name", null, null, handler.getInstanceManager().getInstanceName(), String.class.getName(), handler.getInstanceManager(), handler));
             addProperty(new Property("factory.name", null, null, handler.getInstanceManager().getFactory().getFactoryName(), String.class.getName(), handler.getInstanceManager(), handler));
-         
+
             if (handler.getInstanceManager().getFactory().getVersion() != null) {
                 addProperty(new Property("factory.version", null, null, handler.getInstanceManager().getFactory().getVersion(), String.class.getName(), handler.getInstanceManager(), handler));
             }
@@ -146,7 +157,7 @@
                 addProperty(new Property(Constants.SERVICE_PID, null, null, (String) conf.get(Constants.SERVICE_PID), String.class.getName(), handler.getInstanceManager(), handler));
             }
             if (conf.get(Constants.SERVICE_RANKING) != null) {
-                addProperty(new Property(Constants.SERVICE_RANKING, null, null, (String) conf.get(Constants.SERVICE_RANKING), "int", handler.getInstanceManager(), handler));                
+                addProperty(new Property(Constants.SERVICE_RANKING, null, null, (String) conf.get(Constants.SERVICE_RANKING), "int", handler.getInstanceManager(), handler));
             }
             if (conf.get(Constants.SERVICE_VENDOR) != null) {
                 addProperty(new Property(Constants.SERVICE_VENDOR, null, null, (String) conf.get(Constants.SERVICE_VENDOR), String.class.getName(), handler.getInstanceManager(), handler));
@@ -316,10 +327,10 @@
      * This method also notifies the creation strategy of the publication.
      */
     protected synchronized void registerService() {
-        if (m_handler.getInstanceManager().getState() == ComponentInstance.VALID 
+        if (m_handler.getInstanceManager().getState() == ComponentInstance.VALID
                 && m_serviceRegistration == null  && (m_controller == null || m_controller.getValue())) {
             // Build the service properties list
-            
+
             BundleContext bc = m_handler.getInstanceManager().getContext();
             // Security check
             if (SecurityHelper.hasPermissionToRegisterServices(m_serviceSpecifications, bc)) {
@@ -331,10 +342,21 @@
                     m_serviceRegistration.setProperties(getServiceProperties());
                     m_wasUpdated = false;
                 }
+
+                // Call the post-registration callback in the same thread holding the monitor lock.
+                // This allows to be sure that the callback is called once per registration.
+                // But the callback must take care to not create a deadlock
+                if (m_postRegistration != null) {
+	                try {
+						m_postRegistration.call(new Object[] { m_serviceRegistration.getReference() });
+					} catch (Exception e) {
+						m_handler.error("Cannot invoke the post-registration callback " + m_postRegistration.getMethod(), e);
+					}
+                }
             } else {
                 throw new SecurityException("The bundle " + bc.getBundle().getBundleId() + " does not have the"
                         + " permission to register the services " + Arrays.asList(m_serviceSpecifications));
-            }      
+            }
         }
     }
 
@@ -342,13 +364,29 @@
      * Unregisters the service.
      */
     protected synchronized void unregisterService() {
+    	// Create a copy of the service reference in the case we need
+    	// to inject it to the post-unregistration callback.
+
+    	ServiceReference ref = null;
         if (m_serviceRegistration != null) {
+    		ref = m_serviceRegistration.getReference();
             m_serviceRegistration.unregister();
             m_serviceRegistration = null;
         }
 
         m_strategy.onUnpublication();
 
+        // Call the post-unregistration callback in the same thread holding the monitor lock.
+        // This allows to be sure that the callback is called once per unregistration.
+        // But the callback must take care to not create a deadlock
+        if (m_postUnregistration != null   && ref != null) {
+            try {
+            	m_postUnregistration.call(new Object[] { ref });
+			} catch (Exception e) {
+				m_handler.error("Cannot invoke the post-unregistration callback " + m_postUnregistration.getMethod(), e);
+			}
+        }
+
     }
 
     /**
@@ -463,12 +501,20 @@
     public void setController(String field, boolean value) {
         m_controller = new ServiceController(field, value);
     }
-    
+
     public ServiceController getController() {
         return m_controller;
     }
 
-    /**
+    public void setPostRegistrationCallback(Callback cb) {
+		m_postRegistration = cb;
+	}
+
+    public void setPostUnregistrationCallback(Callback cb) {
+		m_postUnregistration = cb;
+	}
+
+	/**
      * Service Controller.
      */
     class ServiceController {
@@ -480,7 +526,7 @@
          * The field attached to this controller.
          */
         private final String m_field;
-        
+
         /**
          * Creates a ServiceController.
          * @param field the field
@@ -494,7 +540,7 @@
         public String getField() {
             return m_field;
         }
-        
+
         /**
          * Gets the value.
          * @return the value
@@ -521,7 +567,7 @@
                 }
             }
         }
-        
+
     }
 
     /**
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
index b097a9e..97c25fd 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -42,9 +42,11 @@
 import org.apache.felix.ipojo.parser.ParseException;
 import org.apache.felix.ipojo.parser.ParseUtils;
 import org.apache.felix.ipojo.parser.PojoMetadata;
+import org.apache.felix.ipojo.util.Callback;
 import org.apache.felix.ipojo.util.Logger;
 import org.apache.felix.ipojo.util.Property;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
 
 /**
  * Composite Provided Service Handler.
@@ -57,7 +59,7 @@
      * The list of the provided service.
      */
     private ProvidedService[] m_providedServices = new ProvidedService[0];
-    
+
     /**
      * The handler description.
      */
@@ -65,7 +67,7 @@
 
     /**
      * Add a provided service to the list .
-     * 
+     *
      * @param svc : the provided service to add
      */
     private void addProvidedService(ProvidedService svc) {
@@ -133,13 +135,28 @@
                         throw new ConfigurationException("The custom creation policy class " + strategy + " cannot be loaded " + e.getMessage());
 
                     }
-                    
+
                 }
             }
-            
+
+
             // Then create the provided service
             ProvidedService svc = new ProvidedService(this, serviceSpecifications, factory, custom, configuration);
 
+            // Post-Registration callback
+            String post = providedServices[i].getAttribute("post-registration");
+            if (post != null) {
+            	Callback cb = new Callback(post, new Class[] {ServiceReference.class}, false, getInstanceManager());
+            	svc.setPostRegistrationCallback(cb);
+            }
+
+            post = providedServices[i].getAttribute("post-unregistration");
+            if (post != null) {
+            	// TODO Can we really send the service reference here ?
+            	Callback cb = new Callback(post, new Class[] {ServiceReference.class}, false, getInstanceManager());
+            	svc.setPostUnregistrationCallback(cb);
+            }
+
             Element[] props = providedServices[i].getElements("Property");
             if (props != null) {
                 //Property[] properties = new Property[props.length];
@@ -153,15 +170,15 @@
                     Property prop = new Property(name, field, null, value, type, getInstanceManager(), this);
                     properties[j] = prop;
 
-                    // Check if the instance configuration has a value for this property                    
+                    // Check if the instance configuration has a value for this property
                     Object object = configuration.get(prop.getName());
                     if (object != null) {
                         prop.setValue(object);
                     }
-                    
+
                     if (field != null) {
                         getInstanceManager().register(new FieldMetadata(field, type), this);
-                        // Cannot register the property as the interception is necessary 
+                        // Cannot register the property as the interception is necessary
                         // to deal with registration update.
                     }
                 }
@@ -169,22 +186,22 @@
                 // Attach to properties to the provided service
                 svc.setProperties(properties);
             }
-            
+
             Element[] controllers = providedServices[i].getElements("Controller");
             if (controllers != null) {
                 if (controllers.length > 1) {
                     throw new ConfigurationException("Cannot have several controller per 'provides' element");
                 }
-                
+
                 String field = controllers[0].getAttribute("field");
                 if (field == null) {
                     throw new ConfigurationException("The field attribute of a controller is mandatory");
                 }
-                
+
                 String v = controllers[0].getAttribute("value");
                 boolean value = ! (v != null  && v.equalsIgnoreCase("false"));
                 svc.setController(field, value);
-                
+
                 getInstanceManager().register(new FieldMetadata(field, "boolean"), this);
             }
 
@@ -196,15 +213,15 @@
                     itfs.append(' ');
                     itfs.append(serviceSpecifications[j]);
                 }
-                throw new ConfigurationException("The provided service" + itfs + " is not valid");                
+                throw new ConfigurationException("The provided service" + itfs + " is not valid");
             }
-            
+
             // Initialize the description.
             m_description = new ProvidedServiceHandlerDescription(this, m_providedServices);
 
         }
     }
-    
+
     /**
      * Collect interfaces implemented by the POJO.
      * @param specs : implemented interfaces.
@@ -231,7 +248,7 @@
 
         return result;
     }
-    
+
     /**
      * Look for inherited interfaces.
      * @param clazz : interface name to explore (class object)
@@ -246,7 +263,7 @@
             collectInterfaces(clazzes[i], acc, bundle);
         }
     }
-    
+
     /**
      * Collect interfaces for the given class.
      * This method explores super class to.
@@ -274,10 +291,10 @@
      * @return true if the provided service is correct
      * @throws ConfigurationException : the checked provided service is not correct.
      */
-    private boolean checkProvidedService(ProvidedService svc) throws ConfigurationException {        
+    private boolean checkProvidedService(ProvidedService svc) throws ConfigurationException {
         for (int i = 0; i < svc.getServiceSpecifications().length; i++) {
             String specName = svc.getServiceSpecifications()[i];
-            
+
             // Check service level dependencies
             try {
                 Class spec = getInstanceManager().getFactory().loadClass(specName);
@@ -370,7 +387,7 @@
 
     /**
      * Stop the provided service handler.
-     * 
+     *
      * @see org.apache.felix.ipojo.Handler#stop()
      */
     public void stop() {
@@ -379,7 +396,7 @@
 
     /**
      * Start the provided service handler.
-     * 
+     *
      * @see org.apache.felix.ipojo.Handler#start()
      */
     public void start() {
@@ -439,7 +456,7 @@
                 Property prop = svc.getProperties()[j];
                 if (fieldName.equals(prop.getField())) {
                     // Manage the No Value case.
-                    return prop.onGet(pojo, fieldName, value); 
+                    return prop.onGet(pojo, fieldName, value);
                 }
             }
             if (svc.getController() != null  && svc.getController().getField().equals(fieldName)) {
@@ -453,7 +470,7 @@
     /**
      * Register the services if the new state is VALID. Unregister the services
      * if the new state is UNRESOLVED.
-     * 
+     *
      * @param state : the new instance state.
      * @see org.apache.felix.ipojo.Handler#stateChanged(int)
      */
@@ -488,7 +505,7 @@
 
     /**
      * Remove properties form all provided services.
-     * 
+     *
      * @param dict : dictionary of properties to delete.
      */
     public void removeProperties(Dictionary dict) {
@@ -551,7 +568,7 @@
             } catch (ClassNotFoundException e) {
                 throw new ConfigurationException("An interface cannot be loaded : " + e.getMessage());
             }
-            
+
             String serviceSpecificationStr = provides[i].getAttribute("specifications");
             if (serviceSpecificationStr == null) {
                 serviceSpecificationStr = provides[i].getAttribute("interface");
@@ -565,14 +582,14 @@
                 for (int j = 0; j < itfs.size(); j++) {
                     if (! all.contains(itfs.get(j))) {
                         if (parent == null || (parent != null && ! parent.equals((String) itfs.get(j)))) {
-                            desc.getFactory().getLogger().log(Logger.WARNING, "The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname") 
+                            desc.getFactory().getLogger().log(Logger.WARNING, "The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname")
                                     + " it might be a superclass or the class itself.");
                         }
                     }
                 }
                 all = new HashSet(itfs);
             }
-            
+
             if (all.isEmpty()) {
                 throw new ConfigurationException("Service Providing: Cannot instantiate a provided service : no specifications found (no interfaces implemented by the pojo)");
             }
@@ -580,7 +597,7 @@
             StringBuffer specs = null;
             Set set = new HashSet(all);
             set.remove(Pojo.class.getName()); // Remove POJO.
-            Iterator iterator = set.iterator(); 
+            Iterator iterator = set.iterator();
             while (iterator.hasNext()) {
                 String spec = (String) iterator.next();
                 desc.addProvidedServiceSpecification(spec);
@@ -592,7 +609,7 @@
                     specs.append(spec);
                 }
             }
-            
+
             specs.append('}');
             provides[i].addAttribute(new Attribute("specifications", specs.toString())); // Add interface attribute to avoid checking in the configure method
 
@@ -602,7 +619,7 @@
                 String value = props[j].getAttribute("value");
                 String type = props[j].getAttribute("type");
                 String field = props[j].getAttribute("field");
-                
+
 
                 // Get property name :
                 if (field != null && name == null) {
@@ -621,17 +638,17 @@
                     type = fieldMeta.getFieldType();
                     props[j].addAttribute(new Attribute("type", type));
                 }
-                
+
                 // Is the property set to immutable
                 boolean immutable = false;
                 String imm = props[j].getAttribute("immutable");
                 if (imm != null && imm.equalsIgnoreCase("true")) {
                     immutable = true;
                 }
-                
+
                 PropertyDescription pd = new PropertyDescription(name, type, value, immutable);
                 desc.addProperty(pd);
-                
+
                 String man = props[j].getAttribute("mandatory");
                 if (man != null && man.equalsIgnoreCase("true")) {
                     pd.setMandatory();
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
index 52c11c2..9bc363d 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
@@ -431,7 +431,7 @@
      * @param obj the service object if the service was get
      */
     private void manageDeparture(ServiceReference ref, Object obj) {
-        // Unget the service reference
+    	// Unget the service reference
         ungetService(ref);
 
         // If we already get this service and the binding policy is static, the dependency becomes broken
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Tracker.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Tracker.java
index cea8d3b..9f02c42 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Tracker.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/util/Tracker.java
@@ -748,8 +748,10 @@
                 if (!isTraked) { return; }
                 modified();
             }
-            // Call customizer outside of synchronized region
-            m_customizer.removedService(reference, object);
+            // Call customizer outside of synchronized region and only if we are not closed
+            if (! m_closed) {
+            	m_customizer.removedService(reference, object);
+            }
             // If the customizer throws an unchecked exception, it is safe to let it propagate
         }
 
diff --git a/ipojo/core/src/main/resources/core.xsd b/ipojo/core/src/main/resources/core.xsd
index c330d80..66cb2d5 100644
--- a/ipojo/core/src/main/resources/core.xsd
+++ b/ipojo/core/src/main/resources/core.xsd
@@ -409,6 +409,18 @@
           specifying the qualified name of the class extending CreationPolicy</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+    <xs:attribute name="post-registration" type="xs:string" use="optional">
+      <xs:annotation>
+        <xs:documentation>Defines a callback called after the service registration. The callback takes a ServiceReference
+        as parameter</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="post-unregistration" type="xs:string" use="optional">
+      <xs:annotation>
+        <xs:documentation>Defines a callback called after the service unregistration. The callback takes a ServiceReference
+        as parameter</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
   </xs:complexType>
   <xs:complexType name="ServiceControllerType">
     <xs:annotation>
diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java
index d288b94..91cce86 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -25,7 +25,7 @@
 import org.objectweb.asm.commons.EmptyVisitor;
 
 /**
- * This class collects method annotations, and give them to the metadata collector. 
+ * This class collects method annotations, and give them to the metadata collector.
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class MethodCollector extends EmptyVisitor {
@@ -34,9 +34,9 @@
      * Parent collector.
      */
     private MetadataCollector m_collector;
-    
+
     /**
-     * Method name. 
+     * Method name.
      */
     private String m_name;
 
@@ -79,13 +79,19 @@
         if (arg0.equals("Lorg/apache/felix/ipojo/annotations/Unbind;")) {
             return processBind("unbind");
         }
-        
+        if (arg0.equals("Lorg/apache/felix/ipojo/annotations/PostRegistration;")) {
+            return processPostRegistration();
+        }
+        if (arg0.equals("Lorg/apache/felix/ipojo/annotations/PostUnregistration;")) {
+            return processPostUnregistration();
+        }
+
         if (CustomAnnotationVisitor.isCustomAnnotation(arg0)) {
             Element elem = CustomAnnotationVisitor.buildElement(arg0);
             elem.addAttribute(new Attribute("method", m_name));
             return new CustomAnnotationVisitor(elem, m_collector, true, false);
         }
-        
+
         return null;
     }
 
@@ -102,9 +108,41 @@
         } else {
             parent = (Element) m_collector.getIds().get("properties");
         }
-        
+
         parent.addAttribute(new Attribute("updated", m_name));
-        
+
+        return null;
+    }
+
+    /**
+     * Process @PostRegistration annotation.
+     * @return null.
+     */
+    private AnnotationVisitor processPostRegistration() {
+        Element parent = null;
+        if (m_collector.getIds().containsKey("provides")) {
+            parent = (Element) m_collector.getIds().get("provides");
+            parent.addAttribute(new Attribute("post-registration", m_name));
+        } else {
+            // Ignore annotation...
+        }
+
+        return null;
+    }
+
+    /**
+     * Process @PostRegistration annotation.
+     * @return null.
+     */
+    private AnnotationVisitor processPostUnregistration() {
+        Element parent = null;
+        if (m_collector.getIds().containsKey("provides")) {
+            parent = (Element) m_collector.getIds().get("provides");
+            parent.addAttribute(new Attribute("post-unregistration", m_name));
+        } else {
+            // Ignore annotation...
+        }
+
         return null;
     }
 
@@ -183,7 +221,7 @@
         private String m_aggregate;
 
         /**
-         * Required specification. 
+         * Required specification.
          */
         private String m_specification;
 
@@ -196,22 +234,22 @@
          * Bind, Modify or Unbind method?
          */
         private String m_type;
-        
+
         /**
          * Binding policy.
          */
         private String m_policy;
-        
+
         /**
          * Comparator.
          */
         private String m_comparator;
-        
+
         /**
          * From attribute.
          */
         private String m_from;
-        
+
         /**
          * Constructor.
          * @param bind : method name.
@@ -262,7 +300,7 @@
                 m_from = arg1.toString();
                 return;
             }
-            
+
         }
 
         /**
@@ -326,7 +364,7 @@
                         return;
                     }
                 }
-                
+
                 if (m_optional != null) {
                     if (optional == null) {
                         req.addAttribute(new Attribute("optional", m_optional));
@@ -335,7 +373,7 @@
                         return;
                     }
                 }
-                
+
                 if (m_aggregate != null) {
                     if (aggregate == null) {
                         req.addAttribute(new Attribute("aggregate", m_aggregate));
@@ -344,7 +382,7 @@
                         return;
                     }
                 }
-                
+
                 if (m_filter != null) {
                     if (filter == null) {
                         req.addAttribute(new Attribute("filter", m_filter));
@@ -353,7 +391,7 @@
                         return;
                     }
                 }
-                
+
                 if (m_policy != null) {
                     if (policy == null) {
                         req.addAttribute(new Attribute("policy", m_policy));
@@ -362,7 +400,7 @@
                         return;
                     }
                 }
-                
+
                 if (m_comparator != null) {
                     if (comparator == null) {
                         req.addAttribute(new Attribute("comparator", m_comparator));
@@ -371,7 +409,7 @@
                         return;
                     }
                 }
-                
+
                 if (m_from != null) {
                     if (from == null) {
                         req.addAttribute(new Attribute("from", m_from));
@@ -380,7 +418,7 @@
                         return;
                     }
                 }
-                
+
             }
             Element method = new Element("callback", "");
             method.addAttribute(new Attribute("method", m_name));
@@ -398,22 +436,22 @@
          * Parent element.
          */
         private Element m_parent;
-        
+
         /**
          * Attached method.
          */
         private String m_method;
-        
+
         /**
-         * Property name. 
+         * Property name.
          */
         private String m_name;
-        
+
         /**
-         * Property value. 
+         * Property value.
          */
         private String m_value;
-        
+
         /**
          * Property mandatory aspect.
          */
diff --git a/ipojo/manipulator/src/main/resources/core.xsd b/ipojo/manipulator/src/main/resources/core.xsd
index c330d80..66cb2d5 100644
--- a/ipojo/manipulator/src/main/resources/core.xsd
+++ b/ipojo/manipulator/src/main/resources/core.xsd
@@ -409,6 +409,18 @@
           specifying the qualified name of the class extending CreationPolicy</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+    <xs:attribute name="post-registration" type="xs:string" use="optional">
+      <xs:annotation>
+        <xs:documentation>Defines a callback called after the service registration. The callback takes a ServiceReference
+        as parameter</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="post-unregistration" type="xs:string" use="optional">
+      <xs:annotation>
+        <xs:documentation>Defines a callback called after the service unregistration. The callback takes a ServiceReference
+        as parameter</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
   </xs:complexType>
   <xs:complexType name="ServiceControllerType">
     <xs:annotation>
diff --git a/ipojo/plugin/src/main/resources/archetype-resources/pom.xml b/ipojo/plugin/src/main/resources/archetype-resources/pom.xml
index d5cdb5f..0e67f98 100644
--- a/ipojo/plugin/src/main/resources/archetype-resources/pom.xml
+++ b/ipojo/plugin/src/main/resources/archetype-resources/pom.xml
@@ -1,38 +1,39 @@
-<project>
-  <modelVersion>4.0.0</modelVersion>
-  <packaging>bundle</packaging>
-  <groupId>${groupId}</groupId>
-  <artifactId>${artifactId}</artifactId>
-  <version>${version}</version>
-  <name>$YOUR_PROJECT_NAME</name>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <version>1.4.3</version>
-        <extensions>true</extensions>
-        <configuration>
-          <instructions>
-            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-            <Private-Package>YOUR_PRIVATE_PACKAGES</Private-Package>
-            <Import-Package>*</Import-Package> <!-- YOUR_IMPORTED_PACKAGES -->
-            <Export-Package>*</Export-Package> <!-- YOUR_EXPORTED_PACKAGES -->
-          </instructions>
-        </configuration>
-      </plugin>
-      <plugin>
-	      <groupId>org.apache.felix</groupId>
-	      <artifactId>maven-ipojo-plugin</artifactId>
-		  <executions>
-          	<execution>
-            	<goals>
-	              <goal>ipojo-bundle</goal>
-               </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+<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/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<packaging>bundle</packaging>
+	<groupId>${groupId}</groupId>
+	<artifactId>${artifactId}</artifactId>
+	<version>${version}</version>
+	<name>$YOUR_PROJECT_NAME</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>1.4.3</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+						<Private-Package>YOUR_PRIVATE_PACKAGES</Private-Package>
+						<Import-Package>*</Import-Package> <!-- YOUR_IMPORTED_PACKAGES -->
+						<Export-Package>*</Export-Package> <!-- YOUR_EXPORTED_PACKAGES -->
+					</instructions>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-ipojo-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>ipojo-bundle</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
 </project>
diff --git a/ipojo/tests/core/service-providing/pom.xml b/ipojo/tests/core/service-providing/pom.xml
index 963d7e2..2ded653 100644
--- a/ipojo/tests/core/service-providing/pom.xml
+++ b/ipojo/tests/core/service-providing/pom.xml
@@ -93,9 +93,17 @@
             </goals>
             <configuration>
               <ignoreAnnotations>true</ignoreAnnotations>
+              <ignoreEmbeddedSchemas>true</ignoreEmbeddedSchemas>
             </configuration>
           </execution>
         </executions>
+        <dependencies>
+        	<dependency>
+        		<groupId>org.apache.felix</groupId>
+        		<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
+        		<version>1.7.0-SNAPSHOT</version>
+        	</dependency>
+        </dependencies>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/callbacks/CallbacksCheckService.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/callbacks/CallbacksCheckService.java
new file mode 100644
index 0000000..56b6b6e
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/callbacks/CallbacksCheckService.java
@@ -0,0 +1,92 @@
+package org.apache.felix.ipojo.test.scenarios.component.callbacks;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+import org.osgi.framework.ServiceReference;
+
+public class CallbacksCheckService implements FooService, CheckService {
+
+	// 4 Counters
+	int registered = 0;
+	int unregistered = 0;
+	int registered2 = 0;
+	int unregistered2 = 0;
+
+	// 4 Methods
+	public void registered(ServiceReference ref) {
+		if (ref == null) {
+			throw new IllegalArgumentException("ref null");
+		}
+		registered++;
+	}
+
+	public void unregistered(ServiceReference ref) {
+		if (ref == null) {
+			throw new IllegalArgumentException("ref null");
+		}
+		unregistered++;
+	}
+
+	public void registered2(ServiceReference ref) {
+		if (ref == null) {
+			throw new IllegalArgumentException("ref null");
+		}
+		registered2++;
+	}
+
+	public void unregistered2(ServiceReference ref) {
+		if (ref == null) {
+			throw new IllegalArgumentException("ref null");
+		}
+		unregistered2++;
+	}
+
+    public boolean foo() {
+        return true;
+    }
+
+    public Properties fooProps() {
+        Properties props = new Properties();
+        props.put("registered", new Integer(registered));
+        props.put("registered2", new Integer(registered2));
+        props.put("unregistered", new Integer(unregistered));
+        props.put("unregistered2", new Integer(unregistered2));
+        return props;
+    }
+
+    public boolean getBoolean() {
+        return false;
+    }
+
+    public double getDouble() {
+        return 0;
+    }
+
+    public int getInt() {
+        return 0;
+    }
+
+    public long getLong() {
+        return 0;
+    }
+
+    public Boolean getObject() {
+        return null;
+    }
+
+    public boolean check() {
+       return true;
+    }
+
+    public Properties getProps() {
+        Properties props = new Properties();
+        props.put("registered", new Integer(registered));
+        props.put("registered2", new Integer(registered2));
+        props.put("unregistered", new Integer(unregistered));
+        props.put("unregistered2", new Integer(unregistered2));
+        return props;
+    }
+
+}
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/CallbacksTest.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/CallbacksTest.java
new file mode 100644
index 0000000..d5ef6b9
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/CallbacksTest.java
@@ -0,0 +1,177 @@
+/*
+ * 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.
+ */
+package org.apache.felix.ipojo.test.scenarios.ps;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class CallbacksTest extends OSGiTestCase {
+
+    IPOJOHelper helper;
+
+    public void setUp() {
+        helper = new IPOJOHelper(this);
+    }
+
+
+    public void tearDown() {
+        helper.dispose();
+    }
+
+    public void testWithPostRegistrationOnly() {
+    	ComponentInstance ci = helper.createComponentInstance("PS-Callbacks-reg-only");
+        // Controller set to true.
+        waitForService(FooService.class.getName(), null, 5000);
+        waitForService(CheckService.class.getName(), null, 5000);
+
+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+        assertNotNull(check);
+
+        Integer reg = (Integer) check.getProps().get("registered");
+        Integer unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(1), reg);
+        assertEquals(new Integer(0), unreg);
+
+        ci.stop();
+
+        reg = (Integer) check.getProps().get("registered");
+        unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(1), reg);
+        assertEquals(new Integer(0), unreg);
+    }
+
+    public void testWithBoth() {
+    	ComponentInstance ci = helper.createComponentInstance("PS-Callbacks-both");
+        // Controller set to true.
+        waitForService(FooService.class.getName(), null, 5000);
+        waitForService(CheckService.class.getName(), null, 5000);
+
+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+        assertNotNull(check);
+
+        Integer reg = (Integer) check.getProps().get("registered");
+        Integer unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(1), reg);
+        assertEquals(new Integer(0), unreg);
+
+        ci.stop();
+
+        reg = (Integer) check.getProps().get("registered");
+        unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(1), reg);
+        assertEquals(new Integer(1), unreg);
+    }
+
+    public void testWithPostUnregistrationOnly() {
+    	ComponentInstance ci = helper.createComponentInstance("PS-Callbacks-unreg-only");
+        // Controller set to true.
+        waitForService(FooService.class.getName(), null, 5000);
+        waitForService(CheckService.class.getName(), null, 5000);
+
+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+        assertNotNull(check);
+
+        Integer reg = (Integer) check.getProps().get("registered");
+        Integer unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(0), reg);
+        assertEquals(new Integer(0), unreg);
+
+        ci.stop();
+
+        reg = (Integer) check.getProps().get("registered");
+        unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(0), reg);
+        assertEquals(new Integer(1), unreg);
+    }
+
+    public void testWithTwoPairsOfCallbacks() {
+    	ComponentInstance ci = helper.createComponentInstance("PS-Callbacks-both-2");
+        // Controller set to true.
+        waitForService(FooService.class.getName(), null, 5000);
+        waitForService(CheckService.class.getName(), null, 5000);
+
+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+        assertNotNull(check);
+
+        Integer reg = (Integer) check.getProps().get("registered");
+        Integer unreg = (Integer) check.getProps().get("unregistered");
+        Integer reg2 = (Integer) check.getProps().get("registered2");
+        Integer unreg2 = (Integer) check.getProps().get("unregistered2");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertNotNull(reg2);
+        assertNotNull(unreg2);
+        assertEquals(new Integer(1), reg);
+        assertEquals(new Integer(0), unreg);
+        assertEquals(new Integer(1), reg2);
+        assertEquals(new Integer(0), unreg2);
+
+        ci.stop();
+
+        reg = (Integer) check.getProps().get("registered");
+        unreg = (Integer) check.getProps().get("unregistered");
+        reg2 = (Integer) check.getProps().get("registered2");
+        unreg2 = (Integer) check.getProps().get("unregistered2");
+        assertNotNull(reg2);
+        assertNotNull(unreg2);
+        assertEquals(new Integer(1), reg);
+        assertEquals(new Integer(1), unreg);
+        assertEquals(new Integer(1), reg2);
+        assertEquals(new Integer(1), unreg2);
+    }
+
+    public void testWithOnePairForTwoService() {
+    	ComponentInstance ci = helper.createComponentInstance("PS-Callbacks-both-1");
+        // Controller set to true.
+        waitForService(FooService.class.getName(), null, 5000);
+        waitForService(CheckService.class.getName(), null, 5000);
+
+        CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+        assertNotNull(check);
+
+        Integer reg = (Integer) check.getProps().get("registered");
+        Integer unreg = (Integer) check.getProps().get("unregistered");
+        assertNotNull(reg);
+        assertNotNull(unreg);
+        assertEquals(new Integer(2), reg);
+        assertEquals(new Integer(0), unreg);
+
+        ci.stop();
+
+        reg = (Integer) check.getProps().get("registered");
+        unreg = (Integer) check.getProps().get("unregistered");
+        assertEquals(new Integer(2), reg);
+        assertEquals(new Integer(2), unreg);
+    }
+}
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
index b054e0b..5ba666d 100644
--- a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
@@ -41,6 +41,7 @@
         ots.addTestSuite(NullCheck.class);
         ots.addTestSuite(ServiceControllerTest.class);
         ots.addTestSuite(PropertiesInAnonymousClassTest.class);
+        ots.addTestSuite(CallbacksTest.class);
         return ots;
     }
 
diff --git a/ipojo/tests/core/service-providing/src/main/resources/metadata.xml b/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
index 0fbbbed..9ed6050 100644
--- a/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
+++ b/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
@@ -1,227 +1,263 @@
 <ipojo
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
-    xmlns="org.apache.felix.ipojo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
+ xmlns="org.apache.felix.ipojo"
 >
-  <!-- Simple provider  -->
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-    name="PS-FooProviderType-1" architecture="true">
-    <provides />
-  </component>
+    <!-- Simple provider  -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+     name="PS-FooProviderType-1" architecture="true">
+        <provides/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-    name="PS-FooProviderType-itf" architecture="true">
-    <provides
-      specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService" />
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+     name="PS-FooProviderType-itf" architecture="true">
+        <provides
+         specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-    name="PS-FooProviderType-3" architecture="true">
-    <provides>
-      <property name="foo" field="m_foo" />
-      <property name="bar" field="m_bar" />
-      <property name="baz" type="java.lang.String" />
-    </provides>
-    <properties propagation="true">
-      <property name="foo" field="m_foo" />
-      <property name="bar" field="m_bar" />
-    </properties>
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+     name="PS-FooProviderType-3" architecture="true">
+        <provides>
+            <property name="foo" field="m_foo"/>
+            <property name="bar" field="m_bar"/>
+            <property name="baz" type="java.lang.String"/>
+        </provides>
+        <properties propagation="true">
+            <property name="foo" field="m_foo"/>
+            <property name="bar" field="m_bar"/>
+        </properties>
+    </component>
 
-  <!-- Providers providing 2 services -->
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
-    name="PS-FooBarProviderType-1" architecture="true">
-    <provides />
-  </component>
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
-    name="PS-FooBarProviderType-2" architecture="true">
-    <provides
-      specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.FooService, org.apache.felix.ipojo.test.scenarios.ps.service.BarService }" />
-  </component>
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
-    name="PS-FooBarProviderType-3" architecture="true">
-    <provides
-      specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.FooService}">
-      <property name="baz" type="java.lang.String" value="foo" />
-    </provides>
-    <provides
-      specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.BarService}">
-      <property name="baz" type="java.lang.String" value="bar" />
-    </provides>
-  </component>
+    <!-- Providers providing 2 services -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
+     name="PS-FooBarProviderType-1" architecture="true">
+        <provides/>
+    </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
+     name="PS-FooBarProviderType-2" architecture="true">
+        <provides
+         specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.FooService, org.apache.felix.ipojo.test.scenarios.ps.service.BarService }"/>
+    </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
+     name="PS-FooBarProviderType-3" architecture="true">
+        <provides
+         specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.FooService}">
+            <property name="baz" type="java.lang.String" value="foo"/>
+        </provides>
+        <provides
+         specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.BarService}">
+            <property name="baz" type="java.lang.String" value="bar"/>
+        </provides>
+    </component>
 
 
-  <!-- Provider with dynamic property -->
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn"
-    name="PS-FooProviderType-Dyn" architecture="true">
-    <provides>
-      <property name="int" field="intProp" value="2" />
-      <property name="boolean" field="boolProp" value="false" />
-      <property name="string" field="strProp" value="foo" />
-      <property name="strAProp" field="strAProp"
-        value="{foo, bar}" />
-      <property name="intAProp" field="intAProp" value="{1,2,3}" />
-    </provides>
-  </component>
+    <!-- Provider with dynamic property -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn"
+     name="PS-FooProviderType-Dyn" architecture="true">
+        <provides>
+            <property name="int" field="intProp" value="2"/>
+            <property name="boolean" field="boolProp" value="false"/>
+            <property name="string" field="strProp" value="foo"/>
+            <property name="strAProp" field="strAProp"
+             value="{foo, bar}"/>
+            <property name="intAProp" field="intAProp" value="{1,2,3}"/>
+        </provides>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
-    name="PS-FooProviderType-2" architecture="true">
-    <provides>
-      <property name="int" type="int" value="2" />
-      <property name="long" type="long" value="40" />
-      <property name="string" type="java.lang.String" value="foo" />
-      <property name="strAProp" type="java.lang.String[]"
-        value="{foo, bar}" />
-      <property name="intAProp" type="int[]" value="{1,2,3}" />
-    </provides>
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
+     name="PS-FooProviderType-2" architecture="true">
+        <provides>
+            <property name="int" type="int" value="2"/>
+            <property name="long" type="long" value="40"/>
+            <property name="string" type="java.lang.String" value="foo"/>
+            <property name="strAProp" type="java.lang.String[]"
+             value="{foo, bar}"/>
+            <property name="intAProp" type="int[]" value="{1,2,3}"/>
+        </provides>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn2"
-    name="PS-FooProviderType-Dyn2" architecture="true">
-    <provides>
-      <property name="int" field="intProp" value="4" />
-      <property name="boolean" field="boolProp" />
-      <property name="string" field="strProp" />
-      <property name="strAProp" field="strAProp" />
-      <property name="intAProp" field="intAProp"
-        value="{1, 2,3 }" />
-    </provides>
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderTypeDyn2"
+     name="PS-FooProviderType-Dyn2" architecture="true">
+        <provides>
+            <property name="int" field="intProp" value="4"/>
+            <property name="boolean" field="boolProp"/>
+            <property name="string" field="strProp"/>
+            <property name="strAProp" field="strAProp"/>
+            <property name="intAProp" field="intAProp"
+             value="{1, 2,3 }"/>
+        </provides>
+    </component>
 
-  <!--  Inherited Provides -->
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
-    name="PS-PI1" architecture="true">
-    <provides />
-  </component>
+    <!--  Inherited Provides -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
+     name="PS-PI1" architecture="true">
+        <provides/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
-    name="PS-PI1-1" architecture="true">
-    <provides
-      specifications="org.apache.felix.ipojo.test.scenarios.ps.service.ParentParentInterface" />
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
+     name="PS-PI1-1" architecture="true">
+        <provides
+         specifications="org.apache.felix.ipojo.test.scenarios.ps.service.ParentParentInterface"/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
-    name="PS-PI1-2" architecture="true">
-    <provides
-      specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.ParentParentInterface, org.apache.felix.ipojo.test.scenarios.ps.service.ParentInterface2}" />
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
+     name="PS-PI1-2" architecture="true">
+        <provides
+         specifications="{org.apache.felix.ipojo.test.scenarios.ps.service.ParentParentInterface, org.apache.felix.ipojo.test.scenarios.ps.service.ParentInterface2}"/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation2"
-    name="PS-PI2" architecture="true">
-    <provides />
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation2"
+     name="PS-PI2" architecture="true">
+        <provides/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation2"
-    name="PS-PI2-1" architecture="true">
-    <provides
-      specifications="org.apache.felix.ipojo.test.scenarios.ps.service.ParentParentInterface" />
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation2"
+     name="PS-PI2-1" architecture="true">
+        <provides
+         specifications="org.apache.felix.ipojo.test.scenarios.ps.service.ParentParentInterface"/>
+    </component>
 
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation3"
-    name="PS-PI3" architecture="true">
-    <provides />
-  </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation3"
+     name="PS-PI3" architecture="true">
+        <provides/>
+    </component>
 
-  <!-- Concrete and abstract class -->
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"
-    name="PS-PI4" architecture="true">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"/>
-  </component>
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation2"
-    name="PS-PI5" architecture="true">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"/>
-  </component>
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation4"
-    name="PS-PI6" architecture="true">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"/>
-  </component>
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation3"
-    name="PS-PI7" architecture="true">
-    <provides specifications="[org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation,
-          org.apache.felix.ipojo.test.scenarios.ps.service.FooService]"/>
-  </component>
+    <!-- Concrete and abstract class -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"
+     name="PS-PI4" architecture="true">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"/>
+    </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation2"
+     name="PS-PI5" architecture="true">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"/>
+    </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation4"
+     name="PS-PI6" architecture="true">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"/>
+    </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation3"
+     name="PS-PI7" architecture="true">
+        <provides specifications="[org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation, org.apache.felix.ipojo.test.scenarios.ps.service.FooService]"/>
+    </component>
 
-  <!--  Null Check -->
-  <component classname="org.apache.felix.ipojo.test.scenarios.component.NullCheckServiceProvider" immediate="true"
-    name="PS-Null">
-    <provides>
-      <property field="prop1"/>
-      <property field="prop2"/>
-    </provides>
-  </component>
+    <!--  Null Check -->
+    <component classname="org.apache.felix.ipojo.test.scenarios.component.NullCheckServiceProvider" immediate="true"
+     name="PS-Null">
+        <provides>
+            <property field="prop1"/>
+            <property field="prop2"/>
+        </provides>
+    </component>
 
-  <!--  Service Controller -->
-  <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"
-    name="PS-Controller-1-default">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
-      <controller field="controller"/>
-    </provides>
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
-    </provides>
-  </component>
+    <!--  Service Controller -->
     <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"
-    name="PS-Controller-1-false">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
-      <property name="test2" type="string" value="test2"/>
-      <controller field="controller" value="false"/>
-      <property name="test" type="string" value="test"/>
-    </provides>
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
-    </provides>
-  </component>
-  <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
-    name="PS-Controller-2-truetrue">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
-      <property name="test2" type="string" value="test2"/>
-      <controller field="controllerFoo" value="true"/>
-      <property name="test" type="string" value="test"/>
-    </provides>
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
-        <controller field="controllerCS" value="true"/>
-    </provides>
-  </component>
-  <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
-    name="PS-Controller-2-truefalse">
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
-      <property name="test2" type="string" value="test2"/>
-      <controller field="controllerFoo" value="false"/>
-      <property name="test" type="string" value="test"/>
-    </provides>
-    <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
-        <controller field="controllerCS" value="true"/>
-    </provides>
-  </component>
+     name="PS-Controller-1-default">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+            <controller field="controller"/>
+        </provides>
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+        </provides>
+    </component>
+    <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"
+     name="PS-Controller-1-false">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+            <property name="test2" type="string" value="test2"/>
+            <controller field="controller" value="false"/>
+            <property name="test" type="string" value="test"/>
+        </provides>
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+        </provides>
+    </component>
+    <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+     name="PS-Controller-2-truetrue">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+            <property name="test2" type="string" value="test2"/>
+            <controller field="controllerFoo" value="true"/>
+            <property name="test" type="string" value="test"/>
+        </provides>
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+            <controller field="controllerCS" value="true"/>
+        </provides>
+    </component>
+    <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+     name="PS-Controller-2-truefalse">
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+            <property name="test2" type="string" value="test2"/>
+            <controller field="controllerFoo" value="false"/>
+            <property name="test" type="string" value="test"/>
+        </provides>
+        <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+            <controller field="controllerCS" value="true"/>
+        </provides>
+    </component>
 
-  <!-- Anonymous classes -->
-  <component
-    classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderWithAnonymousClass"
-    name="PS-FooProviderTypeAnonymous-Dyn" architecture="true">
-    <provides>
-      <property name="int" field="intProp" value="2" />
-      <property name="boolean" field="boolProp" value="false" />
-      <property name="string" field="strProp" value="foo" />
-      <property name="strAProp" field="strAProp"
-        value="{foo, bar}" />
-      <property name="intAProp" field="intAProp" value="{1,2,3}" />
-    </provides>
-  </component>
+    <!-- Anonymous classes -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderWithAnonymousClass"
+     name="PS-FooProviderTypeAnonymous-Dyn" architecture="true">
+        <provides>
+            <property name="int" field="intProp" value="2"/>
+            <property name="boolean" field="boolProp" value="false"/>
+            <property name="string" field="strProp" value="foo"/>
+            <property name="strAProp" field="strAProp"
+             value="{foo, bar}"/>
+            <property name="intAProp" field="intAProp" value="{1,2,3}"/>
+        </provides>
+    </component>
+
+    <!-- Registration callbacks -->
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.callbacks.CallbacksCheckService"
+     name="PS-Callbacks-reg-only">
+        <provides post-registration="registered"/>
+    </component>
+    <component
+     classname="org.apache.felix.ipojo.test.scenarios.component.callbacks.CallbacksCheckService"
+     name="PS-Callbacks-both">
+        <provides post-registration="registered" post-unregistration="unregistered"/>
+    </component>
+	<component
+     classname="org.apache.felix.ipojo.test.scenarios.component.callbacks.CallbacksCheckService"
+     name="PS-Callbacks-unreg-only">
+        <provides post-unregistration="unregistered"/>
+    </component>
+	<component
+     classname="org.apache.felix.ipojo.test.scenarios.component.callbacks.CallbacksCheckService"
+     name="PS-Callbacks-both-2">
+        <provides
+			specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"
+			post-unregistration="unregistered" post-registration="registered"/>
+		<provides
+			specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService"
+			post-unregistration="unregistered2" post-registration="registered2"/>
+    </component>
+	<component
+     classname="org.apache.felix.ipojo.test.scenarios.component.callbacks.CallbacksCheckService"
+     name="PS-Callbacks-both-1">
+        <provides
+			specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService"
+			post-unregistration="unregistered" post-registration="registered"/>
+		<provides
+			specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService"
+			post-unregistration="unregistered" post-registration="registered"/>
+    </component>
 </ipojo>
diff --git a/ipojo/tests/online-manipulator/src/test/java/consumer.xml b/ipojo/tests/online-manipulator/src/test/java/consumer.xml
deleted file mode 100644
index 98f82f8..0000000
--- a/ipojo/tests/online-manipulator/src/test/java/consumer.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
-	xmlns="org.apache.felix.ipojo">
-	<instance
-		component="org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.Consumer"
-		name="cons"/>
-</ipojo>
\ No newline at end of file
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/OSGiHelper.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OSGiHelper.java
similarity index 99%
rename from ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/OSGiHelper.java
rename to ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OSGiHelper.java
index 276b6c7..d8c639e 100644
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/OSGiHelper.java
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OSGiHelper.java
@@ -1,4 +1,4 @@
-package org.apache.felix.org.apache.felix.ipojo.online.manipulator.test;
+package org.apache.felix.ipojo.online.manipulator.test;
 
 import static org.junit.Assert.fail;
 
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
similarity index 91%
rename from ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
rename to ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
index 30963d5..6c95d08 100644
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
@@ -1,4 +1,4 @@
-package org.apache.felix.org.apache.felix.ipojo.online.manipulator.test;
+package org.apache.felix.ipojo.online.manipulator.test;
 
 
 import static org.ops4j.pax.exam.CoreOptions.equinox;
@@ -19,9 +19,9 @@
 import org.apache.felix.ipojo.ComponentInstance;
 import org.apache.felix.ipojo.architecture.Architecture;
 import org.apache.felix.ipojo.architecture.InstanceDescription;
-import org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.Consumer;
-import org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider;
-import org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service.Hello;
+import org.apache.felix.ipojo.online.manipulator.test.impl.Consumer;
+import org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider;
+import org.apache.felix.ipojo.online.manipulator.test.service.Hello;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -96,7 +96,7 @@
                             newBundle()
                                 .add( Hello.class )
                                .set(Constants.BUNDLE_SYMBOLICNAME,"ServiceInterface")
-                               .set(Constants.EXPORT_PACKAGE, "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+                               .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.online.manipulator.test.service")
                                .build()
                         ),
            systemProperty( "providerWithMetadata" ).value( providerWithMetadata ),
@@ -110,7 +110,7 @@
                      public InputStream customizeTestProbe( InputStream testProbe )
                      {
                          return TinyBundles.modifyBundle(testProbe).set(Constants.IMPORT_PACKAGE,
-                        		 "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+                        		 "org.apache.felix.ipojo.online.manipulator.test.service")
                         		 .build();
                      }
 
@@ -155,8 +155,6 @@
 
         assertBundle("Provider");
 
-        Assert.assertNotNull(context.getAllServiceReferences(Hello.class.getName(), null));
-
         helper.waitForService(Hello.class.getName(), null, 5000);
         assertValidity();
         Assert.assertNotNull(context.getServiceReference(Hello.class.getName()));
@@ -240,7 +238,7 @@
         .add("metadata.xml", OnlineManipulatorTest.class.getClassLoader().getResource("provider.xml"))
         .add(MyProvider.class)
         .set(Constants.BUNDLE_SYMBOLICNAME,"Provider")
-        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.online.manipulator.test.service")
         .build();
 
         File out = getTemporaryFile("providerWithMetadata");
@@ -258,7 +256,7 @@
         .add("META-INF/metadata.xml", OnlineManipulatorTest.class.getClassLoader().getResource("provider.xml"))
         .add(MyProvider.class)
         .set(Constants.BUNDLE_SYMBOLICNAME,"Provider")
-        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.online.manipulator.test.service")
         .build();
 
         File out = getTemporaryFile("providerWithMetadataInMetaInf");
@@ -276,7 +274,7 @@
         //.addResource("metadata.xml", this.getClass().getClassLoader().getResource("provider.xml"))
         .add(MyProvider.class)
         .set(Constants.BUNDLE_SYMBOLICNAME,"Provider")
-        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.online.manipulator.test.service")
         .build();
 
     	File out = getTemporaryFile("providerWithoutMetadata");
@@ -297,7 +295,7 @@
             .add("metadata.xml", OnlineManipulatorTest.class.getClassLoader().getResource("consumer.xml"))
             .add(Consumer.class)
             .set(Constants.BUNDLE_SYMBOLICNAME, "Consumer")
-            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+            .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.online.manipulator.test.service")
             .build();
 
         File out = getTemporaryFile("consumerWithMetadata");
@@ -315,7 +313,7 @@
         InputStream is = newBundle()
         .add(Consumer.class)
         .set(Constants.BUNDLE_SYMBOLICNAME, "Consumer")
-        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service")
+        .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.online.manipulator.test.service")
         .build();
 
         File out = getTemporaryFile("consumerWithoutMetadata");
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
similarity index 62%
rename from ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
rename to ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
index 1f83497..dc2698d 100644
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
@@ -1,8 +1,8 @@
-package org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl;
+package org.apache.felix.ipojo.online.manipulator.test.impl;
 
 import org.apache.felix.ipojo.annotations.Component;
 import org.apache.felix.ipojo.annotations.Requires;
-import org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service.Hello;
+import org.apache.felix.ipojo.online.manipulator.test.service.Hello;
 
 @Component
 public class Consumer {
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
new file mode 100644
index 0000000..a53094f
--- /dev/null
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
@@ -0,0 +1,11 @@
+package org.apache.felix.ipojo.online.manipulator.test.impl;
+
+import org.apache.felix.ipojo.online.manipulator.test.service.Hello;
+
+public class MyProvider implements Hello {
+    
+    public String sayHello() {
+        return "Hello";
+    }
+
+}
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/service/Hello.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/service/Hello.java
new file mode 100644
index 0000000..c785fbf
--- /dev/null
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/service/Hello.java
@@ -0,0 +1,7 @@
+package org.apache.felix.ipojo.online.manipulator.test.service;
+
+public interface Hello {
+    
+    public String sayHello();
+
+}
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
deleted file mode 100644
index 592132a..0000000
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl;
-
-import org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service.Hello;
-
-public class MyProvider implements Hello {
-    
-    public String sayHello() {
-        return "Hello";
-    }
-
-}
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/service/Hello.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/service/Hello.java
deleted file mode 100644
index 83de144..0000000
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/test/service/Hello.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.service;
-
-public interface Hello {
-    
-    public String sayHello();
-
-}
diff --git a/ipojo/tests/online-manipulator/src/test/java/provider.xml b/ipojo/tests/online-manipulator/src/test/java/provider.xml
deleted file mode 100644
index 1171c64..0000000
--- a/ipojo/tests/online-manipulator/src/test/java/provider.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
-	xmlns="org.apache.felix.ipojo">
-	<component classname="org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider">
-		<provides/>
-	</component>
-<instance component="org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider"/>
-</ipojo>
\ No newline at end of file
diff --git a/ipojo/tests/online-manipulator/src/test/resources/consumer.xml b/ipojo/tests/online-manipulator/src/test/resources/consumer.xml
index 2775f7c..5c8ae28 100644
--- a/ipojo/tests/online-manipulator/src/test/resources/consumer.xml
+++ b/ipojo/tests/online-manipulator/src/test/resources/consumer.xml
@@ -1,3 +1,3 @@
 <ipojo>
-<instance component="org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.Consumer"/>
+<instance component="org.apache.felix.ipojo.online.manipulator.test.impl.Consumer"/>
 </ipojo>
\ No newline at end of file
diff --git a/ipojo/tests/online-manipulator/src/test/resources/provider.xml b/ipojo/tests/online-manipulator/src/test/resources/provider.xml
index 64bbe01..d6f7187 100644
--- a/ipojo/tests/online-manipulator/src/test/resources/provider.xml
+++ b/ipojo/tests/online-manipulator/src/test/resources/provider.xml
@@ -1,6 +1,6 @@
 <ipojo>
-<component classname="org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider">
+<component classname="org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider">
 	<provides/>
 </component>
-<instance component="org.apache.felix.org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider"/>
+<instance component="org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider"/>
 </ipojo>
\ No newline at end of file
