tamaya-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anat...@apache.org
Subject [incubator-tamaya-extensions] 01/03: TAMAYA-398 TAMAYA-399 TAMAYA-400 TAMAYA-401 TAMAYA-402 TAMAYA-403 TAMAYA-404 TAMAYA-405 TAMAYA-406 TAMAYA-407 Implemented MP 1.3 spec.
Date Tue, 14 May 2019 14:51:56 GMT
This is an automated email from the ASF dual-hosted git repository.

anatole pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tamaya-extensions.git

commit bc806ff3e608bd5077bce22a5915ac801ac8c306
Author: Anatole Tresch <atsticks@gmail.com>
AuthorDate: Tue May 14 14:42:05 2019 +0200

    TAMAYA-398 TAMAYA-399 TAMAYA-400 TAMAYA-401 TAMAYA-402 TAMAYA-403 TAMAYA-404 TAMAYA-405 TAMAYA-406 TAMAYA-407 Implemented MP 1.3 spec.
---
 .../tamaya/collections/BooleanArrayConverter.java  |  50 +++
 .../tamaya/collections/ByteArrayConverter.java     |  50 +++
 .../tamaya/collections/CharArrayConverter.java     |  50 +++
 .../tamaya/collections/CollectionConverter.java    |  55 +++-
 .../tamaya/collections/DoubleArrayConverter.java   |  50 +++
 .../tamaya/collections/FloatArrayConverter.java    |  50 +++
 .../tamaya/collections/IntArrayConverter.java      |  50 +++
 .../apache/tamaya/collections/ItemTokenizer.java   |  19 +-
 .../tamaya/collections/LongArrayConverter.java     |  50 +++
 .../tamaya/collections/ObjectArrayConverter.java   |  51 ++++
 .../tamaya/collections/ShortArrayConverter.java    |  50 +++
 .../org.apache.tamaya.spi.PropertyConverter        |  10 +
 .../collections/CollectionAdvancedTests.java       |   8 +-
 .../tamaya/collections/CollectionsBaseTests.java   |   2 +-
 .../collections/CollectionsTypedReadOnlyTests.java |   2 +-
 .../tamaya/collections/CollectionsTypedTests.java  |   2 +-
 .../consul/AbstractConsulPropertySource.java       |   2 +-
 .../tamaya/etcd/AbstractEtcdPropertySource.java    |   8 +-
 .../java/org/apache/tamaya/etcd/EtcdAccessor.java  |  10 +-
 .../tamaya/events/ConfigurationChangeBuilder.java  |   4 +-
 .../apache/tamaya/events/FrozenPropertySource.java |   6 +-
 .../tamaya/events/PropertySourceChangeBuilder.java |   4 +-
 .../filter/ThreadBasedConfigurationFilter.java     |   6 +-
 .../apache/tamaya/format/ConfigurationData.java    |   2 +-
 .../apache/tamaya/format/ConfigurationFormat.java  |   2 +-
 .../MappedConfigurationDataPropertySource.java     |   2 +-
 modules/formats/hjson/pom.xml                      |  88 ++++++
 .../org/apache/tamaya/hjson/HJSONDataBuilder.java} |  58 ++--
 .../java/org/apache/tamaya/hjson/HJSONFormat.java  |  61 ++++
 .../apache/tamaya/hjson/HJSONPropertySource.java   | 130 ++++++++
 .../PathBasedHJSONPropertySourceProvider.java      |  58 ++++
 .../org.apache.tamaya.format.ConfigurationFormat}  |  14 +-
 .../hjson/CommonHJSONTestCaseCollection.java       | 201 ++++++++++++
 .../org/apache/tamaya/hjson/HJSONFormatIT.java}    |  27 +-
 .../org/apache/tamaya/hjson/HJSONFormatTest.java}  |  17 +-
 .../tamaya/hjson/HJSONPropertySourceTest.java}     |  25 +-
 .../org/apache/tamaya/hjson/HJSONVisitorTest.java} |  69 ++---
 .../PathBasedHJSONPropertySourceProviderTest.java  |  61 ++++
 .../META-INF/javaconfiguration.properties          |  22 ++
 .../test/resources/configs/invalid/array.hjson}    |  20 +-
 .../resources/configs/invalid/empty-file.hjson}    |  17 +-
 .../configs/invalid/only-opening-bracket.hjson}    |  18 +-
 .../resources/configs/invalid/with-array.hjson}    |  26 +-
 .../test/resources/configs/valid/cyrillic.hjson}   |  21 +-
 .../configs/valid/empty-object-config.hjson}       |  19 +-
 .../src/test/resources/configs/valid/kanji.hjson}  |  20 +-
 .../valid/simple-flat-string-only-config.hjson}    |  22 +-
 .../simple-nested-string-only-config-1.hjson}      |  26 +-
 .../simple-nested-string-only-config-2.hjson}      |  25 +-
 .../configs/valid/with-explicit-priority.hjson}    |  24 +-
 modules/formats/hocon/bnd.bnd                      |  31 ++
 modules/formats/hocon/pom.xml                      | 131 ++++++++
 .../java/org/apache/tamaya/hocon/HOCONFormat.java  | 111 +++++++
 .../apache/tamaya/hocon/HOCONPropertySource.java   | 124 ++++++++
 .../PathBasedHOCONPropertySourceProvider.java      |  58 ++++
 .../org.apache.tamaya.format.ConfigurationFormat}  |  14 +-
 .../hocon/CommonHOCONTestCaseCollection.java       | 201 ++++++++++++
 .../org/apache/tamaya/hocon/HOCONFormatIT.java}    |  27 +-
 .../org/apache/tamaya/hocon/HOCONFormatTest.java}  |  19 +-
 .../tamaya/hocon/HOCONPropertySourceTest.java      |  64 ++++
 .../PathBasedHOCONPropertySourceProviderTest.java} |  26 +-
 .../hocon/src/test/resources/arquillian.xml}       |  23 +-
 .../src/test/resources/configs/invalid/array.conf  |  20 ++
 .../test/resources/configs/invalid/empty-file.conf |  17 ++
 .../configs/invalid/only-opening-bracket.conf      |  18 ++
 .../test/resources/configs/invalid/with-array.conf |  26 ++
 .../src/test/resources/configs/valid/cyrillic.conf |  21 ++
 .../configs/valid/empty-object-config.conf         |  19 ++
 .../src/test/resources/configs/valid/kanji.conf    |  20 ++
 .../valid/simple-flat-string-only-config.conf      |  22 ++
 .../valid/simple-nested-string-only-config-1.conf  |  26 ++
 .../valid/simple-nested-string-only-config-2.conf  |  25 ++
 .../configs/valid/with-explicit-priority.conf      |  22 ++
 .../org/apache/tamaya/json/JSONDataBuilder.java    |   6 +-
 .../org/apache/tamaya/json/JSONFormatTest.java     |   5 +
 .../org/apache/tamaya/json/JSONVisitorTest.java    |   4 +-
 modules/formats/pom.xml                            |   2 +
 .../java/org/apache/tamaya/yaml/YAMLFormat.java    |   8 +-
 .../PathBasedYamlPropertySourceProviderTest.java   |   2 +-
 .../org/apache/tamaya/yaml/YAMLFormatTest.java     |  18 +-
 .../apache/tamaya/yaml/YAMLPropertySourceTest.java |  10 +
 .../src/test/resources/configs/valid/list.yaml}    |  16 +-
 .../tamaya/functions/ConfigurationFunctions.java   |   2 +-
 .../tamaya/functions/MappedPropertySource.java     |   2 +-
 .../functions/EnrichedPropertySourceTest.java      |  37 ++-
 .../functions/FilteredPropertySourceTest.java      |  15 +-
 .../tamaya/functions/MappedPropertySourceTest.java |  20 +-
 .../functions/ValueMappedPropertySourceTest.java   |  13 +-
 .../hazelcast/AbstractHazelcastPropertySource.java |  10 +-
 .../tamaya/hazelcast/HazelcastPropertySource.java  |   2 +-
 .../apache/tamaya/cdi/CDIAwareServiceContext.java  |   2 +-
 .../tamaya/cdi/ServiceLoaderServiceContext.java    |  14 +-
 .../tamaya/cdi/cfg/ProvidedPropertySource.java     |   4 +-
 .../apache/tamaya/cdi/cfg/TestPropertySource.java  |   2 +-
 .../java/org/apache/tamaya/inject/api/Config.java  |   2 +-
 .../apache/tamaya/inject/spi/InjectionUtils.java   |   4 +-
 .../apache/tamaya/inject/TestPropertySource.java   |   4 +-
 .../inject/internal/DefaultDynamicValueTest.java   |  30 +-
 .../org/apache/tamaya/jndi/JNDIPropertySource.java |  12 +-
 modules/microprofile/pom.xml                       |  17 ++
 .../tamaya/microprofile/MicroprofileAdapter.java   |  28 +-
 .../tamaya/microprofile/MicroprofileConfig.java    |   8 +-
 .../microprofile/MicroprofileConfigBuilder.java    |  60 +++-
 .../MicroprofileConfigProviderResolver.java        |   1 +
 .../microprofile/MicroprofileConfigSource.java     |   6 +
 .../MicroprofileConfigSourceProvider.java          |   7 +
 .../tamaya/microprofile/MicroprofileConverter.java |   7 +
 .../MicroprofileDefaultProperties.java             |   7 +-
 ... => MicroprofileDefaultPropertiesProvider.java} |  34 ++-
 .../tamaya/microprofile/TamayaConfiguration.java   |   6 +
 .../microprofile/TamayaPropertyConverter.java      |  26 ++
 .../tamaya/microprofile/TamayaPropertySource.java  |  14 +-
 .../microprofile/TamayaPropertySourceProvider.java |   9 +
 .../cdi/MicroprofileConfigurationProducer.java     |  22 +-
 ...> org.apache.tamaya.spi.PropertySourceProvider} |   2 +-
 .../apache/tamaya/microprofile/ConverterTest.java  | 340 +++++++++++++++++++++
 .../microprofile/MicroprofileAdapterTest.java      |  58 ++--
 ...MicroprofileDefaultPropertiesProviderTest.java} |  18 +-
 .../MicroprofileDefaultPropertiesTest.java         |   6 +-
 .../tck/TamayaConfigArchiveProcessor.java          |  12 +-
 .../microprofile/tck/TamayaConfigExtension.java    |  20 ++
 .../META-INF/microprofile-config.properties        |  69 ++++-
 .../src/test/resources/sampleconfig.yaml           |  18 --
 modules/microprofile/src/test/tck-suite.xml        |   7 +-
 .../tamaya/mutableconfig/ConfigChangeRequest.java  |   4 +-
 .../tamaya/mutableconfig/MutableConfiguration.java |   2 +-
 .../MutablePropertiesPropertySource.java           |   2 +-
 .../MutableXmlPropertiesPropertySource.java        |   2 +-
 .../main/java/org/apache/tamaya/osgi/Policy.java   |   4 +-
 .../apache/tamaya/osgi/TamayaConfigPluginTest.java |   6 +-
 .../tamaya/resolver/internal/ResourceResolver.java |   6 +-
 .../tamaya/resolver/MyTestPropertySource.java      |   2 +-
 .../internal/ClassPathResourceLocator.java         |   7 +-
 .../resource/internal/ClasspathCollector.java      |  14 +-
 .../AbstractPathPropertySourceProviderTest.java    |   2 +-
 .../integration/spring/EnableTamayaConfig.java     |   4 +-
 .../spring/TamayaDefaultConfigSupplier.java        |   2 +-
 137 files changed, 3259 insertions(+), 575 deletions(-)

diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/BooleanArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/BooleanArrayConverter.java
new file mode 100644
index 0000000..e2862e0
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/BooleanArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class BooleanArrayConverter implements PropertyConverter<boolean[]> {
+
+    private static final Logger LOG = Logger.getLogger(BooleanArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final BooleanArrayConverter INSTANCE = new BooleanArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static BooleanArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public boolean[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (boolean[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/ByteArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/ByteArrayConverter.java
new file mode 100644
index 0000000..f025a75
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/ByteArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class ByteArrayConverter implements PropertyConverter<byte[]> {
+
+    private static final Logger LOG = Logger.getLogger(ByteArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final ByteArrayConverter INSTANCE = new ByteArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static ByteArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public byte[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (byte[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/CharArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/CharArrayConverter.java
new file mode 100644
index 0000000..946bed9
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/CharArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class CharArrayConverter implements PropertyConverter<char[]> {
+
+    private static final Logger LOG = Logger.getLogger(CharArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final CharArrayConverter INSTANCE = new CharArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static CharArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public char[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (char[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
index a0180f6..27d14f9 100644
--- a/modules/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
@@ -23,6 +23,7 @@ import org.apache.tamaya.spi.PropertyConverter;
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyValue;
 
+import java.lang.reflect.Array;
 import java.lang.reflect.Type;
 import java.util.*;
 import java.util.function.Supplier;
@@ -62,10 +63,62 @@ public final class CollectionConverter implements PropertyConverter<Collection>
 
     private MappingType mappingType = MappingType.value_all;
 
+    public static Object convertArray(ConversionContext context) {
+        MappingType mappingType = MappingType.valueOf(context.getMeta()
+                .getOrDefault(VALUE_MAPPING, MappingType.value.toString()));
+        TypeLiteral<?> targetType = context.getTargetType();
+        Type[] types = TypeLiteral.getTypeParameters(targetType.getType());
+        TypeLiteral<?> collectionTargetType;
+        if(types.length>0) {
+            collectionTargetType = TypeLiteral.of(types[0]);
+        }else {
+            // Check for array
+            if(targetType.getRawType().isArray()){
+                collectionTargetType = TypeLiteral.of(targetType.getRawType().getComponentType());
+            }else{
+                LOG.warning(String.format("No type information for Collection item type in '%s', using String.",
+                        context.getKey()));
+                collectionTargetType = TypeLiteral.of(String.class);
+            }
+        }
+        List result = new ArrayList<>();
+        switch (mappingType) {
+            case node_all:
+                convertListByNodes(context.getValues(), context,
+                        collectionTargetType, result, true);
+                break;
+            case node:
+                convertListByNodes(context.getValues(), context,
+                        collectionTargetType, result, false);
+                break;
+            case value:
+                convertListByValues(context.getValues(), context,
+                        collectionTargetType, result, false);
+                break;
+            case value_all:
+                convertListByValues(context.getValues(), context,
+                        collectionTargetType, result, true);
+                break;
+            case override:
+                 convertListWithBestGuess(context.getValues(), context,
+                        collectionTargetType, result,false);
+                break;
+            case combine:
+            default:
+                convertListWithBestGuess(context.getValues(), context,
+                        collectionTargetType, result,true);
+        }
+        Object array = Array.newInstance(collectionTargetType.getRawType(), result.size());
+        for(int i=0;i<result.size();i++){
+            Array.set(array, i, result.get(i));
+        }
+        return array;
+    }
+
     public static <T extends Collection> T convertList(ConversionContext context,
                                                        Supplier<T> collectionSupplier) {
         MappingType mappingType = MappingType.valueOf(context.getMeta()
-                .getOrDefault(VALUE_MAPPING, MappingType.combine.toString()));
+                .getOrDefault(VALUE_MAPPING, MappingType.value.toString()));
         TypeLiteral<?> targetType = context.getTargetType();
         Type[] types = TypeLiteral.getTypeParameters(targetType.getType());
         TypeLiteral<?> collectionTargetType;
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/DoubleArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/DoubleArrayConverter.java
new file mode 100644
index 0000000..efdd0d0
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/DoubleArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class DoubleArrayConverter implements PropertyConverter<double[]> {
+
+    private static final Logger LOG = Logger.getLogger(DoubleArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final DoubleArrayConverter INSTANCE = new DoubleArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static DoubleArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public double[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (double[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/FloatArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/FloatArrayConverter.java
new file mode 100644
index 0000000..2469a6f
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/FloatArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class FloatArrayConverter implements PropertyConverter<float[]> {
+
+    private static final Logger LOG = Logger.getLogger(FloatArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final FloatArrayConverter INSTANCE = new FloatArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static FloatArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public float[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (float[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/IntArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/IntArrayConverter.java
new file mode 100644
index 0000000..048e5d1
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/IntArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class IntArrayConverter implements PropertyConverter<int[]> {
+
+    private static final Logger LOG = Logger.getLogger(IntArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final IntArrayConverter INSTANCE = new IntArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static IntArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public int[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (int[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java b/modules/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
index 1de8730..cfdc690 100644
--- a/modules/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
@@ -70,11 +70,14 @@ final class ItemTokenizer {
         int start = 0;
         int end = value.indexOf(separator,start);
         while(end>0) {
-            if (value.charAt(end - 1) != '\\') {
-                result.add(value.substring(start, end));
+            if (value.charAt(end - separator.length()) != '\\') {
+                String finalValue = value.substring(start, end);
+                result.add(finalValue.replaceAll("\\\\"+separator, separator));
                 start = end + separator.length();
+                end = value.indexOf(separator,start);
+            }else{
+                end = value.indexOf(separator,end + separator.length());
             }
-            end = value.indexOf(separator,start);
         }
         if(start < value.length()){
             result.add(value.substring(start));
@@ -83,7 +86,7 @@ final class ItemTokenizer {
     }
 
     /**
-     * Splits the given String value as a map entry, splitting it into key and value part with the given separator.
+     * Splits the given String value as a mapProperties entry, splitting it into key and value part with the given separator.
      * If the value cannot be split then {@code key = value = mapEntry} is used for further processing. key or value
      * parts are normally trimmed, unless they are enclosed with brackets {@code []}.
      * @param mapEntry the entry, not null.
@@ -95,7 +98,7 @@ final class ItemTokenizer {
     }
 
     /**
-     * Splits the given String value as a map entry, splitting it into key and value part with the given separator.
+     * Splits the given String value as a mapProperties entry, splitting it into key and value part with the given separator.
      * If the value cannot be split then {@code key = value = mapEntry} is used for further processing. key or value
      * parts are normally trimmed, unless they are enmcosed with brackets {@code []}.
      * @param mapEntry the entry, not null.
@@ -147,12 +150,12 @@ final class ItemTokenizer {
                 return (T)value;
             }
         } else {
-            ConversionContext newContext = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
-                    targetType).build();
+            context = context.toBuilder()
+                    .setTargetType(targetType).build();
             T result;
             for (PropertyConverter<T> conv : valueConverters) {
                 try {
-                    result = conv.convert(value, newContext);
+                    result = conv.convert(value, context);
                     if (result != null) {
                         return result;
                     }
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/LongArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/LongArrayConverter.java
new file mode 100644
index 0000000..56ebb21
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/LongArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class LongArrayConverter implements PropertyConverter<long[]> {
+
+    private static final Logger LOG = Logger.getLogger(LongArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final LongArrayConverter INSTANCE = new LongArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static LongArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public long[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (long[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/ObjectArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/ObjectArrayConverter.java
new file mode 100644
index 0000000..eb88ab4
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/ObjectArrayConverter.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Arrays;
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class ObjectArrayConverter implements PropertyConverter<Object[]> {
+
+    private static final Logger LOG = Logger.getLogger(ObjectArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final ObjectArrayConverter INSTANCE = new ObjectArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static ObjectArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public Object[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (Object[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/java/org/apache/tamaya/collections/ShortArrayConverter.java b/modules/collections/src/main/java/org/apache/tamaya/collections/ShortArrayConverter.java
new file mode 100644
index 0000000..3e513ff
--- /dev/null
+++ b/modules/collections/src/main/java/org/apache/tamaya/collections/ShortArrayConverter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class ShortArrayConverter implements PropertyConverter<short[]> {
+
+    private static final Logger LOG = Logger.getLogger(ShortArrayConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static final ShortArrayConverter INSTANCE = new ShortArrayConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static ShortArrayConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public short[] convert(String value, ConversionContext context) {
+        Object array = CollectionConverter.convertArray(context);
+        return (short[])array;
+    }
+
+}
diff --git a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
index 167bc27..6dab0cc 100644
--- a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ b/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
@@ -16,6 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+org.apache.tamaya.collections.ObjectArrayConverter
 org.apache.tamaya.collections.ArrayListConverter
 org.apache.tamaya.collections.CollectionConverter
 org.apache.tamaya.collections.HashMapConverter
@@ -29,3 +30,12 @@ org.apache.tamaya.collections.SortedSetConverter
 org.apache.tamaya.collections.SortedMapConverter
 org.apache.tamaya.collections.TreeMapConverter
 org.apache.tamaya.collections.TreeSetConverter
+org.apache.tamaya.collections.BooleanArrayConverter
+org.apache.tamaya.collections.ByteArrayConverter
+org.apache.tamaya.collections.CharArrayConverter
+org.apache.tamaya.collections.DoubleArrayConverter
+org.apache.tamaya.collections.FloatArrayConverter
+org.apache.tamaya.collections.IntArrayConverter
+org.apache.tamaya.collections.LongArrayConverter
+org.apache.tamaya.collections.ObjectArrayConverter
+org.apache.tamaya.collections.ShortArrayConverter
diff --git a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
index 01016d5..3cc4806 100644
--- a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
+++ b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
@@ -81,11 +81,11 @@ public class CollectionAdvancedTests {
     }
 
     /**
-     * Redefined map format parsing, Config is as follows:
+     * Redefined mapProperties format parsing, Config is as follows:
      * <pre>
-     *  redefined-map=0==none | 1==single | 2==any
-     *  _redefined-map.map-entry-separator===
-     *  _redefined-map.item-separator=|
+     *  redefined-mapProperties=0==none | 1==single | 2==any
+     *  _redefined-mapProperties.mapProperties-entry-separator===
+     *  _redefined-mapProperties.item-separator=|
      * </pre>
      */
     @Test
diff --git a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
index 780b391..36e1d51 100644
--- a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
+++ b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
@@ -29,7 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 /**
  * Basic tests for Tamaya collection support. Relevant configs for this tests:
  * <pre>base.items=1,2,3,4,5,6,7,8,9,0
- * base.map=1:a, 2:b, 3:c, [4: ]
+ * base.mapProperties=1:a, 2:b, 3:c, [4: ]
  * </pre>
  */
 public class CollectionsBaseTests {
diff --git a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
index 56f8ea1..cc5b408 100644
--- a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
+++ b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
@@ -29,7 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 /**
  * Basic tests for Tamaya collection support. Relevant configs for this tests:
  * <pre>base.items=1,2,3,4,5,6,7,8,9,0
- * base.map=1:a, 2:b, 3:c, [4: ]
+ * base.mapProperties=1:a, 2:b, 3:c, [4: ]
  * </pre>
  */
 //@Ignore("Readonly support has been deactivated as of now.")
diff --git a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
index 4ec507b..e7ed17b 100644
--- a/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
+++ b/modules/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
@@ -29,7 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 /**
  * Basic tests for Tamaya collection support. Relevant configs for this tests:
  * <pre>base.items=1,2,3,4,5,6,7,8,9,0
- * base.map=1:a, 2:b, 3:c, [4: ]
+ * base.mapProperties=1:a, 2:b, 3:c, [4: ]
  * </pre>
  */
 public class CollectionsTypedTests {
diff --git a/modules/consul/src/main/java/org/apache/tamaya/consul/AbstractConsulPropertySource.java b/modules/consul/src/main/java/org/apache/tamaya/consul/AbstractConsulPropertySource.java
index 48303e1..a3327e4 100644
--- a/modules/consul/src/main/java/org/apache/tamaya/consul/AbstractConsulPropertySource.java
+++ b/modules/consul/src/main/java/org/apache/tamaya/consul/AbstractConsulPropertySource.java
@@ -229,7 +229,7 @@ implements MutablePropertySource{
                     try{
                         kvClient.putValue(prefix + key,en.getValue());
                     }catch(Exception e) {
-                        LOG.info("Failed to add key to consul: " + prefix + en.getKey() + "=" + en.getValue());
+                        LOG.info("Failed to addPropertyValue key to consul: " + prefix + en.getKey() + "=" + en.getValue());
                     }
                 }
                 // success: stop here
diff --git a/modules/etcd/src/main/java/org/apache/tamaya/etcd/AbstractEtcdPropertySource.java b/modules/etcd/src/main/java/org/apache/tamaya/etcd/AbstractEtcdPropertySource.java
index 6213d8e..c552769 100644
--- a/modules/etcd/src/main/java/org/apache/tamaya/etcd/AbstractEtcdPropertySource.java
+++ b/modules/etcd/src/main/java/org/apache/tamaya/etcd/AbstractEtcdPropertySource.java
@@ -53,7 +53,7 @@ public abstract class AbstractEtcdPropertySource extends BasePropertySource
 
     private AtomicLong timeout = new AtomicLong();
 
-    /** The Hazelcast config map used. */
+    /** The Hazelcast config mapProperties used. */
     private Map<String, PropertyValue> configMap = new HashMap<>();
 
     public AbstractEtcdPropertySource(){
@@ -201,7 +201,7 @@ public abstract class AbstractEtcdPropertySource extends BasePropertySource
                 }
             }
         }
-        // add getMeta entries
+        // addPropertyValue getMeta entries
         for(Map.Entry<String,String> entry:props.entrySet()) {
             if (entry.getKey().startsWith("_")) {
                 String key = entry.getKey().substring(1);
@@ -217,7 +217,7 @@ public abstract class AbstractEtcdPropertySource extends BasePropertySource
                 }
             }
         }
-        // Map to createValue map.
+        // Map to createValue mapProperties.
 //        Map<String, PropertyValue> values = new HashMap<>();
         for(Map.Entry<String,PropertyValue> en:values.entrySet()) {
             values.put(en.getKey(), en.getValue());
@@ -252,7 +252,7 @@ public abstract class AbstractEtcdPropertySource extends BasePropertySource
                     }
                     Map<String,String> res = accessor.set(key, en.getValue(), ttl);
                     if(res.get("_ERROR")!=null){
-                        LOG.info("Failed to add key to etcd: " + en.getKey()  + "=" + en.getValue());
+                        LOG.info("Failed to addPropertyValue key to etcd: " + en.getKey()  + "=" + en.getValue());
                     }
                 }
                 // success, stop here
diff --git a/modules/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java b/modules/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
index 7c55d9a..fcc5f49 100644
--- a/modules/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
+++ b/modules/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
@@ -214,7 +214,7 @@ class EtcdAccessor {
      *
      * @param key   the property key, not null
      * @param value the createValue to be setCurrent
-     * @return the result map as described above.
+     * @return the result mapProperties as described above.
      * @see #set(String, String, Integer)
      */
     public Map<String, String> set(String key, String value) {
@@ -261,7 +261,7 @@ class EtcdAccessor {
      * @param key        the property key, not null
      * @param value      the createValue to be setCurrent
      * @param ttlSeconds the ttl in seconds (optional)
-     * @return the result map as described above.
+     * @return the result mapProperties as described above.
      */
     public Map<String, String> set(String key, String value, Integer ttlSeconds) {
         final Map<String, String> result = new HashMap<>();
@@ -406,7 +406,7 @@ class EtcdAccessor {
      * "getValue": {
      * "key": "/",
      * "dir": true,
-     * "getValues": [
+     * "getPropertyValues": [
      * {
      * "key": "/foo_dir",
      * "dir": true,
@@ -424,7 +424,7 @@ class EtcdAccessor {
      * }
      * </pre>
      * 
-     * is mapped to a regular Tamaya properties map as follows:
+     * is mapped to a regular Tamaya properties mapProperties as follows:
      * 
      * <pre>
      *    key1=myvalue
@@ -478,7 +478,7 @@ class EtcdAccessor {
     /**
      * Recursively read out all key/values from this etcd JSON array.
      *
-     * @param result map with key, values and metadata.
+     * @param result mapProperties with key, values and metadata.
      * @param node   the getValue to parse.
      */
     private void addNodes(Map<String, String> result, JsonObject node) {
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java b/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java
index 1ce2d4a..ea5311c 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/ConfigurationChangeBuilder.java
@@ -89,8 +89,8 @@ public final class ConfigurationChangeBuilder {
      * Compares the two property config/configurations and creates a collection with all changes
      * that must be applied to render {@code previous} into {@code target}.
      *
-     * @param previous the previous map, not null.
-     * @param current the target map, not null.
+     * @param previous the previous mapProperties, not null.
+     * @param current the target mapProperties, not null.
      * @return a collection current change events, never {@code null}.
      */
     public static Collection<PropertyChangeEvent> compare(Configuration previous, Configuration current) {
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java b/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
index f5a3086..51db2c2 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
@@ -46,8 +46,8 @@ public final class FrozenPropertySource implements PropertySource, Serializable
     }
 
     /**
-     * Creates a new FrozenPropertySource instance based on a PropertySource and the target key set given. This method
-     * uses all keys available in the property map.
+     * Creates a new FrozenPropertySource instance based on a PropertySource and the target key setPropertyValue given. This method
+     * uses all keys available in the property mapProperties.
      *
      * @param propertySource the property source to be frozen, not null.
      * @return the frozen property source.
@@ -57,7 +57,7 @@ public final class FrozenPropertySource implements PropertySource, Serializable
     }
 
     /**
-     * Creates a new FrozenPropertySource instance based on a PropertySource and the target key set given.
+     * Creates a new FrozenPropertySource instance based on a PropertySource and the target key setPropertyValue given.
      *
      * @param propertySource the property source to be frozen, not null.
      * @param keys the keys to be evaluated for the snapshot. Only these keys will be contained in the resulting
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java b/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
index cd77515..3430349 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/PropertySourceChangeBuilder.java
@@ -83,8 +83,8 @@ public final class PropertySourceChangeBuilder {
      * Compares the two property config/configurations and creates a collection current all changes
      * that must be applied to render {@code map1} into {@code map2}.
      *
-     * @param map1 the source map, not null.
-     * @param map2 the target map, not null.
+     * @param map1 the source mapProperties, not null.
+     * @param map2 the target mapProperties, not null.
      * @return a collection current change events, never null.
      */
     public static Collection<PropertyChangeEvent> compare(PropertySource map1, PropertySource map2) {
diff --git a/modules/filter/src/main/java/org/apache/tamaya/filter/ThreadBasedConfigurationFilter.java b/modules/filter/src/main/java/org/apache/tamaya/filter/ThreadBasedConfigurationFilter.java
index a0df361..2bbd379 100644
--- a/modules/filter/src/main/java/org/apache/tamaya/filter/ThreadBasedConfigurationFilter.java
+++ b/modules/filter/src/main/java/org/apache/tamaya/filter/ThreadBasedConfigurationFilter.java
@@ -27,7 +27,7 @@ import org.apache.tamaya.spi.FilterContext;
  * Hereby
  * <ul>
  *     <li><b>Single</b> filters are applied only when values are explicitly accessed. This is useful, e.g. for
- *     filtering passwords into clear text variants. Nevertheless metadata keys hidden on map level must be
+ *     filtering passwords into clear text variants. Nevertheless metadata keys hidden on mapProperties level must be
  *     accessible (=not filtered) when accessed as single values.</li>
  *     <li><b>Map</b> filters are applied when values are filtered as part of a full properties access.
  *     Often filtering in these cases is more commonly applied, e.g. you dont want to show up all kind of metadata.
@@ -73,7 +73,7 @@ public final class ThreadBasedConfigurationFilter implements PropertyFilter{
     }
 
     /**
-     * Seactivates metadata filtering also on global map access for this thread.
+     * Seactivates metadata filtering also on global mapProperties access for this thread.
      * @see #cleanupFilterContext()
      * @param filtered true,to enable metadata filtering (default).
      */
@@ -94,7 +94,7 @@ public final class ThreadBasedConfigurationFilter implements PropertyFilter{
     /**
      * Access the filtering configuration that is used used on the current thread
      * for filtering configuration properties accessed as full
-     * map.
+     * mapProperties.
      * @return the filtering config, never null.
      */
     public static ThreadFilterContext getMapFilterContext(){
diff --git a/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationData.java b/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationData.java
index db5131e..4533e18 100644
--- a/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationData.java
+++ b/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationData.java
@@ -26,7 +26,7 @@ import java.util.*;
 
 /**
  * Data that abstracts the data read from a configuration resources using a certain format. The data can be divided
- * into different sections, similar to ini-files. Herebey different sections the best map to entries with different
+ * into different sections, similar to ini-files. Herebey different sections the best mapProperties to entries with different
  * priorities to be applied, when integrated into PropertySource instances.
  */
 public final class ConfigurationData {
diff --git a/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java b/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java
index 62a22fc..236beb4 100644
--- a/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java
+++ b/modules/formats/base/src/main/java/org/apache/tamaya/format/ConfigurationFormat.java
@@ -63,7 +63,7 @@ public interface ConfigurationFormat {
      * different levels of data:
      * <ul>
      *     <li>Only a <i>default</i> section is returned, since the configuration format does not support
-     *     hierarchies, e.g. a root {@link PropertyValue} with a number of direct getValues.</li>
+     *     hierarchies, e.g. a root {@link PropertyValue} with a number of direct getPropertyValues.</li>
      *     <li>Hierarchical formats such as INI, XML, YAML and JSON can have both createObject mapped childs as well as arrays/createList
      *     childs. With {@link PropertyValue#toMap()} a default mapping to a property based representation is
      *     available.</li>
diff --git a/modules/formats/base/src/main/java/org/apache/tamaya/format/MappedConfigurationDataPropertySource.java b/modules/formats/base/src/main/java/org/apache/tamaya/format/MappedConfigurationDataPropertySource.java
index 4790883..8b8d0e0 100644
--- a/modules/formats/base/src/main/java/org/apache/tamaya/format/MappedConfigurationDataPropertySource.java
+++ b/modules/formats/base/src/main/java/org/apache/tamaya/format/MappedConfigurationDataPropertySource.java
@@ -115,7 +115,7 @@ public class MappedConfigurationDataPropertySource extends BasePropertySource {
      * Method that copies and converts the properties read from the data instance
      * provided.
      * @param data the data returned from the format, not null.
-     * @param meta the metadata to add.
+     * @param meta the metadata to addPropertyValue.
      * @return the final properties to be included.
      */
     protected Map<String, PropertyValue> populateData(ConfigurationData data, Map<String, String> meta) {
diff --git a/modules/formats/hjson/pom.xml b/modules/formats/hjson/pom.xml
new file mode 100644
index 0000000..a520417
--- /dev/null
+++ b/modules/formats/hjson/pom.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy current the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-formats-all</artifactId>
+        <version>0.4-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-hjson</artifactId>
+    <name>Apache Tamaya Modules - HJSON Support</name>
+    <packaging>jar</packaging>
+
+    <inceptionYear>2018</inceptionYear>
+
+    <description>
+        This modules provides format support
+        for using hjson files with Apache Tamaya.
+    </description>
+
+    <properties>
+        <hjson.version>3.0.0</hjson.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-formats</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hjson</groupId>
+            <artifactId>hjson</artifactId>
+            <version>${hjson.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONDataBuilder.java
similarity index 68%
copy from modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java
copy to modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONDataBuilder.java
index 02b2203..8fb9a01 100644
--- a/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java
+++ b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONDataBuilder.java
@@ -16,58 +16,54 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.json;
-
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonString;
-import javax.json.JsonValue;
+package org.apache.tamaya.hjson;
 
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.spi.ListValue;
 import org.apache.tamaya.spi.ObjectValue;
 import org.apache.tamaya.spi.PropertyValue;
+import org.hjson.JsonArray;
+import org.hjson.JsonObject;
+import org.hjson.JsonValue;
 
 import java.util.Objects;
 
 /**
- * Visitor implementation to read a JSON asString input source.
+ * Visitor implementation to read a HJSON toString input source.
  */
-class JSONDataBuilder {
+class HJSONDataBuilder {
 
     private String resource;
+    private PropertyValue data;
     private JsonValue root;
 
-    JSONDataBuilder(String resource, JsonValue root) {
+    HJSONDataBuilder(String resource, JsonValue root) {
         this.resource = Objects.requireNonNull(resource);
         this.root = root;
     }
 
     private void addJsonObject(JsonObject jsonObject, ObjectValue dataNode){
-        jsonObject.forEach((key,val) -> {
-            switch(val.getValueType()) {
-                case FALSE:
-                    dataNode.setValue(key, Boolean.FALSE.toString());
-                    break;
-                case TRUE:
-                    dataNode.setValue(key, Boolean.TRUE.toString());
+        jsonObject.forEach((m) -> {
+            switch(m.getValue().getType()) {
+                case BOOLEAN:
+                    dataNode.setValue(m.getName(), String.valueOf(m.getValue().asBoolean()));
                     break;
                 case NUMBER:
-                    dataNode.setValue(key, val.toString());
+                    dataNode.setValue(m.getName(), String.valueOf(m.getValue().asDouble()));
                     break;
                 case STRING:
-                    dataNode.setValue(key, ((JsonString) val).getString());
+                    dataNode.setValue(m.getName(),  m.getValue().asString());
                     break;
                 case NULL:
-                    dataNode.setValue(key, null);
+                    dataNode.setValue(m.getName(), null);
                     break;
                 case OBJECT:
-                    ObjectValue oval = dataNode.setObject(key);
-                    addJsonObject((JsonObject)val, oval);
+                    ObjectValue oval = dataNode.addObject(m.getName());
+                    addJsonObject((JsonObject)m.getValue(), oval);
                     break;
                 case ARRAY:
-                    ListValue aval = dataNode.setList(key);
-                    addArray((JsonArray)val, aval);
+                    ListValue aval = dataNode.addList(m.getName());
+                    addArray((JsonArray)m.getValue(), aval);
                     break;
                 default:
                     throw new ConfigException("Internal failure while processing JSON document.");
@@ -77,20 +73,15 @@ class JSONDataBuilder {
 
     private void addArray(JsonArray array, ListValue dataNode) {
         array.forEach(val -> {
-            switch(val.getValueType()) {
+            switch(val.getType()) {
                 case NULL:
                     break;
-                case FALSE:
-                    dataNode.addValue(Boolean.FALSE.toString());
-                    break;
-                case TRUE:
-                    dataNode.addValue(Boolean.TRUE.toString());
+                case BOOLEAN:
+                    dataNode.addValue(String.valueOf(val.asBoolean()));
                     break;
                 case NUMBER:
-                    dataNode.addValue(val.toString());
-                    break;
                 case STRING:
-                    dataNode.addValue(((JsonString) val).getString());
+                    dataNode.addValue(val.toString());
                     break;
                 case OBJECT:
                     ObjectValue oval = dataNode.addObject();
@@ -107,14 +98,13 @@ class JSONDataBuilder {
     }
 
     public PropertyValue build() {
-        PropertyValue data;
         if (root instanceof JsonObject) {
             data = PropertyValue.createObject("");
             addJsonObject((JsonObject)root, (ObjectValue) data);
         } else if (root instanceof JsonArray) {
             JsonArray array = (JsonArray)root;
             data = PropertyValue.createList("");
-            addArray(array, (ListValue) data);
+            addArray(array, (ListValue)data);
         } else {
             throw new ConfigException("Unknown JsonType encountered: " + root.getClass().getName());
         }
diff --git a/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONFormat.java b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONFormat.java
new file mode 100644
index 0000000..83c8a89
--- /dev/null
+++ b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONFormat.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hjson;
+
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.hjson.JsonValue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.Objects;
+
+/**
+ * Implementation of the {@link ConfigurationFormat}
+ * able to read configuration properties with comments represented in HJSON
+ *
+ * @see <a href="http://www.hjson.org">JSON format specification</a>
+ */
+public class HJSONFormat implements ConfigurationFormat {
+
+    @Override
+    public String getName() {
+        return "hjson";
+    }
+
+    @Override
+    public boolean accepts(URL url) {
+        return Objects.requireNonNull(url).getPath().endsWith(".hjson");
+    }
+
+    @Override
+    public ConfigurationData readConfiguration(String resource, InputStream inputStream)
+    throws IOException{
+        try{
+            JsonValue root = JsonValue.readHjson(new InputStreamReader(inputStream,  Charset.forName("UTF-8")));
+            HJSONDataBuilder dataBuilder = new HJSONDataBuilder(resource, root);
+            return new ConfigurationData(resource, this, dataBuilder.build());
+        } catch(Exception e) {
+            throw new IOException("Failed to read data from " + resource, e);
+        }
+    }
+}
diff --git a/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONPropertySource.java b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONPropertySource.java
new file mode 100644
index 0000000..8a79b38
--- /dev/null
+++ b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/HJSONPropertySource.java
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hjson;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.hjson.JsonValue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import static java.lang.String.format;
+
+/**
+ * Property source based on a HJSON file.
+ */
+public class HJSONPropertySource implements PropertySource {
+    /** The underlying resource. */
+    private final URL urlResource;
+    /** The values read. */
+    private final Map<String, PropertyValue> values;
+    /** The evaluated ordinal. */
+    private int ordinal;
+
+
+    /**
+     * Constructor, hereby using 0 as the default ordinal.
+     * @param resource the resource modelled as URL, not null.
+     * @throws IOException if reading the resource fails.
+     */
+    public HJSONPropertySource(URL resource)throws IOException {
+        this(resource, 0);
+    }
+
+    /**
+     * Constructor.
+     * @param resource the resource modelled as URL, not null.
+     * @param defaultOrdinal the defaultOrdinal to be used.
+     * @throws IOException if reading the resource fails.
+     */
+    public HJSONPropertySource(URL resource, int defaultOrdinal)throws IOException {
+        urlResource = Objects.requireNonNull(resource);
+        this.ordinal = defaultOrdinal; // may be overriden by read...
+        this.values = readConfig(urlResource);
+        if (this.values.containsKey(TAMAYA_ORDINAL)) {
+            this.ordinal = Double.valueOf(this.values.get(TAMAYA_ORDINAL).getValue()).intValue();
+        }
+    }
+
+
+    public int getOrdinal() {
+        PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
+        if(configuredOrdinal!=null){
+            try{
+                return Integer.parseInt(configuredOrdinal.getValue());
+            } catch(Exception e){
+                Logger.getLogger(getClass().getName()).log(Level.WARNING,
+                        "Configured Ordinal is not an int number: " + configuredOrdinal, e);
+            }
+        }
+        return ordinal;
+    }
+
+    @Override
+    public String getName() {
+        return urlResource.toExternalForm();
+    }
+
+    @Override
+    public PropertyValue get(String key) {
+        return getProperties().get(key);
+    }
+
+    @Override
+    public Map<String, PropertyValue> getProperties() {
+
+        return Collections.unmodifiableMap(values);
+    }
+
+    /**
+     * Reads the configuration.
+     * @param urlResource soure of the configuration.
+     * @return the configuration read from the given resource URL.
+     * @throws ConfigException if resource URL cannot be read.
+     * @throws IOException if reading the urlResource fails.
+     */
+    protected Map<String, PropertyValue> readConfig(URL urlResource) throws IOException{
+        try (InputStream is = urlResource.openStream()) {
+            JsonValue root = JsonValue.readHjson(new InputStreamReader(is, Charset.forName("UTF-8")));
+            HJSONDataBuilder visitor = new HJSONDataBuilder(urlResource.toString(), root);
+            Map<String, String> values = visitor.build().toMap();
+            Map<String, PropertyValue> result = new HashMap<>();
+            for(Map.Entry<String,String> en:values.entrySet()){
+                result.put(en.getKey(), PropertyValue.createValue(en.getKey(), en.getValue()).setMeta("source", getName()));
+            }
+            return result;
+        }catch(IOException ioe){
+            throw ioe;
+        }catch (Exception t) {
+            throw new IOException(format("Failed to read properties from %s", urlResource.toExternalForm()), t);
+        }
+    }
+
+}
diff --git a/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProvider.java b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProvider.java
new file mode 100644
index 0000000..f6fa174
--- /dev/null
+++ b/modules/formats/hjson/src/main/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProvider.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.hjson;
+
+import org.apache.tamaya.resource.AbstractPathPropertySourceProvider;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Path based default provider for hjson formatted config files.
+ */
+public class PathBasedHJSONPropertySourceProvider extends AbstractPathPropertySourceProvider{
+
+    private static final Logger LOG = Logger.getLogger(PathBasedHJSONPropertySourceProvider.class.getName());
+    private HJSONFormat jsonFormat = new HJSONFormat();
+
+    public PathBasedHJSONPropertySourceProvider(String... paths) {
+        super(paths);
+    }
+
+    @Override
+    protected Collection<PropertySource> getPropertySources(URL url) {
+        if(jsonFormat.accepts(url)){
+            try {
+                return Collections.singletonList(
+                        jsonFormat.readConfiguration(url.toString(), url.openStream()).toPropertySource());
+            } catch (IOException e) {
+                LOG.log(Level.SEVERE, "Failed to read yaml file: " +url, e);
+            }
+        }
+        return Collections.emptyList();
+    }
+
+}
+
+
diff --git a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/modules/formats/hjson/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
similarity index 56%
copy from modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
copy to modules/formats/hjson/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
index 167bc27..e8f9bd4 100644
--- a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ b/modules/formats/hjson/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
@@ -16,16 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.tamaya.collections.ArrayListConverter
-org.apache.tamaya.collections.CollectionConverter
-org.apache.tamaya.collections.HashMapConverter
-org.apache.tamaya.collections.ConcurrentHashMapConverter
-org.apache.tamaya.collections.HashSetConverter
-org.apache.tamaya.collections.LinkedListConverter
-org.apache.tamaya.collections.ListConverter
-org.apache.tamaya.collections.MapConverter
-org.apache.tamaya.collections.SetConverter
-org.apache.tamaya.collections.SortedSetConverter
-org.apache.tamaya.collections.SortedMapConverter
-org.apache.tamaya.collections.TreeMapConverter
-org.apache.tamaya.collections.TreeSetConverter
+org.apache.tamaya.hjson.HJSONFormat
\ No newline at end of file
diff --git a/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java
new file mode 100644
index 0000000..94fe4f8
--- /dev/null
+++ b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hjson;
+
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.URL;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Class with a collection of common test cases each JSON processing
+ * class must be able to pass.
+ */
+public abstract class CommonHJSONTestCaseCollection {
+
+    abstract PropertySource getPropertiesFrom(URL source) throws Exception;
+
+    @Test
+    public void canReadNonLatinCharacters() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class
+             .getResource("/configs/valid/cyrillic.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource propertySource = getPropertiesFrom(configURL);
+
+        assertThat(propertySource.get("name")).isNotNull();
+        assertThat(propertySource.get("name").getValue()).isEqualTo("\u041e\u043b\u0438\u0432\u0435\u0440");
+        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f")).isNotNull();
+        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f").getValue()).isEqualTo("Fischer");
+    }
+
+    @Test
+    public void canReadUnicodeCharacters() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class
+                .getResource("/configs/valid/kanji.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource propertySource = getPropertiesFrom(configURL);
+
+        assertThat(propertySource.get("onamae")).isNotNull();
+        // 霊屋 = Tamaya
+        assertThat(propertySource.get("onamae").getValue()).isEqualTo("\u970a\u5c4b");
+    }
+
+    @Test
+    public void canReadNestedStringOnlyJSONConfigFile2() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class
+                .getResource("/configs/valid/simple-nested-string-only-config-1.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        System.out.println("simple-nested-string-only-config-1.json -> " + properties.getProperties().values());
+
+        assertThat(properties.getProperties().keySet().size()).isGreaterThanOrEqualTo(5);
+
+        PropertyValue keyB = properties.get("b");
+        PropertyValue keyDO = properties.get("d.o");
+        PropertyValue keyDP = properties.get("d.p");
+
+        assertThat(keyB).isNotNull();
+        assertThat(keyB.getValue()).isEqualTo("B");
+        assertThat(keyDO).isNotNull();
+        assertThat(keyDO.getValue()).isEqualTo("O");
+        assertThat(keyDP).isNotNull();
+        assertThat(keyDP.getValue()).isEqualTo("P");
+    }
+
+    @Test
+    public void canReadNestedStringOnlyJSONConfigFileWithObjectInTheMiddle()
+            throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class
+                .getResource("/configs/valid/simple-nested-string-only-config-2.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet().size()).isGreaterThanOrEqualTo(4);
+
+        PropertyValue keyA = properties.get("a");
+        PropertyValue keyDO = properties.get("b.o");
+        PropertyValue keyDP = properties.get("b.p");
+        PropertyValue keyC = properties.get("c");
+
+        assertThat(keyA).isNotNull();
+        assertThat(keyA.getValue()).isEqualTo("A");
+        assertThat(keyC).isNotNull();
+        assertThat(keyC.getValue()).isEqualTo("C");
+        assertThat(keyDO).isNotNull();
+        assertThat(keyDO.getValue()).isEqualTo("O");
+        assertThat(keyDP).isNotNull();
+        assertThat(keyDP.getValue()).isEqualTo("P");
+    }
+
+    @Test
+    public void canHandleIllegalJSONFileWhichContainsAnArray() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/with-array.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test(expected = IOException.class)
+    public void canHandleIllegalJSONFileConsistingOfOneOpeningBracket() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/only-opening-bracket.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test
+    public void canHandleIllegalJSONFileWhichIsEmpty() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/empty-file.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test
+    public void priorityInConfigFileOverwriteExplicitlyGivenPriority() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/valid/with-explicit-priority.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(PropertySourceComparator.getOrdinal(properties)).isEqualTo(16784);
+    }
+
+    @Test
+    public void canReadFlatStringOnlyJSONConfigFile() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/valid/simple-flat-string-only-config.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties()).hasSize(3);
+
+        PropertyValue keyA = properties.get("a");
+        PropertyValue keyB = properties.get("b");
+        PropertyValue keyC = properties.get("c");
+
+        assertThat(keyA).isNotNull();
+        assertThat(keyA.getValue()).isEqualTo("A");
+        assertThat(keyB).isNotNull();
+        assertThat(keyB.getValue()).isEqualTo("B");
+        assertThat(keyC).isNotNull();
+        assertThat(keyC.getValue()).isEqualTo("C");
+    }
+
+    @Test
+    public void emptyJSONFileResultsInConfigException() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/empty-file.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        properties.getProperties();
+    }
+
+    @Test
+    public void canHandleEmptyJSONObject() throws Exception {
+        URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/valid/empty-object-config.hjson");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet().size()).isGreaterThanOrEqualTo(0);
+    }
+}
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java
similarity index 54%
copy from modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
copy to modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java
index ec60e8d..6258fc5 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
+++ b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java
@@ -16,17 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.microprofile;
+package org.apache.tamaya.hjson;
 
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.junit.Test;
 
+import java.util.List;
+
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class MicroprofileDefaultPropertiesTest {
+/**
+ * Integration tests for {@link HJSONFormat}.
+ */
+public class HJSONFormatIT {
     @Test
-    public void hasOrdinalOf100() throws Exception {
-        MicroprofileDefaultProperties properties = new MicroprofileDefaultProperties();
+    public void jsonFormatCanBeFoundViaServiceLoader() throws Exception {
+        List<ConfigurationFormat> formats = ServiceContextManager.getServiceContext()
+                                                          .getServices(ConfigurationFormat.class);
 
-        assertThat(properties.getOrdinal()).isEqualTo(100);
+        ConfigurationFormat format = null;
+        for (ConfigurationFormat f : formats) {
+            if (f instanceof HJSONFormat) {
+                format = f;
+                break;
+            }
+        }
+        assertThat(format).isNotNull();
     }
-}
\ No newline at end of file
+}
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java
similarity index 84%
copy from modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
copy to modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java
index 872d90d..f4a6804 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
+++ b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.json;
+package org.apache.tamaya.hjson;
 
 
 import org.apache.tamaya.format.ConfigurationData;
@@ -29,8 +29,13 @@ import java.net.URL;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class JSONFormatTest extends CommonJSONTestCaseCollection {
-    private final JSONFormat format = new JSONFormat();
+public class HJSONFormatTest extends CommonHJSONTestCaseCollection {
+    private final HJSONFormat format = new HJSONFormat();
+
+    @Test
+    public void testGetName() throws Exception {
+        assertThat(format.getName()).isEqualTo("hjson");
+    }
 
     @Test(expected = NullPointerException.class)
     public void acceptsNeedsNonNullParameter() throws Exception {
@@ -46,20 +51,20 @@ public class JSONFormatTest extends CommonJSONTestCaseCollection {
 
     @Test
     public void aJSONFileBasedURLIsAccepted() throws Exception {
-        URL url = new URL("file:///etc/service/conf.json");
+        URL url = new URL("file:///etc/service/conf.hjson");
 
         assertThat(format.accepts(url)).isTrue();
     }
 
     @Test
     public void aHTTPBasedURLIsNotAccepted() throws Exception {
-        URL url = new URL("http://nowhere.somewhere/conf.json");
+        URL url = new URL("http://nowhere.somewhere/conf.hjson");
         assertThat(format.accepts(url)).isTrue();
     }
 
     @Test
     public void aFTPBasedURLIsNotAccepted() throws Exception {
-        URL url = new URL("ftp://nowhere.somewhere/a/b/c/d/conf.json");
+        URL url = new URL("ftp://nowhere.somewhere/a/b/c/d/conf.hjson");
 
         assertThat(format.accepts(url)).isTrue();
     }
diff --git a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java
similarity index 58%
copy from modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java
copy to modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java
index 881735d..52dacd3 100644
--- a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java
+++ b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java
@@ -16,33 +16,38 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.yaml;
+package org.apache.tamaya.hjson;
 
+import org.apache.tamaya.spi.PropertySource;
 import org.junit.Test;
 
 import java.net.URL;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class YAMLPropertySourceTest {
+public class HJSONPropertySourceTest extends CommonHJSONTestCaseCollection {
 
     @Test
-    public void testYamlWithOrdinal() throws Exception {
-        URL configURL = YAMLPropertySourceTest.class.getResource("/configs/valid/test-with-prio.yaml");
+    public void tamayaOrdinalKeywordIsNotPropagatedAsNormalProperty() throws Exception {
+        URL configURL = HJSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.hjson");
 
         assertThat(configURL).isNotNull();
 
-        YAMLPropertySource source = new YAMLPropertySource(configURL, 4);
+        HJSONPropertySource source = new HJSONPropertySource(configURL, 4);
         assertThat(source.getOrdinal()).isEqualTo(16784);
     }
-
+    
     @Test
-    public void testYamlDefaultOrdinal() throws Exception {
-        URL configURL = YAMLPropertySourceTest.class.getResource("/configs/valid/test.yaml");
+    public void testAcceptJsonArrays() throws Exception {
+        URL configURL = HJSONPropertySourceTest.class.getResource("/configs/invalid/array.hjson");
 
         assertThat(configURL).isNotNull();
 
-        YAMLPropertySource source = new YAMLPropertySource(configURL, 4);
-        assertThat(source.getOrdinal()).isEqualTo(4);
+        new HJSONPropertySource(configURL);
+    }
+
+    @Override
+    PropertySource getPropertiesFrom(URL source) throws Exception {
+        return new HJSONPropertySource(source);
     }
 }
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONVisitorTest.java
similarity index 52%
copy from modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
copy to modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONVisitorTest.java
index a3b2bfb..e4601c6 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
+++ b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/HJSONVisitorTest.java
@@ -16,82 +16,77 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.json;
+package org.apache.tamaya.hjson;
+
+import org.apache.tamaya.spi.ObjectValue;
+import org.apache.tamaya.spi.PropertyValue;
+import org.hjson.JsonArray;
+import org.hjson.JsonObject;
+import org.hjson.JsonValue;
+import org.junit.Test;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonValue;
-
-import org.apache.tamaya.spi.ObjectValue;
-import org.apache.tamaya.spi.PropertyValue;
-import org.junit.Test;
-
-public class JSONVisitorTest {
+public class HJSONVisitorTest {
 
     @Test
     public void ensureJSONisParsedProperlyWithDifferentValueTypesFilteringOutEmptyValues() {
-        JsonObject startNode = Json.createObjectBuilder().//
+        JsonObject startNode = new JsonObject().//
                 add("key.sub", "createValue").//
                 add("anotherKey", true).//
                 add("notAnotherKey", false).//
                 add("number", 4711).//
                 add("null", JsonValue.NULL).//
-                add("empty", JsonValue.EMPTY_JSON_OBJECT).//
-                build();
-        JSONDataBuilder visitor = new JSONDataBuilder("Test:ensureJSONisParsedProperlyWithDifferentValueTypesFilteringOutEmptyValues", startNode);
+                add("empty", "");
+        HJSONDataBuilder visitor = new HJSONDataBuilder("Test:ensureJSONisParsedProperlyWithDifferentValueTypesFilteringOutEmptyValues", startNode);
 
         PropertyValue data = visitor.build();
         assertThat(data).isNotNull();
 
         ObjectValue ov = data.toObjectValue();
-        assertThat(ov.getValues().size() == 6);
-        assertThat(data.getSize()).isEqualTo(6);
-        assertThat(data.toMap()).containsKeys("key.sub", "anotherKey", "notAnotherKey", "number", "null");
-        assertThat(data.toMap()).containsEntry("key.sub", "createValue");
-        assertThat(data.toMap()).containsEntry("null", null);
-        assertThat(data.toMap()).containsEntry("anotherKey", "true");
-        assertThat(data.toMap()).doesNotContainEntry("empty", null);
+        assertThat(ov.getValues()).hasSize(6);
+        assertThat(data.toMap()).containsKeys("key.sub", "anotherKey", "notAnotherKey", "number", "null")
+                .containsEntry("key.sub", "createValue")
+                .containsEntry("null", null)
+                .containsEntry("anotherKey", "true")
+                .doesNotContainEntry("empty", null);
     }
 
     @Test
     public void parsingWorksOnEmptyObject() {
-        JsonObject startNode = Json.createObjectBuilder().build();
+        JsonObject startNode = new JsonObject();
 
         Map<String, String> targetStore = new HashMap<>();
-        JSONDataBuilder visitor = new JSONDataBuilder("Test:parsingWorksOnEmptyObject", startNode);
+
+        HJSONDataBuilder visitor = new HJSONDataBuilder("Test:parsingWorksOnEmptyObject", startNode);
         PropertyValue data = visitor.build();
         assertThat(data).isNotNull();
-        assertThat(data.isLeaf());
+        assertThat(data.isLeaf()).isFalse();
     }
 
     @Test
     public void arrayInObject() {
-        JsonObject startNode = Json.createObjectBuilder().//
-                add("arrayKey", Json.createArrayBuilder().build()).//
-                build();
-        JSONDataBuilder visitor = new JSONDataBuilder("Test:array", startNode);
+        JsonObject startNode = new JsonObject().
+                add("arrayKey", new JsonArray());
+        HJSONDataBuilder visitor = new HJSONDataBuilder("Test:array", startNode);
         PropertyValue data = visitor.build();
         assertThat(data).isNotNull();
-        System.out.println(data.asString());
+        System.out.println(data.toString());
     }
 
     @Test
     public void array() {
-        JsonArray startNode = Json.createArrayBuilder().//
-                add(Json.createObjectBuilder().add("k1", 1).add("k2", 2).build()).//
-                add(Json.createObjectBuilder().add("k1", 1).add("k2", 2).build()).//
-                add(Json.createArrayBuilder().add(Json.createObjectBuilder().add("k31", "v31").add("k32", false).build()).build()).//
-                build();
-        JSONDataBuilder visitor = new JSONDataBuilder("Test:array", startNode);
+        JsonArray startNode = new JsonArray().
+                add(new JsonObject().add("k1", 1).add("k2", 2)).
+                add(new JsonObject().add("k1", 1).add("k2", 2)).
+                add(new JsonArray().add(new JsonObject().add("k31", "v31").add("k32", false)));
+        HJSONDataBuilder visitor = new HJSONDataBuilder("Test:array", startNode);
         PropertyValue data = visitor.build();
         assertThat(data).isNotNull();
-        System.out.println(data.asString());
+        System.out.println(data.toString());
     }
 
 }
diff --git a/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java
new file mode 100644
index 0000000..8008f8c
--- /dev/null
+++ b/modules/formats/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.hjson;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link PathBasedHJSONPropertySourceProvider}.
+ */
+public class PathBasedHJSONPropertySourceProviderTest {
+
+    @Test
+    public void getPropertySources() {
+        PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
+                "configs/valid/*.hjson"
+        );
+        assertThat(provider.getPropertySources()).isNotNull().hasSize(7);
+    }
+
+    @Test
+    public void getPropertySources_one() {
+        PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
+                "configs/valid/cyril*.hjson"
+        );
+        assertThat(provider.getPropertySources()).isNotNull().hasSize(1);
+    }
+
+    @Test
+    public void getPropertySources_two() {
+        PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
+                "configs/valid/simple-*.hjson"
+        );
+        assertThat(provider.getPropertySources()).isNotNull().hasSize(3);
+    }
+
+    @Test
+    public void getPropertySources_none() {
+        PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
+                "configs/valid/foo*.hjson", "configs/valid/*.HJSON"
+        );
+        assertThat(provider.getPropertySources()).isNotNull().isEmpty();
+    }
+}
diff --git a/modules/formats/hjson/src/test/resources/META-INF/javaconfiguration.properties b/modules/formats/hjson/src/test/resources/META-INF/javaconfiguration.properties
new file mode 100644
index 0000000..e66e448
--- /dev/null
+++ b/modules/formats/hjson/src/test/resources/META-INF/javaconfiguration.properties
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# The space before the actual date is intended!
+dateTimeValue= 2010-08-08T14:00:15.5+10:00
+dateTimeZoneValueA=UTC
+dateTimeZoneValueB=+01:00
+periodValueA=P1Y1M1W1DT1H1M1S
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/invalid/array.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/invalid/array.hjson
index 84d36ad..0c2058a 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/invalid/array.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,7 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+[
+
+]
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/invalid/empty-file.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/invalid/empty-file.hjson
index 84d36ad..f396085 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/invalid/empty-file.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,4 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/invalid/only-opening-bracket.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/invalid/only-opening-bracket.hjson
index 84d36ad..b936f69 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/invalid/only-opening-bracket.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,5 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/invalid/with-array.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/invalid/with-array.hjson
index 84d36ad..e623e49 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/invalid/with-array.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,13 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  "a" : "A",
+  "b" : {
+    "c" : "C",
+    "d" : [
+      "1", "2"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/cyrillic.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/cyrillic.hjson
index 84d36ad..da86e77 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/cyrillic.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,8 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  name : "Оливер",
+  фамилия : "Fischer"
+}
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/empty-object-config.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/empty-object-config.hjson
index 84d36ad..103c28d 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/empty-object-config.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,6 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+}
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/kanji.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/kanji.hjson
index 84d36ad..1d1c54a 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/kanji.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,7 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  onamae : 霊屋
+}
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/simple-flat-string-only-config.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/simple-flat-string-only-config.hjson
index 84d36ad..d961b62 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/simple-flat-string-only-config.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,9 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  a : A
+  b : B
+  c : C
+}
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/simple-nested-string-only-config-1.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/simple-nested-string-only-config-1.hjson
index 84d36ad..622cf29 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/simple-nested-string-only-config-1.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,13 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  a: A
+  b: B
+  c: C
+  d: {
+    o: O
+    p: P
+  }
+}
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/simple-nested-string-only-config-2.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/simple-nested-string-only-config-2.hjson
index 84d36ad..a43aee6 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/simple-nested-string-only-config-2.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,12 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  a : A
+  b : {
+    o : O
+    p : P
+  }
+  c : C
+}
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hjson/src/test/resources/configs/valid/with-explicit-priority.hjson
similarity index 57%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hjson/src/test/resources/configs/valid/with-explicit-priority.hjson
index 84d36ad..aa0d8e1 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hjson/src/test/resources/configs/valid/with-explicit-priority.hjson
@@ -1,14 +1,13 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-<!--
+/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
-   http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
@@ -16,12 +15,11 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+*/
+{
+  /*
+   some useful comment here
+   */
+  tamaya.ordinal : 16784
+  a : A // another comment
+}
diff --git a/modules/formats/hocon/bnd.bnd b/modules/formats/hocon/bnd.bnd
new file mode 100644
index 0000000..cccf60d
--- /dev/null
+++ b/modules/formats/hocon/bnd.bnd
@@ -0,0 +1,31 @@
+-buildpath: \
+	osgi.annotation; version=6.0.0,\
+	osgi.core; version=6.0,\
+	osgi.cmpn; version=6.0
+
+-testpath: \
+	${junit}
+
+javac.source: 1.8
+javac.target: 1.8
+
+Automatic-Module-Name: org.apache.tamaya.formats.hcon
+Bundle-Version: ${version}.${tstamp}
+Bundle-Name: Apache Tamaya - Formats HCON
+Bundle-SymbolicName: org.apache.tamaya.formats.hcon
+Bundle-Description: Apacha Tamaya Config - HCON Format
+Bundle-Category: Implementation
+Bundle-Copyright: (C) Apache Foundation
+Bundle-License: Apache Licence version 2
+Bundle-Vendor: Apache Software Foundation
+Bundle-ContactAddress: dev@tamaya.incubator.apache.org
+Bundle-DocURL: https://tamaya.apache.org
+Export-Package: \
+	org.apache.tamaya.hcon
+Import-Package: \
+	org.apache.tamaya,\
+	org.apache.tamaya.spi,\
+	org.apache.tamaya.format
+Export-Service: \
+    org.apache.tamaya.format.ConfigurationFormat
+
diff --git a/modules/formats/hocon/pom.xml b/modules/formats/hocon/pom.xml
new file mode 100644
index 0000000..41e7f7e
--- /dev/null
+++ b/modules/formats/hocon/pom.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-formats-all</artifactId>
+        <version>0.4-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-hocon</artifactId>
+    <name>Apache Tamaya Modules - HOCON Support</name>
+    <packaging>jar</packaging>
+    <inceptionYear>2015</inceptionYear>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${tamaya-apicore.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${tamaya-apicore.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-formats</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.typesafe</groupId>
+            <artifactId>config</artifactId>
+            <version>1.3.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.daemon</groupId>
+            <artifactId>arquillian-daemon-container-managed</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.daemon</groupId>
+            <artifactId>arquillian-daemon-container-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.daemon</groupId>
+            <artifactId>arquillian-daemon-main</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.daemon</groupId>
+            <artifactId>arquillian-daemon-protocol-arquillian</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.daemon</groupId>
+            <artifactId>arquillian-daemon-protocol-wire</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.daemon</groupId>
+            <artifactId>arquillian-daemon-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.junit</groupId>
+            <artifactId>arquillian-junit-container</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copyMain</id>
+                        <phase>process-test-sources</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>false</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                            <stripVersion>true</stripVersion>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.jboss.arquillian.daemon</groupId>
+                                    <artifactId>arquillian-daemon-main</artifactId>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/HOCONFormat.java b/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/HOCONFormat.java
new file mode 100644
index 0000000..5130c5c
--- /dev/null
+++ b/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/HOCONFormat.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hocon;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import com.typesafe.config.ConfigList;
+import com.typesafe.config.ConfigObject;
+import com.typesafe.config.ConfigValue;
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.spi.ListValue;
+import org.apache.tamaya.spi.ObjectValue;
+import org.apache.tamaya.spi.PropertyValue;
+
+/**
+ * Typesafe (Lightbend) Config (HOCON) {@link org.apache.tamaya.format.ConfigurationFormat} implementation.
+ */
+public class HOCONFormat implements ConfigurationFormat {
+
+    @Override
+    public String getName() {
+        return "hocon";
+    }
+
+    @Override
+    public boolean accepts(URL url) {
+        String path = Objects.requireNonNull(url).getPath().toLowerCase();
+        return path.endsWith(".conf") ||
+                path.endsWith(".hocon") ;
+    }
+
+    @Override
+    public ConfigurationData readConfiguration(String resource, InputStream inputStream)
+            throws IOException {
+        Config typesafeConfig;
+        try{
+            typesafeConfig = ConfigFactory.parseReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
+            return new ConfigurationData(resource, this, buildConfigurationData(typesafeConfig.root()));
+        } catch(Exception e) {
+            throw new IOException("Failed to read data from " + resource, e);
+        }
+    }
+
+    private static Collection<PropertyValue> buildConfigurationData(ConfigObject config) {
+        ObjectValue root = PropertyValue.createObject();
+        config.entrySet()
+                .forEach(entry -> {
+                    String key = entry.getKey();
+                    ConfigValue value = entry.getValue();
+                    if (value instanceof ConfigList) {
+                        fillList(root.addList(key), (ConfigList) value);
+                    } else if (value instanceof ConfigObject) {
+                        fillObject(root.addObject(key), (ConfigObject) value);
+                    } else {
+                        root.setValue(key, value.unwrapped().toString());
+                    }
+                });
+        return Collections.singletonList(root);
+    }
+
+    private static ListValue fillList(ListValue listValue, ConfigList list) {
+        list.forEach(v -> {
+            if (v instanceof ConfigList) {
+                fillList(listValue.addList(), (ConfigList) v);
+            } else if (v instanceof ConfigObject) {
+                fillObject(listValue.addObject(), (ConfigObject) v);
+            } else {
+                listValue.addValue(v.unwrapped().toString());
+            }
+        });
+        return listValue;
+    }
+
+    private static ObjectValue fillObject(ObjectValue objectValue, ConfigObject object) {
+        object.forEach((k, v) -> {
+            if (v instanceof ConfigList) {
+                fillList(objectValue.addList(k), (ConfigList) v);
+            } else if (v instanceof ConfigObject) {
+                fillObject(objectValue.addObject(k), (ConfigObject) v);
+            } else {
+                objectValue.setValue(k, v.unwrapped().toString());
+            }
+        });
+        return objectValue;
+    }
+
+}
\ No newline at end of file
diff --git a/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/HOCONPropertySource.java b/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/HOCONPropertySource.java
new file mode 100644
index 0000000..fd4bc8a
--- /dev/null
+++ b/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/HOCONPropertySource.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hocon;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+import static java.lang.String.format;
+
+/**
+ * Property source based on a HOCON file.
+ */
+public class HOCONPropertySource implements PropertySource {
+
+    private static final Logger LOG = Logger.getLogger(HOCONPropertySource.class.getName());
+
+    /** The underlying resource. */
+    private final URL urlResource;
+    /** The values read. */
+    private final Map<String, PropertyValue> values;
+    /** The evaluated ordinal. */
+    private int ordinal;
+
+    private static final HOCONFormat HOCON_FORMAT = new HOCONFormat();
+
+    /**
+     * Constructor, hereby using 0 as the default ordinal.
+     * @param resource the resource modelled as URL, not null.
+     * @throws IOException if reading the resource fails.
+     */
+    public HOCONPropertySource(URL resource)throws IOException {
+        this(resource, 0);
+    }
+
+    /**
+     * Constructor.
+     * @param resource the resource modelled as URL, not null.
+     * @param defaultOrdinal the defaultOrdinal to be used.
+     * @throws IOException if reading the resource fails.
+     */
+    public HOCONPropertySource(URL resource, int defaultOrdinal)throws IOException {
+        urlResource = Objects.requireNonNull(resource);
+        this.ordinal = defaultOrdinal; // may be overriden by read...
+        this.values = readConfig(urlResource);
+        if (this.values.containsKey(TAMAYA_ORDINAL)) {
+            this.ordinal = Integer.parseInt(this.values.get(TAMAYA_ORDINAL).getValue());
+        }
+    }
+
+
+    public int getOrdinal() {
+        PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
+        if(configuredOrdinal!=null){
+            try{
+                return Integer.parseInt(configuredOrdinal.getValue());
+            } catch(Exception e){
+                Logger.getLogger(getClass().getName()).log(Level.WARNING,
+                        "Configured Ordinal is not an int number: " + configuredOrdinal, e);
+            }
+        }
+        return ordinal;
+    }
+
+    @Override
+    public String getName() {
+        return urlResource.toExternalForm();
+    }
+
+    @Override
+    public PropertyValue get(String key) {
+        return getProperties().get(key);
+    }
+
+    @Override
+    public Map<String, PropertyValue> getProperties() {
+
+        return Collections.unmodifiableMap(values);
+    }
+
+    /**
+     * Reads the configuration.
+     * @param url soure of the configuration.
+     * @return the configuration read from the given resource URL.
+     * @throws ConfigException if resource URL cannot be read.
+     * @throws IOException if reading the urlResource fails.
+     */
+    protected Map<String, PropertyValue> readConfig(URL url) throws IOException{
+        try (InputStream is = url.openStream()) {
+            return HOCON_FORMAT.readConfiguration(url.toString(), is).toPropertySource().getProperties();
+        }catch(IOException ioe){
+            throw ioe;
+        }catch (Exception t) {
+            throw new IOException(format("Failed to read properties from %s", urlResource.toExternalForm()), t);
+        }
+    }
+
+}
diff --git a/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/PathBasedHOCONPropertySourceProvider.java b/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/PathBasedHOCONPropertySourceProvider.java
new file mode 100644
index 0000000..8d07204
--- /dev/null
+++ b/modules/formats/hocon/src/main/java/org/apache/tamaya/hocon/PathBasedHOCONPropertySourceProvider.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.hocon;
+
+import org.apache.tamaya.resource.AbstractPathPropertySourceProvider;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Path based default provider for yaml formatted config files.
+ */
+public class PathBasedHOCONPropertySourceProvider extends AbstractPathPropertySourceProvider{
+
+    private static final Logger LOG = Logger.getLogger(PathBasedHOCONPropertySourceProvider.class.getName());
+    private HOCONFormat hoconFormat = new HOCONFormat();
+
+    public PathBasedHOCONPropertySourceProvider(String... paths) {
+        super(paths);
+    }
+
+    @Override
+    protected Collection<PropertySource> getPropertySources(URL url) {
+        if(hoconFormat.accepts(url)){
+            try {
+                return Collections.singletonList(
+                        hoconFormat.readConfiguration(url.toString(), url.openStream()).toPropertySource());
+            } catch (IOException e) {
+                LOG.log(Level.SEVERE, "Failed to read yaml file: " +url, e);
+            }
+        }
+        return Collections.emptyList();
+    }
+
+}
+
+
diff --git a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/modules/formats/hocon/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
similarity index 56%
copy from modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
copy to modules/formats/hocon/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
index 167bc27..46a8aa0 100644
--- a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ b/modules/formats/hocon/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
@@ -16,16 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.tamaya.collections.ArrayListConverter
-org.apache.tamaya.collections.CollectionConverter
-org.apache.tamaya.collections.HashMapConverter
-org.apache.tamaya.collections.ConcurrentHashMapConverter
-org.apache.tamaya.collections.HashSetConverter
-org.apache.tamaya.collections.LinkedListConverter
-org.apache.tamaya.collections.ListConverter
-org.apache.tamaya.collections.MapConverter
-org.apache.tamaya.collections.SetConverter
-org.apache.tamaya.collections.SortedSetConverter
-org.apache.tamaya.collections.SortedMapConverter
-org.apache.tamaya.collections.TreeMapConverter
-org.apache.tamaya.collections.TreeSetConverter
+org.apache.tamaya.hocon.HOCONFormat
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/CommonHOCONTestCaseCollection.java b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/CommonHOCONTestCaseCollection.java
new file mode 100644
index 0000000..fee5157
--- /dev/null
+++ b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/CommonHOCONTestCaseCollection.java
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hocon;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Class with a collection of common test cases each JSON processing
+ * class must be able to pass.
+ */
+public abstract class CommonHOCONTestCaseCollection {
+
+    abstract PropertySource getPropertiesFrom(URL source) throws Exception;
+
+    @Test
+    public void canReadNonLatinCharacters() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class
+             .getResource("/configs/valid/cyrillic.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource propertySource = getPropertiesFrom(configURL);
+
+        assertThat(propertySource.get("name")).isNotNull();
+        assertThat(propertySource.get("name").getValue()).isEqualTo("\u041e\u043b\u0438\u0432\u0435\u0440");
+        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f")).isNotNull();
+        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f").getValue()).isEqualTo("Fischer");
+    }
+
+    @Test
+    public void canReadUnicodeCharacters() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class
+                .getResource("/configs/valid/kanji.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource propertySource = getPropertiesFrom(configURL);
+
+        assertThat(propertySource.get("onamae")).isNotNull();
+        // 霊屋 = Tamaya
+        assertThat(propertySource.get("onamae").getValue()).isEqualTo("\u970a\u5c4b");
+    }
+
+    @Test
+    public void canReadNestedStringOnlyJSONConfigFile2() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class
+                .getResource("/configs/valid/simple-nested-string-only-config-1.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        System.out.println("simple-nested-string-only-config-1.conf -> " + properties.getProperties().values());
+
+        assertThat(properties.getProperties().keySet().size() >= 5).isTrue();
+
+        PropertyValue keyB = properties.get("b");
+        PropertyValue keyDO = properties.get("d.o");
+        PropertyValue keyDP = properties.get("d.p");
+
+        assertThat(keyB).isNotNull();
+        assertThat(keyB.getValue()).isEqualTo("B");
+        assertThat(keyDO).isNotNull();
+        assertThat(keyDO.getValue()).isEqualTo("O");
+        assertThat(keyDP).isNotNull();
+        assertThat(keyDP.getValue()).isEqualTo("P");
+    }
+
+    @Test
+    public void canReadNestedStringOnlyJSONConfigFileWithObjectInTheMiddle()
+            throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class
+                .getResource("/configs/valid/simple-nested-string-only-config-2.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet().size() >= 4).isTrue();
+
+        PropertyValue keyA = properties.get("a");
+        PropertyValue keyDO = properties.get("b.o");
+        PropertyValue keyDP = properties.get("b.p");
+        PropertyValue keyC = properties.get("c");
+
+        assertThat(keyA).isNotNull();
+        assertThat(keyA.getValue()).isEqualTo("A");
+        assertThat(keyC).isNotNull();
+        assertThat(keyC.getValue()).isEqualTo("C");
+        assertThat(keyDO).isNotNull();
+        assertThat(keyDO.getValue()).isEqualTo("O");
+        assertThat(keyDP).isNotNull();
+        assertThat(keyDP.getValue()).isEqualTo("P");
+    }
+
+    @Test
+    public void canHandleIllegalJSONFileWhichContainsAnArray() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/invalid/with-array.conf");
+
+        assertThat(configURL).isNotNull();
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test(expected = IOException.class)
+    public void canHandleIllegalJSONFileConsistingOfOneOpeningBracket() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/invalid/only-opening-bracket.conf");
+
+        assertThat(configURL).isNotNull();
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test
+    public void canHandleIllegalHoconFileWhichIsEmpty() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/invalid/empty-file.conf");
+
+        assertThat(configURL).isNotNull();
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test
+    public void priorityInConfigFileOverwriteExplicitlyGivenPriority() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/valid/with-explicit-priority.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(PropertySourceComparator.getOrdinal(properties)).isEqualTo(16784);
+    }
+
+    @Test
+    public void canReadFlatStringOnlyJSONConfigFile() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/valid/simple-flat-string-only-config.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(3).isEqualTo(properties.getProperties().size());
+
+        PropertyValue keyA = properties.get("a");
+        PropertyValue keyB = properties.get("b");
+        PropertyValue keyC = properties.get("c");
+
+        assertThat(keyA).isNotNull();
+        assertThat(keyA.getValue()).isEqualTo("A");
+        assertThat(keyB).isNotNull();
+        assertThat(keyB.getValue()).isEqualTo("B");
+        assertThat(keyC).isNotNull();
+        assertThat(keyC.getValue()).isEqualTo("C");
+    }
+
+    @Test
+    public void emptyJSONFileResultsNotInConfigException() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/invalid/empty-file.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        properties.getProperties();
+    }
+
+    @Test
+    public void canHandleEmptyJSONObject() throws Exception {
+        URL configURL = CommonHOCONTestCaseCollection.class.getResource("/configs/valid/empty-object-config.conf");
+
+        assertThat(configURL).isNotNull();
+
+        PropertySource properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet().size() >= 0).isTrue();
+    }
+}
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONFormatIT.java
similarity index 54%
copy from modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
copy to modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONFormatIT.java
index ec60e8d..2e39629 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
+++ b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONFormatIT.java
@@ -16,17 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.microprofile;
+package org.apache.tamaya.hocon;
 
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.junit.Test;
 
+import java.util.List;
+
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class MicroprofileDefaultPropertiesTest {
+/**
+ * Integration tests for {@link HOCONFormat}.
+ */
+public class HOCONFormatIT {
     @Test
-    public void hasOrdinalOf100() throws Exception {
-        MicroprofileDefaultProperties properties = new MicroprofileDefaultProperties();
+    public void jsonFormatCanBeFoundViaServiceLoader() throws Exception {
+        List<ConfigurationFormat> formats = ServiceContextManager.getServiceContext()
+                                                          .getServices(ConfigurationFormat.class);
 
-        assertThat(properties.getOrdinal()).isEqualTo(100);
+        ConfigurationFormat format = null;
+        for (ConfigurationFormat f : formats) {
+            if (f instanceof HOCONFormat) {
+                format = f;
+                break;
+            }
+        }
+        assertThat(format).isNotNull();
     }
-}
\ No newline at end of file
+}
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONFormatTest.java
similarity index 84%
copy from modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
copy to modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONFormatTest.java
index 872d90d..23ea45e 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
+++ b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONFormatTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.tamaya.json;
+package org.apache.tamaya.hocon;
 
 
 import org.apache.tamaya.format.ConfigurationData;
@@ -29,8 +29,13 @@ import java.net.URL;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class JSONFormatTest extends CommonJSONTestCaseCollection {
-    private final JSONFormat format = new JSONFormat();
+public class HOCONFormatTest extends CommonHOCONTestCaseCollection {
+    private final HOCONFormat format = new HOCONFormat();
+
+    @Test
+    public void testGetName() throws Exception {
+        assertThat(format.getName()).isEqualTo("hocon");
+    }
 
     @Test(expected = NullPointerException.class)
     public void acceptsNeedsNonNullParameter() throws Exception {
@@ -39,27 +44,27 @@ public class JSONFormatTest extends CommonJSONTestCaseCollection {
 
     @Test
     public void aNonJSONFileBasedURLIsNotAccepted() throws Exception {
-        URL url = new URL("file:///etc/service/conf.conf");
+        URL url = new URL("file:///etc/service/conf.xml");
 
         assertThat(format.accepts(url)).isFalse();
     }
 
     @Test
     public void aJSONFileBasedURLIsAccepted() throws Exception {
-        URL url = new URL("file:///etc/service/conf.json");
+        URL url = new URL("file:///etc/service/conf.conf");
 
         assertThat(format.accepts(url)).isTrue();
     }
 
     @Test
     public void aHTTPBasedURLIsNotAccepted() throws Exception {
-        URL url = new URL("http://nowhere.somewhere/conf.json");
+        URL url = new URL("http://nowhere.somewhere/conf.conf");
         assertThat(format.accepts(url)).isTrue();
     }
 
     @Test
     public void aFTPBasedURLIsNotAccepted() throws Exception {
-        URL url = new URL("ftp://nowhere.somewhere/a/b/c/d/conf.json");
+        URL url = new URL("ftp://nowhere.somewhere/a/b/c/d/conf.conf");
 
         assertThat(format.accepts(url)).isTrue();
     }
diff --git a/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONPropertySourceTest.java b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONPropertySourceTest.java
new file mode 100644
index 0000000..a9f94bf
--- /dev/null
+++ b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/HOCONPropertySourceTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.tamaya.hocon;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.apache.tamaya.spi.PropertySource;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class HOCONPropertySourceTest extends CommonHOCONTestCaseCollection {
+
+    @Test
+    public void testGetName() throws Exception {
+        URL configURL = HOCONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.conf");
+
+        assertThat(configURL).isNotNull();
+
+        HOCONPropertySource source = new HOCONPropertySource(configURL, 4);
+        assertThat(source.getName()).isEqualTo(configURL.toString());
+    }
+
+    @Test
+    public void tamayaOrdinalKeywordIsNotPropagatedAsNormalProperty() throws Exception {
+        URL configURL = HOCONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.conf");
+
+        assertThat(configURL).isNotNull();
+
+        HOCONPropertySource source = new HOCONPropertySource(configURL, 4);
+        assertThat(source.getOrdinal()).isEqualTo(16784);
+    }
+
+    @Test(expected = IOException.class)
+    public void testAcceptJsonArrays() throws Exception {
+        URL configURL = HOCONPropertySourceTest.class.getResource("/configs/invalid/array.conf");
+
+        assertThat(configURL).isNotNull();
+
+        new HOCONPropertySource(configURL);
+    }
+
+    @Override
+    PropertySource getPropertiesFrom(URL source) throws Exception {
+        return new HOCONPropertySource(source);
+    }
+}
diff --git a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/PathBasedHOCONPropertySourceProviderTest.java
similarity index 67%
copy from modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java
copy to modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/PathBasedHOCONPropertySourceProviderTest.java
index 748de0f..6eb6bc4 100644
--- a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java
+++ b/modules/formats/hocon/src/test/java/org/apache/tamaya/hocon/PathBasedHOCONPropertySourceProviderTest.java
@@ -16,30 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tamaya.yaml;
+package org.apache.tamaya.hocon;
 
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 /**
- * Tests for {@link PathBasedYamlPropertySourceProvider}.
+ * Tests for {@link PathBasedHOCONPropertySourceProvider}.
  */
-public class PathBasedYamlPropertySourceProviderTest {
+public class PathBasedHOCONPropertySourceProviderTest {
 
     @Test
     public void getPropertySources() {
-        PathBasedYamlPropertySourceProvider provider = new PathBasedYamlPropertySourceProvider(
-                "configs/valid/*.yaml"
+        PathBasedHOCONPropertySourceProvider provider = new PathBasedHOCONPropertySourceProvider(
+                "configs/valid/*.conf"
         );
         assertThat(provider.getPropertySources()).isNotNull();
-        assertThat(provider.getPropertySources()).hasSize(3);
+        assertThat(provider.getPropertySources()).hasSize(7);
     }
 
     @Test
     public void getPropertySources_one() {
-        PathBasedYamlPropertySourceProvider provider = new PathBasedYamlPropertySourceProvider(
-                "configs/valid/conta*.yaml"
+        PathBasedHOCONPropertySourceProvider provider = new PathBasedHOCONPropertySourceProvider(
+                "configs/valid/cyril*.conf"
         );
         assertThat(provider.getPropertySources()).isNotNull();
         assertThat(provider.getPropertySources()).hasSize(1);
@@ -47,17 +47,17 @@ public class PathBasedYamlPropertySourceProviderTest {
 
     @Test
     public void getPropertySources_two() {
-        PathBasedYamlPropertySourceProvider provider = new PathBasedYamlPropertySourceProvider(
-                "configs/valid/test*.yaml"
+        PathBasedHOCONPropertySourceProvider provider = new PathBasedHOCONPropertySourceProvider(
+                "configs/valid/simple-*.conf"
         );
         assertThat(provider.getPropertySources()).isNotNull();
-        assertThat(provider.getPropertySources()).hasSize(2);
+        assertThat(provider.getPropertySources()).hasSize(3);
     }
 
     @Test
     public void getPropertySources_none() {
-        PathBasedYamlPropertySourceProvider provider = new PathBasedYamlPropertySourceProvider(
-                "configs/valid/foo*.yaml", "configs/valid/*.yml"
+        PathBasedHOCONPropertySourceProvider provider = new PathBasedHOCONPropertySourceProvider(
+                "configs/valid/foo*.conf", "configs/valid/*.CONF"
         );
         assertThat(provider.getPropertySources()).isNotNull();
         assertThat(provider.getPropertySources()).hasSize(0);
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/formats/hocon/src/test/resources/arquillian.xml
similarity index 51%
copy from modules/microprofile/src/test/tck-suite.xml
copy to modules/formats/hocon/src/test/resources/arquillian.xml
index 84d36ad..1eeb58b 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/formats/hocon/src/test/resources/arquillian.xml
@@ -1,4 +1,4 @@
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -6,7 +6,7 @@ distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
-with the License.  You may obtain a copy current the License at
+with the License.  You may obtain a copy of the License at
 
    http://www.apache.org/licenses/LICENSE-2.0
 
@@ -17,11 +17,14 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
-            <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
-            </packages>
-        </test>
-</suite>
\ No newline at end of file
+<arquillian xmlns="http://jboss.org/schema/arquillian"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+    <container qualifier="daemon" default="true">
+        <configuration>
+            <property name="host">localhost</property>
+            <property name="port">12346</property>
+            <property name="serverJarFile">target/arquillian-daemon-main.jar</property>
+        </configuration>
+    </container>
+</arquillian>
diff --git a/modules/formats/hocon/src/test/resources/configs/invalid/array.conf b/modules/formats/hocon/src/test/resources/configs/invalid/array.conf
new file mode 100644
index 0000000..c44e3ca
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/invalid/array.conf
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+[
+
+]
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/invalid/empty-file.conf b/modules/formats/hocon/src/test/resources/configs/invalid/empty-file.conf
new file mode 100644
index 0000000..71209a2
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/invalid/empty-file.conf
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/invalid/only-opening-bracket.conf b/modules/formats/hocon/src/test/resources/configs/invalid/only-opening-bracket.conf
new file mode 100644
index 0000000..7e6fa74
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/invalid/only-opening-bracket.conf
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/invalid/with-array.conf b/modules/formats/hocon/src/test/resources/configs/invalid/with-array.conf
new file mode 100644
index 0000000..0dc33f2
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/invalid/with-array.conf
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  "a" : "A"
+  b : {
+    c : C
+    "d" : [
+      1, 2
+    ]
+  }
+}
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/cyrillic.conf b/modules/formats/hocon/src/test/resources/configs/valid/cyrillic.conf
new file mode 100644
index 0000000..a0f3dfa
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/cyrillic.conf
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  name = Оливер
+  фамилия : Fischer
+}
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/empty-object-config.conf b/modules/formats/hocon/src/test/resources/configs/valid/empty-object-config.conf
new file mode 100644
index 0000000..14d8583
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/empty-object-config.conf
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+}
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/kanji.conf b/modules/formats/hocon/src/test/resources/configs/valid/kanji.conf
new file mode 100644
index 0000000..f36ab04
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/kanji.conf
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  onamae : 霊屋
+}
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/simple-flat-string-only-config.conf b/modules/formats/hocon/src/test/resources/configs/valid/simple-flat-string-only-config.conf
new file mode 100644
index 0000000..3c2d372
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/simple-flat-string-only-config.conf
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  a : A
+  b : B
+  c : C
+}
\ No newline at end of file
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/simple-nested-string-only-config-1.conf b/modules/formats/hocon/src/test/resources/configs/valid/simple-nested-string-only-config-1.conf
new file mode 100644
index 0000000..c99c26c
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/simple-nested-string-only-config-1.conf
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  a : A
+  b : B
+  c : C
+  d {
+    o: O
+    p: P
+  }
+}
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/simple-nested-string-only-config-2.conf b/modules/formats/hocon/src/test/resources/configs/valid/simple-nested-string-only-config-2.conf
new file mode 100644
index 0000000..132a026
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/simple-nested-string-only-config-2.conf
@@ -0,0 +1,25 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  "a" : "A",
+  "b" : {
+    "o" : "O",
+    "p" : "P"
+  },
+  "c" : "C"
+}
diff --git a/modules/formats/hocon/src/test/resources/configs/valid/with-explicit-priority.conf b/modules/formats/hocon/src/test/resources/configs/valid/with-explicit-priority.conf
new file mode 100644
index 0000000..ed03270
--- /dev/null
+++ b/modules/formats/hocon/src/test/resources/configs/valid/with-explicit-priority.conf
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+{
+  # some useful comment here
+  tamaya.ordinal : 16784
+  a : A // another comment
+}
diff --git a/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java b/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java
index 02b2203..6ab0299 100644
--- a/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java
+++ b/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONDataBuilder.java
@@ -31,7 +31,7 @@ import org.apache.tamaya.spi.PropertyValue;
 import java.util.Objects;
 
 /**
- * Visitor implementation to read a JSON asString input source.
+ * Visitor implementation to read a JSON toString input source.
  */
 class JSONDataBuilder {
 
@@ -62,11 +62,11 @@ class JSONDataBuilder {
                     dataNode.setValue(key, null);
                     break;
                 case OBJECT:
-                    ObjectValue oval = dataNode.setObject(key);
+                    ObjectValue oval = dataNode.addObject(key);
                     addJsonObject((JsonObject)val, oval);
                     break;
                 case ARRAY:
-                    ListValue aval = dataNode.setList(key);
+                    ListValue aval = dataNode.addList(key);
                     addArray((JsonArray)val, aval);
                     break;
                 default:
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java b/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
index 872d90d..08b90a4 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
+++ b/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONFormatTest.java
@@ -32,6 +32,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 public class JSONFormatTest extends CommonJSONTestCaseCollection {
     private final JSONFormat format = new JSONFormat();
 
+    @Test
+    public void testGetName() throws Exception {
+        assertThat(format.getName()).isEqualTo("json");
+    }
+
     @Test(expected = NullPointerException.class)
     public void acceptsNeedsNonNullParameter() throws Exception {
         format.accepts(null);
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java b/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
index a3b2bfb..86fd791 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
+++ b/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
@@ -78,7 +78,7 @@ public class JSONVisitorTest {
         JSONDataBuilder visitor = new JSONDataBuilder("Test:array", startNode);
         PropertyValue data = visitor.build();
         assertThat(data).isNotNull();
-        System.out.println(data.asString());
+        System.out.println(data.toString());
     }
 
     @Test
@@ -91,7 +91,7 @@ public class JSONVisitorTest {
         JSONDataBuilder visitor = new JSONDataBuilder("Test:array", startNode);
         PropertyValue data = visitor.build();
         assertThat(data).isNotNull();
-        System.out.println(data.asString());
+        System.out.println(data.toString());
     }
 
 }
diff --git a/modules/formats/pom.xml b/modules/formats/pom.xml
index bdc7632..d35a3ba 100644
--- a/modules/formats/pom.xml
+++ b/modules/formats/pom.xml
@@ -49,6 +49,8 @@
     <modules>
         <module>base</module>
         <module>json</module>
+        <module>hjson</module>
         <module>yaml</module>
+        <module>hocon</module>
     </modules>
 </project>
diff --git a/modules/formats/yaml/src/main/java/org/apache/tamaya/yaml/YAMLFormat.java b/modules/formats/yaml/src/main/java/org/apache/tamaya/yaml/YAMLFormat.java
index c1b6038..75d14d4 100644
--- a/modules/formats/yaml/src/main/java/org/apache/tamaya/yaml/YAMLFormat.java
+++ b/modules/formats/yaml/src/main/java/org/apache/tamaya/yaml/YAMLFormat.java
@@ -79,7 +79,7 @@ public class YAMLFormat implements ConfigurationFormat {
                 throw new ConfigException("Unknown YamlType encountered: " + config.getClass().getName());
             }
             if (LOG.isLoggable(Level.FINEST)) {
-                LOG.finest(String.format("Read data from %s : %s", resource, data.asString()));
+                LOG.finest(String.format("Read data from %s : %s", resource, data.toString()));
             }
             return new ConfigurationData(resource, this, data);
         } catch (Throwable t) {
@@ -91,10 +91,10 @@ public class YAMLFormat implements ConfigurationFormat {
     private void addObject(Map<String, Object> values, ObjectValue dataNode) {
         values.forEach((key, value) -> {
             if (value instanceof List) {
-                ListValue list = dataNode.setList(key);
+                ListValue list = dataNode.addList(key);
                 addList((List) value, list);
             } else if (value instanceof Map) {
-                ObjectValue object = dataNode.setObject(key);
+                ObjectValue object = dataNode.addObject(key);
                 addObject((Map) value, object);
             } else {
                 if (value == null) {
@@ -115,7 +115,7 @@ public class YAMLFormat implements ConfigurationFormat {
                 ObjectValue ov = dataNode.addObject();
                 addObject((Map) val, ov);
             } else {
-                dataNode.setValue(String.valueOf(val));
+                dataNode.addValue(String.valueOf(val));
             }
         });
     }
diff --git a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java b/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java
index 748de0f..e101f46 100644
--- a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java
+++ b/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/PathBasedYamlPropertySourceProviderTest.java
@@ -33,7 +33,7 @@ public class PathBasedYamlPropertySourceProviderTest {
                 "configs/valid/*.yaml"
         );
         assertThat(provider.getPropertySources()).isNotNull();
-        assertThat(provider.getPropertySources()).hasSize(3);
+        assertThat(provider.getPropertySources()).hasSize(4);
     }
 
     @Test
diff --git a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLFormatTest.java b/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLFormatTest.java
index d9a288e..6d056f4 100644
--- a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLFormatTest.java
+++ b/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLFormatTest.java
@@ -35,6 +35,11 @@ public class YAMLFormatTest {
     private final YAMLFormat format = new YAMLFormat();
 
     @Test
+    public void testGetName() throws Exception {
+        assertThat(format.getName()).isEqualTo("yaml");
+    }
+
+    @Test
     public void testAcceptURL() throws MalformedURLException {
         assertThat(format.accepts(new URL("http://127.0.0.1/anyfile.yaml"))).isTrue();
     }
@@ -55,9 +60,18 @@ public class YAMLFormatTest {
     }
 
     @Test
-    public void testRead() throws IOException {
+    public void testRead_Map() throws IOException {
         URL configURL = YAMLPropertySourceTest.class.getResource("/configs/valid/contact.yaml");
-        assertThat(format.accepts(configURL)).isTrue();
+        ConfigurationData data = format.readConfiguration(configURL.toString(), configURL.openStream());
+        assertThat(data).isNotNull();
+        for(Map.Entry<String,String> en:data.getData().get(0).toMap().entrySet()) {
+            System.out.println(en.getKey() + " -> " + en.getValue());
+        }
+    }
+
+    @Test
+    public void testRead_List() throws IOException {
+        URL configURL = YAMLPropertySourceTest.class.getResource("/configs/valid/list.yaml");
         ConfigurationData data = format.readConfiguration(configURL.toString(), configURL.openStream());
         assertThat(data).isNotNull();
         for(Map.Entry<String,String> en:data.getData().get(0).toMap().entrySet()) {
diff --git a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java b/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java
index 881735d..651a7d7 100644
--- a/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java
+++ b/modules/formats/yaml/src/test/java/org/apache/tamaya/yaml/YAMLPropertySourceTest.java
@@ -45,4 +45,14 @@ public class YAMLPropertySourceTest {
         YAMLPropertySource source = new YAMLPropertySource(configURL, 4);
         assertThat(source.getOrdinal()).isEqualTo(4);
     }
+
+    @Test
+    public void testYamlCreateWithURL() throws Exception {
+        URL configURL = YAMLPropertySourceTest.class.getResource("/configs/valid/test.yaml");
+
+        assertThat(configURL).isNotNull();
+
+        YAMLPropertySource source = new YAMLPropertySource(configURL);
+        assertThat(source.getOrdinal()).isEqualTo(0);
+    }
 }
diff --git a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/modules/formats/yaml/src/test/resources/configs/valid/list.yaml
similarity index 56%
copy from modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
copy to modules/formats/yaml/src/test/resources/configs/valid/list.yaml
index 167bc27..cf273c2 100644
--- a/modules/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ b/modules/formats/yaml/src/test/resources/configs/valid/list.yaml
@@ -16,16 +16,6 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.tamaya.collections.ArrayListConverter
-org.apache.tamaya.collections.CollectionConverter
-org.apache.tamaya.collections.HashMapConverter
-org.apache.tamaya.collections.ConcurrentHashMapConverter
-org.apache.tamaya.collections.HashSetConverter
-org.apache.tamaya.collections.LinkedListConverter
-org.apache.tamaya.collections.ListConverter
-org.apache.tamaya.collections.MapConverter
-org.apache.tamaya.collections.SetConverter
-org.apache.tamaya.collections.SortedSetConverter
-org.apache.tamaya.collections.SortedMapConverter
-org.apache.tamaya.collections.TreeMapConverter
-org.apache.tamaya.collections.TreeSetConverter
+- val: 1
+- val: 2
+- val: 3
\ No newline at end of file
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
index d9ca214..335e133 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
@@ -256,7 +256,7 @@ public final class ConfigurationFunctions {
     }
 
     /**
-     * Creates a {@link PropertySource}, based on the given {@link Configuration}. The keys and propertx map
+     * Creates a {@link PropertySource}, based on the given {@link Configuration}. The keys and propertx mapProperties
      * are dynamically calculated, so the returned PropertySource is a real dynamic wrapper.
      * @param name the name of the property source, not null.
      * @param ordinal ordinal of the property source.
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
index be23c28..7245ece 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
@@ -90,7 +90,7 @@ class MappedPropertySource implements PropertySource {
      * </p>
      *
      * @param key the property's key, not {@code null}.
-     * @return the property createValue map, where {@code map.current(key) == createValue},
+     * @return the property createValue mapProperties, where {@code mapProperties.current(key) == createValue},
      *         including also any metadata. In case a createValue is {@code null},
      *         simply return {@code null}.
      */
diff --git a/modules/functions/src/test/java/org/apache/tamaya/functions/EnrichedPropertySourceTest.java b/modules/functions/src/test/java/org/apache/tamaya/functions/EnrichedPropertySourceTest.java
index 71ab69e..1942b43 100644
--- a/modules/functions/src/test/java/org/apache/tamaya/functions/EnrichedPropertySourceTest.java
+++ b/modules/functions/src/test/java/org/apache/tamaya/functions/EnrichedPropertySourceTest.java
@@ -27,7 +27,6 @@ import java.util.Map;
 
 import static java.util.Collections.EMPTY_MAP;
 import static org.apache.tamaya.functions.MethodNotMockedAnswer.NOT_MOCKED_ANSWER;
-import static org.apache.tamaya.spi.PropertyValue.of;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -89,7 +88,7 @@ public class EnrichedPropertySourceTest {
 
         PropertyValue result = sut.get("e");
 
-        assertThat(result).isNotNull().isNotNull().isEqualTo(of("e", "9", "name"));
+        assertThat(result).isNotNull().isNotNull().isEqualTo(PropertyValue.createValue("e", "9"));
     }
 
     @Test
@@ -106,7 +105,7 @@ public class EnrichedPropertySourceTest {
 
         PropertyValue result = sut.get("b");
 
-        assertThat(result).isNotNull().isEqualTo(of("b", "9", "name"));
+        assertThat(result).isNotNull().isEqualTo(PropertyValue.createValue("b", "9"));
     }
 
     @Test
@@ -123,7 +122,7 @@ public class EnrichedPropertySourceTest {
 
         PropertyValue result = sut.get("a");
 
-        assertThat(result).isNotNull().isEqualTo(of("a", "1", "name"));
+        assertThat(result).isNotNull().isEqualTo(PropertyValue.createValue("a", "1"));
     }
 
     @Test
@@ -140,7 +139,7 @@ public class EnrichedPropertySourceTest {
 
         PropertyValue result = sut.get("b");
 
-        assertThat(result).isNotNull().isEqualTo(of("b", "2", "name"));
+        assertThat(result).isNotNull().isEqualTo(PropertyValue.createValue("b", "2"));
     }
 
 
@@ -163,12 +162,12 @@ public class EnrichedPropertySourceTest {
         Map<String, PropertyValue> properties = sut.getProperties();
 
         assertThat(properties).isNotNull().isNotEmpty()
-                              .containsEntry("a", of("a", "1", "name"))
-                              .containsEntry("b", of("b", "2", "name"))
-                              .containsEntry("c", of("c", "3", "name"))
-                              .containsEntry("d", of("d", "4", "name"))
-                              .containsEntry("e", of("e", "9", "name"))
-                              .containsEntry("f", of("f", "11", "name"))
+                              .containsEntry("a", PropertyValue.createValue("a", "1"))
+                              .containsEntry("b", PropertyValue.createValue("b", "2"))
+                              .containsEntry("c", PropertyValue.createValue("c", "3"))
+                              .containsEntry("d", PropertyValue.createValue("d", "4"))
+                              .containsEntry("e", PropertyValue.createValue("e", "9"))
+                              .containsEntry("f", PropertyValue.createValue("f", "11"))
                               .hasSize(6);
     }
 
@@ -187,10 +186,10 @@ public class EnrichedPropertySourceTest {
         Map<String, PropertyValue> properties = sut.getProperties();
 
         assertThat(properties).isNotNull().isNotEmpty()
-                              .containsEntry("a", of("a", "1", "name"))
-                              .containsEntry("b", of("b", "9", "name"))
-                              .containsEntry("c", of("c", "3", "name"))
-                              .containsEntry("d", of("d", "11", "name"))
+                              .containsEntry("a", PropertyValue.createValue("a", "1"))
+                              .containsEntry("b", PropertyValue.createValue("b", "9"))
+                              .containsEntry("c", PropertyValue.createValue("c", "3"))
+                              .containsEntry("d", PropertyValue.createValue("d", "11"))
                               .hasSize(4);
 
     }
@@ -210,10 +209,10 @@ public class EnrichedPropertySourceTest {
         Map<String, PropertyValue> properties = sut.getProperties();
 
         assertThat(properties).isNotNull().isNotEmpty()
-                              .containsEntry("a", of("a", "1", "name"))
-                              .containsEntry("b", of("b", "2", "name"))
-                              .containsEntry("c", of("c", "3", "name"))
-                              .containsEntry("d", of("d", "4", "name"))
+                              .containsEntry("a", PropertyValue.createValue("a", "1"))
+                              .containsEntry("b", PropertyValue.createValue("b", "2"))
+                              .containsEntry("c", PropertyValue.createValue("c", "3"))
+                              .containsEntry("d", PropertyValue.createValue("d", "4"))
                               .hasSize(4);
     }
 
diff --git a/modules/functions/src/test/java/org/apache/tamaya/functions/FilteredPropertySourceTest.java b/modules/functions/src/test/java/org/apache/tamaya/functions/FilteredPropertySourceTest.java
index 0f30639..3184901 100644
--- a/modules/functions/src/test/java/org/apache/tamaya/functions/FilteredPropertySourceTest.java
+++ b/modules/functions/src/test/java/org/apache/tamaya/functions/FilteredPropertySourceTest.java
@@ -23,7 +23,6 @@ import org.apache.tamaya.spi.PropertyValue;
 import org.junit.Test;
 
 import static org.apache.tamaya.functions.MethodNotMockedAnswer.NOT_MOCKED_ANSWER;
-import static org.apache.tamaya.spi.PropertyValue.of;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doReturn;
@@ -106,7 +105,7 @@ public class FilteredPropertySourceTest {
 
     @Test
     public void getReturnsNullInsteadOfValueBecausOfFilter() {
-        PropertyValue pv = of("abc", "000", "UT");
+        PropertyValue pv = PropertyValue.createValue("abc", "000");
         PropertySource propertySource = mock(PropertySource.class, NOT_MOCKED_ANSWER);
         doReturn(pv).when(propertySource).get(eq("abc"));
 
@@ -126,7 +125,7 @@ public class FilteredPropertySourceTest {
 
     @Test
     public void getReturnsValueBecauseItIsNotFiltered() {
-        PropertyValue pv = of("abc", "000", "UT");
+        PropertyValue pv = PropertyValue.createValue("abc", "000");
         PropertySource propertySource = mock(PropertySource.class, NOT_MOCKED_ANSWER);
         doReturn(pv).when(propertySource).get(eq("abc"));
 
@@ -182,9 +181,9 @@ public class FilteredPropertySourceTest {
         FilteredPropertySource fps = new FilteredPropertySource(imps, filter);
 
         assertThat(fps.getProperties()).isNotEmpty()
-                                       .containsEntry("a", of("a", "1", "s"))
-                                       .containsEntry("b", of("b", "2", "s"))
-                                       .containsEntry("c", of("c", "3", "s"))
+                                       .containsEntry("a", PropertyValue.createValue("a", "1"))
+                                       .containsEntry("b", PropertyValue.createValue("b", "2"))
+                                       .containsEntry("c", PropertyValue.createValue("c", "3"))
                                        .hasSize(3);
     }
 
@@ -204,8 +203,8 @@ public class FilteredPropertySourceTest {
         FilteredPropertySource fps = new FilteredPropertySource(imps, filter);
 
         assertThat(fps.getProperties()).isNotEmpty()
-                                       .containsEntry("b", of("b", "2", "s"))
-                                       .containsEntry("c", of("c", "3", "s"))
+                                       .containsEntry("b", PropertyValue.createValue("b", "2"))
+                                       .containsEntry("c", PropertyValue.createValue("c", "3"))
                                        .hasSize(2);
 
     }
diff --git a/modules/functions/src/test/java/org/apache/tamaya/functions/MappedPropertySourceTest.java b/modules/functions/src/test/java/org/apache/tamaya/functions/MappedPropertySourceTest.java
index 2930230..d73b81b 100644
--- a/modules/functions/src/test/java/org/apache/tamaya/functions/MappedPropertySourceTest.java
+++ b/modules/functions/src/test/java/org/apache/tamaya/functions/MappedPropertySourceTest.java
@@ -23,7 +23,6 @@ import org.junit.Test;
 
 import java.util.Map;
 
-import static org.apache.tamaya.spi.PropertyValue.of;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class MappedPropertySourceTest {
@@ -57,9 +56,9 @@ public class MappedPropertySourceTest {
         Map<String, PropertyValue> result = mappedPropertySource.getProperties();
 
         assertThat(result).isNotNull()
-                          .containsEntry("a", of("a", "1", "PS[mapped]"))
-                          .containsEntry("b", of("b", "2", "PS[mapped]"))
-                          .containsEntry("M", of("M", "3", "PS[mapped]"))
+                          .containsEntry("a", PropertyValue.createValue("a", "1").setMeta("source", "PS[mapped]"))
+                          .containsEntry("b", PropertyValue.createValue("b", "2").setMeta("source","PS[mapped]"))
+                          .containsEntry("M", PropertyValue.createValue("M", "3").setMeta("source","PS[mapped]"))
                           .hasSize(3);
     }
 
@@ -76,9 +75,9 @@ public class MappedPropertySourceTest {
         Map<String, PropertyValue> result = mappedPropertySource.getProperties();
 
         assertThat(result).isNotNull()
-                          .containsEntry("a", of("a", "1", "PS[mapped]"))
-                          .containsEntry("b", of("b", "2", "PS[mapped]"))
-                          .containsEntry("c", of("c", "3", "PS[mapped]"))
+                          .containsEntry("a", PropertyValue.createValue("a", "1").setMeta("source","PS[mapped]"))
+                          .containsEntry("b", PropertyValue.createValue("b", "2").setMeta("source","PS[mapped]"))
+                          .containsEntry("c", PropertyValue.createValue("c", "3").setMeta("source","PS[mapped]"))
                           .hasSize(3);
     }
 
@@ -100,8 +99,8 @@ public class MappedPropertySourceTest {
         Map<String, PropertyValue> result = mappedPropertySource.getProperties();
 
         assertThat(result).isNotNull()
-                          .containsEntry("a", of("a", "1", "PS[mapped]"))
-                          .containsEntry("b", of("b", "2", "PS[mapped]"))
+                          .containsEntry("a", PropertyValue.createValue("a", "1").setMeta("source","PS[mapped]"))
+                          .containsEntry("b", PropertyValue.createValue("b", "2").setMeta("source","PS[mapped]"))
                           .hasSize(2);
     }
 
@@ -166,7 +165,8 @@ public class MappedPropertySourceTest {
 
         MappedPropertySource mappedPropertySource = new MappedPropertySource(propertySource, KEY_MAPPER);
 
-        assertThat(mappedPropertySource.get("M")).isNotNull().isEqualTo(of("M", "_a_", "PS[mapped]"));
+        assertThat(mappedPropertySource.get("M")).isNotNull().isEqualTo(PropertyValue.createValue("M", "_a_")
+                .setMeta("source","PS[mapped]"));
     }
 
 
diff --git a/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java b/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
index 9c13102..71786c0 100644
--- a/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
+++ b/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
@@ -23,7 +23,6 @@ import org.junit.Test;
 
 import java.util.Map;
 
-import static org.apache.tamaya.spi.PropertyValue.of;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class ValueMappedPropertySourceTest {
@@ -152,9 +151,9 @@ public class ValueMappedPropertySourceTest {
 
         assertThat(result).isNotNull()
                           .isNotEmpty()
-                          .containsEntry("a", of("a", "1", "S"))
-                          .containsEntry("b", of("b", "2", "S"))
-                          .containsEntry("c", of("c", "3", "S"))
+                          .containsEntry("a", PropertyValue.createValue("a", "1"))
+                          .containsEntry("b", PropertyValue.createValue("b", "2"))
+                          .containsEntry("c", PropertyValue.createValue("c", "3"))
                           .hasSize(3);
 
     }
@@ -170,9 +169,9 @@ public class ValueMappedPropertySourceTest {
 
         assertThat(result).isNotNull()
                           .isNotEmpty()
-                          .containsEntry("a", of("a", "1", "S"))
-                          .containsEntry("b", of("b", "2", "S"))
-                          .containsEntry("m", of("m", "3m", "S"))
+                          .containsEntry("a", PropertyValue.createValue("a", "1"))
+                          .containsEntry("b", PropertyValue.createValue("b", "2"))
+                          .containsEntry("m", PropertyValue.createValue("m", "3m"))
                           .hasSize(3);
     }
 
diff --git a/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/AbstractHazelcastPropertySource.java b/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/AbstractHazelcastPropertySource.java
index 9ae9b9a..d0775cc 100644
--- a/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/AbstractHazelcastPropertySource.java
+++ b/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/AbstractHazelcastPropertySource.java
@@ -42,7 +42,7 @@ import java.util.logging.Logger;
  *
  * Basically all kind of property entris can be stored. Additionally this property source allows
  * to pass additional getMeta-entries to control the TTL of the data in milliseconds. For illustration
- * the following map will store {@code my.entry} with a TLL of 20000 milliseconds (20 seconds) and
+ * the following mapProperties will store {@code my.entry} with a TLL of 20000 milliseconds (20 seconds) and
  * store {@code my.otherEntry} with infinite lifetime (as long as the cluster is alive):
  *
  * {@code
@@ -58,9 +58,9 @@ public abstract class AbstractHazelcastPropertySource extends BasePropertySource
 implements MutablePropertySource{
     /** The logger. */
     private static final Logger LOG = Logger.getLogger(AbstractHazelcastPropertySource.class.getName());
-    /** The Hazelcast config map used. */
+    /** The Hazelcast config mapProperties used. */
     private Map<String, PropertyValue> configMap = new HashMap<>();
-    /** The hazelcast map reference ID used, by default {@code tamaya.configuration}. */
+    /** The hazelcast mapProperties reference ID used, by default {@code tamaya.configuration}. */
     private String mapReference = "tamaya.configuration";
     /** Flag if this property source is read-only. */
     private boolean readOnly = false;
@@ -131,7 +131,7 @@ implements MutablePropertySource{
 
     /**
      * Set the Hazelcast reference name for the Tamaya configuration Map.
-     * @param mapReference the map reference to be used, not null.
+     * @param mapReference the mapProperties reference to be used, not null.
      */
     public void setMapReference(String mapReference){
         if (!Objects.equals(mapReference, this.mapReference)) {
@@ -176,7 +176,7 @@ implements MutablePropertySource{
     }
 
     /**
-     * Reloads the configuration map from Hazelcast completely.
+     * Reloads the configuration mapProperties from Hazelcast completely.
      */
     public void refresh() {
         IMap<String,String> config = getHazelcastInstance().getMap(mapReference);
diff --git a/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java b/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
index f66b451..1d53339 100644
--- a/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
+++ b/modules/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
@@ -29,7 +29,7 @@ import java.util.Objects;
  *
  * Basically all kind of property entris can be stored. Additionally this property source allows
  * to pass additional getMeta-entries to control the TTL of the data in milliseconds. For illustration
- * the following map will store {@code my.entry} with a TLL of 20000 milliseconds (20 seconds) and
+ * the following mapProperties will store {@code my.entry} with a TLL of 20000 milliseconds (20 seconds) and
  * store {@code my.otherEntry} with infinite lifetime (as long as the cluster is alive):
  *
  * {@code
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
index 8c28a55..0f206c7 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
@@ -137,7 +137,7 @@ public class CDIAwareServiceContext implements ServiceContext, ClassloaderAware
     }
 
     @Override
-    public Enumeration<URL> getResources(String resource) throws IOException {
+    public Collection<URL> getResources(String resource) {
         return defaultServiceContext.getResources(resource);
     }
 
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
index c698df5..887d490 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
@@ -216,8 +216,18 @@ final class ServiceLoaderServiceContext implements ServiceContext {
     }
 
     @Override
-    public Enumeration<URL> getResources(String resource) throws IOException{
-        return classLoader.getResources(resource);
+    public Collection<URL> getResources(String resource){
+        List<URL> urls = new ArrayList<>();
+        try {
+            Enumeration<URL> found = getClassLoader().getResources(resource);
+            while (found.hasMoreElements()) {
+                urls.add(found.nextElement());
+            }
+        }catch(Exception e){
+            Logger.getLogger(ServiceContext.class.getName())
+                    .log(Level.FINEST, e, () -> "Failed to lookup resources: " + resource);
+        }
+        return urls;
     }
 
     @Override
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java
index 8ed0588..6895623 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java
@@ -35,8 +35,8 @@ class ProvidedPropertySource implements PropertySource{
     final Map<String,PropertyValue> config = new HashMap<>();
 
     public ProvidedPropertySource(){
-        config.put("a.b.c.key3", PropertyValue.of("a.b.c.key3","keys current a.b.c.key3",getName()));
-        config.put("a.b.c.key4", PropertyValue.of("a.b.c.key4","keys current a.b.c.key4", getName()));
+        config.put("a.b.c.key3", PropertyValue.createValue("a.b.c.key3","keys current a.b.c.key3").setMeta("source", getName()));
+        config.put("a.b.c.key4", PropertyValue.createValue("a.b.c.key4","keys current a.b.c.key4").setMeta("source", getName()));
     }
 
     @Override
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
index 5d823a5..d934606 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
@@ -74,7 +74,7 @@ public class TestPropertySource implements PropertySource{
 
     @Override
     public Map<String, PropertyValue> getProperties() {
-        return PropertyValue.map(config ,getName());
+        return PropertyValue.mapProperties(config ,getName());
     }
 
 }
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java
index 8158634..8d13569 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java
@@ -54,7 +54,7 @@ import java.lang.reflect.Method;
  *     <li>Each key evaluated is looked up in the configuration, until a configuration value has been found.</li>
  *     <li>if not successful, {@link Config#defaultValue()} is used, if present.</li>
  *     <li>If no value could be evaluated a ({@link org.apache.tamaya.ConfigException} is thrown, unless {@link Config#required()}
- *     is set to {@code true} (default is {@code false}).</li>
+ *     is setPropertyValue to {@code true} (default is {@code false}).</li>
  *     <li>If necessary, the final <i>raw</i> value is converted into the required type to be injected, using a
  *     {@link org.apache.tamaya.spi.PropertyConverter}, then the value is injected.</li>
  * </ul>
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java
index 7cc33d3..b0ef112 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java
@@ -156,7 +156,7 @@ public final class InjectionUtils {
             return Collections.singletonList(configAnnot.key());
         }
         String name = method.getName();
-        if (name.startsWith("get") || name.startsWith("set")) {
+        if (name.startsWith("get") || name.startsWith("setPropertyValue")) {
             return expandKey(Character.toLowerCase(name.charAt(3)) + name.substring(4));
         }
         return expandKey(Character.toLowerCase(name.charAt(0)) + name.substring(1));
@@ -211,7 +211,7 @@ public final class InjectionUtils {
         List<String> result = new ArrayList<>();
         result.add(name);
         // 1) Check for _, replace with dots
-        // 2) Check for camel case, add dots in lowercase
+        // 2) Check for camel case, addPropertyValue dots in lowercase
         return result;
     }
 
diff --git a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
index 1b12f01..af36b32 100644
--- a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
+++ b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
@@ -63,14 +63,14 @@ public class TestPropertySource implements PropertySource {
 
     @Override
     public PropertyValue get(String key) {
-        return PropertyValue.of(key,properties.get(key),getName());
+        return PropertyValue.createValue(key,properties.get(key)).setMeta("source", getName());
     }
 
     @Override
     public Map<String, PropertyValue> getProperties() {
         Map<String,PropertyValue> result = new HashMap<>();
         for(Map.Entry<String,String> en:properties.entrySet()){
-            result.put(en.getKey(), PropertyValue.of(en.getKey(), en.getValue(), getName()));
+            result.put(en.getKey(), PropertyValue.createValue(en.getKey(), en.getValue()).setMeta("source", getName()));
         }
         return result;
     }
diff --git a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
index 2aed714..91b5f7f 100644
--- a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
+++ b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
@@ -103,7 +103,7 @@ public class DefaultDynamicValueTest {
 
     @Test
     public void testCommitAndGet() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         assertThat(val).isNotNull();
@@ -112,7 +112,7 @@ public class DefaultDynamicValueTest {
 
     @Test
     public void testCommitAndGets() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.EXPLICIT);
@@ -120,14 +120,14 @@ public class DefaultDynamicValueTest {
         assertThat("aValue").isEqualTo(val.evaluateValue());
         // change config
         val.get();
-        properties.put("a",PropertyValue.of("a","aValue2","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue2").setMeta("source", "test"));
         assertThat(val.updateValue()).isTrue();
         assertThat("aValue2").isEqualTo(val.commitAndGet());
     }
 
     @Test
     public void testCommit() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.EXPLICIT);
@@ -135,7 +135,7 @@ public class DefaultDynamicValueTest {
         assertThat("aValue").isEqualTo(val.evaluateValue());
         // change config
         val.get();
-        properties.put("a",PropertyValue.of("a","aValue2","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue2").setMeta("source", "test"));
         assertThat("aValue2").isEqualTo(val.evaluateValue());
         assertThat(val.updateValue()).isTrue();
         val.commit();
@@ -154,37 +154,37 @@ public class DefaultDynamicValueTest {
 
     @Test
     public void testAddRemoveListener() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.IMMEDIATE);
         val.addListener(consumer);
         // change config
         val.get();
-        properties.put("a",PropertyValue.of("a","aValue2","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue2").setMeta("source", "test"));
         val.get();
         assertThat(event).isNotNull();
         event = null;
         val.removeListener(consumer);
-        properties.put("a",PropertyValue.of("a","aValue3","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue3").setMeta("source", "test"));
         val.updateValue();
         assertThat(event).isNull();
     }
 
     @Test
     public void testGet() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.IMMEDIATE);
-        properties.put("a",PropertyValue.of("a","aValue2","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue2").setMeta("source", "test"));
         val.updateValue();
         assertThat("aValue2").isEqualTo(val.get());
     }
 
     @Test
     public void testUpdateValue() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.EXPLICIT);
@@ -199,13 +199,13 @@ public class DefaultDynamicValueTest {
 
     @Test
     public void testEvaluateValue() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.EXPLICIT);
         assertThat(val.get()).isNotNull();
         assertThat("aValue").isEqualTo(val.evaluateValue());
-        properties.put("a",PropertyValue.of("a","aValue2","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue2").setMeta("source", "test"));
         assertThat("aValue2").isEqualTo(val.evaluateValue());
     }
 
@@ -228,7 +228,7 @@ public class DefaultDynamicValueTest {
 
     @Test
     public void testIfPresent() throws Exception {
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         DynamicValue val = DefaultDynamicValue.of(this, getClass().getDeclaredField("myValue"),
                 config);
         val.setUpdatePolicy(UpdatePolicy.IMMEDIATE);
@@ -244,7 +244,7 @@ public class DefaultDynamicValueTest {
                 config);
         val.setUpdatePolicy(UpdatePolicy.IMMEDIATE);
         assertThat("bla").isEqualTo(val.orElse("bla"));
-        properties.put("a",PropertyValue.of("a","aValue","test"));
+        properties.put("a",PropertyValue.createValue("a","aValue").setMeta("source", "test"));
         val.updateValue();
         assertThat("aValue").isEqualTo(val.orElse("bla"));
     }
diff --git a/modules/jndi/src/main/java/org/apache/tamaya/jndi/JNDIPropertySource.java b/modules/jndi/src/main/java/org/apache/tamaya/jndi/JNDIPropertySource.java
index 67b2383..516ba43 100644
--- a/modules/jndi/src/main/java/org/apache/tamaya/jndi/JNDIPropertySource.java
+++ b/modules/jndi/src/main/java/org/apache/tamaya/jndi/JNDIPropertySource.java
@@ -84,20 +84,20 @@ public class JNDIPropertySource extends BasePropertySource {
     }
 
     /**
-     * If the property source is not scanable, an empty map is returned, otherwise
-     * the current JNDI context is mapped to configuration map:
+     * If the property source is not scanable, an empty mapProperties is returned, otherwise
+     * the current JNDI context is mapped to configuration mapProperties:
      * <ul>
      *   <li>For each leave entry one entry is created.</li>
      *   <li>The key is the fully path of parent contexts, separated by a '.'.</li>
      *   <li>The createValue is the createValue returned from {@code String.createValue(leaveObject)}.</li>
      * </ul>
-     * @return a map representation of the JNDI tree.
+     * @return a mapProperties representation of the JNDI tree.
      */
     @Override
     public Map<String, PropertyValue> getProperties() {
         if(scannable){
             try {
-                return PropertyValue.map(toMap(this.context), getName());
+                return PropertyValue.mapProperties(toMap(this.context), getName());
             } catch (NamingException e) {
                 LOG.log(Level.WARNING, "Error scanning JNDI tree.", e);
             }
@@ -140,14 +140,14 @@ public class JNDIPropertySource extends BasePropertySource {
 
     /**
      * Maps the given JNDI Context to a {@code Map<String,String>}:
-     *  mapped to configuration map:
+     *  mapped to configuration mapProperties:
      * <ul>
      *   <li>For each leave entry one entry is created.</li>
      *   <li>The key is the fully path of parent contexts, separated by a '.'.</li>
      *   <li>The createValue is the createValue returned from {@code String.createValue(leaveObject)}.</li>
      * </ul>
      * @param ctx the JNDI context, not null.
-     * @return the corresponding map, never null.
+     * @return the corresponding mapProperties, never null.
      * @throws NamingException If some JNDI issues occur.
      */
     public static Map<String,String> toMap(Context ctx) throws NamingException {
diff --git a/modules/microprofile/pom.xml b/modules/microprofile/pom.xml
index 6d358fb..94b4d42 100644
--- a/modules/microprofile/pom.xml
+++ b/modules/microprofile/pom.xml
@@ -70,6 +70,11 @@ under the License.
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>1.3.2</version>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.tamaya</groupId>
@@ -89,6 +94,11 @@ under the License.
         </dependency>
         <dependency>
             <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-collections</artifactId>
+            <version>${tamaya-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
             <artifactId>tamaya-events</artifactId>
             <version>${tamaya-version}</version>
         </dependency>
@@ -170,6 +180,13 @@ under the License.
                             <suiteXmlFiles>
                                 <suiteXmlFile>src/test/tck-suite.xml</suiteXmlFile>
                             </suiteXmlFiles>
+                            <!-- These env variables are required for org.eclipse.configjsr.CDIPropertyNameMatchingTest -->
+                            <environmentVariables>
+                                <my_int_property>45</my_int_property>
+                                <MY_BOOLEAN_PROPERTY>true</MY_BOOLEAN_PROPERTY>
+                                <my_string_property>haha</my_string_property>
+                                <MY_STRING_PROPERTY>woohoo</MY_STRING_PROPERTY>
+                            </environmentVariables>
                         </configuration>
                     </plugin>
                 </plugins>
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileAdapter.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileAdapter.java
index 4fb211b..c9816d9 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileAdapter.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileAdapter.java
@@ -135,6 +135,20 @@ public final class MicroprofileAdapter{
     }
 
     /**
+     * Converts a Microprofile {@link Converter} into a Tamaya {@link PropertyConverter}.
+     * @param converter the Microprofile {@link Converter} instance, not null.
+     * @param <T> the target type
+     * @return the corresponding Tamaya {@link PropertyConverter} instance, never null.
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public static <T> PropertyConverter<T> toPropertyConverter(int priority, Converter<T> converter) {
+        if(converter instanceof MicroprofileConverter){
+            return ((MicroprofileConverter)converter).getPropertyConverter();
+        }
+        return new TamayaPropertyConverter<>(priority, converter);
+    }
+
+    /**
      * Converts a Tamaya {@link PropertyConverter} into a Microprofile.io {@link Converter}.
      * @param converter the Tamaya {@link PropertyConverter} instance, not null.
      * @param <T> the target type
@@ -158,10 +172,10 @@ public final class MicroprofileAdapter{
     }
 
     /**
-     * Converts the given Tamaya key, createValue map into a corresponding String based map, hereby
+     * Converts the given Tamaya key, createValue mapProperties into a corresponding String based mapProperties, hereby
      * omitting all getMeta-entries.
-     * @param properties the Tamaya key, createValue map, not null.
-     * @return the corresponding String based map, never null.
+     * @param properties the Tamaya key, createValue mapProperties, not null.
+     * @return the corresponding String based mapProperties, never null.
      */
     public static Map<String, String> toStringMap(Map<String, PropertyValue> properties) {
         Map<String, String> valueMap = new HashMap<>(properties.size());
@@ -174,11 +188,11 @@ public final class MicroprofileAdapter{
     }
 
     /**
-     * Converts the given String based key, createValue map into a corresponding String,PropertyValue
-     * based map.
-     * @param properties the String based key, createValue map, not null.
+     * Converts the given String based key, createValue mapProperties into a corresponding String,PropertyValue
+     * based mapProperties.
+     * @param properties the String based key, createValue mapProperties, not null.
      * @param source the source of the entries, not null.
-     * @return the corresponding String,PropertyValue based map, never null.
+     * @return the corresponding String,PropertyValue based mapProperties, never null.
      */
     public static Map<String, PropertyValue> toPropertyValueMap(Map<String, String> properties, String source) {
         Map<String, PropertyValue> valueMap = new HashMap<>(properties.size());
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfig.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfig.java
index a351a7d..04f6132 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfig.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfig.java
@@ -80,17 +80,13 @@ public class MicroprofileConfig implements Config, Serializable {
 
     @Override
     public String toString() {
-        return "MicroprofileConfig{" +
+        return "TamayaConfig{" +
                 "delegate=" + delegate +
                 '}';
     }
 
     private void writeObject(ObjectOutputStream out) throws IOException {
-        if (!(this.delegate instanceof Serializable)) {
-            out.writeObject(this.delegate.getSnapshot());
-        } else {
-            out.writeObject(this.delegate);
-        }
+        out.writeObject(this.delegate.getSnapshot());
     }
 
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigBuilder.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigBuilder.java
index 16df3c6..f495340 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigBuilder.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigBuilder.java
@@ -18,12 +18,18 @@
  */
 package org.apache.tamaya.microprofile;
 
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Objects;
+import java.util.ServiceLoader;
 
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConfigurationBuilder;
+import org.apache.tamaya.spi.PropertyConverter;
 import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.spisupport.PriorityServiceComparator;
 import org.apache.tamaya.spisupport.PropertySourceComparator;
 import org.apache.tamaya.spisupport.propertysource.EnvironmentPropertySource;
 import org.apache.tamaya.spisupport.propertysource.SystemPropertySource;
@@ -33,6 +39,8 @@ import org.eclipse.microprofile.config.spi.ConfigSource;
 import org.eclipse.microprofile.config.spi.ConfigSourceProvider;
 import org.eclipse.microprofile.config.spi.Converter;
 
+import javax.annotation.Priority;
+
 /**
  * Created by atsticks on 23.03.17.
  */
@@ -41,6 +49,9 @@ final class MicroprofileConfigBuilder implements ConfigBuilder {
     private ConfigurationBuilder configurationBuilder;
 
     MicroprofileConfigBuilder(ConfigurationBuilder configurationBuilder) {
+        for(ConfigSource cs:ServiceLoader.load(ConfigSource.class)){
+            System.out.println(cs.getName());
+        }
         this.configurationBuilder = Objects.requireNonNull(configurationBuilder);
         configurationBuilder.addDefaultPropertyConverters();
     }
@@ -64,8 +75,12 @@ final class MicroprofileConfigBuilder implements ConfigBuilder {
     public ConfigBuilder addDefaultSources() {
         configurationBuilder.addPropertySources(
                 new SystemPropertySource(400), //
-                new EnvironmentPropertySource(300), //
-                new MicroprofileDefaultProperties() //
+                new EnvironmentPropertySource(300) //
+        );
+        MicroprofileDefaultPropertiesProvider provider = new MicroprofileDefaultPropertiesProvider();
+        provider.init(this.configurationBuilder.getClassLoader());
+        configurationBuilder.addPropertySources(
+                provider.getPropertySources()
         );
         configurationBuilder.sortPropertySources(PropertySourceComparator.getInstance());
         return this;
@@ -133,9 +148,11 @@ final class MicroprofileConfigBuilder implements ConfigBuilder {
     public ConfigBuilder withConverters(Converter<?>... converters) {
         for (Converter<?> converter : converters) {
             TypeLiteral lit = TypeLiteral.of(converter.getClass());
-            TypeLiteral target = TypeLiteral.of(lit.getType());
-
-            configurationBuilder.removePropertyConverters(target);
+            Type[] types = TypeLiteral.getGenericInterfaceTypeParameters(converter.getClass(), Converter.class);
+            if(types.length==0){
+                throw new IllegalArgumentException("Cannot evaluate converter target type for " + converter);
+            }
+            TypeLiteral target = TypeLiteral.of(types[0]);
             configurationBuilder.addPropertyConverters(target,
                     MicroprofileAdapter.toPropertyConverter(converter));
         }
@@ -145,16 +162,45 @@ final class MicroprofileConfigBuilder implements ConfigBuilder {
     @SuppressWarnings("unchecked")
     @Override
     public <T> ConfigBuilder withConverter(Class<T> type, int priority, Converter<T> converter) {
-        configurationBuilder.addPropertyConverters(TypeLiteral.of(type), MicroprofileAdapter.toPropertyConverter(converter));
+        configurationBuilder.addPropertyConverters(TypeLiteral.of(type), MicroprofileAdapter.toPropertyConverter(priority, converter));
         return this;
     }
 
     @Override
     public Config build() {
+        configurationBuilder.sortPropertyConverter(MicroProfileAwareConverterComparator.INSTANCE);
         Configuration config = getConfigurationBuilder().build();
         Configuration.setCurrent(config);
-
         return MicroprofileAdapter.toConfig(config);
     }
 
+    @Override
+    public String toString() {
+        return "TamayaConfigBuilder{" +
+                "delegate=" + configurationBuilder +
+                '}';
+    }
+
+    /**
+     * This comparator will extract any internally adapted Microprofile {@link Converter} to
+     * evaluate the corrent {@link javax.annotation.Priority} and use this information for comparison.
+     */
+    private static final class MicroProfileAwareConverterComparator implements Comparator<PropertyConverter>{
+
+        static final MicroProfileAwareConverterComparator INSTANCE = new MicroProfileAwareConverterComparator();
+
+        @Override
+        public int compare(PropertyConverter o1, PropertyConverter o2) {
+            int priority1 = PriorityServiceComparator.getPriority(o1) + 99; // Microprofile default
+            int priority2 = PriorityServiceComparator.getPriority(o2) + 99; // Microprofile default
+            if(o1 instanceof TamayaPropertyConverter){
+                priority1 = ((TamayaPropertyConverter)o1).getPriority();
+            }
+            if(o2 instanceof TamayaPropertyConverter){
+                priority2 = ((TamayaPropertyConverter)o2).getPriority();
+            }
+            return priority2 - priority1;
+        }
+    }
+
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigProviderResolver.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigProviderResolver.java
index ac92aa6..ba028c2 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigProviderResolver.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigProviderResolver.java
@@ -50,6 +50,7 @@ public class MicroprofileConfigProviderResolver extends ConfigProviderResolver {
             MicroprofileConfigBuilder microConfigBuilder = new MicroprofileConfigBuilder(builder);
             microConfigBuilder.addDefaultSources();
             microConfigBuilder.addDiscoveredSources();
+            microConfigBuilder.addDiscoveredConverters();
             config = microConfigBuilder.build();
             this.configs.put(loader, config);
         }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSource.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSource.java
index 39ca119..b0169b5 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSource.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSource.java
@@ -75,4 +75,10 @@ public class MicroprofileConfigSource implements ConfigSource{
         return valueMap;
     }
 
+    @Override
+    public String toString() {
+        return "TamayaConfigSource{" +
+                "delegate=" + delegate +
+                '}';
+    }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSourceProvider.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSourceProvider.java
index c2dd229..fc2123b 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSourceProvider.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConfigSourceProvider.java
@@ -49,4 +49,11 @@ public class MicroprofileConfigSourceProvider implements ConfigSourceProvider{
             return MicroprofileAdapter.toConfigSources(delegate.getPropertySources());
         }
     }
+
+    @Override
+    public String toString() {
+        return "TamayaConfigSourceProvider{" +
+                "delegate=" + delegate +
+                '}';
+    }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConverter.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConverter.java
index b351d80..5c6d366 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConverter.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileConverter.java
@@ -49,4 +49,11 @@ public class MicroprofileConverter<T> implements Converter<T> {
                 TypeLiteral.of(getClass()).getType())).build();
             return delegate.convert(value, ctx);
     }
+
+    @Override
+    public String toString() {
+        return "TamayaConverter{" +
+                "delegate=" + delegate +
+                '}';
+    }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java
index b20dc8f..50c81c1 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java
@@ -18,16 +18,19 @@
  */
 package org.apache.tamaya.microprofile;
 
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.spisupport.propertysource.PropertiesResourcePropertySource;
 
+import java.net.URL;
+
 
 /**
  * Default property source for config properties in the classpath.
  */
 public class MicroprofileDefaultProperties extends PropertiesResourcePropertySource{
 
-    public MicroprofileDefaultProperties() {
-        super("META-INF/microprofile-config.properties", null);
+    public MicroprofileDefaultProperties(URL url) {
+        super(url);
         setDefaultOrdinal(100);
     }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesProvider.java
similarity index 50%
copy from modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java
copy to modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesProvider.java
index b20dc8f..355cc66 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultProperties.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesProvider.java
@@ -18,16 +18,42 @@
  */
 package org.apache.tamaya.microprofile;
 
+import org.apache.tamaya.spi.*;
 import org.apache.tamaya.spisupport.propertysource.PropertiesResourcePropertySource;
 
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 
 /**
  * Default property source for config properties in the classpath.
  */
-public class MicroprofileDefaultProperties extends PropertiesResourcePropertySource{
+public class MicroprofileDefaultPropertiesProvider implements PropertySourceProvider, ClassloaderAware {
+
+    private ClassLoader classLoader;
+
+    @Override
+    public Collection<PropertySource> getPropertySources() {
+        if(classLoader==null){
+            classLoader = ServiceContextManager.getDefaultClassLoader();
+        }
+        ServiceContext sc = ServiceContextManager.getServiceContext(classLoader);
+        List<PropertySource> propertySources = new ArrayList<>();
+        for(URL url:sc.getResources("META-INF/microprofile-config.properties")){
+            propertySources.add(new MicroprofileDefaultProperties(url));
+        }
+        return propertySources;
+    }
+
+    @Override
+    public void init(ClassLoader classLoader) {
+        this.classLoader = classLoader;
+    }
 
-    public MicroprofileDefaultProperties() {
-        super("META-INF/microprofile-config.properties", null);
-        setDefaultOrdinal(100);
+    @Override
+    public ClassLoader getClassLoader() {
+        return this.classLoader;
     }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaConfiguration.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaConfiguration.java
index cfc0ead..98a3081 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaConfiguration.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaConfiguration.java
@@ -89,4 +89,10 @@ public class TamayaConfiguration implements Configuration{
         return new DefaultConfigurationSnapshot(this, keys);
     }
 
+    @Override
+    public String toString() {
+        return "MicroprofileConfigr{" +
+                "delegate=" + delegate +
+                '}';
+    }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertyConverter.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertyConverter.java
index a5088d4..f220da5 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertyConverter.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertyConverter.java
@@ -21,6 +21,7 @@ package org.apache.tamaya.microprofile;
 
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
+import org.apache.tamaya.spisupport.PriorityServiceComparator;
 import org.eclipse.microprofile.config.spi.ConfigSource;
 import org.eclipse.microprofile.config.spi.Converter;
 
@@ -33,17 +34,42 @@ import java.util.Objects;
 public class TamayaPropertyConverter<T> implements PropertyConverter<T> {
 
     private Converter<T> delegate;
+    private Integer priority;
 
     public TamayaPropertyConverter(Converter<T> delegate){
         this.delegate = Objects.requireNonNull(delegate);
     }
 
+    public TamayaPropertyConverter(Integer priority, Converter<T> delegate){
+        this.delegate = Objects.requireNonNull(delegate);
+        this.priority = priority;
+    }
+
     public Converter<T> getConverter(){
         return this.delegate;
     }
 
+    public Integer getPriority(){
+        if(priority != null) {
+            return priority;
+        }
+        int prio = PriorityServiceComparator.getPriority(this.delegate);
+        if(prio == 1){ // Tamaya default priority
+            prio = 100; // Microprofile default prio
+        }
+        return prio;
+    }
+
     @Override
     public T convert(String value, ConversionContext context) {
         return delegate.convert(value);
     }
+
+    @Override
+    public String toString() {
+        return "MicroprofileConverter{" +
+                "delegate=" + delegate +
+                ", priority=" + getPriority() +
+                '}';
+    }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySource.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySource.java
index 4732595..fda37df 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySource.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySource.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.microprofile;
 
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PriorityServiceComparator;
 import org.eclipse.microprofile.config.spi.ConfigSource;
 
 import java.util.HashMap;
@@ -55,7 +56,11 @@ public class TamayaPropertySource implements PropertySource {
 
     @Override
     public PropertyValue get(String key) {
-        return PropertyValue.createValue(key, delegate.getValue(key)).setMeta("source",getName());
+        String delegateValue = delegate.getValue(key);
+        if(delegateValue==null){
+            return null;
+        }
+        return PropertyValue.createValue(key, delegateValue).setMeta("source",getName());
     }
 
     @Override
@@ -71,4 +76,11 @@ public class TamayaPropertySource implements PropertySource {
         return valueMap;
     }
 
+    @Override
+    public String toString() {
+        return "MicroprofileConfigSource{" +
+                "delegate=" + delegate +
+                ", priority=" + PriorityServiceComparator.getPriority(this) +
+                '}';
+    }
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySourceProvider.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySourceProvider.java
index 5b0bcf7..18e922b 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySourceProvider.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/TamayaPropertySourceProvider.java
@@ -21,6 +21,7 @@ package org.apache.tamaya.microprofile;
 
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertySourceProvider;
+import org.apache.tamaya.spisupport.PriorityServiceComparator;
 import org.eclipse.microprofile.config.spi.ConfigSource;
 import org.eclipse.microprofile.config.spi.ConfigSourceProvider;
 
@@ -53,4 +54,12 @@ public class TamayaPropertySourceProvider implements PropertySourceProvider{
         }
     }
 
+    @Override
+    public String toString() {
+        return "MicroprofileConfigSourceProvider{" +
+                "delegate=" + delegate +
+                ", priority=" + PriorityServiceComparator.getPriority(this) +
+                '}';
+    }
+
 }
diff --git a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java
index cca7f26..55e6183 100644
--- a/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java
+++ b/modules/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java
@@ -35,6 +35,7 @@ import org.apache.tamaya.Configuration;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
+import org.apache.tamaya.spi.PropertyValue;
 import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
@@ -118,15 +119,22 @@ public class MicroprofileConfigurationProducer {
         if (String.class.equals(context.getTargetType().getRawType())) {
             return textValue;
         }
-        Object value = null;
-        if (textValue != null || Optional.class.equals(context.getTargetType().getRawType())) {
-            LOGGER.log(Level.FINEST, () -> "Converting KEY: " + context.getKey() + "(" + context.getTargetType() + "), textValue: " + textValue);
+        if(textValue!=null){
+            context = context.toBuilder()
+                .setValues(PropertyValue.createValue(context.getKey(), textValue)
+                .setMeta("source", "Microprofile-Config"))
+                .build();
+        }
+        ConversionContext finalContext = context;
+        Object resolvedValue = null;
+        if (textValue != null || Optional.class.equals(finalContext.getTargetType().getRawType())) {
+            LOGGER.log(Level.FINEST, () -> "Converting KEY: " + finalContext.getKey() + "(" + finalContext.getTargetType() + "), textValue: " + textValue);
             List<PropertyConverter> converters = Configuration.current().getContext()
-                    .getPropertyConverters((TypeLiteral) context.getTargetType());
+                    .getPropertyConverters((TypeLiteral) finalContext.getTargetType());
             for (PropertyConverter<Object> converter : converters) {
                 try {
-                    value = converter.convert(textValue, context);
-                    if (value != null) {
+                    resolvedValue = converter.convert(textValue, finalContext);
+                    if (resolvedValue != null) {
                         LOGGER.log(Level.FINEST, "Parsed default createValue from '" + textValue + "' into " +
                                 injectionPoint);
                         break;
@@ -137,7 +145,7 @@ public class MicroprofileConfigurationProducer {
                 }
             }
         }
-        return value;
+        return resolvedValue;
     }
 
     @Produces
diff --git a/modules/microprofile/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/modules/microprofile/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
similarity index 92%
rename from modules/microprofile/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
rename to modules/microprofile/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
index 585700b..6e580da 100644
--- a/modules/microprofile/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
+++ b/modules/microprofile/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -17,4 +17,4 @@
 #  under the License.
 #
 
-org.apache.tamaya.microprofile.MicroprofileDefaultProperties
\ No newline at end of file
+org.apache.tamaya.microprofile.MicroprofileDefaultPropertiesProvider
\ No newline at end of file
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/ConverterTest.java b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/ConverterTest.java
new file mode 100644
index 0000000..ef5cc49
--- /dev/null
+++ b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/ConverterTest.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2016-2017 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tamaya.microprofile;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+
+
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.spi.ConfigProviderResolver;
+import org.eclipse.microprofile.config.tck.converters.Donald;
+import org.eclipse.microprofile.config.tck.converters.Duck;
+import org.eclipse.microprofile.config.tck.converters.DuckConverter;
+import org.eclipse.microprofile.config.tck.converters.UpperCaseDuckConverter;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:struberg@apache.org">Mark Struberg</a>
+ * @author <a href="mailto:emijiang@uk.ibm.com">Emily Jiang</a>
+ * @author <a href="mailto:john.d.ament@gmail.com">John D. Ament</a>
+ */
+public class ConverterTest {
+
+    private Config config = createConfig();
+
+    private Config createConfig() {
+        // defines 2 config with the converters defined in different orders.
+        // Order must not matter, the UpperCaseDuckConverter must always be used as it has the highest priority
+        return ConfigProviderResolver.instance().getBuilder().addDefaultSources()
+                .withConverters(new DuckConverter())
+                .build();
+    }
+
+    private Duck namedDuck = config.getOptionalValue("tck.config.test.javaconfig.converter.duckname", Duck.class)
+            .orElse(null);
+
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testDonaldNotConvertedByDefault() {
+        config.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class);
+    }
+
+    @Test
+    public void testDonaldConversionWithLambdaConverter() {
+        Config newConfig = ConfigProviderResolver.instance().getBuilder().addDefaultSources()
+            .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s))
+            .build();
+        Donald donald = newConfig.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class);
+        Assert.assertNotNull(donald);
+        Assert.assertEquals(donald.getName(), "Duck");
+    }
+
+    @Test
+    public void testDonaldConversionWithMultipleLambdaConverters() {
+        // defines 2 config with the lambda converters defined in different orders.
+        // Order must not matter, the lambda with the upper case must always be used as it has the highest priority
+        Config config1 = ConfigProviderResolver.instance().getBuilder().addDefaultSources()
+            .withConverter(Donald.class, 101, (s) -> Donald.iLikeDonald(s.toUpperCase()))
+            .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s))
+            .build();
+        Config config2 = ConfigProviderResolver.instance().getBuilder().addDefaultSources()
+            .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s))
+            .withConverter(Donald.class, 101, (s) -> Donald.iLikeDonald(s.toUpperCase()))
+            .build();
+
+        Donald donald = config1.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class);
+        Assert.assertNotNull(donald);
+        Assert.assertEquals("The converter with the highest priority (using upper case) must be used.",
+                "DUCK", donald.getName());
+        donald = config2.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class);
+        Assert.assertNotNull(donald);
+        Assert.assertEquals("The converter with the highest priority (using upper case) must be used.", "DUCK",
+                donald.getName());
+    }
+
+    @Test
+    public void testInteger() {
+        Integer value = config.getValue("tck.config.test.javaconfig.converter.integervalue", Integer.class);
+        Assert.assertEquals(value, Integer.valueOf(1234));
+    }
+
+    @Test
+    public void testInt() {
+        int value = config.getValue("tck.config.test.javaconfig.converter.integervalue", int.class);
+        Assert.assertEquals(value, 1234);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testInteger_Broken() {
+        Integer value = config.getValue("tck.config.test.javaconfig.converter.integervalue.broken", Integer.class);
+    }
+
+    @Test
+    public void testLong() {
+        Long value = config.getValue("tck.config.test.javaconfig.converter.longvalue", Long.class);
+        Assert.assertEquals(value, Long.valueOf(1234567890));
+    }
+
+    @Test
+    public void testlong() {
+        long primitiveValue = config.getValue("tck.config.test.javaconfig.converter.longvalue", long.class);
+        Assert.assertEquals(primitiveValue, 1234567890L);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testLong_Broken() {
+        config.getValue("tck.config.test.javaconfig.converter.longvalue.broken", Long.class);
+    }
+
+    @Test
+    public void testFloat() {
+        Float value = config.getValue("tck.config.test.javaconfig.converter.floatvalue", Float.class);
+        Assert.assertEquals(value, Float.valueOf(12.34f));
+    }
+
+    @Test
+    public void testfloat() {
+        float value = config.getValue("tck.config.test.javaconfig.converter.floatvalue", float.class);
+        Assert.assertEquals(value, 12.34f, 0.0f);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testFloat_Broken() {
+        config.getValue("tck.config.test.javaconfig.converter.floatvalue.broken", Float.class);
+    }
+
+    @Test
+    public void testDouble() {
+        Double value = config.getValue("tck.config.test.javaconfig.converter.doublevalue", Double.class);
+        Assert.assertEquals(value, Double.valueOf(12.34d));
+    }
+
+    @Test
+    public void testdouble() {
+        double value = config.getValue("tck.config.test.javaconfig.converter.doublevalue", double.class);
+        Assert.assertEquals(value,12.34d, 0.0d);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testDouble_Broken() {
+        Double value = config.getValue("tck.config.test.javaconfig.converter.doublevalue.broken", Double.class);
+    }
+
+    @Test
+    public void testDuration() {
+        Duration value = config.getValue("tck.config.test.javaconfig.converter.durationvalue", Duration.class);
+        Assert.assertEquals(value, Duration.parse("PT15M"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testDuration_Broken() {
+        Duration value = config.getValue("tck.config.test.javaconfig.converter.durationvalue.broken", Duration.class);
+    }
+
+    @Test
+    public void testLocalTime() {
+        LocalTime value = config.getValue("tck.config.test.javaconfig.converter.localtimevalue", LocalTime.class);
+        Assert.assertEquals(value, LocalTime.parse("10:37"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testLocalTime_Broken() {
+        LocalTime value = config.getValue("tck.config.test.javaconfig.converter.localtimevalue.broken", LocalTime.class);
+    }
+
+    @Test
+    public void testLocalDate() {
+        LocalDate value = config.getValue("tck.config.test.javaconfig.converter.localdatevalue", LocalDate.class);
+        Assert.assertEquals(value, LocalDate.parse("2017-12-24"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testLocalDate_Broken() {
+        LocalDate value = config.getValue("tck.config.test.javaconfig.converter.localdatevalue.broken", LocalDate.class);
+    }
+
+    @Test
+    public void testLocalDateTime() {
+        LocalDateTime value = config.getValue("tck.config.test.javaconfig.converter.localdatetimevalue", LocalDateTime.class);
+        Assert.assertEquals(value, LocalDateTime.parse("2017-12-24T10:25:30"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testLocalDateTime_Broken() {
+        LocalDateTime value = config.getValue("tck.config.test.javaconfig.converter.localdatetimevalue.broken", LocalDateTime.class);
+    }
+
+    @Test
+    public void testOffsetDateTime() {
+        OffsetDateTime value = config.getValue("tck.config.test.javaconfig.converter.offsetdatetimevalue", OffsetDateTime.class);
+        Assert.assertEquals(value, OffsetDateTime.parse("2007-12-03T10:15:30+01:00"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testOffsetDateTime_Broken() {
+        OffsetDateTime value = config.getValue("tck.config.test.javaconfig.converter.offsetdatetimevalue.broken", OffsetDateTime.class);
+    }
+
+    @Test
+    public void testOffsetTime() {
+        OffsetTime value = config.getValue("tck.config.test.javaconfig.converter.offsettimevalue", OffsetTime.class);
+        OffsetTime parsed = OffsetTime.parse("13:45:30.123456789+02:00");
+        Assert.assertEquals(value, parsed);
+    }
+    
+
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testOffsetTime_Broken() {
+        OffsetTime value = config.getValue("tck.config.test.javaconfig.converter.offsettimevalue.broken", OffsetTime.class);
+    }
+
+    @Test
+    public void testZoneOffset() {
+        ZoneOffset value = config.getValue("tck.config.test.javaconfig.converter.zoneoffsetvalue", ZoneOffset.class);
+        ZoneOffset parsed = ZoneOffset.of("+02:00");
+        Assert.assertEquals(value, parsed);
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void testZoneOffset_Broken() {
+        ZoneOffset value = config.getValue("tck.config.test.javaconfig.converter.zoneoffsetvalue.broken", ZoneOffset.class);
+    }
+    
+    @Test
+    public void testInstant() {
+        Instant value = config.getValue("tck.config.test.javaconfig.converter.instantvalue", Instant.class);
+        Assert.assertEquals(value, Instant.parse("2015-06-02T21:34:33.616Z"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testInstant_Broken() {
+        Instant value = config.getValue("tck.config.test.javaconfig.converter.instantvalue.broken", Instant.class);
+    }
+
+    @Test
+    public void testBoolean() {
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.true", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.true", boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.true_uppercase", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.true_mixedcase", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.false", Boolean.class));
+
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.one", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.zero", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.seventeen", Boolean.class));
+
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.yes", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.yes_uppercase", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.yes_mixedcase", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.no", Boolean.class));
+
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.y", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.y_uppercase", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.n", Boolean.class));
+
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.on", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.on_uppercase", Boolean.class));
+        Assert.assertTrue(config.getValue("tck.config.test.javaconfig.configvalue.boolean.on_mixedcase", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.off", Boolean.class));
+        Assert.assertFalse(config.getValue("tck.config.test.javaconfig.configvalue.boolean.off", boolean.class));
+    }
+
+    @Test
+    public void testCustomConverter() {
+        Assert.assertEquals(namedDuck.getName(), "Hannelore");
+    }
+
+    @Test
+    public void testDuckConversionWithMultipleConverters() {
+        // defines 2 config with the converters defined in different orders.
+        // Order must not matter, the UpperCaseDuckConverter must always be used as it has the highest priority
+        Config config1 = ConfigProviderResolver.instance().getBuilder().addDefaultSources()
+            .withConverters(new UpperCaseDuckConverter(), new DuckConverter())
+            .build();
+        Config config2 = ConfigProviderResolver.instance().getBuilder().addDefaultSources()
+            .withConverters(new DuckConverter(), new UpperCaseDuckConverter())
+            .build();
+
+        Duck duck = config1.getValue("tck.config.test.javaconfig.converter.duckname", Duck.class);
+        Assert.assertNotNull(duck);
+        Assert.assertEquals("The converter with the highest priority (UpperCaseDuckConverter) must be used.",
+                "HANNELORE", duck.getName());
+
+        duck = config2.getValue("tck.config.test.javaconfig.converter.duckname", Duck.class);
+        Assert.assertNotNull(duck);
+        // the UpperCaseDuckConverter has highest priority
+        Assert.assertEquals("The converter with the highest priority (UpperCaseDuckConverter) must be used.",
+                "HANNELORE", duck.getName());
+    }
+
+    @Test
+    public void testURLConverter() throws MalformedURLException {
+        URL url = config.getValue("tck.config.test.javaconfig.converter.urlvalue", URL.class);
+        Assert.assertEquals(url, new URL("http://microprofile.io"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testURLConverterBroken() throws Exception {
+        URL ignored = config.getValue("tck.config.test.javaconfig.converter.urlvalue.broken", URL.class);
+    }
+
+    @Test
+    public void testURIConverter() {
+        URI uri = config.getValue("tck.config.test.javaconfig.converter.urivalue", URI.class);
+        Assert.assertEquals(uri, URI.create("http://microprofile.io"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testURIConverterBroken() throws Exception {
+        URI ignored = config.getValue("tck.config.test.javaconfig.converter.urivalue.broken", URI.class);
+    }
+}
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileAdapterTest.java b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileAdapterTest.java
index e8b6db2..97bb56e 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileAdapterTest.java
+++ b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileAdapterTest.java
@@ -33,11 +33,13 @@ import org.eclipse.microprofile.config.spi.ConfigSource;
 import org.eclipse.microprofile.config.spi.Converter;
 import org.junit.Test;
 
+import java.lang.reflect.Field;
 import java.util.*;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class MicroprofileAdapterTest {
+
     @Test
     public void toConfig() throws Exception {
         Configuration config = Configuration.current();
@@ -67,13 +69,13 @@ public class MicroprofileAdapterTest {
         assertThat(mpConfig.getPropertyNames()).isEqualTo(config.getProperties().keySet());
     }
 
-    @Test
-    public void toConfigurationWithNoneMicroprofileConfig() throws Exception {
-        Config config = new MyConfig();
-        Configuration result = MicroprofileAdapter.toConfiguration(config);
-
-        assertThat(result).isNotNull().isInstanceOf(TamayaConfiguration.class);
-    }
+//    @Test
+//    public void toConfigurationWithNoneMicroprofileConfig() throws Exception {
+//        Config config = new MyConfig();
+//        Configuration result = MicroprofileAdapter.toConfiguration(config);
+//
+//        assertThat(result).isNotNull().isInstanceOf(TamayaConfiguration.class);
+//    }
 
     @Test
     public void toConfigSources() throws Exception {
@@ -179,27 +181,27 @@ public class MicroprofileAdapterTest {
         assertThat("toPropertyValueMap").isEqualTo(tamayaProps.get("a").getMeta("source"));
     }
 
-    static class MyConfig implements Config {
-        @Override
-        public <T> T getValue(String s, Class<T> aClass) {
-            throw new RuntimeException("Not implemented yet!");
-        }
-
-        @Override
-        public <T> Optional<T> getOptionalValue(String s, Class<T> aClass) {
-            throw new RuntimeException("Not implemented yet!");
-        }
-
-        @Override
-        public Iterable<String> getPropertyNames() {
-            throw new RuntimeException("Not implemented yet!");
-        }
-
-        @Override
-        public Iterable<ConfigSource> getConfigSources() {
-            throw new RuntimeException("Not implemented yet!");
-        }
-    }
+//    private static class MyConfig implements Config {
+//        @Override
+//        public <T> T getValue(String s, Class<T> aClass) {
+//            throw new RuntimeException("Not implemented yet!");
+//        }
+//
+//        @Override
+//        public <T> Optional<T> getOptionalValue(String s, Class<T> aClass) {
+//            throw new RuntimeException("Not implemented yet!");
+//        }
+//
+//        @Override
+//        public Iterable<String> getPropertyNames() {
+//            throw new RuntimeException("Not implemented yet!");
+//        }
+//
+//        @Override
+//        public Iterable<ConfigSource> getConfigSources() {
+//            throw new RuntimeException("Not implemented yet!");
+//        }
+//    }
 
     static class MyConfiguration implements Configuration {
         @Override
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesProviderTest.java
similarity index 53%
copy from modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
copy to modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesProviderTest.java
index ec60e8d..da4893f 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
+++ b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesProviderTest.java
@@ -18,15 +18,25 @@
  */
 package org.apache.tamaya.microprofile;
 
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class MicroprofileDefaultPropertiesTest {
+public class MicroprofileDefaultPropertiesProviderTest {
+
     @Test
-    public void hasOrdinalOf100() throws Exception {
-        MicroprofileDefaultProperties properties = new MicroprofileDefaultProperties();
+    public void hasPropertySources_NoClassLoader()  {
+        MicroprofileDefaultPropertiesProvider provider = new MicroprofileDefaultPropertiesProvider();
+        assertThat(provider.getPropertySources()).isNotNull().isNotEmpty();
+        assertThat(provider.getPropertySources().iterator().next().getOrdinal()).isEqualTo(100);
+    }
 
-        assertThat(properties.getOrdinal()).isEqualTo(100);
+    @Test
+    public void hasPropertySources() {
+        MicroprofileDefaultPropertiesProvider provider = new MicroprofileDefaultPropertiesProvider();
+        provider.init(ServiceContextManager.getDefaultClassLoader());
+        assertThat(provider.getPropertySources()).isNotNull().isNotEmpty();
+        assertThat(provider.getPropertySources().iterator().next().getOrdinal()).isEqualTo(100);
     }
 }
\ No newline at end of file
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
index ec60e8d..37a3abe 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
+++ b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/MicroprofileDefaultPropertiesTest.java
@@ -23,10 +23,12 @@ import org.junit.Test;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class MicroprofileDefaultPropertiesTest {
+
     @Test
     public void hasOrdinalOf100() throws Exception {
-        MicroprofileDefaultProperties properties = new MicroprofileDefaultProperties();
-
+        MicroprofileDefaultProperties properties = new MicroprofileDefaultProperties(
+                getClass().getResource("/META-INF/microprofile-config.properties")
+        );
         assertThat(properties.getOrdinal()).isEqualTo(100);
     }
 }
\ No newline at end of file
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigArchiveProcessor.java b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigArchiveProcessor.java
index 61cd11c..08919ae 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigArchiveProcessor.java
+++ b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigArchiveProcessor.java
@@ -34,6 +34,7 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.jboss.shrinkwrap.resolver.api.maven.Maven;
 
+import javax.annotation.Priority;
 import javax.enterprise.inject.spi.Extension;
 import java.io.File;
 
@@ -49,6 +50,9 @@ public class TamayaConfigArchiveProcessor implements ApplicationArchiveProcessor
     @Override
     public void process(Archive<?> applicationArchive, TestClass testClass) {
         if (applicationArchive instanceof WebArchive) {
+            File[] annotationLibs = Maven.resolver()
+                    .loadPomFromFile("pom.xml").resolve("javax.annotation:javax.annotation-api")
+                    .withTransitivity().asFile();
             File[] coreLibs = Maven.resolver()
                     .loadPomFromFile("pom.xml").resolve("org.apache.tamaya:tamaya-core")
                     .withTransitivity().asFile();
@@ -58,9 +62,13 @@ public class TamayaConfigArchiveProcessor implements ApplicationArchiveProcessor
             File[] functionsLib = Maven.resolver()
                     .loadPomFromFile("pom.xml").resolve("org.apache.tamaya.ext:tamaya-functions")
                     .withTransitivity().asFile();
+            File[] collectionsLib = Maven.resolver()
+                    .loadPomFromFile("pom.xml").resolve("org.apache.tamaya.ext:tamaya-collections")
+                    .withTransitivity().asFile();
 
             JavaArchive configJar = ShrinkWrap
                     .create(JavaArchive.class, "tamaya-config-impl.jar")
+                    .addClass(Priority.class)
                     .addPackage(MicroprofileAdapter.class.getPackage())
                     .addPackage(MicroprofileCDIExtension.class.getPackage())
                     .addPackage(BooleanAsIntegerConverterFix.class.getPackage())
@@ -71,9 +79,11 @@ public class TamayaConfigArchiveProcessor implements ApplicationArchiveProcessor
                     .addAsServiceProvider(Extension.class, MicroprofileCDIExtension.class);
             ((WebArchive) applicationArchive).addAsLibraries(
                     configJar)
+                    .addAsLibraries(annotationLibs)
                     .addAsLibraries(apiLibs)
                     .addAsLibraries(coreLibs)
-                    .addAsLibraries(functionsLib);
+                    .addAsLibraries(functionsLib)
+                    .addAsLibraries(collectionsLib);
         }
     }
 }
\ No newline at end of file
diff --git a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigExtension.java b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigExtension.java
index 9c0dfd3..b903f2d 100644
--- a/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigExtension.java
+++ b/modules/microprofile/src/test/java/org/apache/tamaya/microprofile/tck/TamayaConfigExtension.java
@@ -21,12 +21,32 @@ package org.apache.tamaya.microprofile.tck;
 import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
 import org.jboss.arquillian.core.spi.LoadableExtension;
 
+import java.lang.reflect.Field;
+import java.util.Map;
+
 /**
  * Arquillian extension to load Tamaya into Arquillian context.
  * @author <a href="mailto:anatole@apache.org">Anatole Tresch</a>
  */
 public class TamayaConfigExtension implements LoadableExtension {
 
+    static {
+        System.out.println("Preparing environment for Emily Tests");
+        try {
+            // Modify Environment
+            Map<String, String> map = System.getenv();
+            Field f = map.getClass().getDeclaredField("m");
+            f.setAccessible(true);
+            Map<String, String> modifiableMap = (Map<String, String>)f.get(map);
+            modifiableMap.put("my_int_property", "45");
+            modifiableMap.put("MY_BOOLEAN_PROPERTY", "true");
+            modifiableMap.put("my_string_property", "haha");
+            modifiableMap.put("MY_STRING_PROPERTY", "woohoo");
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+    }
+
     @Override
     public void register(ExtensionBuilder extensionBuilder) {
         extensionBuilder.service(
diff --git a/modules/microprofile/src/test/resources/META-INF/microprofile-config.properties b/modules/microprofile/src/test/resources/META-INF/microprofile-config.properties
index 2e63bf8..3705142 100644
--- a/modules/microprofile/src/test/resources/META-INF/microprofile-config.properties
+++ b/modules/microprofile/src/test/resources/META-INF/microprofile-config.properties
@@ -18,14 +18,18 @@
 # under the License.
 #
 
-my.optional.int.property=1234
-my.optional.string.property=hello
 
 tck.config.test.javaconfig.properties.key1=VALue1
 
 
 tck.config.test.overwritten.in.custompropertyfile.key1=value from microprofile-config.properties
 
+tck.config.test.javaconfig.converter.bytevalue = 123
+tck.config.test.javaconfig.converter.bytevalue.broken = xxx
+
+tck.config.test.javaconfig.converter.shortvalue = 1234
+tck.config.test.javaconfig.converter.shortvalue.broken = xxx
+
 
 tck.config.test.javaconfig.converter.integervalue = 1234
 tck.config.test.javaconfig.converter.integervalue.broken = xxx
@@ -39,6 +43,11 @@ tck.config.test.javaconfig.converter.floatvalue.broken = alfasdf
 tck.config.test.javaconfig.converter.doublevalue = 12.34
 tck.config.test.javaconfig.converter.doublevalue.broken = alfasdf
 
+tck.config.test.javaconfig.converter.charvalue = c
+tck.config.test.javaconfig.converter.charvalue.broken = xxx
+
+# the following are actually using implicit converters now:
+
 tck.config.test.javaconfig.converter.durationvalue = PT15M
 tck.config.test.javaconfig.converter.durationvalue.broken = alfasdf
 
@@ -57,11 +66,15 @@ tck.config.test.javaconfig.converter.offsetdatetimevalue.broken = alfasdf
 tck.config.test.javaconfig.converter.offsettimevalue = 13:45:30.123456789+02:00
 tck.config.test.javaconfig.converter.offsettimevalue.broken = alfasdf
 
+tck.config.test.javaconfig.converter.zoneoffsetvalue = +02:00
+tck.config.test.javaconfig.converter.zoneoffsetvalue.broken = alfasdf
+
 tck.config.test.javaconfig.converter.instantvalue = 2015-06-02T21:34:33.616Z
 tck.config.test.javaconfig.converter.instantvalue.broken = alfasdf
 
 tck.config.test.javaconfig.configvalue.key1=value1
 
+
 # test BooleanConverter START
 tck.config.test.javaconfig.configvalue.boolean.true=true
 tck.config.test.javaconfig.configvalue.boolean.true_uppercase=TRUE
@@ -76,6 +89,7 @@ tck.config.test.javaconfig.configvalue.boolean.yes=yes
 tck.config.test.javaconfig.configvalue.boolean.yes_uppercase=YES
 tck.config.test.javaconfig.configvalue.boolean.yes_mixedcase=Yes
 tck.config.test.javaconfig.configvalue.boolean.no=no
+tck.config.test.javaconfig.configvalue.boolean.no_mixedcase=No
 
 tck.config.test.javaconfig.configvalue.boolean.y=y
 tck.config.test.javaconfig.configvalue.boolean.y_uppercase=Y
@@ -97,9 +111,52 @@ tck.config.test.javaconfig.configvalue.double=12.34567890123456
 # Custom Converter tests
 tck.config.test.javaconfig.converter.duckname=Hannelore
 
+# Lambda converter tests
+tck.config.test.javaconfig.converter.donaldname=Duck
+
 # URL Converter tests
 tck.config.test.javaconfig.converter.urlvalue=http://microprofile.io
-tck.config.test.javaconfig.converter.urlvalue.broken=tt:--location$
-
-# Empty values
-my.empty.property.in.config.file=
\ No newline at end of file
+tck.config.test.javaconfig.converter.urlvalue.broken=tt:--location
+
+# URI Converter tests
+tck.config.test.javaconfig.converter.urivalue=http://microprofile.io
+tck.config.test.javaconfig.converter.urivalue.broken=space is an illegal uri character
+
+# implicit Converter tests
+tck.config.test.javaconfig.converter.implicit.enumvalue = FOO
+tck.config.test.javaconfig.converter.implicit.enumvalue.broken = foobar
+tck.config.test.javaconfig.converter.implicit.charSequenceCt=charSequenceCt
+tck.config.test.javaconfig.converter.implicit.charSequenceParse=charSequenceParse
+tck.config.test.javaconfig.converter.implicit.charSequenceValueOf=charSequenceValueOf
+tck.config.test.javaconfig.converter.implicit.stringCt=stringCt
+tck.config.test.javaconfig.converter.implicit.stringValueOf=stringValueOf
+tck.config.test.javaconfig.converter.implicit.stringOf=stringOf
+tck.config.test.javaconfig.converter.implicit.charSequenceParse.yearmonth=2017-12
+tck.config.test.javaconfig.converter.implicit.enumValueOf=BAZ
+
+
+#array converter tests
+
+tck.config.test.javaconfig.converter.array.pizza=large:cheese\\,mushroom,medium:chicken,small:pepperoni
+tck.config.test.javaconfig.converter.integervalues = 1234,9999
+tck.config.test.javaconfig.converter.longvalues = 1234567890,1999999999
+tck.config.test.javaconfig.converter.floatvalues = 12.34,99.99
+tck.config.test.javaconfig.converter.doublevalues = 12.34,99.9999
+tck.config.test.javaconfig.converter.durationvalues = PT15M,PT20M
+tck.config.test.javaconfig.converter.localtimevalues = 10:37,11:44
+tck.config.test.javaconfig.converter.localdatevalues = 2017-12-24,2017-11-29
+tck.config.test.javaconfig.converter.localdatetimevalues = 2017-12-24T10:25:30,2017-12-24T10:25:33
+tck.config.test.javaconfig.converter.offsetdatetimevalues = 2007-12-03T10:15:30+01:00,2007-12-03T10:15:30+02:00
+tck.config.test.javaconfig.converter.offsettimevalues = 13:45:30.123456789+02:00,13:45:30.123456789+03:00
+tck.config.test.javaconfig.converter.instantvalues = 2015-06-02T21:34:33.616Z,2017-06-02T21:34:33.616Z
+tck.config.test.javaconfig.converter.booleanvalues=true,off,on
+tck.config.test.javaconfig.converter.stringvalues=microservice,microprofile,m\\,f,microservice
+tck.config.test.javaconfig.converter.urlvalues=http://microprofile.io,http://openliberty.io,http://microprofile.io
+
+tck.config.test.javaconfig.converter.class=org.eclipse.microprofile.config.tck.ClassConverterTest
+tck.config.test.javaconfig.converter.class.array=org.eclipse.microprofile.config.tck.ClassConverterTest,java.lang.String
+
+# variable replacement rests
+tck.config.variable.baseHost = some.host.name
+tck.config.variable.firstEndpoint = http://${tck.config.variable.baseHost}/endpointOne
+tck.config.variable.secondEndpoint = http://${tck.config.variable.baseHost}/endpointTwo
\ No newline at end of file
diff --git a/modules/microprofile/src/test/resources/sampleconfig.yaml b/modules/microprofile/src/test/resources/sampleconfig.yaml
deleted file mode 100644
index 27f2392..0000000
--- a/modules/microprofile/src/test/resources/sampleconfig.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Copyright (c) 2016-2017 Mark Struberg and others
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# just needed as a trigger for the ConfigSource pickup.
-# Content is hardcoded in SampleYamlConfigSource
\ No newline at end of file
diff --git a/modules/microprofile/src/test/tck-suite.xml b/modules/microprofile/src/test/tck-suite.xml
index 84d36ad..20f38b0 100644
--- a/modules/microprofile/src/test/tck-suite.xml
+++ b/modules/microprofile/src/test/tck-suite.xml
@@ -17,11 +17,10 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<suite name="microprofile-config-TCK" verbose="2" configfailurepolicy="continue" >
-        <test name="microprofile-config 1.1 TCK">
+<suite name="microprofile-config-TCK" verbose="4" configfailurepolicy="continue" >
+        <test name="microprofile-config 1.3 TCK">
             <packages>
-                <package name="org.eclipse.microprofile.config.tck.*">
-                </package>
+                <package name="org.eclipse.microprofile.config.tck.*"/>
             </packages>
         </test>
 </suite>
\ No newline at end of file
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
index 475799f..c5ae3b6 100644
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
+++ b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
@@ -82,8 +82,8 @@ public final class ConfigChangeRequest {
     }
 
     /**
-     * Get an unmodifiable key/createValue map of properties added or updated.
-     * @return an unmodifiable key/createValue map of properties added or updated, never null.
+     * Get an unmodifiable key/createValue mapProperties of properties added or updated.
+     * @return an unmodifiable key/createValue mapProperties of properties added or updated, never null.
      */
     public Map<String,String> getAddedProperties(){
         return Collections.unmodifiableMap(addedProperties);
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
index cb8d7f0..6943c26 100644
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
+++ b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfiguration.java
@@ -29,7 +29,7 @@ import java.util.Map;
 /**
  * This interface extends the Configuration interface hereby adding methods to change configuration entries.
  * Hereby not all configuration entries are necessarily mutable, since some entries may be read from non
- * mutable areas of configuration. Of course, it is always possible to add a mutable shadow layer on top of all
+ * mutable areas of configuration. Of course, it is always possible to addPropertyValue a mutable shadow layer on top of all
  * property sources to persist/control any changes applied. The exact management and storage persistence algorithm
  * should be transparent.
  *
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutablePropertiesPropertySource.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutablePropertiesPropertySource.java
index 2c6c66d..38fba52 100644
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutablePropertiesPropertySource.java
+++ b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutablePropertiesPropertySource.java
@@ -93,7 +93,7 @@ public class MutablePropertiesPropertySource extends BasePropertySource
 
     @Override
     public Map<String, PropertyValue> getProperties() {
-        return PropertyValue.map(this.properties, getName());
+        return PropertyValue.mapProperties(this.properties, getName());
     }
 
     /**
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutableXmlPropertiesPropertySource.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutableXmlPropertiesPropertySource.java
index 510ba81..8976b62 100644
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutableXmlPropertiesPropertySource.java
+++ b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/MutableXmlPropertiesPropertySource.java
@@ -97,7 +97,7 @@ public class MutableXmlPropertiesPropertySource extends BasePropertySource
 
     @Override
     public Map<String, PropertyValue> getProperties() {
-        return PropertyValue.map(this.properties, getName());
+        return PropertyValue.mapProperties(this.properties, getName());
     }
 
     /**
diff --git a/modules/osgi/common/src/main/java/org/apache/tamaya/osgi/Policy.java b/modules/osgi/common/src/main/java/org/apache/tamaya/osgi/Policy.java
index f19c2d1..e6bd49f 100644
--- a/modules/osgi/common/src/main/java/org/apache/tamaya/osgi/Policy.java
+++ b/modules/osgi/common/src/main/java/org/apache/tamaya/osgi/Policy.java
@@ -22,9 +22,9 @@ package org.apache.tamaya.osgi;
  * Operation mode applied to the getConfig read.
  */
 public enum Policy {
-    /** Only add properties not existing in the getConfig. */
+    /** Only addPropertyValue properties not existing in the getConfig. */
     EXTEND,
-    /** Override existing properties and add new properties. */
+    /** Override existing properties and addPropertyValue new properties. */
     OVERRIDE,
     /** Override existing properties only. */
     UPDATE_ONLY
diff --git a/modules/osgi/common/src/test/java/org/apache/tamaya/osgi/TamayaConfigPluginTest.java b/modules/osgi/common/src/test/java/org/apache/tamaya/osgi/TamayaConfigPluginTest.java
index 6d32ed4..21b5712 100644
--- a/modules/osgi/common/src/test/java/org/apache/tamaya/osgi/TamayaConfigPluginTest.java
+++ b/modules/osgi/common/src/test/java/org/apache/tamaya/osgi/TamayaConfigPluginTest.java
@@ -138,7 +138,7 @@ public class TamayaConfigPluginTest extends  AbstractOSGITest{
         assertThat(config.getProperties()).isNotNull();
         assertThat(config.getProperties().isEmpty()).isFalse();
         assertThat(config.getProperties().size() > 4).isTrue();
-        // Override should add additional values
+        // Override should addPropertyValue additional values
         assertThat("success1").isEqualTo(config.getProperties().get("my.testProperty1"));
         assertThat("success2").isEqualTo(config.getProperties().get("my.testProperty2"));
         assertThat("success3").isEqualTo(config.getProperties().get("my.testProperty3"));
@@ -161,7 +161,7 @@ public class TamayaConfigPluginTest extends  AbstractOSGITest{
         assertThat(config.getProperties()).isNotNull();
         assertThat(config.getProperties().isEmpty()).isFalse();
         assertThat(config.getProperties().size() > 4).isTrue();
-        // Override should add additional values
+        // Override should addPropertyValue additional values
         assertThat("success1").isEqualTo(config.getProperties().get("my.testProperty1"));
         assertThat("success2").isEqualTo(config.getProperties().get("my.testProperty2"));
         assertThat("success3").isEqualTo(config.getProperties().get("my.testProperty3"));
@@ -212,7 +212,7 @@ public class TamayaConfigPluginTest extends  AbstractOSGITest{
         assertThat(cm).isNotNull();
         Dictionary<String,Object> result = tamayaConfigPlugin.updateConfig("tamaya", Policy.OVERRIDE, true, true);
         assertThat(result).isNotNull();
-        // Override should add additional values
+        // Override should addPropertyValue additional values
         assertThat(result.get("my.testProperty1")).isEqualTo("success1");
         assertThat(result.get("my.testProperty2")).isEqualTo("success2");
         assertThat(result.get("my.testProperty3")).isEqualTo("success3");
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
index 0922c23..ef930aa 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ResourceResolver.java
@@ -123,7 +123,7 @@ public final class ResourceResolver implements ExpressionResolver, ClassloaderAw
         } else {
             for (ClassLoader cl : classLoaders) {
                 List<URL> resources = new ArrayList<>();
-                Enumeration<URL> found;
+                Collection<URL> found;
                 try {
                     found = ServiceContextManager.getServiceContext(cl)
                             .getResources(expression);
@@ -131,9 +131,7 @@ public final class ResourceResolver implements ExpressionResolver, ClassloaderAw
                     LOG.log(Level.SEVERE, "Error resolving expression: " + expression, e);
                     continue;
                 }
-                while (found.hasMoreElements()) {
-                    resources.add(found.nextElement());
-                }
+                resources.addAll(found);
                 if (!resources.isEmpty()) {
                     if (resources.size() != 1) {
                         LOG.log(Level.WARNING, "Unresolvable expression (ambiguous resource): " + expression);
diff --git a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
index 00aaa76..61911b1 100644
--- a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
+++ b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
@@ -95,7 +95,7 @@ public class MyTestPropertySource implements PropertySource{
     public Map<String, PropertyValue> getProperties() {
         Map<String, PropertyValue> res = new HashMap<>();
         for(Map.Entry<String,String> en:properties.entrySet()){
-            res.put(en.getKey(), PropertyValue.of(en.getKey(), en.getValue(), "test"));
+            res.put(en.getKey(), PropertyValue.createValue(en.getKey(), en.getValue()));
         }
         return res;
     }
diff --git a/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClassPathResourceLocator.java b/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClassPathResourceLocator.java
index f198095..3f4cb02 100644
--- a/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClassPathResourceLocator.java
+++ b/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClassPathResourceLocator.java
@@ -53,15 +53,14 @@ public class ClassPathResourceLocator implements ResourceLocator{
     public Collection<URL> lookup(ClassLoader classLoader, String expression) {
         List<URL> resources = new ArrayList<>();
         try {
-            Enumeration<URL> urls = ServiceContextManager.getServiceContext(
+            Collection<URL> urls = ServiceContextManager.getServiceContext(
                     Thread.currentThread().getContextClassLoader()
             ).getResources(expression);
-            while (urls.hasMoreElements()) {
-                URL url = urls.nextElement();
+            for (URL url:urls) {
                 resources.add(url);
             }
             return resources;
-        } catch (IOException | RuntimeException e) {
+        } catch (Exception e) {
             LOG.finest("Failed to load resource from CP: " + expression);
             return Collections.emptySet();
         }
diff --git a/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClasspathCollector.java b/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClasspathCollector.java
index f27f7ef..e8fe6f9 100644
--- a/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClasspathCollector.java
+++ b/modules/resources/src/main/java/org/apache/tamaya/resource/internal/ClasspathCollector.java
@@ -115,12 +115,10 @@ public class ClasspathCollector {
         Locator locator = Locator.of(expression);
         List<URL> result = new ArrayList<>();
         try {
-            Enumeration<URL> rootResources = ServiceContextManager.getServiceContext(
+            Collection<URL> rootResources = ServiceContextManager.getServiceContext(
                     this.classLoader
-            )
-                            .getResources(locator.getRootPath());
-            while (rootResources.hasMoreElements()) {
-                URL resource = rootResources.nextElement();
+            ).getResources(locator.getRootPath());
+            for (URL resource:rootResources) {
                 try {
                     if (isJarFile(resource)) {
                         result.addAll(doFindPathMatchingJarResources(resource, locator.getSubPath()));
@@ -134,7 +132,7 @@ public class ClasspathCollector {
                     LOG.log(Level.SEVERE, "Error locating resources for: " + expression, e);
                 }
             }
-        } catch (IOException | RuntimeException e) {
+        } catch (Exception e) {
             LOG.log(Level.SEVERE, "Error locating resources for: " + expression, e);
         }
         return result;
@@ -279,8 +277,8 @@ public class ClasspathCollector {
 
     /**
      * Method that collects resources from a JBoss classloading system using Vfs.
-     * @param rootResource the root resource for evaluating its getValues.
-     * @param locationPattern the sub pattern that all getValues must mach, so they are selected.
+     * @param rootResource the root resource for evaluating its getPropertyValues.
+     * @param locationPattern the sub pattern that all getPropertyValues must mach, so they are selected.
      * @return the resources found, never null.
      * @throws IOException on Vfs error
      */
diff --git a/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java b/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
index 1d13ed2..d6e4fc6 100644
--- a/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
+++ b/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
@@ -80,7 +80,7 @@ public class AbstractPathPropertySourceProviderTest {
          * <p/>
          * <p>Reordering of the default order of the config-sources:</p>
          * <p>Example: If the properties file/s should be used <b>before</b> the other implementations,
-         * you have to configure an ordinal &gt; 400. That means, you have to add e.g. deltaspike_ordinal=401 to
+         * you have to configure an ordinal &gt; 400. That means, you have to addPropertyValue e.g. deltaspike_ordinal=401 to
          * /META-INF/apache-deltaspike.properties . Hint: In case of property files every file is handled as independent
          * config-source, but all of them have ordinal 400 by default (and can be reordered in a fine-grained manner.</p>
          *
diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java
index f380574..e236981 100644
--- a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java
+++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java
@@ -34,13 +34,13 @@ import java.lang.annotation.Target;
 public @interface EnableTamayaConfig {
 
     /**
-     * If set to true, Tamaya will only extend the current Spring configuration, instead of overriding it (default).
+     * If setPropertyValue to true, Tamaya will only extend the current Spring configuration, instead of overriding it (default).
      * @return true to extend only the default Spring configuration.
      */
     boolean extendOnly() default false;
 
     /**
-     * If set to true, Tamaya configuration injection will be disabled. Spring injection mechanisms are never
+     * If setPropertyValue to true, Tamaya configuration injection will be disabled. Spring injection mechanisms are never
      * touched by this feature. Default is false.
      * @return true to switch off Tamaya injection in your Spring application.
      */
diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java
index 7b01ac8..eece5bd 100644
--- a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java
+++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java
@@ -27,7 +27,7 @@
 //public class TamayaDefaultConfigSupplier implements Supplier<Configuration> {
 //
 //    @Override
-//    public Configuration get() {
+//    public Configuration getPropertyValue() {
 //        return Configuration.current();
 //    }
 //}


Mime
View raw message