diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/BundleDependencyBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/BundleDependencyBuilder.java
index 7d87a12..cbee9fe 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/BundleDependencyBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/BundleDependencyBuilder.java
@@ -94,7 +94,7 @@
 
     /**
      * Sets property propagation. If set to <code>true</code> any bundle manifest properties will be added
-     * to the service properties of the component that has this dependency (if it registers as a service).
+     * to the service properties of the component that declares this dependency (if it provides a service).
      * 
      * @param propagate <code>true</code> to propagate the bundle manifest properties
      * @return the bundle dependency builder
@@ -173,7 +173,7 @@
     
     /**
      * Specifies a callback instance used to invoke the reflection based callbacks on it.
-     * @param callbackInstance the instance to invoke the callbacks on
+     * @param callbackInstance the instance to invoke the reflection based callbacks on
      * @return this builder
      * @see #add(String)
      * @see #change(String)
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java
index 206c9e9..1de2b56 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java
@@ -46,7 +46,7 @@
     B impl(Object impl);   
     
     /**
-     * Sets the factory to use to create the implementation. You can specify both the factory class and method to invoke. The method should return the implementation, 
+     * Sets the factory to use when creating the implementation. You can specify both the factory class and method to invoke. The method should return the implementation, 
      * and can use any method to create it. Actually, this can be used together with setComposition to create a composition of instances that work together to implement 
      * a component. The factory itself can also be instantiated lazily by not specifying an instance, but a Class. 
      * 
@@ -88,7 +88,7 @@
     /**
      * Configures a factory used to create this component implementation using a Factory object and a "getComposition" factory method.
      * the Factory method may then return multiple objects that will be part of this component implementation, and 
-     * all of them will be searched for injecting any of the dependencies.
+     * all of them will be searched when injecting any of the dependencies.
      * 
      * Example:
      * 
@@ -424,7 +424,7 @@
      * This method is useful because when it is invoked, all required dependencies defines in the Activator
      * are already injected, and you can then add more extra dependencies from the init() method.
      * And once all extra dependencies will be available and injected, then the "start" callback will be invoked.
-     * The dependency manager will look for a method of this name with the following signatures,
+     * <p>The dependency manager will look for a method of this name with the following signatures,
      * in this order:
      * <ol>
      * <li>method(Component component)</li>
@@ -438,7 +438,7 @@
     
     /**
      * Sets the name of the method used as the "start" callback. This method, when found, is
-     * invoked as part of the life cycle management of the component implementation. The
+     * invoked as part of the life cycle management of the component implementation. <p>The
      * dependency manager will look for a method of this name with the following signatures,
      * in this order:
      * <ol>
@@ -453,7 +453,7 @@
     
     /**
      * Sets the name of the method used as the "stop" callback. This method, when found, is
-     * invoked as part of the life cycle management of the component implementation. The
+     * invoked as part of the life cycle management of the component implementation. <p>The
      * dependency manager will look for a method of this name with the following signatures,
      * in this order:
      * <ol>
@@ -468,7 +468,7 @@
     
     /**
      * Sets the name of the method used as the "destroy" callback. This method, when found, is
-     * invoked as part of the life cycle management of the component implementation. The
+     * invoked as part of the life cycle management of the component implementation. <p>The
      * dependency manager will look for a method of this name with the following signatures,
      * in this order:
      * <ol>
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ConfigurationDependencyBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ConfigurationDependencyBuilder.java
index 60a3537..94b5250 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ConfigurationDependencyBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ConfigurationDependencyBuilder.java
@@ -156,7 +156,9 @@
         
     /**
      * Sets a callback method to call on the component implementation class(es) when the configuration is updated. When the configuration is lost, the callback is invoked
-     * with a null dictionary. The following callback signatures are supported and searched in the following order:
+     * with a null dictionary. 
+     * 
+     * <p>The following callback signatures are supported and searched in the following order:
      * <ol>
      * <li>method(Dictionary)</li>
      * <li>method(Component, Dictionary)</li>
@@ -171,6 +173,14 @@
      * Sets a callback method to call on the component implementation class(es) when the configuration is updated. The callback is invoked with a configuration type
      * argument (null if the configuration is lost).
      * 
+     * <p>The following callback signatures are supported and searched in the following order:
+     * <ol>
+     * <li>method(Dictionary)</li>
+     * <li>method(Component, Dictionary)</li>
+     * <li>method(Configuration) // same type as the one specified in the "configType" argument</li>
+     * <li>method(Component, Configuration) // Configuration has the same type as the one specified in the "configType" argument</li>
+     * </ol>
+     * 
      * @param configType the type of a configuration that is passed as argument to the callback
      * @param updateMethod the callback to call on the component instance(s) when the configuration is updated.
      * @return this builder
@@ -202,6 +212,14 @@
      * component implementation instance(s).
      * The callback is invoked with a configuration type argument (null of the configuration is lost).
      * 
+     * <p>The following callback signatures are supported and searched in the following order:
+     * <ol>
+     * <li>method(Dictionary)</li>
+     * <li>method(Component, Dictionary)</li>
+     * <li>method(Configuration) // same type as the one specified in the "configType" argument</li>
+     * <li>method(Component, Configuration) // Configuration has the same type as the one specified in the "configType" argument</li>
+     * </ol>
+     * 
      * @param configType the type of a configuration that is passed as argument to the callback
      * @param callbackInstance the object instance on which the updatedMethod is invoked
      * @param updateMethod the callback to call on the callbackInstance when the configuration is updated.
@@ -244,7 +262,7 @@
     <T, U> ConfigurationDependencyBuilder update(Class<U> configType, CbConfiguration<T, U> callback);
     
     /**
-     * Sets a reference to a "callback(configType, Component)" method from one of the component implementation classes. 
+     * Sets a reference to a "callback(Configuration, Component)" method from one of the component implementation classes. 
      * The method is invoked with two args: configuration type, Component. The configuration type argument is null if the configuration is lost.
      *
      * @param <T> The type of the target component implementation class on which the method is invoked
@@ -275,7 +293,7 @@
     ConfigurationDependencyBuilder update(InstanceCbDictionaryComponent callback);
 
     /**
-     * Sets a reference to a "callback(ConfigType)" method from an Object instance. The configuration type argument is null if the configuration is lost.
+     * Sets a reference to a "callback(Configuration)" method from an Object instance. The configuration type argument is null if the configuration is lost.
      *
      * @param <T> the type of the configuration interface accepted by the callback method.
      * @param configType the class of the configuration that is passed as argument to the callback
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FactoryPidAdapterBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FactoryPidAdapterBuilder.java
index b5771b5..79a48ce 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FactoryPidAdapterBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FactoryPidAdapterBuilder.java
@@ -17,8 +17,10 @@
  * 
  * This builded supports type safe configuration types. For a given factory configuration, you can specify an interface of your choice,
  * and DM will implement it using a dynamic proxy that converts interface methods to lookups in the actual factory configuration dictionary. 
+ * For more information about configuration types, please refer to {@link ConfigurationDependencyBuilder}.
  * 
- * <p> Example that defines a factory configuration adapter service for the "foo.bar" factory pid:
+ * <p> Example that defines a factory configuration adapter service for the "foo.bar" factory pid. For each factory pid instance, 
+ * an instance of the DictionaryImpl component will be created.
  * 
  * <pre> {@code
  * public class Activator extends DependencyManagerActivator {
@@ -64,16 +66,16 @@
     FactoryPidAdapterBuilder factoryPid(String pid);
         
     /**
-     * Specifies if the public properties (not starting with a dot) should be propagated in the adapter service properties (false by default).
+     * Specifies if the public properties (not starting with a dot) should be propagated to the adapter service properties (false by default).
      * 
      * @return this builder.
      */
     FactoryPidAdapterBuilder propagate();
     
     /**
-     * Specifies if the public properties (not starting with a dot) should be propagated in the adapter service properties (false by default).
+     * Specifies if the public properties (not starting with a dot) should be propagated to the adapter service properties (false by default).
      * 
-     * @param propagate true if the public properties should be propagated in the adapter service properties (false by default).
+     * @param propagate true if the public properties should be propagated to the adapter service properties (false by default).
      * @return this builder.
      */
     FactoryPidAdapterBuilder propagate(boolean propagate);
@@ -82,12 +84,12 @@
      * Specifies a callback method that will be called on the component instances when the configuration is injected.
      * 
      * @param updateMethod the method to call on the component instances when the configuration is available ("updated" by default).
-     * The following method signatures are supported:
      * 
-     * <pre> {@code
-     *    method(Dictionary properties)
-     *    method(Component component, Dictionary properties)
-     * }</pre>
+     * <p>The following method signatures are supported:
+     * <ol>
+     * <li> method(Dictionary properties)
+     * <li> method(Component component, Dictionary properties)
+     * </ol>
      * 
      * @return this builder
      */
@@ -97,6 +99,14 @@
      * Sets a callback method to call on the component implementation class(es) when the configuration is updated. 
      * The callback is invoked with a configuration type argument.
      * 
+     * <p>The following callback signatures are supported and searched in the following order:
+     * <ol>
+     * <li>method(Dictionary)</li>
+     * <li>method(Component, Dictionary)</li>
+     * <li>method(Configuration) // same type as the one specified in the "configType" argument</li>
+     * <li>method(Component, Configuration) // Configuration has the same type as the one specified in the "configType" argument</li>
+     * </ol>
+     * 
      * @param configType the type of a configuration that is passed as argument to the callback
      * @param updateMethod the callback to call on the component instance(s) when the configuration is updated.
      * @return this builder
@@ -123,6 +133,14 @@
      * Specifies a callback instance method that will be called on a given object instance when the configuration is injected.
      * The callback is invoked with a configuration type argument.
      * 
+     * <p>The following callback signatures are supported and searched in the following order:
+     * <ol>
+     * <li>method(Dictionary)</li>
+     * <li>method(Component, Dictionary)</li>
+     * <li>method(Configuration) // same type as the one specified in the "configType" argument</li>
+     * <li>method(Component, Configuration) // Configuration has the same type as the one specified in the "configType" argument</li>
+     * </ol>
+     * 
      * @param configType the type of a configuration that is passed as argument to the callback
      * @param callbackInstance the Object instance on which the updated callback will be invoked.
      * @param updateMethod the method to call on the given object instance when the configuration is available. The callback is invoked
@@ -157,7 +175,7 @@
      * Specifies a method reference that will be called on one of the component classes when the configuration is injected
      * 
      * @param <T> the type of the component implementation class on which the callback is invoked on.
-     * @param callback the reference to a method on one of the component classes. The method may takes as parameter a Dictionary and a Component.
+     * @param callback the reference to a method on one of the component classes. The method may takes as arguments a Dictionary and a Component.
      * @return this builder
      */
     <T> FactoryPidAdapterBuilder update(CbDictionaryComponent<T> callback);
@@ -169,7 +187,7 @@
      * @param <T> the type of the component implementation class on which the callback is invoked on.
      * @param <U> the configuration type accepted by the callback method.
      * @param configType the type of a configuration that is passed as argument to the callback
-     * @param callback the reference to a method on one of the component classes. The method may takes as parameter a configuration type and a Component.
+     * @param callback the reference to a method on one of the component classes. The method may takes as arguments a configuration type and a Component.
      * @return this builder
      */
     <T, U> FactoryPidAdapterBuilder update(Class<U> configType, CbConfigurationComponent<T, U> callback);
@@ -209,7 +227,7 @@
      * 
      * @param <T> the configuration type accepted by the callback method.
      * @param configType the type of a configuration that is passed as argument to the callback
-     * @param callback the method to call on a given object instance when the configuration is available. The callback takes as argument a
+     * @param callback the method to call on a given object instance when the configuration is available. The callback takes as arguments a
      * configuration type, and a Component parameter. 
      * @return this builder
      */
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FluentProperty.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FluentProperty.java
index d030bf3..096f9c6 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FluentProperty.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/FluentProperty.java
@@ -5,7 +5,7 @@
 /**
  * Lambda allowing to define fluent service properties. Property names are deduces from the lambda parameter name.
  * 
- * <p> Example of a component which provides fluent properties ("foo=bar"; "foo2=Integer(123)):
+ * <p> Example of a component which provides fluent properties {"foo"="bar"; "foo2"=Integer(123)}:
  * 
  * <pre>{@code
  * public class Activator extends DependencyManagerActivator {
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceAspectBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceAspectBuilder.java
index d611a31..2bb0961 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceAspectBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceAspectBuilder.java
@@ -7,7 +7,7 @@
  * The aspect will be registered with the same interface and properties as the original service, plus any extra properties you supply here.
  * Multiple Aspects of the same service are chained and ordered using aspect ranks.
  * 
- * <p> Code example that provides a "LogService" aspect that performs spell-checking of each log message. 
+ * <p> Code example which provides a "LogService" aspect that performs spell-checking of each log message. 
  * The aspect decorates a LogService. The aspect also depends on an Dictionary service that is internally used to perform log spell checking.
  * The LogService and Dictionary services are injected in the aspect implementation using reflection on class fields:
  * 
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java
index 53723c2..603bd08 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java
@@ -24,8 +24,6 @@
 /**
  * Builds a service dependency callback (required by default).
  * 
- * TODO: fix javadoc for method reference (do the same as in ConfigurationDependencyBuilder: use double quotes ...
- * 
  * A Service may be injected in a bind-method of a component or an object instance using this builder.
  * The builder supports reflection based callbacks (same as with the original DM API), as well as java8 method reference based callbacks.
  * 
@@ -62,23 +60,23 @@
  * swapMethod(ServiceReference<S> oldRef, S old, ServiceReference<S> newRef, S newService, Component component)
  * }</pre>
  * 
- * <p> Here is an example of a Component that defines a dependency of a LogService which is injected in the "bindLogService" method using a ServiceCallbacksBuilder:
- * The withSvc(...)" declaration defines a method reference on the "ComponentImpl::bindLogService" method (using a lambda):
+ * <p> Here is an example of a Component that defines a dependency of a LogService which is injected in the "setLog" method using a ServiceCallbacksBuilder:
+ * The withSvc(...)" declaration defines a method reference on the "Pojo::setLog" method (using a lambda):
  * 
  * <pre> {@code
  * public class Activator extends DependencyManagerActivator {
  *    public void init(BundleContext ctx, DependencyManager dm) throws Exception { 
- *       component(comp -> comp.impl(ComponentImpl.class).withSvc(LogService.class, log -> log.add(ComponentImpl::bindLogService)));
+ *       component(comp -> comp.impl(Pojo.class).withSvc(LogService.class, log -> log.add(Pojo::setLog)));
  *    }
  * }}</pre>
  *
- * <p> Same example, but we inject the dependency in an object instance that we already have in hand:
+ * <p> Same example, but we inject the dependency to an object instance that we already have in hand:
  * 
  * <pre> {@code
  * public class Activator extends DependencyManagerActivator {
  *    public void init(BundleContext ctx, DependencyManager dm) throws Exception {
- *       ComponentImpl impl = new ComponentImpl();
- *       component(comp -> comp.impl(impl).withSvc(LogService.class, log -> log.add(impl::bindLogService)));
+ *       Pojo impl = new Pojo();
+ *       component(comp -> comp.impl(impl).withSvc(LogService.class, log -> log.add(impl::setLog)));
  *    }
  * }}</pre>
  * 
@@ -87,17 +85,7 @@
  * <pre> {@code
  * public class Activator extends DependencyManagerActivator {
  *    public void init(BundleContext ctx, DependencyManager dm) throws Exception {
- *       component(comp -> comp.impl(ComponentImpl::class).withSvc(LogService.class, log -> log.add("bindLogService")));
- *    }
- * }}</pre>
- *
- * <p> Same example, but we inject the dependency in an object instance that we already have in hand:
- * 
- * <pre> {@code
- * public class Activator extends DependencyManagerActivator {
- *    public void init(BundleContext ctx, DependencyManager dm) throws Exception {
- *       ComponentImpl impl = new ComponentImpl();
- *       component(comp -> comp.impl(impl).withSvc(LogService.class, log -> log.callbackInstance(impl).add("bindLogService")));
+ *       component(comp -> comp.impl(Pojo::class).withSvc(LogService.class, log -> log.add("setLog")));
  *    }
  * }}</pre>
  *
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java
index 8ad3707..95a9803 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java
@@ -13,8 +13,6 @@
  * control the default mode (required or optional) using the "org.apache.felix.dependencymanager.lambda.dependencymode"
  * system property which can be set to either "required" or "optional" ("required" by default).
  * 
- * Unlike with original DM, dependencies are required by default.
- *
  * @param <S> the type of the service dependency
  */
 public interface ServiceDependencyBuilder<S> extends DependencyBuilder<ServiceDependency>, ServiceCallbacksBuilder<S, ServiceDependencyBuilder<S>> {
@@ -107,7 +105,7 @@
     ServiceDependencyBuilder<S> defImpl(Object defaultImpl);
     
     /**
-     * Sets a timeout for this dependency. A timed dependency blocks the invoker thread is the required dependency is currently unavailable, until it comes up again.
+     * Sets a timeout for this dependency. A timed dependency blocks the invoker thread if the required dependency is currently unavailable, until it comes up again.
      * @param timeout the timeout to wait in milliseconds when the service disappears. If the timeout expires, an IllegalStateException is thrown
      * when the missing service is invoked.
      * 
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfiguration.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfiguration.java
index 9f8a2e8..1275bac 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfiguration.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfiguration.java
@@ -1,66 +1,20 @@
 package org.apache.felix.dm.lambda.callbacks;
 
-import java.util.Collection;
 import java.util.Dictionary;
-import java.util.Map;
 import java.util.Objects;
 
+import org.apache.felix.dm.lambda.ConfigurationDependencyBuilder;
+
 /**
  * Represents a callback(Configuration) that is invoked on a Component implementation class. 
- * The callback which accepts a type-safe configuration class for wrapping properties behind a dynamic proxy interface.
+ * The callback accepts a type-safe configuration class for wrapping properties behind a dynamic proxy interface.
  * 
  * <p> The T generic parameter represents the type of the class on which the callback is invoked on. 
  * <p> The U generic parameter represents the type of the configuration class passed to the callback argument. 
  * 
- * <p> Using such callback provides a way for creating type-safe configurations from a actual {@link Map} or {@link Dictionary} that is
+ * <p> Using such callback provides a way for creating type-safe configurations from the actual {@link Dictionary} that is
  * normally injected by Dependency Manager.
- * The callback accepts in argument an interface that you have to provide, and DM will inject a proxy that converts
- * method calls from your configuration-type to lookups in the actual map or dictionary. The results of these lookups are then
- * converted to the expected return type of the invoked configuration method.<br>
- * As proxies are injected, no implementations of the desired configuration-type are necessary!
- * </p>
- * <p>
- * The lookups performed are based on the name of the method called on the configuration type. The method names are
- * "mangled" to the following form: <tt>[lower case letter] [any valid character]*</tt>. Method names starting with
- * <tt>get</tt> or <tt>is</tt> (JavaBean convention) are stripped from these prefixes. For example: given a dictionary
- * with the key <tt>"foo"</tt> can be accessed from a configuration-type using the following method names:
- * <tt>foo()</tt>, <tt>getFoo()</tt> and <tt>isFoo()</tt>.
- * </p>
- * <p>
- * The return values supported are: primitive types (or their object wrappers), strings, enums, arrays of
- * primitives/strings, {@link Collection} types, {@link Map} types, {@link Class}es and interfaces. When an interface is
- * returned, it is treated equally to a configuration type, that is, it is returned as a proxy.
- * </p>
- * <p>
- * Arrays can be represented either as comma-separated values, optionally enclosed in square brackets. For example:
- * <tt>[ a, b, c ]</tt> and <tt>a, b,c</tt> are both considered an array of length 3 with the values "a", "b" and "c".
- * Alternatively, you can append the array index to the key in the dictionary to obtain the same: a dictionary with
- * "arr.0" =&gt; "a", "arr.1" =&gt; "b", "arr.2" =&gt; "c" would result in the same array as the earlier examples.
- * </p>
- * <p>
- * Maps can be represented as single string values similarly as arrays, each value consisting of both the key and value
- * separated by a dot. Optionally, the value can be enclosed in curly brackets. Similar to array, you can use the same
- * dot notation using the keys. For example, a dictionary with 
- * 
- * <pre>{@code "map" => "{key1.value1, key2.value2}"}</pre> 
- * 
- * and a dictionary with <p>
- * 
- * <pre>{@code "map.key1" => "value1", "map2.key2" => "value2"}</pre> 
- * 
- * result in the same map being returned.
- * Instead of a map, you could also define an interface with the methods <tt>getKey1()</tt> and <tt>getKey2</tt> and use
- * that interface as return type instead of a {@link Map}.
- * 
- * <p>
- * In case a lookup does not yield a value from the underlying map or dictionary, the following rules are applied:
- * <ol>
- * <li>primitive types yield their default value, as defined by the Java Specification;
- * <li>string, {@link Class}es and enum values yield <code>null</code>;
- * <li>for arrays, collections and maps, an empty array/collection/map is returned;
- * <li>for other interface types that are treated as configuration type a null-object is returned.
- * </ol>
- * </p>
+ * For more information about configuration types, please refer to {@link ConfigurationDependencyBuilder}.
  * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfigurationComponent.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfigurationComponent.java
index 1e34dc0..98df3ff 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfigurationComponent.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConfigurationComponent.java
@@ -1,16 +1,22 @@
 package org.apache.felix.dm.lambda.callbacks;
 
+import java.util.Dictionary;
 import java.util.Objects;
 
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.lambda.ConfigurationDependencyBuilder;
 
 /**
  * Represents a callback(Configuration, Component) which accepts a configuration type for wrapping properties
- * behind a dynamic proxy interface. For more informations about configuration type, please refer to {@link CbConfiguration}.
+ * behind a dynamic proxy interface.
  * 
  * <p> The T generic parameter represents the type of the class on which the callback is invoked on. 
  * <p> The U generic parameter represents the type of the configuration class passed to the callback argument. 
  * 
+ * <p> Using such callback provides a way for creating type-safe configurations from the actual {@link Dictionary} that is
+ * normally injected by Dependency Manager.
+ * For more information about configuration types, please refer to {@link ConfigurationDependencyBuilder}.
+ * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 @FunctionalInterface
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java
index 20888fd..ea54a10 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java
@@ -5,7 +5,7 @@
 import org.apache.felix.dm.Component;
 
 /**
- * Represents a callback(Component)  on an Object instance.
+ * Represents a callback(Component) invoked on an Object instance.
  * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java
index 6f60523..d6118c9 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java
@@ -1,13 +1,19 @@
 package org.apache.felix.dm.lambda.callbacks;
 
+import java.util.Dictionary;
 import java.util.Objects;
 
+import org.apache.felix.dm.lambda.ConfigurationDependencyBuilder;
+
 /**
  * Represents a reference to a callback on an Object instance that takes Configuration type as argument.
- * For more informations about configuration type, please refer to {@link CbConfiguration}.
  * 
  * <p> The T generic parameter represents the type of the configuration class passed to the callback argument. 
  * 
+ * <p> Using such callback provides a way for creating type-safe configurations from the actual {@link Dictionary} that is
+ * normally injected by Dependency Manager.
+ * For more information about configuration types, please refer to {@link ConfigurationDependencyBuilder}.
+ * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 @FunctionalInterface
diff --git a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java
index 1feaea3..634f892 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java
@@ -1,16 +1,20 @@
 package org.apache.felix.dm.lambda.callbacks;
 
+import java.util.Dictionary;
 import java.util.Objects;
 
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.lambda.ConfigurationDependencyBuilder;
 
 /**
- * Represents a callback(Configuration, Component) that is invoked on a Component implementation class. 
- * The type of the class on which the callback is invoked on is represented by the T generic parameter.
- * For more informations about configuration type, please refer to {@link CbConfiguration}.
+ * Represents a callback(Configuration, Component) invoked on an Object instance.
  * 
  * <p> The T generic parameter represents the type of the configuration class passed to the callback argument. 
  * 
+ * <p> Using such callback provides a way for creating type-safe configurations from the actual {@link Dictionary} that is
+ * normally injected by Dependency Manager.
+ * For more information about configuration types, please refer to {@link ConfigurationDependencyBuilder}.
+ * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 @FunctionalInterface
@@ -20,7 +24,7 @@
      * @param instance the Component implementation instance on which the callback is invoked on. 
      * @param component the callback Component 
      */
-    void accept(T instance, Component component);
+    void accept(T configType, Component component);
 
     default InstanceCbConfigurationComponent<T> andThen(InstanceCbConfigurationComponent<T> after) {
         Objects.requireNonNull(after);
