diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
index 9bcaf8a..66f9a4f 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.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
@@ -231,7 +231,7 @@
      * @param pojo : pojo instance on which calling the bind method.
      */
     protected void onObjectCreation(Object pojo) {
-                
+
         ServiceReference[] refs;
         synchronized (this) {
             if (!m_isStarted) { return; }
@@ -333,6 +333,31 @@
         }
     }
 
+    private Object createNullableObject() {
+    	 // To load the proxy we use the POJO class loader. Indeed, this classloader imports iPOJO (so can access to Nullable) and has
+        // access to the service specification.
+    	try {
+            ClassLoader cl = new NullableClassLoader(
+                    getHandler().getInstanceManager().getClazz().getClassLoader(),
+                    getSpecification().getClassLoader());
+
+            m_nullable =
+                Proxy.newProxyInstance(cl, new Class[] {
+                        getSpecification(), Nullable.class }, new NullableObject()); // NOPMD
+
+        } catch (NoClassDefFoundError e) {
+            // A NoClassDefFoundError is thrown if the specification uses a class not accessible by the actual instance.
+            // It generally comes from a missing import.
+            throw new IllegalStateException("Cannot create the Nullable object, a referenced class cannot be loaded: " + e.getMessage());
+        } catch (Throwable e) { // Catch any other exception that can occurs
+            throw new IllegalStateException(
+                    "Cannot create the Nullable object, an unexpected error occurs: "
+                            + e.getMessage());
+        }
+
+        return m_nullable;
+    }
+
     /**
      * Start the dependency.
      */
@@ -342,26 +367,7 @@
             if (m_di == null) {
                 // If nullable are supported, create the nullable object.
                 if (m_supportNullable) {
-                    // To load the proxy we use the POJO class loader. Indeed, this classloader imports iPOJO (so can access to Nullable) and has
-                    // access to the service specification.
-                    try {
-                        ClassLoader cl = new NullableClassLoader(
-                                getHandler().getInstanceManager().getClazz().getClassLoader(), 
-                                getSpecification().getClassLoader());
-                        
-                        m_nullable =
-                            Proxy.newProxyInstance(cl, new Class[] {
-                                    getSpecification(), Nullable.class }, new NullableObject()); // NOPMD
-                        
-                    } catch (NoClassDefFoundError e) {
-                        // A NoClassDefFoundError is thrown if the specification uses a class not accessible by the actual instance.
-                        // It generally comes from a missing import.
-                        throw new IllegalStateException("Cannot create the Nullable object, a referenced class cannot be loaded: " + e.getMessage());
-                    } catch (Throwable e) { // Catch any other exception that can occurs
-                        throw new IllegalStateException(
-                                "Cannot create the Nullable object, an unexpected error occurs: "
-                                        + e.getMessage());
-                    }
+                	createNullableObject();
                 }
             } else {
                 // Create the default-implementation object.
@@ -617,6 +623,7 @@
             if (refs == null) {
                 if (m_nullable == null && m_supportNullable) {
                     m_handler.warn("[" + m_handler.getInstanceManager().getInstanceName() + "] The dependency is not optional, however no service object can be injected in " + m_field + " -> " + getSpecification().getName());
+                    createNullableObject();
                 }
                 usage.m_object = m_nullable; // Add null if the Nullable pattern is disable.
             } else {
@@ -783,21 +790,21 @@
         setAggregate(true);
         m_type = type;
     }
-    
+
     /**
      * Classloader for nullable objects.
      */
     private class NullableClassLoader extends ClassLoader {
        /**
-        * Component classloader. 
+        * Component classloader.
         */
         private ClassLoader m_component;
-       
+
        /**
-        * Specification classloader. 
+        * Specification classloader.
         */
         private ClassLoader m_specification;
-       
+
         /**
          * Creates a NullableClassLoader.
          * @param cmp the component class loader.
@@ -807,7 +814,7 @@
             m_component = cmp;
             m_specification = spec;
         }
-        
+
         /**
          * Loads the given class.
          * This method uses the classloader of the component class
@@ -824,8 +831,8 @@
                 return m_specification.loadClass(name);
             }
         }
-        
-       
+
+
     }
 
     /**
@@ -904,17 +911,17 @@
          * HashCode method.
          */
         private Method m_hashCodeMethod;
-        
+
         /**
          * Equals method.
          */
         private Method m_equalsMethod;
-        
+
         /**
-         * toStirng method. 
+         * toStirng method.
          */
         private Method m_toStringMethod;
-        
+
         /**
          * Creates a DynamicProxyFactory.
          */
@@ -928,7 +935,7 @@
                 throw new NoSuchMethodError(e.getMessage());
             }
         }
-        
+
         /**
          * Creates a proxy object for the given specification. The proxy
          * uses the given dependency to get the service object.
@@ -967,7 +974,7 @@
                             "Unexpected Object method dispatched: " + method);
                 }
             }
-            
+
             return method.invoke(svc, args);
         }
 
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 180ac02..52c11c2 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
@@ -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
@@ -38,7 +38,7 @@
 
 /**
  * Abstract dependency model.
- * This class is the parent class of every service dependency. It manages the most 
+ * This class is the parent class of every service dependency. It manages the most
  * part of dependency management. This class creates an interface between the service
  * tracker and the concrete dependency.
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
@@ -60,29 +60,29 @@
     public static final int UNRESOLVED = 0;
 
     /**
-     * Dependency state : RESOLVED. 
+     * Dependency state : RESOLVED.
      * A dependency is resolved if the dependency is optional or at least one
      * provider is available.
      */
     public static final int RESOLVED = 1;
 
     /**
-     * Binding policy : Dynamic. 
+     * Binding policy : Dynamic.
      * In this policy, services can appears and departs without special treatment.
      */
     public static final int DYNAMIC_BINDING_POLICY = 0;
 
     /**
-     * Binding policy : Static. 
+     * Binding policy : Static.
      * Once a service is used, if this service disappears the dependency becomes
      * {@link DependencyModel#BROKEN}. The instance needs to be recreated.
      */
     public static final int STATIC_BINDING_POLICY = 1;
 
     /**
-     * Binding policy : Dynamic-Priority. 
+     * Binding policy : Dynamic-Priority.
      * In this policy, services can appears and departs. However, once a service
-     * with a highest ranking (according to the used comparator) appears, this 
+     * with a highest ranking (according to the used comparator) appears, this
      * new service is re-injected.
      */
     public static final int DYNAMIC_PRIORITY_BINDING_POLICY = 2;
@@ -109,7 +109,7 @@
     private Comparator m_comparator;
 
     /**
-     * The LDAP filter object selecting service references 
+     * The LDAP filter object selecting service references
      * from the set of providers providing the required specification.
      */
     private Filter m_filter;
@@ -121,7 +121,7 @@
     private BundleContext m_context;
 
     /**
-     * Listener object on which invoking the {@link DependencyStateListener#validate(DependencyModel)} 
+     * Listener object on which invoking the {@link DependencyStateListener#validate(DependencyModel)}
      * and {@link DependencyStateListener#invalidate(DependencyModel)} methods.
      */
     private final DependencyStateListener m_listener;
@@ -143,12 +143,12 @@
     private Tracker m_tracker;
 
     /**
-     * The list of matching service references. This list is a 
-     * subset of tracked references. This set is computed according 
+     * The list of matching service references. This list is a
+     * subset of tracked references. This set is computed according
      * to the filter and the {@link DependencyModel#match(ServiceReference)} method.
      */
     private final List m_matchingRefs = new ArrayList();
-    
+
     /**
      * The instance requiring the service.
      */
@@ -165,7 +165,7 @@
      * Creates a DependencyModel.
      * If the dependency has no comparator and follows the
      * {@link DependencyModel#DYNAMIC_PRIORITY_BINDING_POLICY} policy
-     * the OSGi Service Reference Comparator is used. 
+     * the OSGi Service Reference Comparator is used.
      * @param specification the required specification
      * @param aggregate is the dependency aggregate ?
      * @param optional is the dependency optional ?
@@ -221,7 +221,7 @@
         ungetAllServices();
         m_state = UNRESOLVED;
     }
-    
+
     /**
      * Ungets all 'get' service references.
      * This also clears the service object map.
@@ -244,19 +244,19 @@
     }
 
     /**
-     * Is the reference set frozen (cannot change anymore)? 
+     * Is the reference set frozen (cannot change anymore)?
      * This method must be override by concrete dependency to support
      * the static binding policy. In fact, this method allows optimizing
      * the static dependencies to become frozen only when needed.
-     * This method returns <code>false</code> by default. 
+     * This method returns <code>false</code> by default.
      * The method must always return <code>false</code> for non-static dependencies.
      * @return <code>true</code> if the reference set is frozen.
      */
     public boolean isFrozen() {
         return false;
     }
-    
-    
+
+
     /**
      * Unfreezes the dependency.
      * This method must be overide by concrete dependency to support
@@ -269,7 +269,7 @@
     /**
      * Does the service reference match ? This method must be override by
      * concrete dependencies if they need advanced testing on service reference
-     * (that cannot be expressed in the LDAP filter). By default this method 
+     * (that cannot be expressed in the LDAP filter). By default this method
      * returns <code>true</code>.
      * @param ref the tested reference.
      * @return <code>true</code> if the service reference matches.
@@ -313,7 +313,7 @@
     }
 
     /**
-     * Service tracker adding service callback. 
+     * Service tracker adding service callback.
      * It accepts the service only if the dependency isn't broken or frozen.
      * @param ref the arriving service reference.
      * @return <code>true</code> if the reference must be tracked.
@@ -324,7 +324,7 @@
     }
 
     /**
-     * Service Tracker added service callback. 
+     * Service Tracker added service callback.
      * If the service matches (against the filter and the {@link DependencyModel#match(ServiceReference)},
      * manages the provider arrival.
      * @param ref : new references.
@@ -336,10 +336,10 @@
         }
         // Do not store the service if it doesn't match.
     }
-    
+
     /**
      * Checks if the given service reference match the current filter.
-     * This method aims to avoid calling {@link Filter#match(ServiceReference)} 
+     * This method aims to avoid calling {@link Filter#match(ServiceReference)}
      * method when manipulating a composite reference. In fact, this method thrown
      * a {@link ClassCastException} on Equinox.
      * @param ref the service reference to check.
@@ -359,7 +359,7 @@
     }
 
     /**
-     * Manages the arrival of a new service reference. 
+     * Manages the arrival of a new service reference.
      * The reference is valid and matches the filter and the {@link DependencyModel#match(ServiceReference)}
      * method. This method has different behavior according to the binding policy.
      * @param ref the new reference
@@ -412,8 +412,8 @@
     }
 
     /**
-     * Service tracker removed service callback. 
-     * A service provider goes away. The depart needs to be managed only if the 
+     * Service tracker removed service callback.
+     * A service provider goes away. The depart needs to be managed only if the
      * reference was used.
      * @param ref the leaving service reference
      * @param arg1 the service object if the service was already get
@@ -433,7 +433,7 @@
     private void manageDeparture(ServiceReference ref, Object obj) {
         // Unget the service reference
         ungetService(ref);
-        
+
         // If we already get this service and the binding policy is static, the dependency becomes broken
         if (isFrozen() && obj != null) {
             if (m_state != BROKEN) {
@@ -478,10 +478,10 @@
     }
 
     /**
-     * Service tracker modified service callback. 
-     * This method must handle if the modified service should be considered as 
+     * Service tracker modified service callback.
+     * This method must handle if the modified service should be considered as
      * a depart or an arrival.
-     * According to the dependency filter, a service can now match or can no match 
+     * According to the dependency filter, a service can now match or can no match
      * anymore.
      * @param ref the modified reference
      * @param arg1 the service object if already get.
@@ -507,7 +507,7 @@
 
     /**
      * Gets the next matching service reference.
-     * @return <code>null</code> if no more provider is available, 
+     * @return <code>null</code> if no more provider is available,
      * else returns the first reference from the matching set.
      */
     public ServiceReference getServiceReference() {
@@ -522,7 +522,7 @@
 
     /**
      * Gets matching service references.
-     * @return the sorted (if a comparator is used) array of matching service 
+     * @return the sorted (if a comparator is used) array of matching service
      * references, <code>null</code> if no references are available.
      */
     public ServiceReference[] getServiceReferences() {
@@ -572,22 +572,22 @@
     }
 
     /**
-     * Concrete dependency callback. 
-     * This method is called when a new service needs to be 
+     * Concrete dependency callback.
+     * This method is called when a new service needs to be
      * re-injected in the underlying concrete dependency.
      * @param ref the service reference to inject.
      */
     public abstract void onServiceArrival(ServiceReference ref);
 
     /**
-     * Concrete dependency callback. 
+     * Concrete dependency callback.
      * This method is called when a used service (already injected) is leaving.
      * @param ref the leaving service reference.
      */
     public abstract void onServiceDeparture(ServiceReference ref);
-    
+
     /**
-     * Concrete dependency callback. 
+     * Concrete dependency callback.
      * This method is called when a used service (already injected) is modified.
      * @param ref the modified service reference.
      */
@@ -609,7 +609,7 @@
                 onServiceDeparture((ServiceReference) m_matchingRefs.get(1));
                 onServiceArrival(ref);
             }
-            
+
         } else {
             // It's a modification...
             onServiceModification(ref);
@@ -617,7 +617,7 @@
     }
 
     /**
-     * Concrete dependency callback. 
+     * Concrete dependency callback.
      * This method is called when the dependency is reconfigured and when this
      * reconfiguration implies changes on the matching service set ( and by the
      * way on the injected service).
@@ -627,7 +627,7 @@
     public abstract void onDependencyReconfiguration(ServiceReference[] departs, ServiceReference[] arrivals);
 
     /**
-     * Calls the listener callback to notify the new state of the current 
+     * Calls the listener callback to notify the new state of the current
      * dependency.
      */
     private void invalidate() {
@@ -635,7 +635,7 @@
     }
 
     /**
-     * Calls the listener callback to notify the new state of the current 
+     * Calls the listener callback to notify the new state of the current
      * dependency.
      */
     private void validate() {
@@ -659,7 +659,7 @@
     }
 
     /**
-     * Sets the required specification of this service dependency. 
+     * Sets the required specification of this service dependency.
      * This operation is not supported if the dependency tracking has already begun.
      * @param specification the required specification.
      */
@@ -791,7 +791,7 @@
 
     /**
      * Returns the dependency filter (String form).
-     * @return the String form of the LDAP filter used by this dependency, 
+     * @return the String form of the LDAP filter used by this dependency,
      * <code>null</code> if not set.
      */
     public String getFilter() {
@@ -803,7 +803,7 @@
     }
 
     /**
-     * Sets the aggregate attribute of the current dependency. 
+     * Sets the aggregate attribute of the current dependency.
      * If the tracking is opened, it will call arrival and departure callbacks.
      * @param isAggregate the new aggregate attribute value.
      */
@@ -863,7 +863,7 @@
     }
 
     /**
-     * Sets the binding policy. 
+     * Sets the binding policy.
      * Not yet supported.
      */
     public void setBindingPolicy() {
@@ -875,7 +875,7 @@
         m_comparator = cmp;
         // NOTE: the array will be sorted at the next get.
     }
-    
+
     /**
      * Gets the used comparator name.
      * <code>Null</code> if no comparator (i.e. the OSGi one is used).
@@ -911,31 +911,30 @@
         Object svc =  m_tracker.getService(ref);
         if (svc instanceof IPOJOServiceFactory) {
             Object obj =  ((IPOJOServiceFactory) svc).getService(m_instance);
-            m_serviceObjects.put(ref, obj);
+            m_serviceObjects.put(ref, svc); // We store the factory !
             return obj;
         } else {
             m_serviceObjects.put(ref, svc);
             return svc;
         }
     }
-    
+
     /**
      * Ungets a used service reference.
      * @param ref the reference to unget.
      */
     public void ungetService(ServiceReference ref) {
-        Object svc = m_tracker.getService(ref); // Get the service object
         m_tracker.ungetService(ref);
         Object obj = m_serviceObjects.remove(ref);  // Remove the service object
-        if (svc instanceof IPOJOServiceFactory) {
-            ((IPOJOServiceFactory) svc).ungetService(m_instance, obj);
+        if (obj != null  && obj instanceof IPOJOServiceFactory) {
+            ((IPOJOServiceFactory) obj).ungetService(m_instance, obj);
         }
     }
 
     /**
      * Helper method parsing the comparator attribute and returning the
      * comparator object. If the 'comparator' attribute is not set, this method
-     * returns null. If the 'comparator' attribute is set to 'osgi', this method 
+     * returns null. If the 'comparator' attribute is set to 'osgi', this method
      * returns the normal OSGi comparator. In other case, it tries to create
      * an instance of the declared comparator class.
      * @param dep the Element describing the dependency
@@ -984,9 +983,9 @@
     }
 
     /**
-     * Helper method parsing the binding policy. 
-     * If the 'policy' attribute is not set in the dependency, the method returns 
-     * the 'DYNAMIC BINDING POLICY'. Accepted policy values are : dynamic, 
+     * Helper method parsing the binding policy.
+     * If the 'policy' attribute is not set in the dependency, the method returns
+     * the 'DYNAMIC BINDING POLICY'. Accepted policy values are : dynamic,
      * dynamic-priority and static.
      * @param dep the Element describing the dependency
      * @return the policy attached to this dependency
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 0989734..cea8d3b 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
@@ -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
@@ -64,31 +64,31 @@
     protected String m_listenerFilter;
 
     /**
-     * The class name to be tracked. If this field is set, then we are 
+     * The class name to be tracked. If this field is set, then we are
      * tracking by class name.
      */
     private String m_trackClass;
 
     /**
-     * The reference to be tracked. If this field is set, then we are 
+     * The reference to be tracked. If this field is set, then we are
      * tracking a single ServiceReference.
      */
     private ServiceReference m_trackReference;
 
     /**
-     * The tracked services: ServiceReference object -> customized. 
+     * The tracked services: ServiceReference object -> customized.
      *Object and ServiceListener object
      */
     private Tracked m_tracked;
 
     /**
-     * The cached ServiceReference for getServiceReference. 
+     * The cached ServiceReference for getServiceReference.
      * This field is volatile since it is accessed by multiple threads.
      */
     private volatile ServiceReference m_cachedReference;
 
     /**
-     * The cached service object for getService. This field is volatile 
+     * The cached service object for getService. This field is volatile
      * since it is accessed by multiple threads.
      */
     private volatile Object m_cachedService;
@@ -124,7 +124,7 @@
      * @param context the BundleContext object against which the tracking is done.
      * @param clazz the Class name of the services to be tracked.
      * @param customizer the customizer object to call when services are added, modified, or removed in this Tracker object. If customizer is null, then this Tracker object will be used as
-     *            the TrackerCustomizer object and the Tracker object will call the TrackerCustomizer methods on itself.    
+     *            the TrackerCustomizer object and the Tracker object will call the TrackerCustomizer methods on itself.
      */
     public Tracker(BundleContext context, String clazz, TrackerCustomizer customizer) {
         // Security Check
@@ -132,7 +132,7 @@
             throw new SecurityException("The bundle " + context.getBundle().getBundleId()
                     + " does not have the permission to get the service " + clazz);
         }
-        
+
         this.m_context = context;
         this.m_trackReference = null;
         this.m_trackClass = clazz;
@@ -158,7 +158,7 @@
      * @param context the BundleContext object against which the tracking is done.
      * @param filter the Filter object to select the services to be tracked.
      * @param customizer The customizer object to call when services are added, modified, or removed in this Tracker object. If customizer is null, then this Tracker object will be used as the
-     *            TrackerCustomizer object and the Tracker object will call the TrackerCustomizer methods on itself.   
+     *            TrackerCustomizer object and the Tracker object will call the TrackerCustomizer methods on itself.
      */
     public Tracker(BundleContext context, Filter filter, TrackerCustomizer customizer) {
         this.m_context = context;
@@ -263,7 +263,7 @@
     }
 
     /**
-     * Default implementation of the TrackerCustomizer.addedService method.  
+     * Default implementation of the TrackerCustomizer.addedService method.
      * @param reference the added reference.
      * @see org.apache.felix.ipojo.util.TrackerCustomizer#addedService(org.osgi.framework.ServiceReference)
      */
@@ -341,7 +341,7 @@
             Iterator keys = tracked.keySet().iterator();
             for (int i = 0; i < length; i++) {
                 references[i] = (ServiceReference) keys.next();
-            }            
+            }
             return references;
         }
     }
@@ -367,7 +367,7 @@
             return references;
         }
     }
-    
+
     /**
      * Returns the list of references used by the tracker.
      * A reference becomes used when the dependency has already
@@ -418,17 +418,17 @@
     /**
      * Returns the service object for the specified ServiceReference object if the referenced service is being tracked by this Tracker object.
      * @param reference the Reference to the desired service.
-     * @return the Service object or <code>null</code> if the service referenced by the specified ServiceReference object is not being tracked.
+     * @return the Service object. Try to get the service if not yet tracked.
      */
     public Object getService(ServiceReference reference) {
         // Security Check
-        if (! SecurityHelper.hasPermissionToGetServices((String[]) reference.getProperty(Constants.OBJECTCLASS), 
+        if (! SecurityHelper.hasPermissionToGetServices((String[]) reference.getProperty(Constants.OBJECTCLASS),
                 m_context)) {
             throw new SecurityException("The bundle " + m_context.getBundle().getBundleId() + " does not have"
-                    + " the permission to get the services " 
+                    + " the permission to get the services "
                     + Arrays.asList((String[]) reference.getProperty(Constants.OBJECTCLASS)));
         }
-        
+
         Tracked tracked = this.m_tracked; // use local var since we are not synchronized
         if (tracked == null) { /* if Tracker is not open */
             return null;
@@ -445,8 +445,8 @@
             } else { // The object was already get.
                 return object;
             }
-            // Not already tracked.
-            return m_context.getService(reference);
+
+            return  m_context.getService(reference);
         }
     }
 
@@ -687,7 +687,7 @@
         }
 
         /**
-         * Common logic to add a service to the tracker used by track and trackInitialServices. 
+         * Common logic to add a service to the tracker used by track and trackInitialServices.
          * The specified reference must have been placed in the adding list before calling this method.
          * @param reference the Reference to a service to be tracked.
          */
@@ -703,7 +703,7 @@
                     if (m_adding.remove(reference)) { // if the service was not untracked during the customizer callback
                         if (mustBeTracked) {
                             this.put(reference, null);
-                            modified(); 
+                            modified();
                             mustCallAdded = true;
                             notifyAll(); // notify any waiters in waitForService
                         }
@@ -742,7 +742,7 @@
                     return; // in case the service is untracked while in the process of adding
                 }
 
-                boolean isTraked = this.containsKey(reference); // Check if we was tracking the reference 
+                boolean isTraked = this.containsKey(reference); // Check if we was tracking the reference
                 object = this.remove(reference); // must remove from tracker before calling customizer callback
 
                 if (!isTraked) { return; }
diff --git a/ipojo/junit4osgi/maven-junit4osgi-plugin/pom.xml b/ipojo/junit4osgi/maven-junit4osgi-plugin/pom.xml
index 747257a..416dbb1 100644
--- a/ipojo/junit4osgi/maven-junit4osgi-plugin/pom.xml
+++ b/ipojo/junit4osgi/maven-junit4osgi-plugin/pom.xml
@@ -61,7 +61,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>1.5.0-SNAPSHOT</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
diff --git a/ipojo/tests/api/pom.xml b/ipojo/tests/api/pom.xml
index 895103f..9b47e54 100644
--- a/ipojo/tests/api/pom.xml
+++ b/ipojo/tests/api/pom.xml
@@ -59,29 +59,29 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.api</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.composite</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
 
-    <!-- For external handlermanagement -->
+    <!-- For external handler management -->
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
 
   <!--
diff --git a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/CompositeTest.java b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/CompositeTest.java
index 93a72a9..c52794d 100644
--- a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/CompositeTest.java
+++ b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/CompositeTest.java
@@ -65,7 +65,6 @@
         Option[] opt =  options(
                 felix(),
                 equinox(),
-                knopflerfish(),
                 provision(
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.composite").version(asInProject()),
diff --git a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/ExternalHandlerTest.java b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/ExternalHandlerTest.java
index 2c2038c..9c3dcf7 100644
--- a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/ExternalHandlerTest.java
+++ b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/ExternalHandlerTest.java
@@ -54,7 +54,6 @@
         Option[] opt =  options(
                 felix(),
                 equinox(),
-                knopflerfish(),
                 provision(
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.api").version(asInProject()),
diff --git a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/PrimitiveComponentTest.java b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/PrimitiveComponentTest.java
index 6ecfa68..de92867 100644
--- a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/PrimitiveComponentTest.java
+++ b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/PrimitiveComponentTest.java
@@ -62,7 +62,6 @@
         Option[] opt =  options(
                 felix(),
                 equinox(),
-                knopflerfish(),
                 provision(
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.api").version(asInProject())
diff --git a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/SingletonComponentTest.java b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/SingletonComponentTest.java
index 1e4e3f4..7023df8 100644
--- a/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/SingletonComponentTest.java
+++ b/ipojo/tests/api/src/test/java/org/apache/felix/ipojo/tests/api/SingletonComponentTest.java
@@ -64,7 +64,6 @@
         Option[] opt =  options(
                 felix(),
                 equinox(),
-                knopflerfish(),
                 provision(
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
                         mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.api").version(asInProject())
diff --git a/ipojo/tests/bundleAsiPOJO/bundleAsiPOJO/pom.xml b/ipojo/tests/bundleAsiPOJO/bundleAsiPOJO/pom.xml
index 1cf653b..cba2f23 100644
--- a/ipojo/tests/bundleAsiPOJO/bundleAsiPOJO/pom.xml
+++ b/ipojo/tests/bundleAsiPOJO/bundleAsiPOJO/pom.xml
@@ -13,7 +13,7 @@
     <groupId>org.apache.felix</groupId>
     <version>1.2.1</version>
   </parent>
-  
+
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
@@ -29,7 +29,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
-      <version>1.4.0</version>
+      <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>xerces</groupId>
@@ -51,7 +51,7 @@
     </plugins>
   </build>
 
-<repositories>	
+<repositories>
   <repository>
     <id>aQute</id>
     <url>http://www.aQute.biz/repo</url>
diff --git a/ipojo/tests/bundleAsiPOJO/helpers/pom.xml b/ipojo/tests/bundleAsiPOJO/helpers/pom.xml
index 9806443..c33ffca 100644
--- a/ipojo/tests/bundleAsiPOJO/helpers/pom.xml
+++ b/ipojo/tests/bundleAsiPOJO/helpers/pom.xml
@@ -7,18 +7,18 @@
   <version>1.5.0-SNAPSHOT</version>
   <name>iPOJO Test Helpers</name>
 
-  
+
 
   <dependencies>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>1.4.0</version>
+      <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.core</artifactId>
-      <version>4.0.0</version>
+      <version>4.2.0</version>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
diff --git a/ipojo/tests/bundleAsiPOJO/tests/pom.xml b/ipojo/tests/bundleAsiPOJO/tests/pom.xml
index 1780d9f..4382341 100644
--- a/ipojo/tests/bundleAsiPOJO/tests/pom.xml
+++ b/ipojo/tests/bundleAsiPOJO/tests/pom.xml
@@ -109,12 +109,12 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
 
   </dependencies>
diff --git a/ipojo/tests/composite/composite-runtime/pom.xml b/ipojo/tests/composite/composite-runtime/pom.xml
index adb77ca..9f9ca74 100644
--- a/ipojo/tests/composite/composite-runtime/pom.xml
+++ b/ipojo/tests/composite/composite-runtime/pom.xml
@@ -27,17 +27,17 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.composite</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -82,7 +82,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${pom.version}</version>
+        <version>1.6.0</version>
         <executions>
           <execution>
             <goals>
diff --git a/ipojo/tests/composite/import-export/pom.xml b/ipojo/tests/composite/import-export/pom.xml
index 973522c..2ee3f3d 100644
--- a/ipojo/tests/composite/import-export/pom.xml
+++ b/ipojo/tests/composite/import-export/pom.xml
@@ -27,17 +27,17 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.composite</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
diff --git a/ipojo/tests/composite/service-instance/pom.xml b/ipojo/tests/composite/service-instance/pom.xml
index ce77ca8..de19e9d 100644
--- a/ipojo/tests/composite/service-instance/pom.xml
+++ b/ipojo/tests/composite/service-instance/pom.xml
@@ -27,17 +27,17 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.composite</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -85,7 +85,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/composite/service-providing/pom.xml b/ipojo/tests/composite/service-providing/pom.xml
index 7851282..35d970a 100644
--- a/ipojo/tests/composite/service-providing/pom.xml
+++ b/ipojo/tests/composite/service-providing/pom.xml
@@ -27,17 +27,17 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.composite</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -84,7 +84,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/annotations/pom.xml b/ipojo/tests/core/annotations/pom.xml
index 1942108..5d091da 100644
--- a/ipojo/tests/core/annotations/pom.xml
+++ b/ipojo/tests/core/annotations/pom.xml
@@ -27,13 +27,13 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata
       </artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -53,21 +53,21 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.handler.eventadmin</artifactId>
-      <version>${pom.version}</version>
+      <version>1.5.0-SNAPSHOT</version>
     </dependency>
-    
+
      <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.eventadmin</artifactId>
       <version>1.0.0</version>
       <scope>test</scope>
     </dependency>
-    
+
   </dependencies>
 
   <build>
@@ -105,7 +105,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${pom.version}</version>
+        <version>1.6.0</version>
         <executions>
           <execution>
             <goals>
@@ -114,8 +114,8 @@
           </execution>
         </executions>
       </plugin>
-      
-      
+
+
        <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-junit4osgi-plugin</artifactId>
diff --git a/ipojo/tests/core/bad-configurations/pom.xml b/ipojo/tests/core/bad-configurations/pom.xml
index 19e46af..23f4a62 100644
--- a/ipojo/tests/core/bad-configurations/pom.xml
+++ b/ipojo/tests/core/bad-configurations/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/configadmin/pom.xml b/ipojo/tests/core/configadmin/pom.xml
index 70ea65f..1bd6f8e 100644
--- a/ipojo/tests/core/configadmin/pom.xml
+++ b/ipojo/tests/core/configadmin/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -69,14 +69,15 @@
 							org.apache.felix.ipojo.test*
 						</Private-Package>
 						<Test-Suite>
-							org.apache.felix.ipojo.test.scenarios.configadmin.ConfigurationTestSuite						</Test-Suite>
+							org.apache.felix.ipojo.test.scenarios.configadmin.ConfigurationTestSuite
+						</Test-Suite>
 					</instructions>
 				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/configuration/pom.xml b/ipojo/tests/core/configuration/pom.xml
index a082b59..21a7466 100644
--- a/ipojo/tests/core/configuration/pom.xml
+++ b/ipojo/tests/core/configuration/pom.xml
@@ -27,12 +27,12 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${pom.version}</version>
+        <version>1.6.0</version>
         <executions>
           <execution>
             <goals>
diff --git a/ipojo/tests/core/external-handlers/pom.xml b/ipojo/tests/core/external-handlers/pom.xml
index 34d1476..e091b8a 100644
--- a/ipojo/tests/core/external-handlers/pom.xml
+++ b/ipojo/tests/core/external-handlers/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/factories/pom.xml b/ipojo/tests/core/factories/pom.xml
index b12d27d..3f7dbb5 100644
--- a/ipojo/tests/core/factories/pom.xml
+++ b/ipojo/tests/core/factories/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/factory-version/pom.xml b/ipojo/tests/core/factory-version/pom.xml
index 23378ab..037ee3f 100644
--- a/ipojo/tests/core/factory-version/pom.xml
+++ b/ipojo/tests/core/factory-version/pom.xml
@@ -45,7 +45,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
 
   <!--
@@ -101,7 +101,7 @@
       <artifactId>org.apache.felix.ipojo.test.helpers</artifactId>
       <version>${pom.version}</version>
     </dependency>
-    
+
    <dependency>
     <groupId>org.ops4j.base</groupId>
     <artifactId>ops4j-base-io</artifactId>
diff --git a/ipojo/tests/core/handler/pom.xml b/ipojo/tests/core/handler/pom.xml
index 08d962d..881826a 100644
--- a/ipojo/tests/core/handler/pom.xml
+++ b/ipojo/tests/core/handler/pom.xml
@@ -35,7 +35,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
 
   <!-- Pax Exam API: -->
@@ -103,7 +103,7 @@
       <version>1.7</version>
       <scope>test</scope>
     </dependency>
-  
+
   <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.tinybundles.bundleAsiPOJO
diff --git a/ipojo/tests/core/lifecycle-callback/pom.xml b/ipojo/tests/core/lifecycle-callback/pom.xml
index 85613ac..821f954 100644
--- a/ipojo/tests/core/lifecycle-callback/pom.xml
+++ b/ipojo/tests/core/lifecycle-callback/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/lifecycle-controller/pom.xml b/ipojo/tests/core/lifecycle-controller/pom.xml
index 06fe019..269bfba 100644
--- a/ipojo/tests/core/lifecycle-controller/pom.xml
+++ b/ipojo/tests/core/lifecycle-controller/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/logger/pom.xml b/ipojo/tests/core/logger/pom.xml
index 03e6cbb..c62b7cd 100644
--- a/ipojo/tests/core/logger/pom.xml
+++ b/ipojo/tests/core/logger/pom.xml
@@ -58,7 +58,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
diff --git a/ipojo/tests/core/service-dependency-bindingpolicy/pom.xml b/ipojo/tests/core/service-dependency-bindingpolicy/pom.xml
index d0cab32..eb4aac8 100644
--- a/ipojo/tests/core/service-dependency-bindingpolicy/pom.xml
+++ b/ipojo/tests/core/service-dependency-bindingpolicy/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -79,7 +79,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/service-dependency-comparator/pom.xml b/ipojo/tests/core/service-dependency-comparator/pom.xml
index a48dce8..c4b48b7 100644
--- a/ipojo/tests/core/service-dependency-comparator/pom.xml
+++ b/ipojo/tests/core/service-dependency-comparator/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -80,7 +80,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/service-dependency-filter/pom.xml b/ipojo/tests/core/service-dependency-filter/pom.xml
index 2b9e8e9..7ad0199 100644
--- a/ipojo/tests/core/service-dependency-filter/pom.xml
+++ b/ipojo/tests/core/service-dependency-filter/pom.xml
@@ -27,12 +27,12 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -79,7 +79,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${pom.version}</version>
+        <version>1.6.0</version>
         <executions>
           <execution>
             <goals>
@@ -99,7 +99,7 @@
           <target>1.4</target>
         </configuration>
       </plugin>
-      
+
        <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-junit4osgi-plugin</artifactId>
diff --git a/ipojo/tests/core/service-dependency-optional/pom.xml b/ipojo/tests/core/service-dependency-optional/pom.xml
index 2bced55..d927ecd 100644
--- a/ipojo/tests/core/service-dependency-optional/pom.xml
+++ b/ipojo/tests/core/service-dependency-optional/pom.xml
@@ -36,12 +36,12 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
     <!--
       <dependency> <groupId>org.apache.felix</groupId>
diff --git a/ipojo/tests/core/service-dependency/pom.xml b/ipojo/tests/core/service-dependency/pom.xml
index ce5a943..33d2a17 100644
--- a/ipojo/tests/core/service-dependency/pom.xml
+++ b/ipojo/tests/core/service-dependency/pom.xml
@@ -27,12 +27,12 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
         <groupId>org.osgi</groupId>
@@ -77,7 +77,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${pom.version}</version>
+        <version>1.6.0</version>
         <executions>
           <execution>
             <goals>
@@ -97,7 +97,7 @@
           <target>1.4</target>
         </configuration>
       </plugin>
-      
+
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-junit4osgi-plugin</artifactId>
diff --git a/ipojo/tests/core/service-providing-inheritance/pom.xml b/ipojo/tests/core/service-providing-inheritance/pom.xml
index 5b71205..6adf492 100644
--- a/ipojo/tests/core/service-providing-inheritance/pom.xml
+++ b/ipojo/tests/core/service-providing-inheritance/pom.xml
@@ -53,7 +53,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
@@ -140,11 +140,11 @@
       <version>1.5.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
-    
+
   <dependency>
     <groupId>org.apache.felix</groupId>
     <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-    <version>1.5.0-SNAPSHOT</version>
+    <version>1.7.0-SNAPSHOT</version>
     <scope>compile</scope>
   </dependency>
   </dependencies>
diff --git a/ipojo/tests/core/service-providing-strategies/pom.xml b/ipojo/tests/core/service-providing-strategies/pom.xml
index 926ce62..c963dbc 100755
--- a/ipojo/tests/core/service-providing-strategies/pom.xml
+++ b/ipojo/tests/core/service-providing-strategies/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -79,7 +79,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/core/service-providing/pom.xml b/ipojo/tests/core/service-providing/pom.xml
index bdbf7e0..7a0b062 100644
--- a/ipojo/tests/core/service-providing/pom.xml
+++ b/ipojo/tests/core/service-providing/pom.xml
@@ -27,12 +27,12 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-ipojo-plugin</artifactId>
-        <version>${pom.version}</version>
+        <version>1.6.0</version>
         <executions>
           <execution>
             <goals>
@@ -97,7 +97,7 @@
           <target>1.4</target>
         </configuration>
       </plugin>
-      
+
        <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-junit4osgi-plugin</artifactId>
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderWithAnonymousClass.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderWithAnonymousClass.java
new file mode 100644
index 0000000..a41b2f1
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/FooProviderWithAnonymousClass.java
@@ -0,0 +1,77 @@
+/*
+ * 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.component;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class FooProviderWithAnonymousClass implements FooService {
+
+	private int intProp;
+	private String strProp;
+	private String[] strAProp;
+	private int[] intAProp;
+	private boolean boolProp;
+
+	public boolean foo() {
+		Runnable runnable = new Runnable() {
+			public void run() {
+				intProp = 3;
+				boolProp = true;
+				if(strProp.equals("foo")) { strProp = "bar"; }
+				else { strProp = "foo"; }
+				strAProp = new String[] {"foo", "bar", "baz"};
+				intAProp = new int[] {3, 2, 1};
+			}
+		};
+		new Thread(runnable).start();
+
+		try {
+			Thread.sleep(500);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+
+		return true;
+	}
+
+	public Properties fooProps() {
+		Properties p = new Properties();
+		p.put("intProp", new Integer(intProp));
+		p.put("boolProp", new Boolean(boolProp));
+		p.put("strProp", strProp);
+		p.put("strAProp", strAProp);
+		p.put("intAProp", intAProp);
+		return p;
+	}
+
+	public boolean getBoolean() { return true; }
+
+	public double getDouble() { return 1.0; }
+
+	public int getInt() { return 1; }
+
+	public long getLong() { return 1; }
+
+	public Boolean getObject() { return new Boolean(true); }
+
+
+
+}
diff --git a/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/PropertiesInAnonymousClassTest.java b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/PropertiesInAnonymousClassTest.java
new file mode 100644
index 0000000..8c3111c
--- /dev/null
+++ b/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/PropertiesInAnonymousClassTest.java
@@ -0,0 +1,77 @@
+package org.apache.felix.ipojo.test.scenarios.ps;
+
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+import org.osgi.framework.ServiceReference;
+
+public class PropertiesInAnonymousClassTest extends OSGiTestCase {
+
+	IPOJOHelper helper;
+
+	public void setUp() {
+	    helper = new IPOJOHelper(this);
+		String type = "PS-FooProviderTypeAnonymous-Dyn";
+		helper.createComponentInstance(type, "FooProviderAno-1");
+
+	}
+
+	public void tearDown() {
+		helper.dispose();
+	}
+
+	public void testProperties1() {
+		ServiceReference sr = helper.getServiceReferenceByName(FooService.class.getName(), "FooProviderAno-1");
+		assertNotNull("Check the availability of the FS service", sr);
+
+		// Check service properties
+		Integer intProp = (Integer) sr.getProperty("int");
+		Boolean boolProp = (Boolean) sr.getProperty("boolean");
+		String strProp = (String) sr.getProperty("string");
+		String[] strAProp = (String[]) sr.getProperty("strAProp");
+		int[] intAProp = (int[]) sr.getProperty("intAProp");
+
+		assertEquals("Check intProp equality (1)", intProp, new Integer(2));
+		assertEquals("Check longProp equality (1)", boolProp, new Boolean(false));
+		assertEquals("Check strProp equality (1)", strProp, new String("foo"));
+		assertNotNull("Check strAProp not nullity (1)", strAProp);
+		String[] v = new String[] {"foo", "bar"};
+		for (int i = 0; i < strAProp.length; i++) {
+			if(!strAProp[i].equals(v[i])) { fail("Check the strAProp Equality (1)"); }
+		}
+		assertNotNull("Check intAProp not nullity", intAProp);
+		int[] v2 = new int[] {1, 2, 3};
+		for (int i = 0; i < intAProp.length; i++) {
+			if(intAProp[i] != v2[i]) { fail("Check the intAProp Equality (1)"); }
+		}
+
+		// Invoke
+		FooService fs = (FooService) getServiceObject(sr);
+		assertTrue("invoke fs", fs.foo());
+
+		sr = helper.getServiceReferenceByName(FooService.class.getName(), "FooProviderAno-1");
+		// Re-check the property (change)
+		intProp = (Integer) sr.getProperty("int");
+		boolProp = (Boolean) sr.getProperty("boolean");
+		strProp = (String) sr.getProperty("string");
+		strAProp = (String[]) sr.getProperty("strAProp");
+		intAProp = (int[]) sr.getProperty("intAProp");
+
+		assertEquals("Check intProp equality (2)", intProp, new Integer(3));
+		assertEquals("Check longProp equality (2)", boolProp, new Boolean(true));
+		assertEquals("Check strProp equality (2)", strProp, new String("bar"));
+		assertNotNull("Check strAProp not nullity (2)", strAProp);
+		v = new String[] {"foo", "bar", "baz"};
+		for (int i = 0; i < strAProp.length; i++) {
+			if(!strAProp[i].equals(v[i])) { fail("Check the strAProp Equality (2)"); }
+		}
+		assertNotNull("Check intAProp not nullity (2)", intAProp);
+		v2 = new int[] {3, 2, 1};
+		for (int i = 0; i < intAProp.length; i++) {
+			if(intAProp[i] != v2[i]) { fail("Check the intAProp Equality (2)"); }
+		}
+
+		fs = null;
+	}
+
+}
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 5e9adc6..b054e0b 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
@@ -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
@@ -40,6 +40,7 @@
         ots.addTestSuite(OSGiPropertiesTest.class);
         ots.addTestSuite(NullCheck.class);
         ots.addTestSuite(ServiceControllerTest.class);
+        ots.addTestSuite(PropertiesInAnonymousClassTest.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 6abd991..0fbbbed 100644
--- a/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
+++ b/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
@@ -9,14 +9,14 @@
     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-3" architecture="true">
@@ -30,7 +30,7 @@
       <property name="bar" field="m_bar" />
     </properties>
   </component>
-  
+
   <!-- Providers providing 2 services -->
   <component
     classname="org.apache.felix.ipojo.test.scenarios.component.FooBarProviderType1"
@@ -55,7 +55,7 @@
       <property name="baz" type="java.lang.String" value="bar" />
     </provides>
   </component>
-  
+
 
   <!-- Provider with dynamic property -->
   <component
@@ -70,7 +70,7 @@
       <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">
@@ -83,7 +83,7 @@
       <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">
@@ -96,7 +96,7 @@
         value="{1, 2,3 }" />
     </provides>
   </component>
-  
+
   <!--  Inherited Provides -->
   <component
     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessImplementation1"
@@ -136,7 +136,7 @@
     name="PS-PI3" architecture="true">
     <provides />
   </component>
-  
+
   <!-- Concrete and abstract class -->
   <component
     classname="org.apache.felix.ipojo.test.scenarios.component.inherited.ProcessParentImplementation"
@@ -156,10 +156,10 @@
   <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, 
+    <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">
@@ -168,7 +168,7 @@
       <property field="prop2"/>
     </provides>
   </component>
-  
+
   <!--  Service Controller -->
   <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"
     name="PS-Controller-1-default">
@@ -210,4 +210,18 @@
         <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>
 </ipojo>
diff --git a/ipojo/tests/handler/eventadmin/pom.xml b/ipojo/tests/handler/eventadmin/pom.xml
index b2f4409..0fc48a6 100644
--- a/ipojo/tests/handler/eventadmin/pom.xml
+++ b/ipojo/tests/handler/eventadmin/pom.xml
@@ -12,7 +12,7 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -22,7 +22,7 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.handler.eventadmin</artifactId>
-			<version>${pom.version}</version>
+			<version>1.5.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>junit</groupId>
@@ -55,7 +55,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/handler/temporal/pom.xml b/ipojo/tests/handler/temporal/pom.xml
index aa38b8e..adc8fc7 100644
--- a/ipojo/tests/handler/temporal/pom.xml
+++ b/ipojo/tests/handler/temporal/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -79,7 +79,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/handler/transaction/pom.xml b/ipojo/tests/handler/transaction/pom.xml
index e3320cc..59ad05c 100644
--- a/ipojo/tests/handler/transaction/pom.xml
+++ b/ipojo/tests/handler/transaction/pom.xml
@@ -10,17 +10,17 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-      <version>${pom.version}</version>
+      <version>1.4.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -32,7 +32,7 @@
       <artifactId>org.apache.felix.ipojo.handler.transaction</artifactId>
       <version>${pom.version}</version>
     </dependency>
-    
+
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.test.helpers</artifactId>
diff --git a/ipojo/tests/handler/whiteboard/pom.xml b/ipojo/tests/handler/whiteboard/pom.xml
index ad5bfde..0a29b53 100644
--- a/ipojo/tests/handler/whiteboard/pom.xml
+++ b/ipojo/tests/handler/whiteboard/pom.xml
@@ -9,7 +9,7 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
 	<dependency>
 		<groupId>org.apache.felix</groupId>
@@ -44,7 +44,7 @@
 	<plugin>
 		<groupId>org.apache.felix</groupId>
 		<artifactId>maven-ipojo-plugin</artifactId>
-		<version>${pom.version}</version>
+		<version>1.6.0</version>
 		<executions>
 			<execution>
 				<goals>
diff --git a/ipojo/tests/integration-tests/pom.xml b/ipojo/tests/integration-tests/pom.xml
index 1530e62..37ac239 100644
--- a/ipojo/tests/integration-tests/pom.xml
+++ b/ipojo/tests/integration-tests/pom.xml
@@ -5,16 +5,16 @@
   <artifactId>org.apache.felix.ipojo.integration-tests</artifactId>
   <name>iPOJO Integration Tests</name>
   <version>1.5.0-SNAPSHOT</version>
-  
+
   <properties>
      <ipojo.version>1.5.0-SNAPSHOT</ipojo.version>
     </properties>
-  
+
   <build>
     <plugins>
       <plugin>
         <groupId>org.apache.felix</groupId>
-        <artifactId>maven-junit4osgi-plugin 
+        <artifactId>maven-junit4osgi-plugin
         </artifactId>
         <version>1.1.0-SNAPSHOT</version>
         <executions>
@@ -38,7 +38,7 @@
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-report-plugin 
+        <artifactId>maven-surefire-report-plugin
         </artifactId>
         <version>2.4.3</version>
         <configuration>
@@ -54,12 +54,12 @@
       </plugin>
     </plugins>
   </reporting>
-  
+
   <dependencies>
    <!-- Manipulation -->
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.manipulation.metadata 
+      <artifactId>tests.manipulation.metadata
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
@@ -72,26 +72,26 @@
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.manipulation.primitives 
+      <artifactId>tests.manipulation.primitives
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.manipulation.creation 
+      <artifactId>tests.manipulation.creation
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.manipulation.java5 
+      <artifactId>tests.manipulation.java5
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
-    
+
     <!--  Core -->
     <dependency>
       <groupId>ipojo.tests</groupId>
@@ -101,21 +101,21 @@
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.bad.configurations 
+      <artifactId>tests.core.bad.configurations
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.configuration 
+      <artifactId>tests.core.configuration
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.external.handlers 
+      <artifactId>tests.core.external.handlers
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
@@ -128,14 +128,14 @@
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.lifecycle.callback 
+      <artifactId>tests.core.lifecycle.callback
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.lifecycle.controller 
+      <artifactId>tests.core.lifecycle.controller
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
@@ -148,47 +148,47 @@
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.lifecycle.controller 
+      <artifactId>tests.core.lifecycle.controller
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.service.dependency 
+      <artifactId>tests.core.service.dependency
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.service.dependency.bindingpolicy 
+      <artifactId>tests.core.service.dependency.bindingpolicy
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.service.dependency.comparator 
+      <artifactId>tests.core.service.dependency.comparator
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.core.service.dependency.filter 
+      <artifactId>tests.core.service.dependency.filter
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
-    </dependency> 
+    </dependency>
     <dependency>
       <artifactId>tests.core.ps.strategy</artifactId>
       <groupId>ipojo.tests</groupId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
-    
-    
+
+
        <!-- Composite -->
     <dependency>
       <groupId>ipojo.tests</groupId>
@@ -198,31 +198,31 @@
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.composite.service.import-export 
+      <artifactId>tests.composite.service.import-export
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.composite.service.instance 
+      <artifactId>tests.composite.service.instance
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.composite.service.providing 
+      <artifactId>tests.composite.service.providing
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
     </dependency>
 
   <!--  External handlers -->
-  
+
     <dependency>
       <groupId>ipojo.tests</groupId>
-      <artifactId>tests.eventadmin.handler 
+      <artifactId>tests.eventadmin.handler
       </artifactId>
       <version>${ipojo.version}</version>
       <scope>test</scope>
@@ -240,7 +240,7 @@
       <scope>test</scope>
     </dependency>
   <!--  Utility bundles -->
-   
+
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId>
@@ -268,11 +268,11 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.composite</artifactId>
-      <version>${ipojo.version}</version>
+      <version>1.6.0</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
-  
+
   <profiles>
     <profile>
     <id>configadmin</id>
diff --git a/ipojo/tests/manipulator/creation/pom.xml b/ipojo/tests/manipulator/creation/pom.xml
index f67eec5..6cd1af1 100644
--- a/ipojo/tests/manipulator/creation/pom.xml
+++ b/ipojo/tests/manipulator/creation/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/manipulator/manipulation/pom.xml b/ipojo/tests/manipulator/manipulation/pom.xml
index 1fd6648..717c388 100644
--- a/ipojo/tests/manipulator/manipulation/pom.xml
+++ b/ipojo/tests/manipulator/manipulation/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/manipulator/manipulator-java5/pom.xml b/ipojo/tests/manipulator/manipulator-java5/pom.xml
index dfb5ada..d60fc48 100644
--- a/ipojo/tests/manipulator/manipulator-java5/pom.xml
+++ b/ipojo/tests/manipulator/manipulator-java5/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/manipulator/metadata/pom.xml b/ipojo/tests/manipulator/metadata/pom.xml
index f0c3289..4aa6c8d 100644
--- a/ipojo/tests/manipulator/metadata/pom.xml
+++ b/ipojo/tests/manipulator/metadata/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/manipulator/primitives/pom.xml b/ipojo/tests/manipulator/primitives/pom.xml
index ba9df90..593f14f 100644
--- a/ipojo/tests/manipulator/primitives/pom.xml
+++ b/ipojo/tests/manipulator/primitives/pom.xml
@@ -27,12 +27,12 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo</artifactId>
-			<version>${pom.version}</version>
+			<version>1.7.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>${pom.version}</version>
+			<version>1.4.0</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.felix</groupId>
@@ -77,7 +77,7 @@
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-ipojo-plugin</artifactId>
-				<version>${pom.version}</version>
+				<version>1.6.0</version>
 				<executions>
 					<execution>
 						<goals>
diff --git a/ipojo/tests/online-manipulator/pom.xml b/ipojo/tests/online-manipulator/pom.xml
index 9ebf028..085bb02 100644
--- a/ipojo/tests/online-manipulator/pom.xml
+++ b/ipojo/tests/online-manipulator/pom.xml
@@ -104,7 +104,7 @@
   <dependency>
     <groupId>org.apache.felix</groupId>
     <artifactId>org.apache.felix.ipojo.tinybundles.bundleAsiPOJO</artifactId>
-    <version>${pom.version}</version>
+    <version>1.5.0-SNAPSHOT</version>
   </dependency>
     <dependency>
       <groupId>xerces</groupId>
@@ -114,17 +114,17 @@
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.annotations</artifactId>
-      <version>${pom.version}</version>
+      <version>1.6.0</version>
     </dependency>
      <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
      <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.ipojo.online.manipulator</artifactId>
-      <version>${pom.version}</version>
+      <version>1.7.0-SNAPSHOT</version>
     </dependency>
 
   </dependencies>
