diff --git a/dependencymanager/samples.annotation/README b/dependencymanager/samples.annotation/README
index d976267..000d7e7 100644
--- a/dependencymanager/samples.annotation/README
+++ b/dependencymanager/samples.annotation/README
@@ -1,85 +1,209 @@
 This sample illustrates the usage of the new DependencyManager annotations.
 
 Sample description:
+==================
 
-  This sample shows a basic "SpellChecker" application which provides a Felix "spellcheck" GOGO shell
-  command. The GOGO "spellcheck" command accepts a string as parameter, which is checked for proper 
-  existence. The SpellChecker class has a required/multiple (1..N) dependency over every available 
-  "DictionaryService" services, which are internally used by the SpellChecker command, when checking 
-  word existence.
-  
-  A DictionaryService is defined using a FactoryConfigurationAdapterService annotation, allowing to
-  instantiate many "DictionaryService" instances from webconsole. This annotation actually
-  registers a ManagedServiceFactory into the Registry, and you can specify some meta type
-  informations in the annotation, allowing to configure the DictionaryService words and language from 
-  WebConsole. 
-  Each time you instantiate a factory configuration whose factory pid equals "Dictionary Services", 
-  then a corresponding "DictionaryService" service is instantiated and is then injected
-  into the SpellChecker service. So, before testing, you first have to go to webconsole
-  Configuration panel, and specify some dictionaries (see the "Dictionary Services" Factory PID).  
-  Then, go to the felix GOGO shell, and you will then see the "spellcheck" command (when typing
-  "help"). 
-  
-  Notice that in the sample, you will also find a DictionaryAspect Service (DictionaryAspect.java), which
-  decorates the EnglishDictionary service, by adding some additional words to it. 
-  
+This sample shows a basic "SpellChecker" application which provides a Felix "spellcheck" GOGO shell
+command. The GOGO "spellcheck" command accepts a string as parameter, which is checked for proper
+existence. The SpellChecker class has a required/multiple (1..N) dependency over every available
+"DictionaryService" services, which are internally used by the SpellChecker command, when checking
+word existence.
+
+A DictionaryService is defined using a FactoryConfigurationAdapterService annotation, allowing to
+instantiate many "DictionaryService" instances from webconsole. This annotation actually registers a
+ManagedServiceFactory into the Registry, and you can specify some meta type informations in the
+annotation, allowing to configure the DictionaryService words and language from WebConsole. Each
+time you instantiate a factory configuration whose factory pid equals "DictionaryImplFactoryPid",
+in the webconsole "Dictionary Services" configuration section, then a corresponding "DictionaryImpl"
+component is instantiated and is then injected into the SpellChecker service. So, before testing,
+you first have to go to webconsole Configuration panel, and specify some dictionaries (see the
+"Dictionary Services" section). Then, go to the felix GOGO shell, and you will then see the
+"spellcheck" command (when typing "help").
+
+Notice that in the sample, you will also find a DictionaryAspect Service (DictionaryAspect.java),
+which decorates the EnglishDictionary service, by adding some additional words to it. 
+
 How to test:
+===========
 
-  - Install the following bundles (with same or higher version):
+1) Install the following bundles (with same or higher version):
 
-     org.apache.felix.configadmin-1.2.8.jar
-     org.apache.felix.metatype-1.0.4.jar
-     org.apache.felix.http.jetty-2.2.0.jar
-     org.apache.felix.log-1.0.0.jar (optional)
-     org.apache.felix.webconsole-3.1.8.jar
-     org.apache.felix.shell-1.4.2.jar
+  org.apache.felix.configadmin-1.2.8.jar
+  org.apache.felix.metatype-1.0.4.jar
+  org.apache.felix.http.jetty-2.2.0.jar
+  org.apache.felix.webconsole-3.1.8.jar
+  org.apache.felix.shell-1.4.2.jar
+  org.apache.felix.dependencymanager-3.0.0.jar
+  org.apache.felix.dependencymanager.shell-3.0.0.jar
+  org.apache.felix.dependencymanager.runtime-3.0.0.jar
+  org.apache.felix.log-1.0.1.jar (optional)
 
-  - compile dependency manager from trunk:
-
-     svn checkout http://svn.apache.org/repos/asf/felix/trunk/dependencymanager dependencymanager
-     cd dependencymanager
-     mvn -Dpackaging=plugins -Dmaven.test.skip=true install
-
-  - install the DM bundles into the fwk 
-
-     dependencymanager/core/target/org.apache.felix.dependencymanager-3.0.0-SNAPSHOT.jar
-     dependencymanager/shell/target/org.apache.felix.dependencymanager.shell-3.0.0-SNAPSHOT.jar
-     dependencymanager/runtime/target/org.apache.felix.dependencymanager.runtime-3.0.0-SNAPSHOT.jar
-     dependencymanager/samples.annotation/target/org.apache.felix.dependencymanager.samples.annotation-3.0.0-SNAPSHOT.jar
-
-  - Start felix
-
-    At this point, you should have the following running bundles:
-
-    g! lb
-    START LEVEL 1
-       ID|State      |Level|Name
-        0|Active     |    0|System Bundle (3.0.8)
-        1|Active     |    1|Apache Felix Bundle Repository (1.6.2)
-        2|Active     |    1|Apache Felix Configuration Admin Service (1.2.8)
-        7|Active     |    1|Apache Felix Gogo Command (0.8.0)
-        8|Active     |    1|Apache Felix Gogo Runtime (0.8.0)
-        9|Active     |    1|Apache Felix Gogo Shell (0.8.0)
-       10|Active     |    1|Apache Felix Http Jetty (2.2.0)
-       11|Active     |    1|Apache Felix Log Service (1.0.0)
-       12|Active     |    1|Apache Felix Metatype Service (1.0.4)
-       13|Active     |    1|Apache Felix Web Management Console (3.1.8)
-       14|Active     |    1|Apache Felix Dependency Manager (3.0.0.SNAPSHOT)
-       16|Active     |    1|Apache Felix Dependency Manager Runtime (3.0.0.SNAPSHOT)
-       17|Active     |    1|Apache Felix Dependency Manager Shell (3.0.0.SNAPSHOT)
-       18|Active     |    1|Apache Felix Dependency Manager Annotation Sample (3.0.0.SNAPSHOT)
-
-  - Go to web console: in the Configuration panel, edit the "Dictionary Services"
-     Configuration, add some dictionaries. By default, an English dictionary is displayed. Just 
-     click on "save", *then click on your refresh web browser*: you will see a new dictionary service
-     instance. At this point, a DictionaryService service will be enabled (with the service property "lang=en"),  
-     and the SpellCheck component will be injected with it. Then you should see the "spellcheck"
-     command, when typing  "help" on the gogo shell.
-
-  - Just type "spellcheck hello", and the command should reply a fantastic message, like "word hello is correct".
+2) compile dependency manager sample.annotation from trunk:
   
-  - You can also click on the "Aspect Dictionary" button, in order to decorate the english dictionary with some 
-     custom words.
-     By default, the "aspect" word is pre configured, but you can click on the "+" button in order to add more words. 
-     Then click on Save. At this point, the English DictionaryService will be decorated with the aspect service.
-     So, now, if you type "spellcheck aspect", then the message: "word aspect is correct" should be displayed. 
+  svn checkout http://svn.apache.org/repos/asf/felix/trunk/dependencymanager dependencymanager
+  cd dependencymanager/sample.annotation
+  mvn clean install
+
+Then install ./target/org.apache.felix.dependencymanager.samples.annotation-3.0.0-SNAPSHOT.jar into 
+felix.
+
+3) Start felix
+
+At this point, you should have the following running bundles:
+    
+g! lb
+START LEVEL 1
+   ID|State      |Level|Name
+    0|Active     |    0|System Bundle (3.2.1)
+    1|Active     |    1|Apache Felix Bundle Repository (1.6.2)
+    2|Active     |    1|Apache Felix Configuration Admin Service (1.2.8)
+    3|Active     |    1|Apache Felix Dependency Manager (3.0.0)
+    4|Active     |    1|Apache Felix Dependency Manager Runtime (3.0.0)
+    5|Active     |    1|Apache Felix Dependency Manager Annotation Sample (3.0.0.SNAPSHOT)
+    6|Active     |    1|Apache Felix Dependency Manager Shell (3.0.0)
+    7|Active     |    1|Apache Felix Gogo Command (0.8.0)
+    8|Active     |    1|Apache Felix Gogo Runtime (0.8.0)
+    9|Active     |    1|Apache Felix Gogo Shell (0.8.0)
+   10|Active     |    1|Apache Felix Http Jetty (2.2.0)
+   11|Active     |    1|Apache Felix Log Service (1.0.1)
+   12|Active     |    1|Apache Felix Metatype Service (1.0.4)
+   13|Active     |    1|Apache Felix Shell Service (1.4.2)
+   14|Active     |    1|Apache Felix Web Management Console (3.1.8)
+
+4) Inspect Dependency Manager components from gogo shell:
+
+type "dm 5" for browsing the components for the bundle id 5
+
+[5] org.apache.felix.dependencymanager.samples.annotation
+  org.osgi.service.cm.ManagedServiceFactory(service.pid=DictionaryImplFactoryPid) registered
+    org.osgi.service.log.LogService service optional available
+  org.apache.felix.dm.samples.annotation.SpellChecker(osgi.command.function={spellcheck},osgi.command.scope=dmsample.annotation) unregistered
+    org.apache.felix.dm.samples.annotation.DictionaryService service required unavailable
+    org.osgi.service.log.LogService service optional unavailable
+  org.apache.felix.dm.impl.AspectServiceImpl$AspectImpl@4d76b4 unregistered
+    org.apache.felix.dm.samples.annotation.DictionaryService (&(!(org.apache.felix.dependencymanager.aspect=*))(lang=en)) service optional unavailable
+    DictionaryAspectPID configuration required unavailable
+    org.osgi.service.log.LogService service optional unavailable
+
+Here, the bundle [5] corresponds to our annotation.sample bundle. In this bundle, we have three
+components: 
+  
+* org.osgi.service.cm.ManagedServiceFactory: this is the service DM has internally registered in
+  order to be able to instantiate some of our "DictionaryImpl" component instances from config
+  admin (using the factory pid "DictionaryImplFactoryPid"). See DictionaryImpl.java and especially
+  the @FactoryConfigurationAdapterService annotation. The component depends on the log service
+  because our "DictionaryImpl" component also depends on the log service. The ManagedServiceFactory
+  is actually depending on all dependencies defined in our "DictionaryImpl" component, and those
+  dependencies will be applied on each instantiated DictionaryImpl component instances.
+
+* org.apache.felix.dm.samples.annotation.SpellChecker: This is our "SpellChecker" component exposing
+  two services properties: "osgi.command.function" (the gogo shell method name), and
+  "osgi.command.scope" (the gogo command scope).
+  It also has two dependencies: "org.apache.felix.dm.samples.annotation.DictionaryService", and
+  "org.osgi.service.log.LogService".
+     
+* org.apache.felix.dm.impl.AspectServiceImpl$AspectImpl: this is also an internal service registered
+  by dependency manager, in order to instantiate our "DictionaryAspect" interceptor service. See
+  DictionaryAspect.java. The aspect impl depends on the three dependencies (which are initially
+  defined in DictionaryAspect.java):
+
+  - org.apache.felix.dm.samples.annotation.DictionaryService: this is the service our DictionaryAspect
+    is intercepting. The AspectServiceImpl$AspectImpl will create a DictionaryAspect instance for
+    every DictionaryService found from the OSGi registry (that is, for every DictionaryService you
+    create from web console "Dictionary Services" configuraton section).
+
+  - DictionaryAspectPID configuration: this is the config pid our DictionaryAspect is depending on (see
+    @ConfigurationDependency in DictionaryAspect.java).
+
+  - org.osgi.service.log.LogService: the DictionaryAspect is optionally depending on the log service
+    (a null object is used if there is no one). 
+
+So, when a DictionaryService will come up, the AspectServiceImpl component will instantiate a
+corresponding "DictionaryAspect" instance, with all the dependencies defined in DictionaryAspect.
+
+5) Create a DictionaryService from web console:
+
+Go to web console: in the Configuration panel, edit the "Dictionary Services" Configuration, and add
+some dictionaries. By default, an English dictionary is displayed. Just click on "save", *then click
+on your refresh web browser*: you will see a new dictionary service instance. At this point, a
+"DictionaryImpl" component instance will be create (with the service property "lang=en"), and the
+SpellCheck component will be injected with it (the DictionaryImpl implements
+DictionaryService). Then you should see the "spellcheck" command, when typing  "help" on the gogo
+shell.
+
+6) test the spellchecker under gogo shell:
+
+Just type "spellcheck hello", and the command should reply a fantastic message, like "word hello is
+correct".
+  
+7) Inspect again DependencyManager components from the shell:
+
+Type again "dm 5", for browsing the components coming from our bundle id 5:
+    
+[5] org.apache.felix.dependencymanager.samples.annotation
+  org.osgi.service.cm.ManagedServiceFactory(service.pid=DictionaryImplFactoryPid) registered
+    org.osgi.service.log.LogService service optional available
+  org.apache.felix.dm.samples.annotation.SpellChecker(osgi.command.function={spellcheck},osgi.command.scope=dmsample.annotation) registered
+    org.apache.felix.dm.samples.annotation.DictionaryService service required available
+    org.osgi.service.log.LogService service optional available
+  org.apache.felix.dm.impl.AspectServiceImpl$AspectImpl@128edf2 unregistered
+    org.apache.felix.dm.samples.annotation.DictionaryService (&(!(org.apache.felix.dependencymanager.aspect=*))(lang=en)) service optional unavailable
+    DictionaryAspectPID configuration required unavailable
+    org.osgi.service.log.LogService service optional unavailable
+  org.apache.felix.dm.samples.annotation.DictionaryService(service.pid=DictionaryImplFactoryPid.e01b70ff-d2b5-4305-9e86-84c68a2fddbb,service.factoryPid=DictionaryImplFactoryPid,lang=en) registered
+    org.osgi.service.log.LogService service optional available
+
+Here, you can see the following:
+
+* the org.osgi.service.cm.ManagedServiceFactory with factory pid "DictionaryImplFactoryPid" is now
+  registered, because we have created a dictionary from config admin (in the Dictionary Services"
+  webconsole configuration section). 
+
+* the SpellChecker is now "registered" because it has been injected with the DictionaryImpl we have
+  created from webconsole.
+
+* the AspectServiceImpl$AspectImpl is not yet registered because we still have to instantiate a
+  configuration from webconsole for the "DictionaryAspectPID" PID: this configuration is required to
+  instance our DictionaryAspect component (see the @ConfigurationDependency annotation in
+  DictionaryAspect.java).
+
+* One instance of the DictionaryService component is now registered (this instance corresponds to
+  what we just configured from webconsole, in the "Dictionary Services" section). 
+  
+8) Finally, activate the "Aspect Dictionary" component:
+
+To do so, you can click on the "Aspect Dictionary" button, from web console Configuration section,
+in order to decorate the english dictionary with some custom words. By default, the "aspect" word is
+pre configured, but you can click on the "+" button in order to add more words. Then click on
+Save. At this point, the English DictionaryService will be decorated with the aspect service. So,
+now, if you type "spellcheck aspect", then the message: "word aspect is correct" should be
+displayed. What is going on is that the original DictionaryService will be replaced by the
+DictionaryAspect, using a higher service.ranking (ranking 10, see DictionaryAspect.java). So the
+spell checker will be transparently re-injected with the DictionayAspect, which is from his side
+depending on the originial DictionaryService.
+
+So, if you type "dm 5", you will know see two DictionaryService instances: 
+
+  org.apache.felix.dm.samples.annotation.DictionaryService(service.pid=DictionaryImplFactoryPid.8390ad56-b2de-4414-9123-29c65c42e5b9,service.factoryPid=DictionaryImplFactoryPid,lang=en) registered
+    org.osgi.service.log.LogService service optional available
+
+  org.apache.felix.dm.samples.annotation.DictionaryService(service.pid=DictionaryImplFactoryPid.8390ad56-b2de-4414-9123-29c65c42e5b9,service.ranking=10,service.factoryPid=DictionaryImplFactoryPid,org.apache.felix.dependencymanager.aspect=57,lang=en) registered
+    org.apache.felix.dm.samples.annotation.DictionaryService (&(|(!(service.ranking=*))(service.ranking<=9))(|(service.id=57)(org.apache.felix.dependencymanager.aspect=57))) service required available
+    DictionaryAspectPID configuration required available
+    org.osgi.service.log.LogService service optional available
+
+The first one is the original DictionaryService we have created using the factory pid
+"DictionaryImplFactoryPid" from web console. By default, the ranking of this service is 0.
+
+Next, you see the new DictionaryService which corresponds to our DictionaryAspect service. It has
+the following properties:
+
+* it has inherited from all service properties found from the original intercepted DictionarService.
+* it has a higher service ranking than the original one (see service.ranking=10). This ranking is
+  actually defined in DictionaryAspect.java, in the @Aspect annotation.
+* it has a dependency over the original DictionaryService (using an appropriate filter).
+* it also inherits from all dependencies originally defined in the DictionaryImpl component
+
+
+
+
