diff --git a/ipojo/annotations/doc/changelog.txt b/ipojo/annotations/doc/changelog.txt
index 6dbbdb9..361277a 100644
--- a/ipojo/annotations/doc/changelog.txt
+++ b/ipojo/annotations/doc/changelog.txt
@@ -1,3 +1,19 @@
+Changes from the 1.4.0 to 1.6.0
+-------------------------------
+** Bug
+    * [FELIX-1557] - Cosmetic change of the Bundle-Name and Bundle-SymbolicName in iPOJO annotations.
+    
+** Improvement
+    * [FELIX-1426] - Service injection with Dynamic Proxies
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+
+** New Feature
+    * [FELIX-2132] - Provides a way to control service exposition from the implementation class
+
+** Wish
+    * [FELIX-1940] - Add @Instance annotation to declare instances without metadata.xml
+    
 Changes from 1.2.0 to 1.4.0
 ---------------------------
 ** Bug
diff --git a/ipojo/ant/doc/changelog.txt b/ipojo/ant/doc/changelog.txt
index 24fc431..39ab246 100644
--- a/ipojo/ant/doc/changelog.txt
+++ b/ipojo/ant/doc/changelog.txt
@@ -1,3 +1,13 @@
+Changes from the 1.4.2 to 1.6.0
+-------------------------------
+** Bug
+    * [FELIX-1411] - Issue on windows to find components inside bundle
+    
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+    
+    
 Changes from the 1.4.0 to 1.4.2
 -------------------------------
 ** Bug
diff --git a/ipojo/api/doc/changelog.txt b/ipojo/api/doc/changelog.txt
index 607b95c..9ec45b7 100644
--- a/ipojo/api/doc/changelog.txt
+++ b/ipojo/api/doc/changelog.txt
@@ -1,3 +1,13 @@
+Changes from the 1.4.0 to 1.6.0
+-------------------------------
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+    * [FELIX-2268] - Simplify setting of properties.
+
+** New Feature
+    * [FELIX-2132] - Provides a way to control service exposition from the implementation class
+    
 Version 1.4.0
 -------------
     
diff --git a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java
index 0bd4a8f..297c213 100644
--- a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java
+++ b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java
@@ -531,15 +531,14 @@
      * @param obj the value (can be <code>null</code>)
      * @return the current component type
      */
-    public PrimitiveComponentType addProperty(String key, Object obj) { 
+    public PrimitiveComponentType addProperty(String key, Object obj) {
         String value = null;
         if (obj != null) {
             value = obj.toString();
         }
 
-        addProperty(new Property().setName(key)
-           .setValue(value)); 
-        return this; 
-     } 
+        addProperty(new Property().setName(key).setValue(value));
+        return this;
+    }
 
 }
diff --git a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/Service.java b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/Service.java
index 60bb2ee..43a71bb 100644
--- a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/Service.java
+++ b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/Service.java
@@ -187,7 +187,7 @@
      * @param obj the initial value (can be <code>null</code>)
      * @return the current service object.
      */
-    public Service addProperty(String key, Object obj) { 
+    public Service addProperty(String key, Object obj) {
         Class clazz = String.class;
         String value = null;
         if (obj != null) {
@@ -195,12 +195,11 @@
             value = obj.toString();
         }
 
-        addProperty(new ServiceProperty().setName(key) 
-           .setType(clazz.getName())
-           .setValue(value));
-        
-        return this; 
-     } 
+        addProperty(new ServiceProperty().setName(key).setType(clazz.getName())
+                .setValue(value));
+
+        return this;
+    }
 
     /**
      * Sets the provided service specification.
diff --git a/ipojo/arch/doc/changelog.txt b/ipojo/arch/doc/changelog.txt
index f0dd317..b180064 100644
--- a/ipojo/arch/doc/changelog.txt
+++ b/ipojo/arch/doc/changelog.txt
@@ -1,3 +1,8 @@
+Changes from the 1.4.0 to 1.6.0
+-------------------------------
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    
 Changes from 1.2.0 to 1.4.0
 ---------------------------
 ** Improvement
diff --git a/ipojo/composite/doc/changelog.txt b/ipojo/composite/doc/changelog.txt
index 043835e..765d424 100644
--- a/ipojo/composite/doc/changelog.txt
+++ b/ipojo/composite/doc/changelog.txt
@@ -1,3 +1,10 @@
+Changes from the 1.4.0 to 1.6.0
+-------------------------------
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+
+    
 Changes from 1.2.0 to 1.4.0
 ---------------------------
 ** Bug
diff --git a/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ServiceExporter.java b/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ServiceExporter.java
index 5ee663a..bb0b14f 100644
--- a/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ServiceExporter.java
+++ b/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/provides/ServiceExporter.java
@@ -134,8 +134,8 @@
                 .registerService(getSpecification().getName(), svc, getProps(reference));
             m_registrations.put(reference, reg);
         } else {
-            throw new SecurityException("The bundle " + m_destination.getBundle().getBundleId() + " does not have the " +
-                    "permission to register the service " + getSpecification().getName());
+            throw new SecurityException("The bundle " + m_destination.getBundle().getBundleId() + " does not have the "
+                    + "permission to register the service " + getSpecification().getName());
         }
     }
 
diff --git a/ipojo/core/doc/changelog.txt b/ipojo/core/doc/changelog.txt
index 5071bc9..6854256 100644
--- a/ipojo/core/doc/changelog.txt
+++ b/ipojo/core/doc/changelog.txt
@@ -1,3 +1,27 @@
+Changes from the 1.4.0 to 1.6.0
+-------------------------------
+** Bug
+  * [FELIX-1533] - Potential deadlock when stopping the underlying OSGi framework
+    * [FELIX-1965] - iPojo component is made available regardless of exception during validate
+    * [FELIX-2014] - Potential ClassCastException when a service property does not receive a value and is used in the constructor
+    * [FELIX-2019] - The Property value is 'null' in the Architecture description, while the value is well assigned to the component's field.
+    * [FELIX-2052] - Handler require callback are not called if the service (required) is registered before the instance of the handler has been started.
+    * [FELIX-2093] - iPOJO doesn't always use the correct class loader
+
+** Improvement
+    * [FELIX-1425] - Service Proxy Mode
+    * [FELIX-1426] - Service injection with Dynamic Proxies
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1532] - Be able to set the iPOJO Log Level from BND
+    * [FELIX-1741] - Allows the configuration handler description to retrieve the managed service PID
+    * [FELIX-1854] - Allows instances to directly declares service.* properties (pid, ranking, vendor, description)
+    * [FELIX-1885] - Ease CreationStrategy & iPOJOServiceFactory usage
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+    
+** New Feature
+    * [FELIX-2132] - Provides a way to control service exposition from the implementation class
+
+    
 Changes from 1.2.0 to 1.4.0
 ---------------------------
 ** Bug
diff --git a/ipojo/handler/eventadmin/doc/changelog.txt b/ipojo/handler/eventadmin/doc/changelog.txt
index 2ddfbf2..76fb707 100644
--- a/ipojo/handler/eventadmin/doc/changelog.txt
+++ b/ipojo/handler/eventadmin/doc/changelog.txt
@@ -1,3 +1,8 @@
+Changes from the 1.4.0 to 1.6.0
+-------------------------------
+** Bug
+    * [FELIX-1938] - Bad error message when an Event Subscriber does not set the data type and data key
+    
 Changes from 1.2.0 to 1.4.0
 ---------------------------     
 ** Improvement
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
index dfe9b40..dc3e8c1 100644
--- a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
+++ b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
@@ -232,16 +232,16 @@
             }
         } else { // if non null value, make sure it is assignable to the
             // attribute
-            if (true /* TODO type.class.isAssignableFrom(value.getClass()) */) {
+//            if (true /* TODO type.class.isAssignableFrom(value.getClass()) */) {
                 // propertyField.setValue(value);
                 // setValue(attributeField.getField(),null);
-                m_instanceManager.onSet(null, propertyField.getField(), value);
-            } else {
-                throw new InvalidAttributeValueException(
-                    "Cannot set attribute " + name + " to a "
-                            + value.getClass().getName()
-                            + " object, String expected");
-            }
+            m_instanceManager.onSet(null, propertyField.getField(), value);
+//            } else {
+//                throw new InvalidAttributeValueException(
+//                    "Cannot set attribute " + name + " to a "
+//                            + value.getClass().getName()
+//                            + " object, String expected");
+//            }
         }
 
     }
diff --git a/ipojo/handler/temporal/doc/changelog.txt b/ipojo/handler/temporal/doc/changelog.txt
index 4439d23..5d9d38b 100644
--- a/ipojo/handler/temporal/doc/changelog.txt
+++ b/ipojo/handler/temporal/doc/changelog.txt
@@ -1,3 +1,9 @@
+Changes from the 1.4.2 to 1.6.0
+-------------------------------
+** Improvement
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+
+    
 Changes from 1.2.0 to 1.4.0
 ---------------------------
 ** Improvement
diff --git a/ipojo/manipulator/doc/changelog.txt b/ipojo/manipulator/doc/changelog.txt
index 304e8ee..18ae797 100644
--- a/ipojo/manipulator/doc/changelog.txt
+++ b/ipojo/manipulator/doc/changelog.txt
@@ -1,3 +1,14 @@
+Changes from the 1.4.2 to 1.6.0
+-------------------------------
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1646] - Add @Handler annotation to declare handlers without metadata.xml
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+
+** Wish
+    * [FELIX-1940] - Add @Instance annotation to declare instances without metadata.xml
+    
+        
 Changes from the 1.4.0 to 1.4.2
 -------------------------------
 ** Bug
diff --git a/ipojo/online-manipulator/doc/changelog.txt b/ipojo/online-manipulator/doc/changelog.txt
index f94141a..a4e730d 100644
--- a/ipojo/online-manipulator/doc/changelog.txt
+++ b/ipojo/online-manipulator/doc/changelog.txt
@@ -1,3 +1,10 @@
+Changes from the 1.4.2 to 1.6.0
+-------------------------------
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+
+    
 Changes from the 1.4.0 to 1.4.2
 -------------------------------
 ** Bug
diff --git a/ipojo/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java b/ipojo/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
index 14a9d4a..b4a6ae3 100644
--- a/ipojo/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
+++ b/ipojo/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
@@ -165,7 +165,7 @@
         }
         out.deleteOnExit();
         // Returns the URL Connection
-        return out.toURL().openConnection();
+        return out.toURI().toURL().openConnection();
         
         
     }
diff --git a/ipojo/plugin/doc/changelog.txt b/ipojo/plugin/doc/changelog.txt
index 3649f9e..0353c79 100644
--- a/ipojo/plugin/doc/changelog.txt
+++ b/ipojo/plugin/doc/changelog.txt
@@ -1,3 +1,13 @@
+Changes from the 1.4.2 to 1.6.0
+-------------------------------
+** Bug
+    * [FELIX-1411] - Issue on windows to find components inside bundle
+    
+** Improvement
+    * [FELIX-1427] - Service injection with Smart Proxies
+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
+
+
 Changes from the 1.4.0 to 1.4.2
 -------------------------------
 ** Bug
