You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2018/11/18 21:20:53 UTC

[7/8] incubator-tamaya-site git commit: TAMAYA-274 Some minor additions. TAMAYA-353 Some minor additions.

TAMAYA-274  Some minor additions.
TAMAYA-353  Some minor additions.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/commit/7fc31c0a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/tree/7fc31c0a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/diff/7fc31c0a

Branch: refs/heads/master
Commit: 7fc31c0a7af3b6af39b39a7fe997a961ed898d5e
Parents: 1c03371
Author: Anatole Tresch <at...@gmail.com>
Authored: Mon Nov 5 00:16:15 2018 +0100
Committer: Anatole Tresch <at...@gmail.com>
Committed: Mon Nov 5 00:16:15 2018 +0100

----------------------------------------------------------------------
 content/documentation/api.adoc                  | 366 ++++++++++---------
 content/documentation/core.adoc                 |  66 ++--
 content/documentation/extensions.adoc           |   4 -
 .../extensions/mod_classloader_support.adoc     |   4 +
 .../extensions/mod_collections.adoc             | 177 ++++++---
 .../documentation/extensions/mod_events.adoc    |  29 +-
 .../documentation/extensions/mod_filter.adoc    |  14 +-
 .../documentation/extensions/mod_formats.adoc   |  98 +++--
 .../documentation/extensions/mod_functions.adoc |  22 +-
 .../documentation/extensions/mod_injection.adoc |  66 +---
 content/documentation/extensions/mod_jndi.adoc  |   2 +-
 .../documentation/extensions/mod_jodatime.adoc  |   2 +-
 content/documentation/extensions/mod_json.adoc  |   6 +-
 .../documentation/extensions/mod_metamodel.adoc |   2 +-
 .../extensions/mod_microprofile.adoc            |   2 +-
 .../extensions/mod_mutable_config.adoc          |  42 +--
 .../documentation/extensions/mod_optional.adoc  |   2 +-
 .../documentation/extensions/mod_resolver.adoc  |  21 +-
 .../documentation/extensions/mod_resources.adoc |  17 +-
 .../documentation/extensions/mod_server.adoc    |  36 +-
 .../extensions/mod_usagetracker.adoc            |  25 +-
 .../extensions/mod_validation.adoc              |   2 +-
 content/documentation/extensions/mod_vertx.adoc |   6 +-
 content/documentation/extensions/mod_yaml.adoc  |   4 +-
 content/documentation/quickstart.adoc           |  38 +-
 content/documentation/spisupport.adoc           |  29 +-
 26 files changed, 572 insertions(+), 510 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/api.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/api.adoc b/content/documentation/api.adoc
index 9e133fe..56d7b19 100644
--- a/content/documentation/api.adoc
+++ b/content/documentation/api.adoc
@@ -12,28 +12,32 @@ link:../highleveldesign.html[High Level Design Documentation]
 == The Tamaya API
 The API provides the artifacts as described in the link:../highleveldesign.html[High Level Design Documentation], which are:
 
-* The package +org.apache.tamaya+ defines a simple but complete SE *API* for accessing key/value based _Configuration_:
+* The package +org.apache.tamaya+ defines a simple but complete SE *API* for accessing _Configuration_:
   ** +Configuration+ hereby models _configuration_, the main interface of Tamaya. +Configuration+ provides
      *** access to literal key/value pairs.
      *** functional extension points (+with, query+) using a unary +ConfigOperator+ or
          a function +ConfigurationQuery<T>+.
-  ** +ConfigurationProvider+ provides with +getConfiguration()+ the static entry point for accessing configuration.
+  ** +Configuration+ also provides with +current()+ and +current(ClassLoader)+ static access point for
+     obtaining the current configuration.
   ** +ConfigException+ defines a runtime exception for usage by the configuration system.
   ** +TypeLiteral+ provides a possibility to type safely define the target type to be returned in case non-String types
-     are accessed.
-  ** +PropertyConverter+, which defines conversion of configuration values (String) into any required target type.
+     are accessed. It is especially useful when accessing collections from Tamaya.
+  ** +PropertyConverter+, which defines conversion of configuration values (one or multiple Strings) into any
+     required target type.
 
 * The package +org.apache.tamaya.spi+ provides interfaces used for extending and/or
   adapting Tamaya's core functionality, as well as artifacts for creating
   +Configuration+ instances programmatically:
   ** _PropertySource:_ is the the interface to be implemented for adding configuration entries. A +PropertySource+ hereby
      *** is minimalistic and can be implemented in any way. E.g. there is no distiction that
-     the configuration data provided is managed locally, remotedely. There is even no
+     the configuration data provided is managed locally, remotely. There is even no
      requirement that the configuration data is always fully available. Summarizing a
      +PropertySource+
-     *** provides property access for single key/value pairs in _raw_ format (meaning no postprocessing
-         is applied yet). A single property hereby is modelled as +PropertyValue+, which also includes
-         its source and additional arbitrary metadata entries.
+     *** provides property access for property values. A single property value hereby is modelled as +PropertyValue+,
+         which by default contains a single literal value. Nevertheles Tamaya also supports more complex scenarios
+         by allowing property values to have children either as array/list type or as named fields. These children
+         themselves are recursively also modelled by property values. This makes it possible to map also complex
+         structures such as JSON, XML or YAML data. Finally a property value also may contain additional metadata entries.
      *** can _optionally_ provide access to a +Map<String,PropertyValue>+, providing all its properties at once.
      *** defines the default ordinal to be used for establishing the order of significance among all
          auto-discovered property sources.
@@ -42,36 +46,32 @@ The API provides the artifacts as described in the link:../highleveldesign.html[
   ** +ConfigurationProviderSpi+ defines the interface to be implemented by the delegating bean that is implementing the
      +ConfigurationProvider+ singleton.
   ** +PropertyFilter+ allows filtering of property values prior getting returned to the caller. Filters by default are
-     registered as global filters, filtering _raw_ values. The final +String+ value of a configuration entry is the
-     final value after all registered filters have been applied.
-  ** A +PropertyValueCombinationPolicy+ optionally can be registered to change the logic how key/value
-     pairs from subsequent property sources in the property source chain are combined to calculate the final
-     _raw_ value passed over to the filters registered.
-  ** A +ConfigurationContext+ is the container of all inner components (+PropertySource, PropertyFilter,
-     PropertyValueCombinationPolicy, PropertyConverter+) required to implement a +Configuration+. Also the ordering
+     registered as global filters. The final value of a configuration entry is the final value after all registered
+     filters have been applied.
+  ** A +ConfigurationContext+ is the container of all components that make up a configuration (+PropertySource,
+     PropertyFilter, PropertyConverter, MetadataProvider+) required to implement a +Configuration+. Also the ordering
      of the property sources, filters and converters is defined by the context.
-     A +ConfigurationContext+ is automatically created on startup collecting and adding all registered artifacts.
-     Based on this +ConfigurationContext+ the _default_ +Configuration+ is created, which can be accessed from
-     +ConfigurationProvider.getConfiguration+.
+     By default a +ConfigurationContext+ is automatically created on first use for each classloader collecting and
+     adding all registered artifacts. Based on a +ConfigurationContext+ a +Configuration+ can be created.
      Summarizing a +ConfigurationContext+ contains the ordered property sources, property filters, converters and combination
      policy used. Once a +ConfigurationContext+ is instanciated a corresponding +Configuration+ instance can be
-     created easily by calling +ConfigurationProvider.createConfiguration(context)+.
-  ** Finally Tamaya also supports _programmatically_ creating +Configuration+ instances and using them in your code
-     as needed. This can be achieved most easily by building a custom +ConfigurationContext+ using a
-     +ConfigurationContextBuilder+. This builder can be obtained calling +ConfigurationProvider.getConfigurationContextBuilder();+.
+     created easily using +ConfigurationBuilder+.
+  ** Whereas the Tamaya's API provides access to automatic configuration resources, it also allows to create
+     _programmatically_ +Configuration+ instances. This can be achieved using a
+     +ConfigurationContextBuilder+. This builder can be obtained calling +Configuration.createConfigurationBuilder();+.
   ** Finally +ServiceContext+ and +ServiceContextManager+ provide an abstraction to the underlying runtime environment,
      allowing different component loading and lifecycle strategies to be used. This is very useful since component (service)
      loading in Java SE, Java EE, OSGI and other runtime environments may be differ significantly. In most cases even
-     extension programmers will not have to deal with these two artifacts.
+     extension programmers will not have to deal with these internals.
 
 
 
 [[APIKeyValues]]
-=== Key/Value Pairs
+=== Key/Value Pairs and More
 
 Basically configuration is a very generic concept. Therefore it should be modelled in a generic way. The most simple
-and most commonly used approach are simple literal key/value pairs. So the core building block of {name} are key/value pairs.
-You can think of a common +.properties+ file, e.g.
+and most commonly used approach are simple literal key/value pairs. So the core building block of {name} are key/value
+pairs. You can think of a common +.properties+ file, e.g.
 
 [source,properties]
 .A simple properties file
@@ -95,11 +95,38 @@ val = props.getProperty("a.b.c.1");
 ...
 --------------------------------------------
 
+But we also have more complex configuration mechanism today. For example YAML is widely used format, which also
+supports lists and maps. Basically these can be mapped also as key/value pairs. Unfortunately this is not very
+useful in some cases:
+
+* a configuration client want to access a list of server configurations
+* a configuration client wants to map structures with named fields.
+* both of the above.
+
+As an example think of a server, which wants to extract a list of all members in the current cluster. Hereby:
+
+* A member is modelled by a +MembeConfigr+ class, with the fields +serverId, serverName, serverURL+.
+* The current members should be accessed as list, as follows:
+
+[source,java]
+----
+List<MemberConfig> members = configuration.get("cluster.members", new TypeLiteral<List<MemberConfig>>();
+----
+
+This coud be modelled as property as well, but it is more convenient to let Tamaya have a more flexible model
+to represent a configuration internally. This is why a +PropertyValue+ can have one of three flavors:
+
+. it is a simple literal value.
+. it is an object containing none to many child property values as named fields.
+. it is an array containing none to many child properties as unnamed array instances.
+
+Summarizing Tamaya is capable of fully represent the structures described by widely used configuration file formats.
+
 
 ==== Why Using Strings Only
 
 There are good reason to keep of non String-values as core storage representation of configuration. Mostly
-there are several huge advantages:
+there are several advantages:
 
 * Strings are simple to understand
 * Strings are human readable and therefore easy to prove for correctness
@@ -146,24 +173,36 @@ public interface Configuration{
     <T> T getOrDefault(String key, Class<T> type, T defaultValue);
     <T> T get(String key, TypeLiteral<T> type);
     <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue);
+    <T> Optional<T> getOptional(String key, TypeLiteral<T> type);
+    <T> Optional<T> getOptional(String key, Class<T> type);
     Map<String,String> getProperties();
 
     // extension points
-    Configuration with(ConfigOperator operator);
-    <T> T query(ConfigQuery<T> query);
+    Configuration map(UnaryOperator<Configuration> operator);
+    <T> T adapt(Function<Configuration,T> adapter);
 
     ConfigurationContext getContext();
+    ConfigurationBuilder toBuilder();
+    static Configuration current();
+    static Configuration current(ClassLoader classsLoader);
+    static void setCurrent(Configuration config);
+    static void setCurrent(Configuration config, ClassLoader classLoader);
+    static ConfigurationBuilder createConfigurationBuilder();
+
+    // the deault EMPTY configuration
+    static Configuration EMPTY{}
 }
 --------------------------------------------
 
 Hereby
 
 * +<T> T get(String, Class<T>)+ provides type safe accessors for all basic wrapper types of the JDK.
-* +with, query+ provide the extension points for adding additional functionality.
+* +map, adapt+ provide the extension points for adding additional functionality.
 * +getProperties()+ provides access to all key/values, whereas entries from non scannable property sources may not
   be included.
 * +getOrDefault+ allows to pass default values as needed, returned if the requested value evaluated to +null+.
 * +getConfigurationContext()+ allows access to the underlying components of a +Configuration+ instance.
+* the +static+ methods allow access for obtaining or changing +Configuration+.
 
 The class +TypeLiteral+ is basically similar to the same class provided with CDI:
 
@@ -193,7 +232,8 @@ public class TypeLiteral<T> implements Serializable {
 --------------------------------------------
 
 
-Instances of +Configuration+ can be accessed from the +ConfigurationProvider+ singleton:
+Instances of +Configuration+ can be accessed using the +Configuration.current()+ or +Configuration.current(ClassLoader)+
+singleton:
 
 [source,java]
 .Accessing Configuration
@@ -237,10 +277,10 @@ We are well aware of the fact that this library will not be able to cover all ki
 we have added _functional_ extension mechanisms to +Configuration+ that were used in other areas of the
 Java eco-system (e.g. Java Time API and JSR 354) as well:
 
-* +with(ConfigOperator operator)+ allows to pass arbitrary unary functions that take and return instances of
+* +map(UnaryOperator<Configuration> operator)+ allows to pass arbitrary unary functions that take and return instances of
   +Configuration+. Operators can be used to cover use cases such as filtering, configuration views, security
   interception and more.
-* +query(ConfigQuery query)+ allows to apply a function returning any kind of result based on a
+* +adapt(Function<Configuration,T)+ allows to apply a function returning any kind of result based on a
   +Configuration+ instance. Queries are used for accessing/deriving any kind of data based on of a +Configuration+
   instance, e.g. accessing a +Set<String>+ of root keys present.
 
@@ -249,9 +289,9 @@ Both interfaces hereby are functional interfaces. Because of backward compatibil
 use Lambdas and method references in Java 8:
 
 [source,java]
-.Applying a +ConfigurationQuery+ using a method reference
+.Applying an Adapter using a method reference
 --------------------------------------------
-ConfigSecurity securityContext = ConfigurationProvider.getConfiguration().query(ConfigSecurity::targetSecurityContext);
+ConfigSecurity securityContext = Configuration.current().adapt(ConfigSecurity::targetSecurityContext);
 --------------------------------------------
 
 NOTE: +ConfigSecurity+ is an arbitrary class only for demonstration purposes.
@@ -262,7 +302,7 @@ Operator calls basically look similar:
 [source,java]
 .Applying a +ConfigurationOperator+ using a lambda expression:
 --------------------------------------------
-Configuration secured = ConfigurationProvider.getConfiguration()
+Configuration secured = Configuration.current()
                            .with((config) ->
                                  config.get("foo")!=null?;
                                  FooFilter.apply(config):
@@ -280,7 +320,7 @@ The class +ConfigException+ models the base *runtime* exception used by the conf
 == SPI
 
 [[PropertyValue]]
-=== PropertyValue, PropertyValueBuilder
+=== PropertyValue
 
 On the API properties are represented as Strings only, whereas in the SPI value are represented as +ProeprtyValue+,
 which contain
@@ -289,6 +329,7 @@ which contain
 * the property's _value_ (String)
 * the property's _source_ (String, typically equals to the property source's name)
 * any additional meta-data represented as _Map<String,String>_
+* named or unnamed child objects, arrays or text filters.s
 
 This helps to kepp all value relevant data together in one place and also allows to choose any kind of
 representation for meta-data entries. The +PropertyValue+ itself is a final and _serializable_ data container,
@@ -299,36 +340,33 @@ which also has a powerful builder API (e.g. for using within filters):
 public final class PropertyValue implements Serializable{
     [...]
 
-    public static PropertyValue of(String key, String value, String source);
+    public static ObjectValue createObject(){
+    public static ListValue createList(){
+    public static PropertyValue createValue(String key, String value){
+    public static ListValue createList(String key){
+    public static ObjectValue createObject(String key)
+
+    public final boolean isImmutable();
+    public PropertyValue immutable();
+    public PropertyValue mutable();
+    public final ValueType getValueType();
 
     public String getKey();
+    public String getQualifiedKey();
     public String getSource();
     public String getValue();
+    public PropertyValue setValue(String value);
     public Map<String, String> getMetaEntries();
     public String getMetaEntry(String key);
     public PropertyValueBuilder toBuilder();
 
-    public static PropertyValueBuilder builder(String key, String source);
-    public static PropertyValueBuilder builder(String key, String value, String source);
-
-    /**
-     * Maps a map of {@code Map<String,String>} to a {@code Map<String,PropertyValue>}.
-     * @param config the String based map, not null.
-     * @param source the source name, not null.
-     * @return the corresponding value based map.
-     */
+    public final PropertyValue getParent();
+    public final int getVersion();
+    public final boolean isRoot();
+    public final boolean isLeaf();
     public static Map<String,PropertyValue> map(Map<String, String> config, String source);
-
-    /**
-     * Maps a map of {@code Map<String,String>} to a {@code Map<String,PropertyValue>}.
-     * @param config the String based map, not null.
-     * @param source the source name, not null.
-     * @param metaData additional metadata, not null.
-     * @return the corresponding value based map.
-     */
     public static Map<String,PropertyValue> map(Map<String, String> config, String source,
                                                 Map<String,String> metaData);
-}
 ----------------------------------------------------------------
 
 When writing your own datasource you can easily create your own +PropertyValues+:
@@ -455,7 +493,7 @@ A +PropertyFilter+ is defined as follows:
 
 [source,java]
 --------------------------------------------
-// Functional Interface
+@FunctionalInterface
 public interface PropertyFilter{
     PropertyValue filterProperty(PropertyValue value, FilterContext context);
 }
@@ -472,113 +510,71 @@ Hereby:
 This method is called each time a single entry is accessed, and for each property in a full properties result.
 
 
-[[PropertyValueCombinationPolicy]]
-==== Interface PropertyValueCombinationPolicy
-
-This interface is purely optional and can be used to adapt the way how property key/value pairs are combined to
-build up the final configuration _raw_ value to be passed over to the +PropertyFilters+. The default implementation
-is just overriding all values read before with the new value read. Nevertheless for collections and other use cases
-more intelligent logic is required.
-
-[source,java]
---------------------------------------------
-// FunctionalInterface
-public interface PropertyValueCombinationPolicy{
-
-   PropertyValueCombinationPolicy DEFAULT_OVERRIDING_COLLECTOR =
-     new PropertyValueCombinationPolicy(){
-       @Override
-       public PropertyValue collect(PropertyValue currentValue, String key,
-                                         PropertySource propertySource) {
-           PropertyValue value = propertySource.get(key);
-           return value!=null?value:currentValue;
-       }
-   };
-
-   PropertyValue collect(PropertyValue currentValue, String key,
-                  PropertySource propertySource);
-
-}
---------------------------------------------
-
-Looking at the +collect+ method's signature, returning a +PropertyValue+ allows also to filter/combine/use meta entries.
-
-
 [[ConfigurationContext]]
 ==== The Configuration Context
 
-A +Configuration+ is created from a +ConfigurationContext+. Each +Configuration+ instance provides it's underlying
-context by +Configuration.getContext()+:
+A +Configuration+ is created based on a +ConfigurationContext+, which ia accessible calling
++configuration.getContext()+:
 
 [source,java]
-.Accessing the current +ConfigurationContext+
+.Accessing the +ConfigurationContext+ of a configuration
 --------------------------------------------
 Configuration config = ...;
 ConfigurationContext context = config.getContext();
 --------------------------------------------
 
-The +ConfigurationContext+ provides access to the internal artifacts that determine the +Configuration+ and
-also defines the ordering of the property sources, filters and converters contained:
+The +ConfigurationContext+ provides access to the internal artifacts that determine the +Configuration+.
+Similarly the context also defines the ordering and significance of property sources, filters and
+converters:
 
 * +PropertySources+ registered (including the PropertySources provided from +PropertySourceProvider+ instances).
 * +PropertyFilters+ registered, which filter values before they are returned to the client
 * +PropertyConverter+ instances that provide conversion functionality for converting String values to any other types.
-* the current +PropertyValueCombinationPolicy+ that determines how property values from different PropertySources are
-  combined to the final property value returned to the client.
 
 
 [[Mutability]]
-==== Changing the current Configuration Context
-
-A +ConfigurationContext+ is not mutable once it is created. In many cases mutability is also not needed. Nevertheless
-there are use cases where the current +ConfigurationContext+ (and
-consequently +Configuration+) must be adapted:
+==== Changing a Configuration
 
-* New configuration files where detected in a folder observed by Tamaya.
-* Remote configuration, e.g. stored in a database or alternate ways has been updated and the current system must
-  be adapted to these changes.
-* The overall configuration context is manually setup by the application logic.
-* Within unit testing alternate configuration setup should be setup to meet the configuration requirements of the
-  tests executed.
+A +Configuration+ is basically not mutable. Nevertheless when the containing property sources provide different
+values, e.g. because a  configuration file has been updated, also the configuration values may change
+(dependiing on the significance of the changed property source).
 
-In such cases the +ConfigurationContext+ may change, meaning it must be possible:
+Nevertheless it is also possible to create a new +ConfigurationBuilder+ based on an existing configuration
+and add/remove property sources, filters or converters as needed.
 
-* to add or remove +PropertySource+ instances
-* to add or remove +PropertyFilter+ instances
-* to add or remove +PropertyConverter+ instances
-* to redefine the current +PropertyValueCombinationPolicy+ instances.
+A new configuration builder can be easily accessed from an existing configuration as follows:
 
-This is nothing new, a +ConfigurationContextBuilder+ already allows us to achive this. So we must only ensure that
-we can easily create a new +ConfigurationContextBuilder+ using a given +ConfigurationContext+ as input. This can be
-done by
+[source,java]
+.Accessing a +ConfigurationContextBuilder+
+--------------------------------------------
+Configuration config = ...;
+ConfigurationBuilder preinitializedConfigBuilder = config.toBuilder();
+--------------------------------------------
 
-* calling +ConfigurationContext.toBuilder()+, hereby returning a builder instance preinitialized with the values from the
-  current +ConfigurationContext+.
-* calling +ConfigurationProvider.getConfigurationContextBuilder()+ and then applying the current +ConfigurationContext+
-  by calling +setContext(ConfigurationContext)+ on the +ConfigurationContextBuilder+ instance.
+It is also possible to builkd up a configuration completely from scratch, having full control on the
+resources included:
 
 [source,java]
 .Accessing a +ConfigurationContextBuilder+
 --------------------------------------------
-ConfigurationContextBuilder preinitializedContextBuilder = ConfigurationProvider.getConfiguration().getContext().toBuilder();
-ConfigurationContextBuilder emptyContextBuilder = ConfigurationProvider.getConfigurationContextBuilder();
+ConfigurationBuilder emptyConfigBuilder = Configuration.createConfigurationBuilder();
 --------------------------------------------
 
-Finally when we are finished a new +ConfigurationContext+ can be created:
+Using the builder we then can change the configuration as needed:
 
 [source,java]
-.Creating and applying a new +ConfigurationContext+
 --------------------------------------------
-ConfigurationContext context = ConfigurationProvider.getConfiguration().getContext()
-                                    .toBuilder();
-                                    .addPropertySources(new MyPropertySource())
-                                    .addPropertyFilter(new MyFilter())
-                                    .build();
+ConfigurationBuilder builder = Configuration.crteateConfigurationBuilder();
+builder.addPropertySources(new MyPropertySource())
+       .addPropertyFilter(new MyFilter())
+       .setMeta("a.b.c.collectionType", "List")
+       .build();
 --------------------------------------------
 
-But let's also have a deeper look at what functionality a +ConfigurationContextBuilder+ provides. Basically such a
+
+Let's have a short look at the +ConfigurationBuilder+. Basically such a
 builder allows to add, remove or reorder property sources, converters and filters or changing any other aspect
-of a +ConfigurationContext+:
+of a +Configuration+. Finally a new +Configuration+ instance can be built.
 
 [source,java]
 .Chain manipulation using +ConfigurationContextBuilder+
@@ -593,41 +589,37 @@ builder.decreasePriority(propertySource);
 builder.sortPropertyFilters(MyFilterComparator::compare);
 --------------------------------------------
 
-Finally if the new +ConfigurationContext+ is ready a new +Configuration+ can be created.
-Optionally the new +Configuration+ can also be installed as the new _default_ +Configuration+
-instace as illustrated below:
+Finally if a new +Configuration+ can be built. Optionally the new +Configuration+ can also be installed as
+the _default_ +Configuration+ instance as illustrated below:
 
 [source,java]
-.Creating and applying a new +ConfigurationContext+
+.Creating and applying a new +Configuration+
 --------------------------------------------
-ConfigurationContext context = builder.build();
-
 // Creates a new matching Configuration instance
-Configuration newConfig = ConfigurationProvider.createConfiguration(context);
+Configuration config = builder.build();
 
 // Apply the new context to replace the current configuration:
-ConfigurationProvider.setConfiguration(newConfig);
+Configuration.setCurrent(newConfig);
 --------------------------------------------
 
-Hereby +ConfigurationProvider.setConfiguration(Configuration)+ can throw an +UnsupportedOperationException+.
-This can be checked by calling the method +boolean ConfigurationProvider.isConfigurationSettable()+.
+Hereby +Configuration.setCurrent(Configuration)+ can throw an +UnsupportedOperationException+.
+This can be checked by calling the method +boolean Configuration.isConfigurationSettable()+.
 
+== SPI
 
 [[ConfigurationProviderSpi]]
-==== Implementing and Managing Configuration
+=== Implementing and Managing Configuration
 
 One of the most important SPI in Tamaya is the +ConfigurationProviderSpi+ interface, which is backing up the
-+ConfigurationProvider+ singleton. Implementing this class allows
-
-* to fully determine the implementation class for +Configuration+
-* to manage the current +Configuration+ in the scope and granularity required.
-* to provide access to the right +Configuration+ based on the current runtime context.
-* Performing changes as set with the current +ConfigurationContextBuilder+.
++Configuration+ static accessor methods. Implementing this interface allows
 
-= Interface ConfigurationContextBuilder
+* to fully determine the implementation class for +Configuration, ConfigurationBuilder, ConfigurationContext+
+* to manage +Configurations+ in the scope and granularity required.
+* to provide access to the right +Configuration+ based on the current runtime context (e.g. classloader).
 
 [[BuilderCore]]
-== Interface ConfigurationContextBuilder
+== Interface ConfigurationBuilder
+
 === Overview
 
 The Tamaya builder module provides a generic (one time) builder for creating +Configuration+ instances,
@@ -635,12 +627,12 @@ e.g. as follows:
 
 [source,java]
 ---------------------------------------------------------------
-ConfigurationBuilder builder = new ConfigurationBuilder();
+ConfigurationBuilder builder = Configuration.createConfigurationBuilder();
 // do something
 Configuration config = builder.build();
 ---------------------------------------------------------------
 
-Basically the builder allows to create configuration instances completely independent of the current configuration
+Basically a builder allows to create configuration instances completely independent of the current configuration
 setup. This gives you full control how and when +Configuration+ is created.
 
 
@@ -650,12 +642,12 @@ The builder allows you to add +PropertySource+ instances:
 
 [source,java]
 ----------------------------------------------------------------
-ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+ConfigurationBuilder builder = Configuration.createConfigurationBuilder();
 builder.addPropertySources(sourceOne, sourceTwo, sourceThree
-Configuration config = ConfigurationProvider.createConfiguration(builder.build());
+Configuration config = builder.build();
 ----------------------------------------------------------------
 
-Hereby the ordering of the propertysources is not changed, regardless of the ordinals provided
+Hereby the ordering of the property sources is not changed, regardless of the ordinals provided
 by the property sources. This allows alternate ordering policies easily being implemented because
 creating a configuration based on a configuration context is already implemented and provided by the core
 API.
@@ -674,10 +666,11 @@ builder.addPropertyFilters(new MyConfigFilter());
 builder.addPropertySourceProvider(new MyPropertySourceProvider());
 ----------------------------------------------------------------
 
+...and of course converters and other artifacts.
 
 
 [[ServiceContext]]
-==== The ServiceContext
+== The ServiceContext
 
 The +ServiceContext+ allows to define how components are loaded in Tamaya. It is the glue layer, which interacts
 with the underlying runtime system such as Java SE, Java EE, OSGI, VertX etc.
@@ -687,32 +680,54 @@ The +ServiceContext+ hereby defines access methods to obtain components, whereas
 [source,java]
 .Accessing the +ServiceContext+
 --------------------------------------------
+// using an explicit classloader (recommended)
+ClassLoader classloader = ...;
+ServiceContext serviceContext = ServiceContextManager.getServiceContext(classloader);
+
+// using the default classloader
 ServiceContext serviceContext = ServiceContextManager.getServiceContext();
 
 public interface ServiceContext{
     int ordinal();
     <T> T getService(Class<T> serviceType);
+    <T> T getService(Class<T> serviceType, Supplier<T> serviceSupplier);
+    <T> T createService(Class<T> serviceType);
+    <T> T createService(Class<T> serviceType, Supplier<T> serviceSupplier);
     <T> List<T> getServices(Class<T> serviceType);
+    <T> List<T> getServices(Class<T> serviceType, Supplier<List<T>> serviceSupplier);
+    <T> T register(Class<T> type, T instance, boolean force);
+    <T> List<T> register(Class<T> type, List<T> instances, boolean force);
+
+    Enumeration<URL> getResources(String resource) throws IOException;
+    URL getResource(String resource);
+
 }
 --------------------------------------------
 
 With the +ServiceContext+ a component can be accessed in two different ways:
 
-. access as as a single property. Hereby the registered instances (if multiple) are sorted by priority and then finally
-  the most significant instance is returned only.
-. access all items given a type. This will return (by default) all  instances loadedable from the current
-  runtime context, ordered by priority (the most significant components added first).
+. access as as a single service. Hereby the detected services (if multiple) are sorted by priority and then finally
+  the most significant instance (the one with the highest priority value) is selected and cached.
+. access all items given a type. This will return (by default) all service instances loadedable from the current
+  runtime context (classloader), ordered by priority (the most significant components added first).
+. service lookup can be further customized by passing suppliers. The supplier is called if no default services
+  could be auto-detected. The supplied instance(s) are registered and cached for subsequent accesses.
+. the _register_ methods allow to explcitly register (and optionally override) a service or services
+  registered.
+. Finally the methods `getResource(s)` allow to load resources from the classpath. This is especially useful
+  when running in an OSGI context, where loading of resources from the classloaders will fail.
 
 
 ## Examples
 ### Accessing Configuration
 
-_Configuration_ is obtained from the ConfigurationProvider singleton:
+_Configuration_ is obtained from the `Configuration` interface using static accessors:
 
 [source,java]
 .Accessing +Configuration+
 --------------------------------------------
-Configuration config = ConfigurationProvider.getConfiguration();
+Configuration config = Configuration.current();
+Configuration config = Configuration.current(Thread.currentThread().getContextClassLoader());
 --------------------------------------------
 
 Many users in a SE context will probably only work with _Configuration_, since it offers all functionality
@@ -721,9 +736,10 @@ very similar to *Map<String,String>*, whereas in Java 8 additionally usage of _O
 
 [source,java]
 --------------------------------------------
-Configuration config = ConfigurationProvider.getConfiguration();
-String myKey = config.get("myKey");                         // may return null
-int myLimit = config.get("all.size.limit", int.class);
+Configuration config = Configuration.current();
+String myValue = config.get("myKey");                  // access as (raw) String value.
+int myLimit = config.get("all.size.limit", int.class); // access a value using type conversion.
+List<URL> urls = config.get("all.urls", new TypeLiteral<List<URL>>(); // access a value using advanced type conversion.
 --------------------------------------------
 
 
@@ -737,7 +753,7 @@ _PROMPT_ environment variable as follows:
 String prompt = ConfigurationProvider.getConfiguration().get("PROMPT");
 --------------------------------------------
 
-Similary the system properties are directly applied to the _Configuration_. So if we pass the following system
+Similary the system properties are directly applied to the _Configuration_. Let's assume, we pass the following system
 property to our JVM:
 
 [source,java]
@@ -745,18 +761,18 @@ property to our JVM:
 java ... -Duse.my.system.answer=yes
 --------------------------------------------
 
-we can access it as follows:
+We can then access the value from the configuration:
 
 [source,java]
 --------------------------------------------
-boolean useMySystem = ConfigurationProvider.getConfiguration().get("use.my.system.answer", boolean.class);
+boolean useMySystem = Configuration.current().get("use.my.system.answer", boolean.class);
 --------------------------------------------
 
 
-### Adding a Custom Configuration
+### Adding additional configuration entries
 
-Adding a classpath based configuration is simply as well: just implement an according _PropertySource_. With the
-_tamaya-spi-support_ module you just have to perform a few steps:
+Adding additional configuration entries is simple: just implement an according `PropertySource` and register
+it with the Java `ServiceLoader`. Using the _tamaya-spi-support_ extension library you just have to perform a few steps:
 
 . Define a PropertySource as follows:
 
@@ -788,5 +804,13 @@ com.mypackage.MyPropertySource
 [[APIImpl]]
 == API Implementation
 
-The API is implemented by the +tamaya-core+ module. Refer to the link:core.html[Core documentation] for
+The Tamaya configuration API is implemented by the +tamaya-core+ module. Refer to the link:core.html[Core documentation] for
 further details.
+
+Furhtermore Tamaya also implements or supports
+
+* the API as defined by JSR 310 (Config JSR)
+* the Microprofile API
+* the Spring Configuration Mechanism
+* integration with the OSGI `ConfigAdmin` API.
+* the Apache Camel Configuration SPI

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/core.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/core.adoc b/content/documentation/core.adoc
index f3cac3e..a63e199 100644
--- a/content/documentation/core.adoc
+++ b/content/documentation/core.adoc
@@ -2,31 +2,27 @@
 :jbake-status: published
 
 [[Core]]
-== Tamaya Core Implementation
+== Apache Tamaya: Core Implementation
 === Overview
 
-Tamaya Core provides an implementation of the link:api.html[Tamaya Configuration API] and adds additional functionality
+`tamaya-core` provides an implementation of the link:api.html[Tamaya Configuration API] and adds additional functionality
 and building blocks for supporting SPI implementations.
 
 Tamaya Core contains the following artifacts:
 
-* *tamaya-spisupport* provides implementations and base classes for different API artifacts such as +Configuration,
-  ConfigurationContext, ConfigurationContextBuilder, ConfigurationProviderSpi, BasePropertySource+ and more. It is
-  built as an independent core module, which also can be used with other implementations. The *tamaya-core*
-  implementation leverages these base classes to build up a full API implementation.
-* A +java.util.ServiceLoader+ based +ServiceContext+ implementation. This allows component priorization based
-  on the +@Priority+ annotations.
-* A +PropertyConverterManager+ that loads and stores references to all the preconfigured +PropertyConverter+ instances,
-  thus providing type conversion for all important types.
-* A simple default configuration setup using the current classpath and an optional staging variable.
-* It collects all +PropertySource+ and +PropertySourceProvider+ instances registered with the +ServiceLoader+ and
-  registers them in the global +ConfigurationContext+
-* It provides a +ConfigurationContextBuilder+ implementation (+DefaultConfigurationContextBuilder+) and allows to
-  change the current +ConfigurationContext+.
-
-The overall size of the library is very small. All required components are implemented and registered, so basically the
-Core module is a complete configuration solution. Nevertheless it is also very minimalistic, but fortunately is flexible
-enough to be extended/accommodated with additional features as needed, such as
+* A service loader implementation, configurations and further logic required to run
+  in an OSGI environment.
+* Numerous *converters*, including an +EnumConverter+, that is a converter implementation that can automatically select
+  the currect enumeration values based on a configured entry.
+* A configurable `BannerManager`to print Tamaya's start logo on load.
+
+Basically `tamaya-core` leverages the base implementations contained in Tamaya's SPI support module, so it is quite
+small in size. All required components are implemented and registered, so basically the
+Core module with its trasitive dependencies (API and spi-support) is a complete configuration solution. Nevertheless
+it is also very minimalistic, but fortunately it can be easily extended/accommodated with additional features as needed.
+
+These extensions are managed in the extensions repository of the Tamaya project. Some of the most commonly used
+extensions are
 
 * placeholder and resolution mechanisms (+org.apache.tamaya.ext:tamaya-resolver+)
 * dynamic resource path lookup, e.g. with ant styled patterns (+org.apache.tamaya.ext:tamaya-resources+)
@@ -35,18 +31,15 @@ enough to be extended/accommodated with additional features as needed, such as
 * integration with other existing solutions (e.g. +org.apache.tamaya.ext:tamaya-spring+)
 * configuration and configuration isolation targeting Java EE (+org.apache.tamaya.ext:tamaya-injection-ee+)
 * dynamic configuration and configuration updates (+org.apache.tamaya.ext:tamaya-events+)
-* remote configuration (+org.apache.tamaya.ext:tamaya-etcd, org.apache.tamaya.ext:tamaya-consul,
-  org.apache.tamaya.ext:tamaya-hazelcast+)
-* and more
 
-For details about the extension modules available and  their functionality refer to the link:extensions.html[extension user guide].
+For details about the extension modules available and  their functionality refer to the link:extensions.html[extension
+user guide].
 
 
 [[CorePropertyConverters]]
 === Default PropertyConverters
 
-The _SPI_ base module provides several +PropertyConverter+ implementations, which are automatically registered by the
-_Core_ module. Find below the listing of converters automatically registered with the Core module:
+The `tamaya-core` module provides several +PropertyConverter+ implementations, which are automatically registered:
 
 [width="100%",frame="1",options="header",grid="all"]
 |=======
@@ -59,29 +52,36 @@ _Core_ module. Find below the listing of converters automatically registered wit
 |java.ui.lang.Class         |ClassConverter            |<fully qualified class name>
 |java.util.Currency         |CurrencyConverter         |CHF, 123
 |java.ui.lang.Double        |DoubleConverter           |1, 0xFF, 1.2334, NaN, NEGATIVE_INFITIY, POSITIVE_INFINITY, MIN_VALUE, MAX_VALUE
-|_Enums_                    |EnumConverter             |<Enum item name>
+|java.time.Duration         |DurationConverter         |<Duration as defined by Duration.parse(String)>
+|java.io.File               |FileConverter             |value -> new File(value)
 |java.ui.lang.Float         |FloatConverter            |1, 0xFF, 1.2334, NaN, NEGATIVE_INFITIY, POSITIVE_INFINITY, MIN_VALUE, MAX_VALUE
+|java.time.Instant          |InstantConverter          |<Instant as defined by Instant.parse(String)>
 |java.ui.lang.Integer       |IntegerConverter          |1, 0xD3, MIN_VALUE, MAX_VALUE
-|LocalDate                  |LocalDateConverter        |<Date as defined by LocalDate.parse(String)
-|LocalTime                  |LocalTimeConverter        |<Time as defined by LocalTime.parse(String)
-|LocalDateTime              |LocalDateTimeConverter    |<LocalDateTime as defined by LocalDateTime.parse(String)>
+|java.time.LocalDate        |LocalDateConverter        |<Date as defined by LocalDate.parse(String)
+|java.time.LocalDateTime    |LocalDateTimeConverter    |<LocalDateTime as defined by LocalDateTime.parse(String)>
+|java.time.LocalTime        |LocalTimeConverter        |<Time as defined by LocalTime.parse(String)
 |java.ui.lang.Long          |LongConverter             |1, 0xD3, MIN_VALUE, MAX_VALUE
 |java.ui.lang.Number        |NumberConverter           |1, 0xFF, 1.2334, NaN, NEGATIVE_INFITIY, POSITIVE_INFINITY
+|java.time.OffsetDateTime   |OffsetDateTimeConverter   |<OffsetDateTime as defined by OffsetDateTime.parse(String)>
+|java.time.OffsetTime       |OffsetTimeConverter       |<OffsetTime as defined by OffsetTime.parse(String)>
+|java.util.Optional         |OptionalConverter         |
+|java.nio.Path              |PathConverter             |
 |java.ui.lang.Short         |ShortConverter            |1, 0xD3, MIN_VALUE, MAX_VALUE
+|java.util.Supplier         |SupplierConverter         |
 |java.net.URI               |URIConverter              |http://localhost:2020/testresource?api=true
 |java.net.URL               |URLConverter              |http://localhost:2020/testresource?api=true
-|ZoneId                     |ZoneIdConverter           |Europe/Zurich
+|_Enums_                    |EnumConverter             |<Enum item name>
 |=======
 
 
 === Registering PropertyConverters
 
-Additional +PropertyConverters+ can be implemented easily. It is recommended to register them using
+Additional +PropertyConverter+ classes can be implemented easily. It is recommended to register them using
 the +java.util.ServiceLoader+, meaning you add a file under +META-INF/service/org.apache.tamaya.spi.PropertyConverter+
 containing the fully qualified class names of the converters to be registered (one line each) to enable
 auto-discovery.
 
-Alternatively you can also use a +ConfigurationContextBuilder+ to add additional converters
+Alternatively you can also use a +ConfigurationBuilder+ to add additional converters
 programmatically.
 
 
@@ -114,7 +114,7 @@ NOTE: Sorting the property sources based on their ordinal value is only the defa
 
 +PropertySource+ implementations that provide configuration properties are registered as components as described in the
 previous section. Hereby the precedence (ordering) of property sources is not hard-coded. Instead a +Comparator<PropertySource>+
-can be passed to a +ConfigurationContextBuilder+ to perform automatic ordering of the property sources
+can be passed to a +ConfigurationBuilder+ to perform automatic ordering of the property sources
 registered. The default implementation hereby implements the following logic:
 
 . It checks for an property entry +tamaya.ordinal+ if present the value is parsed into an +int+ value and used as

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions.adoc b/content/documentation/extensions.adoc
index 76fc692..098652c 100644
--- a/content/documentation/extensions.adoc
+++ b/content/documentation/extensions.adoc
@@ -12,7 +12,6 @@ Mature extensions have a stable API and SPI, similar to the API and Implementati
 [width="100%",frame="1",options="header",grid="all"]
 |=======
 |_Artifact_                                   |_Description_                                |_Links_
-|                                             | N/A: currently no extensions have reached that maturity level.  | -
 |+org.apache.tamaya.ext:tamaya-collections+   |Collections support.                                   |link:extensions/mod_collections.html[Documentation]
 |+org.apache.tamaya.ext:tamaya-events+        |Provides support for publishing configuration changes  |link:extensions/mod_events.html[Documentation]
 |+org.apache.tamaya.ext:tamaya-filter+        |Provides a programmatic filter for config entries.     |link:extensions/mod_filter.html[Documentation]
@@ -34,8 +33,6 @@ Mature extensions have a stable API and SPI, similar to the API and Implementati
 |+org.apache.tamaya.ext:tamaya-yaml+          |Support for using yaml as a configuration format.      |link:extensions/mod_yaml.html[Documentation]
 |=======
 
-NOTE: The former Tamaya _Builder_ extension module has been removed. The corresponding methods were integrated into
-Tamaya's main API's +ConfigurationContextBuilder+ interface.
 
 === Extensions Sandbox
 
@@ -43,7 +40,6 @@ Extensions in _draft state_ rather experimental or not yet very mature. API chan
 and the may also have severe issues or even not work at all. So use at your own risk or join and help
 us getting them stable and well tested!
 
-NOTE: All extensions currently require Java 8.
 
 [width="100%",frame="1",options="header",grid="all"]
 |=======

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions/mod_classloader_support.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions/mod_classloader_support.adoc b/content/documentation/extensions/mod_classloader_support.adoc
index 50a3e61..6037153 100644
--- a/content/documentation/extensions/mod_classloader_support.adoc
+++ b/content/documentation/extensions/mod_classloader_support.adoc
@@ -10,6 +10,10 @@ toc::[]
 
 Tamaya _Classloader_ is an extension module. Refer to the link:../extensions.html[extensions documentation] for further details.
 
+CAUTION: Classloader support has been added into the main API and implementation module. This module probably is not
+         useful anymore and will probably be removed in the future.
+
+
 === What functionality this module provides ?
 
 The Tamaya _Classloader_ support provides an alternative implementation of +java.util.ServiceLoader+, which is aware

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions/mod_collections.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions/mod_collections.adoc b/content/documentation/extensions/mod_collections.adoc
index 8078d46..8716688 100644
--- a/content/documentation/extensions/mod_collections.adoc
+++ b/content/documentation/extensions/mod_collections.adoc
@@ -20,7 +20,7 @@ Collections extension adds this functionality to the Tamaya eco-system.
 
 === Compatibility
 
-The module is based on Java 8, so it will not run on Java 7 and beyond.
+The module requires Java 8.
 
 
 === Installation
@@ -64,19 +64,21 @@ my.list.config.entry=1,34454,23,344545,3445
 Additionally the module allows adding additional meta-entries, which allows to tweak some of the
 inner-workings, e.g.
 
-* using your own +PropertyConverter+ implementation for parsing entries.
-* specifying a custom separator to split the items (default is {{','}}.
-* specifying a custom separator to split key/value pairs when parsing map entries.
-* specifying the implementation type of the collection item to be returned.
-* specifying the implementation type of the collection to be returned.
+* `item-converter`: using a custom +PropertyConverter+ implementation for parsing collection entries.
+* `entry-separator`: specifying a custom separator to split the list and map items (default is {{','}}.
+* `map-entry-separator`: specifying a custom separator to split key/value pairs when parsing map entries.
+* `collection-type`: specifying the implementation type of the collection to be returned.
+* `mapping-type`: specifying the implementation type of the collection item to be returned.
 
 === Supported Types
 
 This module currently supports the following types:
 
+* +java.util.Iterable+
 * +java.util.Collection+
 * +java.util.List+
 * +java.util.ArrayList+
+* +java.util.ArrayList+
 * +java.util.LinkedList+
 * +java.util.Set+
 * +java.util.SortedSet+
@@ -87,17 +89,32 @@ This module currently supports the following types:
 * +java.util.HashMap+
 * +java.util.TreeMap+
 
-Hereby the collection type is determined by the parameter type accessed, e.g.
+
+==== Default Collection Type Mapping
+
+The collection type is determined by the parameter type accessed, e.g.
 +config.get("mylist", ArrayList.class)+ will always return an +ArrayList+
 as result.
+* if you have a generic type:
+  ** an `ArrayList` is returned for `Collection, List, ArrayList, Iterable`
+  ** a `HashSet` is returned for `Set, HashSet`
+  ** a `HashMap` is returned for `Map, HashMap`
+  ** a `TreeMap` is returned for `SortedMap, TreeMap`
+  ** a `TreeSet` is returned for `SortedSet, TreeSet`
+* in all other cases you have to explicitly define the collection type. Hereby you may
+  omit the `java.util` package. Collection types not contained in `java.util`
+  require adding an additional converter implementation.
 
 NOTE: This means that depending on your use case you can access different
 collection types based on the same configuration values, as long as their is
 a +PropertyConverter+ that can convert the _raw configuration value_ to the
 required target type.
 
+CAUTION: If you do *NOT* use `TypeLiteral` to define your target type, the item target type will not
+         be available to Tamaya due to Java's type erasure. In this case it will always return `String`
+         as item type.
 
-==== Configuring the target implementation type
+==== Configuring Collection Type Mapping
 
 Tamaya Collections allows you to configure the _default_ target collection type by adding the
 following meta-configuration entry (shown for the +mylist+ entry). Hereby the package part +java.util.+
@@ -106,7 +123,7 @@ can be ommitted:
 [ source, properties]
 -----------------------------------------------
 mylist=a,b,c
-_mylist.collection-type=LinkedList
+[META]mylist.collection-type=LinkedList
 -----------------------------------------------
 
 When calling +config.get("mylist", ArrayList.class)+ this parameter does not have any effect, so you will still
@@ -117,17 +134,32 @@ This mechanism similarly applies to all kind of collections, so you can use it s
 type returned when accessing +List+, +Map+ or +Collection+.
 
 
-=== Collecting Configuration Entries instead of Overriding
+=== Evaluating Collection Entries
+
+Tamaya's internal representation of configuration is a modelled by a `PropertyValue`. This class actually supports
+different models how configuration data can be represented:
 
-By default Tamaya applies always an overriding +CombinationPolicy+, where only the configuration entry for
-the most significant configuration entry is used. In case of collections (and maybe also other use cases),
-overriding is not always the mechanism of choice. E.g. when you want to have all entries added to your
-configuration to be *combined* to a new entry containing all values provided by any property sources.
+. as simple literal key-value pair, or
+. as map-like value object, or
+. as list-like list object.
 
-Therefore _Tamaya Collections_ also provides a more sophistiated +CombinationPolicy+ (automatically configured)
-that allows to adapt the way how configuration entries are combined. All you must do is declaring
-the mechanism to be applied by an according _meta-configuration_ parameter, e.g. for +my.list+ your config may
-look as follows:
+Tamaya's `ConversionContext` actually provides all values matching a given target key. As a consequence there
+are four basic algorithms, how a collection can be mapped from entries given:
+
+* _value_all:_ The list values are identiified by parsing the node value(s) into items, hereby
+        the items of all values are combined.
+* _value:_ The list values are identiified by parsing the node value(s) into items.
+        Hereby only the items of the most significant config entry are considered.
+* _node:_ The list values are identiified by using the node's child value(s) as items.
+        Hereby only the items of the most significant config entry are considered.
+* _node_all:_ The list values are identiified by using the node's child value(s) as items. Hereby
+        the items of all values are combined.
+* _override:_ This policy will try to guess the best _value_ and _node_ evaluation policy for most significant
+        `PropertyValue`.
+* _combine:_ This policy will try to guess the best _value_ and _node_ evaluation policy for each
+        `PropertyValue` and combine the values to one collection. *This is the default behaviour.*
+
+As an example consider the following configuration for +my.list+:
 
 [source, properties]
 -----------------------------------------------
@@ -136,23 +168,56 @@ my.list=1,2,3
 
 # from PropertSource 2, with higher precedence
 my.list=4,5,6
+-----------------------------------------------
+
+Using the _value_ evaluation policy this would result in the following final property:
 
-# without any additional meta-info these entries would be combined to
+[source, properties]
+-----------------------------------------------
 my.list=4,5,6
 -----------------------------------------------
 
-With Tamaya Collections you can now configure the combination policy as follows:
+Using the _value_all_ evaluation policy this would result in the following final property:
 
 [source, properties]
 -----------------------------------------------
-# use one of the default policies: override / collect
-_my.list.combination-policy=collect
+my.list=1,2,3,4,5,6
+-----------------------------------------------
 
-# or use your own custom CombinationPolicy to combine the values
-_my.list.combination-policy=com.mycomp.app.MyCombincationPolicy
+For the _node_based evaluation policies consider the following YAML input data:
+
+[source, yaml]
 -----------------------------------------------
+# from PropertSource 1
+my.list:
+  - 1
+  - 2
+  - 3
 
-So declaring the +collect+ policy the resulting raw output of the entry looks as follows:
+# from PropertSource 2, with higher precedence
+my.list:
+  - 4
+  - 5
+  - 6
+-----------------------------------------------
+
+In this case the entries are mapped to `ListValue` instances with multiple children. Similar mappings would apply
+using JSON or XML configuration formats. In this case it is more useful to collect the child nodes, instead the
+values (which basically are `null` on the parent node level). This is excatly what the _node_ and _node_all_
+evaluaion policies are doing.
+
+With Tamaya Collections you can now configure the evaluation policy using metadata, e.g. when using the default
+metadata format of Tamaya:
+
+[source, properties]
+-----------------------------------------------
+# use one of the policies: node, node_all, value, value_all, override or collect
+[META]my.list.collection-mapping=collect
+-----------------------------------------------
+
+So declaring the +collect+ policy the resulting raw output of the entry looks as illustrated below. Hereby it is even
+possible to mix different representations. E.g. it is possible to add additional values in a simple property files,
+whereas other values are configured in YAML or other formats:
 
 [source, properties]
 -----------------------------------------------
@@ -160,20 +225,19 @@ So declaring the +collect+ policy the resulting raw output of the entry looks as
 my.list=1,2,3,4,5,6
 -----------------------------------------------
 
-The customizable policy mechanism of Tamaya Collections also honors the +item-separator+ meta-configuration
-parameter explained later in this document.
 
 
-=== Format of Collection Configuration
+=== Item Value Splitting
 
-By default collections are modelled as simple String values, that are tokenized into individual parts using a
+When evaluating collections from literal values, these values have to be tokenized into individual parts using a
 defined +item-separator+ (by default +','+). So a given configuration entry of +1,2,3+ is mapped to +"1","2","3".
-If the target context type is something different than String the smae conversion logic is used as when mapping
-configuration parameters directly to non-String target types (implemented as +PropertyConverter+ classes, manahed
-within the current +ConfigurationContext+. The procedure is identical for all collection types, including +Map+ types,
-with the difference that each token in the list is parsed once more for separating it into a +key+ and a +value+.
-The default separator for map entries hereby is +"::"+. Map keys, as of now, are always of type +String+, whereas
-for values the same logic is applied as for non-map collection types.
+If the target context type is something different than String the same conversion logic is used as when mapping
+configuration parameters directly to non-String target types (implemented as +PropertyConverter+ classes).
+The procedure is identical for all collection types, including +Map+ types,
+with the difference that each token for a map is parsed additionally for separating it into a +key+ and a +value+ parts.
+The default separator for map entries hereby is +"="+. Map keys, as of now, are always of type +String+, whereas
+for values all convertible types are supported. All separator characters can be masked by prefixing them with a `\`
+character.
 
 [source, properties]
 -----------------------------------------------
@@ -181,11 +245,11 @@ for values the same logic is applied as for non-map collection types.
 list=1,2,3,4,5,6
 
 # a map, using the default format
-map=a::b, c::d
+map=a=b, c=d
 -----------------------------------------------
 
 
-==== Trimming of entries
+==== Trimming
 
 By default all tokens parsed are trimmed _before_ adding them to the final collection. In case of map entries this is
 also the case for key/value entries. So the following configuration results in the identical values for
@@ -194,15 +258,15 @@ also the case for key/value entries. So the following configuration results in t
 [source, properties]
 -----------------------------------------------
 # a list, using the default format
-list1=1,2,3,4,5,6
+list1=1, 2 ,3,4 , 5,6
 list2=1, 2, 3, 4, 5, 6
 
 # a map, using the default format
-map1=a::b, c::d
-map2=a :: b, c :: d
+map1=a =b, c= d
+map2=a=b, c = d
 -----------------------------------------------
 
-Nevertheless truncation can be controlled by the usage of brackets, e.g. the last list or map entry will have a single
+Nevertheless trimming/truncation can be controlled by the usage of brackets, e.g. the last list or map entry will have a single
 space character as value:
 
 [source, properties]
@@ -211,7 +275,7 @@ space character as value:
 list3=1, 2, 3, 4, 5, [ ]
 
 # a map, with a ' ' value for key '0'
-map3=1 :: a, 2 :: b, 0::[ ]
+map3=1 = a, 2 = b, 0=[ ]
 -----------------------------------------------
 
 Hereby +\[+ escapes the sequence.
@@ -219,18 +283,18 @@ Hereby +\[+ escapes the sequence.
 
 ==== Customizing the format
 
-The item and entry separators (by default +','+ and +"::"+) can be customized by setting corresponding meta-data
-entries as follows, resulting in the same values as in the prevoius listing:
+The item and entry separators (by default +','+ and +"="+) can be customized by setting corresponding meta-data
+entries, resulting in the same values as in the previous listing:
 
 [source, properties]
 -----------------------------------------------
 # a list, with a ' ' value at the end
 list3=1__2__3__ 4__ 5__[ ]
-_list3.item-separator=__
+[META]list3.item-separator=__
 
 # a map, with a ' ' value for key '0'
 map3=1->a, 2->b, 0->[ ]
-_map3.map-entry-separator=->
+[META]map3.map-entry-separator=->
 -----------------------------------------------
 
 Of course these settings also can be combined:
@@ -239,6 +303,23 @@ Of course these settings also can be combined:
 -----------------------------------------------
 # a reformatted map
 redefined-map=0==none | 1==single | 2==any
-_redefined-map.map-entry-separator===
-_redefined-map.item-separator=|
+[META]redefined-map.map-entry-separator===
+[META]redefined-map.item-separator=|
+-----------------------------------------------
+
+
+==== Using a custom Converter
+
+If configuring of item and map item separators as shown above is not sufficient, you still have an option: you can
+configure a custom converter to use for converting the given keys. This can be also configured by addinf a corresponding
+meta-configuration entry `item-converter`. As you would expect the converter must implement Tamaya's `PropertyConverter`
+interface:
+
+[source, properties]
 -----------------------------------------------
+# a map using a custom converter
+server.0=server1, localhost:8001
+server.1.name=server2, localhost:8000, master=true
+server.2=server3, localhost:8003
+[META]server.item-converter=com.mycompany.config.ServerConverter
+-----------------------------------------------
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions/mod_events.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions/mod_events.adoc b/content/documentation/extensions/mod_events.adoc
index ccba9d1..44b0a94 100644
--- a/content/documentation/extensions/mod_events.adoc
+++ b/content/documentation/extensions/mod_events.adoc
@@ -27,7 +27,7 @@ change events.
 
 === Compatibility
 
-The module is based on Java 7, so it can be used with Java 7 and beyond.
+The module is based on Java 8.
 
 === Installation
 
@@ -59,7 +59,7 @@ public interface ConfigEvent<T> {
     long getTimestamp();
 }
 
-// @FunctionalInterface
+@FunctionalInterface
 public interface ConfigEventListener {
 
     void onConfigEvent(ConfigEvent<?> event);
@@ -94,20 +94,23 @@ public final class ConfigEventManager {
 
     private ConfigEventManager() {}
 
-    public static void addListener(ConfigEventListener l);
-    public static <T extends ConfigEvent> void addListener(ConfigEventListener l, Class<T> eventType);
-    public static void removeListener(ConfigEventListener l);
-    public static <T extends ConfigEvent> void removeListener(ConfigEventListener l, Class<T> eventType);
-    public static <T extends ConfigEvent>
+    public static ConfigEventManager getInstance();
+    public static ConfigEventManager getInstance(ClassLoader classLoader);
+
+    public void addListener(ConfigEventListener l);
+    public <T extends ConfigEvent> void addListener(ConfigEventListener l, Class<T> eventType);
+    public void removeListener(ConfigEventListener l);
+    public <T extends ConfigEvent> void removeListener(ConfigEventListener l, Class<T> eventType);
+    public <T extends ConfigEvent>
         Collection<? extends ConfigEventListener> getListeners();
-    public static <T extends ConfigEvent>
+    public <T extends ConfigEvent>
         Collection<? extends ConfigEventListener> getListeners(Class<T> type);
 
-    public static <T> void fireEvent(ConfigEvent<?> event);
-    public static <T> void fireEventAsynch(ConfigEvent<?> event);
+    public <T> void fireEvent(ConfigEvent<?> event);
+    public <T> void fireEventAsynch(ConfigEvent<?> event);
 
-    public static void enableChangeMonitoring(boolean enable);
-    public static boolean isChangeMonitoring();
+    public void enableChangeMonitoring(boolean enable);
+    public boolean isChangeMonitoring();
     public long getChangeMonitoringPeriod();
     public void setChangeMonitoringPeriod(long millis);
 
@@ -263,7 +266,7 @@ In code freezing is a no-brainer:
 [source,java]
 .Freezing the current Configuration
 --------------------------------------------------
-Configuration config = ConfigurationProvider.getConfiguration();
+Configuration config = Configuration.current();
 Configuration frozenConfig = FrozenConfiguration.of(config);
 --------------------------------------------------
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions/mod_filter.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions/mod_filter.adoc b/content/documentation/extensions/mod_filter.adoc
index bce6947..a41d187 100644
--- a/content/documentation/extensions/mod_filter.adoc
+++ b/content/documentation/extensions/mod_filter.adoc
@@ -22,7 +22,7 @@ explicitily no filtering is applied and everything is visible.
 
 === Compatibility
 
-The module is based on Java 7, so it will not run on Java 7 and beyond.
+The module is based on Java 8.
 
 
 === Installation
@@ -43,9 +43,9 @@ To benefit from filter support you only must add the corresponding dependency to
 
 Tamaya Filter comes basically with 3 artifacts:
 
-* The +org.apache.tamaya.filter.ConfigurationFilter+ provides several static methods to register +PropertyFilter+
+* The +org.apache.tamaya.filter.ThreadBasedConfigurationFilter+ provides several static methods to register +PropertyFilter+
 instances on the current thread.
-* The +org.apache.tamaya.filter.DefaultMetdataFilter+ is a +PropertyFilter+ with hides all entries starting with
+* The +org.apache.tamaya.filter.ThreadFilterContext+ is a +PropertyFilter+ with hides all entries starting with
  an underscore ('_'), when a full property map is accessed.
 
 
@@ -95,22 +95,22 @@ is part of this module, So you can add a customized filter as follows:
 [source, java]
 -----------------------------------------------
 try {
-    ConfigurationFilter.getMapFilters().addFilter(new myFilter());
+    ThreadBasedConfigurationFilter.getMapFilters().addFilter(new myFilter());
 
     // do your code with filtering active
 }
 finally {
     // cleanup
-    ConfigurationFilter.clearFilters();
+    ThreadBasedConfigurationFilter.clearFilters();
 }
 -----------------------------------------------
 
-The +FilterContext+ is a simple structure just providing some handy accessors to the dynamic thread-local
+The +ThreadFilterContext+ is a simple structure just providing some handy accessors to the dynamic thread-local
 managed filters:
 
 [source, java]
 -----------------------------------------------
-public final class FilterContext implements PropertyFilter {
+public final class ThreadFilterContext implements PropertyFilter {
 
     public void addIncludes(PropertyFilter filter);
     public void addExcludes(int pos, PropertyFilter filter);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions/mod_formats.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions/mod_formats.adoc b/content/documentation/extensions/mod_formats.adoc
index aa7d559..db3202c 100644
--- a/content/documentation/extensions/mod_formats.adoc
+++ b/content/documentation/extensions/mod_formats.adoc
@@ -24,7 +24,7 @@ Tamaya _Formats_ provides an abstraction for configuration formats provding the
 
 === Compatibility
 
-The module is based on Java 7, so it can be used with Java 7 and beyond.
+The module is based on Java 8.
 
 === Installation
 
@@ -66,34 +66,20 @@ public final class ConfigurationData {
     public ConfigurationFormat getFormat();
     public String getResource();
 
-    public Set<String> getSectionNames();
-    public Map<String,String> getSection(String name);
-
-    public boolean hasDefaultProperties();
-    public Map<String,String> getDefaultProperties();
-    public Map<String,String> getCombinedProperties();
+    public List<PropertyValue> getData();
 
     public boolean isEmpty();
 }
 -------------------------------------------------------
 
-In detail the data read from a file is organized into _sections_ as follows:
-
 * with +getResource()+ and +getFormat()+ the underlying resource and the format that read this data can be accessed.
-* properties can be owned by
-  ** named sections
-  ** an (unnamed) default section
-* each section section contains a map of properties. Hereby the same key can be part of the default section and multiple
-  named sections, depending on the configuration format.
-* The method +getSectionNames()+ returns a set of all section names.
-* With +getSection(String name)+ a named section can be accessed.
-* With +getDefaultSection()+ the 'default' section can be accessed. This is a convenience method.
-* With +getCombinedProperties()+ a flattened entry map can be accessed built up (by default) out of
-  ** all entries from the default section, without any changes.
-  ** all entries from named sections, where the key for each entry is prefix with the section name and a '::' separator.
-* The configuration format used determines the mapping of configuration data read into this structure. The format
-  implementation can as well provide alternate implementations of how the data read should be mapped into the
-  combined properties map.
+* +getData()+ allows access to the data read. Hereby this data can be mapped in different ways:
+** as (multiple) simple key-value literal pairs, or
+** as field-mapped object type values, or as
+** list values
+** the children of list and object values can be of any of the three types described above. As a consequence a simple
+ `PropertyValue` can be a simple literal value, or a complex tree/list structure, similar to common configuration
+ formats.
 
 
 ==== ConfigurationFormat
@@ -111,6 +97,7 @@ public interface ConfigurationFormat {
 }
 -------------------------------------------------------
 
+
 === Creating a default PropertySource for a ConfigurationFormat
 
 The module defines a singleton +ConfigurationFormats+ which provides
@@ -121,32 +108,35 @@ using abstract +ConfigurationFormat+ implementations:
 -------------------------------------------------------
 public final class ConfigurationFormats {
 
-    public static List<ConfigurationFormat> getFormats();
-    public static List<ConfigurationFormat> getFormats(String... formatNames);
-    public static List<ConfigurationFormat> getFormats(final URL url);
+    public static ConfigurationFormats getInstance();
+    public static ConfigurationFormats getInstance(ClassLoader classLoader);
+
+    public List<ConfigurationFormat> getFormats();
+    public List<ConfigurationFormat> getFormats(String... formatNames);
+    public List<ConfigurationFormat> getFormats(final URL url);
 
-    public static ConfigurationData readConfigurationData(final URL url)
+    public ConfigurationData readConfigurationData(final URL url)
     throws IOException;
-    public static ConfigurationData readConfigurationData(URL url, ConfigurationFormat... formats)
+    public ConfigurationData readConfigurationData(URL url, ConfigurationFormat... formats)
     throws IOException;
-    public static ConfigurationData readConfigurationData(URL url, Collection<ConfigurationFormat> formats)
+    public ConfigurationData readConfigurationData(URL url, Collection<ConfigurationFormat> formats)
     throws IOException;
-    public static Collection<ConfigurationData> readConfigurationData(Collection<URL> urls, ConfigurationFormat... formats);
-    public static Collection<ConfigurationData> readConfigurationData(Collection<URL> urls, Collection<ConfigurationFormat> formats);
-    public static ConfigurationData readConfigurationData(String resource, InputStream inputStream,
+    public Collection<ConfigurationData> readConfigurationData(Collection<URL> urls, ConfigurationFormat... formats);
+    public Collection<ConfigurationData> readConfigurationData(Collection<URL> urls, Collection<ConfigurationFormat> formats);
+    public ConfigurationData readConfigurationData(String resource, InputStream inputStream,
                                                           ConfigurationFormat... formats)
     throws IOException;
-    public static ConfigurationData readConfigurationData(String resource, InputStream inputStream,
+    public ConfigurationData readConfigurationData(String resource, InputStream inputStream,
                                                           Collection<ConfigurationFormat> formats)
     throws IOException;
 
-    public static PropertySource createPropertySource(URL url, ConfigurationFormat... formats)
+    public PropertySource createPropertySource(URL url, ConfigurationFormat... formats)
     throws IOException;
-    public static PropertySource createPropertySource(URL url, Collection<ConfigurationFormat> formats)
+    public PropertySource createPropertySource(URL url, Collection<ConfigurationFormat> formats)
     throws IOException;
-    public static PropertySource createPropertySource(String resource, InputStream inputStream,
+    public PropertySource createPropertySource(String resource, InputStream inputStream,
                                                       ConfigurationFormat... formats);
-    public static PropertySource createPropertySource(String resource, InputStream inputStream,
+    public PropertySource createPropertySource(String resource, InputStream inputStream,
                                                        Collection<ConfigurationFormat> formats);
 }
 -------------------------------------------------------
@@ -166,10 +156,10 @@ So creating a +PropertySource+ from a resource is basically a one liner:
 [source,java]
 -------------------------------------------------------
 URL url = ...;
-PropertySource propertySource = ConfigurationFormats.createPropertySource(url);
+PropertySource propertySource = ConfigurationFormats.getInstance().createPropertySource(url);
 
 // constraining the formats to be used (assumption: json and yaml extensions are loaded)
-PropertySource propertySource = ConfigurationFormats.createPropertySource(
+PropertySource propertySource = ConfigurationFormats.getInstance().reatePropertySource(
                                     url,
                                     ConfigurationFormats.getFormats("json", "yaml"));
 -------------------------------------------------------
@@ -177,25 +167,19 @@ PropertySource propertySource = ConfigurationFormats.createPropertySource(
 
 === Customize how ConfigurationData maps to PropertySource
 
-For for the conversion of +ConfigurationData+ into a +PropertySource+ different approaches can be useful:
-
-. The +ConfigurationFormat+ that reads the data can provides all properties read either as sectioned properties
-  or/and as default properties. The most simple cases is, where all properties have been added as 'default'
-  properties. In this case the default properties can be used as the property sources properties without any change.
-. If the format did also add section based properties, the combined properties returned can be used, hereby
-  replacing the '::' separator with a '.' separator.
-. In all other cases a custom mapping is useful, which can be acomplished by using the +MappedConfigurationDataPropertySource+
-  and overriding the +Map<String,String> populateData(ConfigurationData data)+ method.
-
+For for the conversion of +ConfigurationData+ into a +PropertySource+ different approaches can be useful.
 In most cases the usage of a +MappedConfigurationDataPropertySource+, is a good choice to start. This class
-provides a convenient default mapping and also allows to customized the mapping easily:
+provides a convenient default mapping and also allows to customized the mapping easily: it simply iterates over all
+values recursively and adds them using their fully qualified name as single value properties.
+
+This behaviour can be easily adapted by overriding the +popoulateData+ method:
 
 [source,java]
 -------------------------------------------------------
 ConfigurationData data = ...;
 MappedConfigurationDataPropertySource ps =
   new MappedConfigurationDataPropertySource(data){
-    protected Map<String, String> populateData(ConfigurationData data) {
+    protected Map<String, PropertyValue> populateData(ConfigurationData data) {
       ...
     }
   };
@@ -204,9 +188,9 @@ MappedConfigurationDataPropertySource ps =
 Nevertheless, depending on the context, where a configuration source was read (classloader, time, source etc.) the
 resulting properties can have different semnatics, especially different priorities. Also section
 names may be mapped into different ordinals instead of using them as key prefixes (e.g. imagine configuration formats
-with a 'default', 'main', and 'overrides' sections). For such more complex or custom cases no simple mapping
+with a 'default', 'main', and 'overrides' sections). For such use cases no simple mapping
 can be defined. Consequently the functionality mapping the normalized +ConfigurationData+ read to the
-appropriate collection of +PropertySource+ instances must be implemented.
+appropriate collection of +PropertySource+ instances must be implemented by the client code.
 
 For this scenario the +BaseFormatPropertySourceProvider+ can be used, defining the following mapping
 function that mus be implemented:
@@ -262,9 +246,9 @@ This file content by default is mapped to the following Tamaya properties:
 -------------------------------------------------------
 a=valA
 a.b=valB
-section1::valA=sectionValA
-section1::a.b.c=SectionValC
-section2::a=val2Section2
+section1.valA=sectionValA
+section1.a.b.c=SectionValC
+section2.a=val2Section2
 -------------------------------------------------------
 
 Summarizing
@@ -272,7 +256,7 @@ Summarizing
 * entries without a section are mapped to the _default_ section.
 * entries with a section are mapped to a corresponding section, hereby everything between
   the brackets is used as section name (trimmed).
-* section names are separated using a double colon (`::`).
+* section names are separated using a double colon (`.`), they are modelled as simple parent `PropertyValue` nodes.
 
 +ConfigurationData+ allows to access all the different parts:
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/7fc31c0a/content/documentation/extensions/mod_functions.adoc
----------------------------------------------------------------------
diff --git a/content/documentation/extensions/mod_functions.adoc b/content/documentation/extensions/mod_functions.adoc
index 50a2b8b..afb8b3c 100644
--- a/content/documentation/extensions/mod_functions.adoc
+++ b/content/documentation/extensions/mod_functions.adoc
@@ -51,36 +51,36 @@ For using the functionality shown in this document you only must add the corresp
 
 The following sections explain the provided functions defined by +ConfigurationFunctions+ singleton.
 
-* *ConfigOperator filter(PropertyMatcher matcher)* creates a +ConfigOperator+ that creates a +Configuration+
+* *UnaryOperator<Configuration> filter(PropertyMatcher matcher)* creates a +UnaryOperator<Configuration>+ that creates a +Configuration+
   containing only keys that are selected by the given _matcher predicate_. The +PropertyMatcher+ hereby allows to evaluate not only
   the _key_, but also the _value_.
-* *ConfigOperator map(KeyMapper keyMapper)* creates a +ConfigOperator+ that maps the keys as defined
+* *UnaryOperator<Configuration> map(KeyMapper keyMapper)* creates a +UnaryOperator<Configuration>+ that maps the keys as defined
   by the given _keyMapper_.
-* *ConfigOperator section(String section)* creates  a +ConfigOperator+ that creates a +Configuration+ containing only
+* *UnaryOperator<Configuration> section(String section)* creates  a +UnaryOperator<Configuration>+ that creates a +Configuration+ containing only
   entries that are direct or indirect members of the given section.
-* *ConfigOperator section(String areaKey, boolean stripKeys)* creates  a +ConfigOperator+ that creates a +Configuration+
+* *UnaryOperator<Configuration> section(String areaKey, boolean stripKeys)* creates  a +UnaryOperator<Configuration>+ that creates a +Configuration+
   containing only entries that are direct or indirect members of the given section. Hereby _stripKeys_ allows to determine
   if the returned entries should be relative to the search criteria {{stripKeys=true}} or absolute keys.
 * *isKeyInSection(String section, String sectionKey)* allows to easily determine if a given _key_ is a direct or indirect member
   of a given section.
 * *boolean isKeyInSections(String key, String... sectionKeys)* allows to easily determine if one key of given
   _key_ is a direct or indirect member of at least one of the given _sectionKeys_.
-* *ConfigQuery<Set<String>> sections()* allows to query all the contained fully qualified section names (the ones that
+* *Function<Configuration,Set<String>> sections()* allows to query all the contained fully qualified section names (the ones that
   also have parameters present).
-* *ConfigQuery<Set<String>> transitiveSections()* allows to query all the contained fully qualified section names,
+* *Function<Configuration,Set<String>> transitiveSections()* allows to query all the contained fully qualified section names,
   including the transitive closure of sections.
-* *ConfigQuery<Set<String>> sections(final Predicate<String> predicate)* allows to query all the contained fully
+* *Function<Configuration,Set<String>> sections(final Predicate<String> predicate)* allows to query all the contained fully
   qualified section names that are selected by the given _predicate_.
-* *ConfigQuery<Set<String>> sections(final Predicate<String> predicate)* allows to query all the contained fully
+* *Function<Configuration,Set<String>> sections(final Predicate<String> predicate)* allows to query all the contained fully
   qualified section names that are selected by the given _predicate_, including the transitive closure of sections
   identified.
-* *ConfigOperator sectionsRecursive(String... sectionKeys)* provides a +ConfigOperator+ that filters all sections identified
+* *UnaryOperator<Configuration> sectionsRecursive(String... sectionKeys)* provides a +UnaryOperator<Configuration>+ that filters all sections identified
   by the given _sectionKeys_ and its child sections.
-* *ConfigOperator sectionRecursive(final boolean stripKeys, final String... sectionKeys)* provides a +ConfigOperator+
+* *UnaryOperator<Configuration> sectionRecursive(final boolean stripKeys, final String... sectionKeys)* provides a +UnaryOperator<Configuration>+
   that filters all sections identified by the given _sectionKeys_ and its child sections. _stripKeys_ allows to
   determine if the resulting configuration should be relative to the selected areas ({{stripKeys=true}}) or
   absolute (filtering only).
-* *ConfigQuery<String> jsonInfo()* returns a query that converts a +Configuration+ into a JSON formatted +String+
+* *Function<Configuration,String> jsonInfo()* returns a query that converts a +Configuration+ into a JSON formatted +String+
   representation.