diff --git a/README.md b/README.md
index c43db11..2bc9007 100644
--- a/README.md
+++ b/README.md
@@ -255,35 +255,123 @@
 
 ```java
 import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
+import org.apache.sling.feature.cpconverter.**.*; // not real Java syntax
 
 ...
 
-new ContentPackage2FeatureModelConverter()
-            // content-package validation, when opening them
-            .setStrictValidation(strictValidation)
-            // (don't) allow different OSGi configurations file have the same PID
-            .setMergeConfigurations(mergeConfigurations)
-            // users can decide which is the bundles start order, declared in the generated Apache Sling Feature(s)
-            .setBundlesStartOrder(bundlesStartOrder)
-            // a valid directory where the artifacts will be deployed (it will created, if not existing already)
-            .setArtifactsOutputDirectory(outputDirectory)
-            // a valid directory where the Feature Models will be generated (it will created, if not existing already)
-            .setFeatureModelsOutputDirectory(sameOrDifferentOutputDirectory)
-            // an existing and valid content-package file
-            .convert(contentPackage);
+List<String> apiRegions = ...;
+
+DefaultFeaturesManager featuresManager = new DefaultFeaturesManager(mergeConfigurations,
+                                                                    bundlesStartOrder,
+                                                                    featureModelsOutputDirectory,
+                                                                    artifactIdOverride,
+                                                                    fmPrefix,
+                                                                    properties);
+if (apiRegions != null) {
+    featuresManager.setAPIRegions(apiRegions);
+}
+
+ContentPackage2FeatureModelConverter converter = new ContentPackage2FeatureModelConverter(strictValidation)
+                                                 .setFeaturesManager(featuresManager)
+                                                 .setBundlesDeployer(new DefaultArtifactsDeployer(artifactsOutputDirectory))
+                                                 .setEntryHandlersManager(new DefaultEntryHandlersManager())
+                                                 .setAclManager(new DefaultAclManager())
+                                                 .setEmitter(DefaultPackagesEventsEmitter.open(featureModelsOutputDirectory));
+
+if (filteringPatterns != null && filteringPatterns.length > 0) {
+    RegexBasedResourceFilter filter = new RegexBasedResourceFilter();
+
+    for (String filteringPattern : filteringPatterns) {
+        filter.addFilteringPattern(filteringPattern);
+    }
+
+    converter.setResourceFilter(filter);
+}
+
+File[] contentPackages = ...;
+
+converter.convert(contentPackages);
 ```
 
-### Handler Services
+The `org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter#convert(File[] contentPackages)` method performs a two-phases algorithm, which:
 
-In order to make the tool extensible, the [org.apache.sling.feature.cpconverter.spi.EntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/spi/EntryHandler.java) interface is declared to handle different kind of resources, have a look at the [org.apache.sling.feature.cpconverter.handlers](src/main/java/org/apache/sling/feature/cpconverter/handlers) package to see the default implementations.
+ * all content-packages dependencies are computed in order to built the correct content-packages processing sequence;
+ * all entries of each content-package is scanned and processed accordingly.
 
-If users want to handle special resource type, all they have to do is providing their `org.apache.sling.feature.cpconverter.spi.EntryHandler` service implementation and declaring them in the `META-INF/services/org.apache.sling.feature.cpconverter.spi.EntryHandler` classpath resource file, on order to let the `ServiceLoader` including it in the `content-package` scan.
+### Features Manager service
+
+The [org.apache.sling.feature.cpconverter.features.FeaturesManager](./src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java), backed by the default implementation [org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager](./src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java), is the service responsible to build and collect the Feature Models while scanning the input content-packages.
+
+The additional [org.apache.sling.feature.cpconverter.features.RunmodeMapper](./src/main/java/org/apache/sling/feature/cpconverter/features/RunmodeMapper.java) component, embedded in the `DefaultFeaturesManager`, will take care to create a `runmode.mapping`, in the same Feature Model target directory, where all features will be indexed by runmodes, i.e.:
+
+```
+$ cat /my-target-project/src/main/features/runmode.mapping 
+#File edited by the Apache Sling Content Package to Sling Feature converter
+#Fri Aug 30 12:47:56 CEST 2019
+production=org.apache.test.mytest-sample-site.ui.apps-production.json,org.apache.test.components.all-production.json
+(default)=org.apache.test.mytest-sample-site.ui.content.json,org.apache.test.mytest-sample-site.ui.apps.json,org.apache.test.components.all.json
+```
 
 ### Bundles deployer
 
-The [org.apache.sling.feature.cpconverter.spi.BundlesDeployer](./src/main/java/org/apache/sling/cp2fm/spi/BundlesDeployer) service is designed to let the conversion tool be integrated in external services, i.e. _Apache Maven_.
+The [org.apache.sling.feature.cpconverter.artifacts.ArtifactsDeployer](./src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java) service is designed to let the conversion tool be integrated in external services, i.e. _Apache Maven_.
 
-The [default implementation](src/main/java/org/apache/sling/cp2fm/DefaultBundlesDeployer.java) just copies bundles in the target output directory, according to the _Apache Maven_ repository layout.
+The [default implementation](./src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java) just copies bundles in the target output directory, according to the _Apache Maven_ repository layout.
+
+### Handler Service
+
+In order to make the tool extensible, the [org.apache.sling.feature.cpconverter.handlers.EntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/spi/EntryHandler.java) interface is declared to handle different kind of resources, have a look at the [org.apache.sling.feature.cpconverter.handlers](src/main/java/org/apache/sling/feature/cpconverter/handlers) package to see the default implementations.
+
+If users want to handle special resource type, all they have to do is providing their `org.apache.sling.feature.cpconverter.handlers.EntryHandler` service implementation and declaring them in the `META-INF/services/org.apache.sling.feature.cpconverter.handlers.EntryHandler` classpath resource file, on order to let the `ServiceLoader` including it in the `content-package` scan.
+
+All handlers are managed by the [org.apache.sling.feature.cpconverter.handlers.EntryHandlersManager](./src/main/java/org/apache/sling/feature/cpconverter/spi/EntryHandlersManager.java) service, which default implementation is [org.apache.sling.feature.cpconverter.handlers.DefaultEntryHandlersManager](./src/main/java/org/apache/sling/feature/cpconverter/spi/DefaultEntryHandlersManager.java)
+
+#### Built-in handlers
+
+|  Entry type | Entry regular expression | Handler |
+|:-----------:|:------------------------:|:-------:|
+| Node types | `/META-INF/vault/nodetypes\.cnd` | [org.apache.sling.feature.cpconverter.handlers.NodeTypesEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/NodeTypesEntryHandler.java) |
+| Privileges | `/META-INF/vault/privileges\.xml` | [org.apache.sling.feature.cpconverter.handlers.PrivilegesHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandler.java) |
+| Rep Policy | `/jcr_root(.*/)_rep_policy.xml` | [org.apache.sling.feature.cpconverter.handlers.RepPolicyEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java) |
+| System Users | `/jcr_root(/home/users/.*/)\.content.xml` | [org.apache.sling.feature.cpconverter.handlers.SystemUsersEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java) |
+| Sub content-packages | `/jcr_root/etc/packages/.+\.zip` | [org.apache.sling.feature.cpconverter.handlers.ContentPackageEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java) |
+| OSGi Bundle | `/jcr_root/(?:apps|libs)/.+/install(?:\.([^/]+))?/(?:([0-9]+)/)?.+\.jar` | [org.apache.sling.feature.cpconverter.handlers.BundleEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java) |
+| OSGi Configuration | `/jcr_root/(?:apps|libs)/.+/config(\.([^/]+))?/.+\.config` | [org.apache.sling.feature.cpconverter.handlers.ConfigurationEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandler.java) |
+| OSGi JSON Configuration | `/jcr_root/(?:apps|libs)/.+/config(\.([^/]+))?/.+\.cfg\.json` | [org.apache.sling.feature.cpconverter.handlers.JsonConfigurationEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/JsonConfigurationEntryHandler.java) |
+| OSGi Properties Configuration | `/jcr_root/(?:apps|libs)/.+/config(\.([^/]+))?/.+\.cfg\.properties` | [org.apache.sling.feature.cpconverter.handlers.PropertiesConfigurationEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/PropertiesConfigurationEntryHandler.java) |
+| OSGi XML Configuration | `/jcr_root/(?:apps|libs)/.+/config(\.([^/]+))?/.+\.xml` | [org.apache.sling.feature.cpconverter.handlers.XmlConfigurationEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/XmlConfigurationEntryHandler.java) |
+
+Everything else, unless users will deploy in the classpath a custom `org.apache.sling.feature.cpconverter.handlers.EntryHandler` implementation, is handled by the [org.apache.sling.feature.cpconverter.handlers.ContentPackageEntryHandler](./src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java)
+
+### ACL Management
+
+While scanning the input content-package(s), all ACLs entries are handled by the [org.apache.sling.feature.cpconverter.acl.AclManager](./src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java) service which is in charge of collecting and computing:
+
+ * System Users;
+ * System Users related ACLs;
+ * Privileges;
+ * Node types registrations;
+ * Any `repoinit` additional instruction.
+ 
+Default implementation is provided by [org.apache.sling.feature.cpconverter.acl.DefaultAclManager](./src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java).
+
+Please note that ACLs are set for detected System Users only, all other ACLs will be ignored.
+
+### Content-Packages events
+
+SAX-alike events are emitted while processing input (sub-)content-packages, all them are handled by the [org.apache.sling.feature.cpconverter.vltpkg.PackagesEventsEmitter](./src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java).
+
+The default implementation [org.apache.sling.feature.cpconverter.vltpkg.DefaultPackagesEventsEmitter](./src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java) will take care of creating, in the same Feature Model target directory, a `content-packages.csv` index file, where all (sub-)content-packages will be enlisted with their related complete path, i.e.:
+
+```
+# File created on Fri Aug 30 12:47:55 CEST 2019 by the Apache Sling Content Package to Sling Feature converter
+# content-package path, content-package ID, content-package type, content-package parent ID, path in parent content-package, absolute path
+/Users/asfuser/content-packages/org.apache.test.components.all-2.5.1-SNAPSHOT.zip,org/apache/test:org.apache.test.components.all:2.5.1-SNAPSHOT,MIXED,,,
+/Users/asfuser/content-packages/org.apache.test.components.all-2.5.1-SNAPSHOT.zip,org/apache/test:org.apache.test.components.content:2.5.1-SNAPSHOT,APPLICATION,org/apache/test:org.apache.test.components.all:2.5.1-SNAPSHOT,/jcr_root/etc/packages/org/apache/test/org.apache.test.components.content-2.5.1-SNAPSHOT.zip,/Users/asfuser/content-packages/org.apache.test.components.all-2.5.1-SNAPSHOT.zip!/jcr_root/etc/packages/org/apache/test/org.apache.test.components.content-2.5.1-SNAPSHOT.zip
+/Users/asfuser/content-packages/org.apache.test.components.all-2.5.1-SNAPSHOT.zip,org/apache/test:org.apache.test.components.config:2.5.1-SNAPSHOT,APPLICATION,org/apache/test:org.apache.test.components.all:2.5.1-SNAPSHOT,/jcr_root/etc/packages/org/apache/test/org.apache.test.components.config-2.5.1-SNAPSHOT.zip,/Users/asfuser/content-packages/org.apache.test.components.all-2.5.1-SNAPSHOT.zip!/jcr_root/etc/packages/org/apache/test/org.apache.test.components.config-2.5.1-SNAPSHOT.zip
+```
+
+The `!` character is used to separate nested sub-content-packages path.
 
 ## The CLI Tool
 
@@ -350,35 +438,43 @@
 
 ```
 $ ./bin/cp2sf -h
-Missing required options [--content-package=<contentPackage>, --artifacts-output-directory=<artifactsOutputDirectory>, --features-output-directory=<featureModelsOutputDirectory>]
 Usage: cp2fm [-hmqsvX] -a=<artifactsOutputDirectory> [-b=<bundlesStartOrder>]
-             -c=<contentPackage> -o=<featureModelsOutputDirectory>
-             [-f=<filteringPatterns>]...
+             [-i=<artifactIdOverride>] -o=<featureModelsOutputDirectory>
+             [-p=<fmPrefix>] [-D=<String=String>]...
+             [-f=<filteringPatterns>]... [-r=<apiRegions>]...
+             content-packages...
 Apache Sling Content Package to Sling Feature converter
+      content-packages...   The content-package input file(s).
   -a, --artifacts-output-directory=<artifactsOutputDirectory>
                             The output directory where the artifacts will be
                               deployed.
   -b, --bundles-start-order=<bundlesStartOrder>
                             The order to start detected bundles.
-  -c, --content-package=<contentPackage>
-                            The content-package input file.
+  -D, --define=<String=String>
+                            Define a system property
   -f, --filtering-patterns=<filteringPatterns>
                             Regex based pattern(s) to reject content-package archive
                               entries.
   -h, --help                Display the usage message.
+  -i, --artifact-id=<artifactIdOverride>
+                            The optional Artifact Id the Feature File will have,
+                              once generated; it will be derived, if not specified.
   -m, --merge-configurations
                             Flag to mark OSGi configurations with same PID will be
                               merged, the tool will fail otherwise.
   -o, --features-output-directory=<featureModelsOutputDirectory>
                             The output directory where the Feature File will be
                               generated.
+  -p, --fm-prefix=<fmPrefix>
+                            The optional prefix of the output file
   -q, --quiet               Log errors only.
+  -r, --api-region=<apiRegions>
+                            The API Regions assigned to the generated features
   -s, --strict-validation   Flag to mark the content-package input file being strict
                               validated.
   -v, --version             Display version information.
   -X, --verbose             Produce execution debug output.
 Copyright(c) 2019 The Apache Software Foundation.
-
 ```
 
 to see all the available options; a sample execution could look like:
@@ -417,4 +513,4 @@
 data hence in a new place.
 This does not bother the Sling Feature Maven Plugin nor the Feature Launcher
 as they are still able to find the dependencies if placed in the Local
-Maven Repo.
\ No newline at end of file
+Maven Repo.
