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

[08/16] incubator-tamaya-sandbox git commit: TAMAYA-355 Enable mapping of lists and arrays into internal datastructures, reestablished conversion/filter context (backward compatible).

TAMAYA-355  Enable mapping of lists and arrays into internal datastructures, reestablished conversion/filter context (backward compatible).


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/1fbe9a15
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/1fbe9a15
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/1fbe9a15

Branch: refs/heads/master
Commit: 1fbe9a1589ecc591164d7457f0c74fdd2bb3f20a
Parents: 70980cc
Author: Anatole Tresch <at...@gmail.com>
Authored: Sat Nov 3 21:27:53 2018 +0100
Committer: Anatole Tresch <at...@gmail.com>
Committed: Sat Nov 3 21:27:53 2018 +0100

----------------------------------------------------------------------
 .../tamaya/collections/ArrayListConverter.java  |  9 +--
 .../tamaya/collections/CollectionConverter.java | 71 +++++++++---------
 .../collections/ConcurrentHashMapConverter.java | 19 +----
 .../tamaya/collections/HashMapConverter.java    |  8 +--
 .../tamaya/collections/HashSetConverter.java    | 19 +----
 .../tamaya/collections/ItemTokenizer.java       | 75 ++++++++------------
 .../tamaya/collections/LinkedListConverter.java | 20 +-----
 .../tamaya/collections/ListConverter.java       |  7 +-
 .../apache/tamaya/collections/MapConverter.java |  9 ++-
 .../apache/tamaya/collections/SetConverter.java |  7 +-
 .../tamaya/collections/SortedMapConverter.java  |  5 +-
 .../tamaya/collections/SortedSetConverter.java  |  4 +-
 .../tamaya/collections/TreeMapConverter.java    | 19 +----
 .../tamaya/collections/TreeSetConverter.java    | 16 +----
 .../collections/MyUpperCaseConverter.java       |  3 +-
 .../hazelcast/HazelcastPropertySource.java      |  5 --
 .../tamaya/jodatime/DateTimeConverter.java      |  6 +-
 .../tamaya/jodatime/DateTimeZoneConverter.java  | 12 +---
 .../tamaya/jodatime/DurationConverter.java      | 40 ++++-------
 .../tamaya/jodatime/InstantConverter.java       |  6 +-
 .../tamaya/jodatime/LocalDateConverter.java     |  6 +-
 .../tamaya/jodatime/LocalTimeConverter.java     |  6 +-
 .../apache/tamaya/jodatime/PeriodConverter.java | 12 +---
 .../tamaya/jodatime/DateTimeConverterTest.java  | 26 +++----
 .../jodatime/DateTimeZoneConverterTest.java     | 22 +++---
 .../tamaya/jodatime/DurationConverterTest.java  | 24 +++----
 .../tamaya/jodatime/PeriodConverterTest.java    | 21 +++---
 .../apache/tamaya/metamodel/CachedFilter.java   |  3 +-
 .../org/apache/tamaya/metamodel/HideFilter.java |  3 +-
 .../tamaya/metamodel/ImmutableFilter.java       |  5 +-
 .../org/apache/tamaya/metamodel/MapFilter.java  |  3 +-
 .../org/apache/tamaya/metamodel/MaskFilter.java |  3 +-
 .../apache/tamaya/metamodel/SecuredFilter.java  |  3 +-
 .../metamodel/ext/FilteredPropertySource.java   | 43 ++++-------
 .../tamaya/metamodel/ext/MyConverter.java       |  3 +-
 .../apache/tamaya/metamodel/ext/MyFilter.java   |  3 +-
 .../org/apache/tamaya/uom/UnitConverter.java    |  9 +--
 .../apache/tamaya/uom/UnitConverterTest.java    |  5 +-
 .../internal/UsageTrackerFilter.java            |  5 +-
 39 files changed, 201 insertions(+), 364 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java
index 616b22a..2715cfc 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java
@@ -43,13 +43,8 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> {
     }
 
     @Override
-    public ArrayList convert(String value) {
-        ConversionContext context = ConversionContext.current();
-        if(context!=null){
-            // Use configurable mechanism
-            return CollectionConverter.convertList(context, ArrayList::new);
-        }
-        return CollectionConverter.convertSimpleList(value);
+    public ArrayList convert(String value, ConversionContext context) {
+        return CollectionConverter.convertList(context, ArrayList::new);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java b/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
index 69aa99e..215d128 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
@@ -68,23 +68,23 @@ public final class CollectionConverter implements PropertyConverter<Collection>
         T result = collectionSupplier.get();
         switch (mappingType) {
             case node_all:
-                return convertListByNodes(context.getValues(), context.getConfiguration(),
+                return convertListByNodes(context.getValues(), context,
                         collectionTargetType, result, true);
             case node:
-                return convertListByNodes(context.getValues(), context.getConfiguration(),
+                return convertListByNodes(context.getValues(), context,
                         collectionTargetType, result, false);
             case value:
-                return convertListByValues(context.getValues(), context.getConfiguration(),
+                return convertListByValues(context.getValues(), context,
                         collectionTargetType, result, false);
             default:
             case value_all:
-                return convertListByValues(context.getValues(), context.getConfiguration(),
+                return convertListByValues(context.getValues(), context,
                         collectionTargetType, result, true);
         }
     }
 
     private static <T extends Collection> T convertListByValues(List<PropertyValue> values,
-                                                                Configuration config,
+                                                                ConversionContext context,
                                                                 TypeLiteral<?> targetType,
                                                                 T result,
                                                                 boolean combine) {
@@ -92,9 +92,9 @@ public final class CollectionConverter implements PropertyConverter<Collection>
             values = Collections.singletonList(values.get(0));
         }
         for (PropertyValue val : values) {
-            List<String> tokenList = ItemTokenizer.split(val.getValue());
+            List<String> tokenList = ItemTokenizer.split(val.getValue(), context);
             for (String token : tokenList) {
-                Object o = ItemTokenizer.convertValue(token, targetType);
+                Object o = ItemTokenizer.convertValue(token, targetType, context);
                 if (o != null) {
                     result.add(o);
                 }else{
@@ -107,7 +107,7 @@ public final class CollectionConverter implements PropertyConverter<Collection>
     }
 
     private static <T extends Collection> T convertListByNodes(List<PropertyValue> values,
-                                                               Configuration config,
+                                                               ConversionContext context,
                                                                TypeLiteral<?> targetType,
                                                                T result,
                                                                boolean combine) {
@@ -119,7 +119,7 @@ public final class CollectionConverter implements PropertyConverter<Collection>
                 if(targetType.equals(TypeLiteral.of(String.class))){
                     result.add(itemNode.getValue());
                 }else {
-                    Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType);
+                    Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType, context);
                     if (o != null) {
                         result.add(o);
                     }else{
@@ -147,35 +147,35 @@ public final class CollectionConverter implements PropertyConverter<Collection>
         T result = collectionSupplier.get();
         switch (mappingType) {
             case node_all:
-                return convertMapByNodes(context.getValues(), context.getConfiguration(),
+                return convertMapByNodes(context.getValues(), context,
                         collectionTargetType, result, true);
             case node:
-                return convertMapByNodes(context.getValues(), context.getConfiguration(),
+                return convertMapByNodes(context.getValues(), context,
                         collectionTargetType, result, false);
             case value:
-                return convertMapByValues(context.getValues(), context.getConfiguration(),
+                return convertMapByValues(context.getValues(), context,
                         collectionTargetType, result, false);
             default:
             case value_all:
-                return convertMapByValues(context.getValues(), context.getConfiguration(),
+                return convertMapByValues(context.getValues(), context,
                         collectionTargetType, result, true);
         }
     }
 
 
     private static <T extends Map> T convertMapByValues(List<PropertyValue> values,
-                                                                Configuration config,
-                                                                TypeLiteral<?> targetType,
-                                                                T result,
-                                                                boolean combine) {
+                                                        ConversionContext context,
+                                                        TypeLiteral<?> targetType,
+                                                        T result,
+                                                        boolean combine) {
         if(!combine){
             values = Collections.singletonList(values.get(0));
         }
         for (PropertyValue val : values) {
-            List<String> tokenList = ItemTokenizer.split(val.getValue());
+            List<String> tokenList = ItemTokenizer.split(val.getValue(), context);
             for(String token:tokenList) {
-                String[] keyValue = ItemTokenizer.splitMapEntry(token);
-                Object o = ItemTokenizer.convertValue(keyValue[1], targetType);
+                String[] keyValue = ItemTokenizer.splitMapEntry(token, context);
+                Object o = ItemTokenizer.convertValue(keyValue[1], targetType, context);
                 if (o != null) {
                     result.put(keyValue[0], o);
                 }else{
@@ -188,16 +188,16 @@ public final class CollectionConverter implements PropertyConverter<Collection>
     }
 
     private static <T extends Map> T convertMapByNodes(List<PropertyValue> values,
-                                                               Configuration config,
-                                                               TypeLiteral<?> targetType,
-                                                               T result,
-                                                               boolean combine) {
+                                                       ConversionContext context,
+                                                       TypeLiteral<?> targetType,
+                                                       T result,
+                                                       boolean combine) {
         if(!combine){
             values = Collections.singletonList(values.get(0));
         }
         for (PropertyValue val : values) {
             for(PropertyValue itemNode:val) {
-                Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType);
+                Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType, context);
                 if (o != null) {
                     result.put(itemNode.getKey(), o);
                 }else{
@@ -210,8 +210,8 @@ public final class CollectionConverter implements PropertyConverter<Collection>
     }
 
 
-    public static ArrayList<String> convertSimpleList(String value) {
-        List<String> rawList = ItemTokenizer.split(value);
+    public static ArrayList<String> convertSimpleList(String value, ConversionContext context) {
+        List<String> rawList = ItemTokenizer.split(value, context);
         ArrayList<String> mlist = new ArrayList<>();
         for(String raw:rawList){
             String convValue = raw;
@@ -222,11 +222,11 @@ public final class CollectionConverter implements PropertyConverter<Collection>
         return mlist;
     }
 
-    public static Map<String,String> convertSimpleMap(String value) {
-        List<String> rawList = ItemTokenizer.split(value);
+    public static Map<String,String> convertSimpleMap(String value, ConversionContext context) {
+        List<String> rawList = ItemTokenizer.split(value, context);
         HashMap<String,String> result = new HashMap(rawList.size());
         for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
             if(items.length==1){
                 result.put(items[0], items[0]);
             }else{
@@ -237,8 +237,7 @@ public final class CollectionConverter implements PropertyConverter<Collection>
     }
 
     @Override
-    public Collection convert(String value) {
-        ConversionContext context = ConversionContext.current();
+    public Collection convert(String value, ConversionContext context) {
         String collectionType = "List";
         if(context!=null) {
             collectionType = (String)context.getMeta().getOrDefault("collection-type", "List");
@@ -249,20 +248,20 @@ public final class CollectionConverter implements PropertyConverter<Collection>
         Collection result = null;
         switch (collectionType) {
             case "LinkedList":
-                result = LinkedListConverter.getInstance().convert(value);
+                result = LinkedListConverter.getInstance().convert(value, context);
                 break;
             case "Set":
             case "HashSet":
-                result = HashSetConverter.getInstance().convert(value);
+                result = HashSetConverter.getInstance().convert(value, context);
                 break;
             case "SortedSet":
             case "TreeSet":
-                result = TreeSetConverter.getInstance().convert(value);
+                result = TreeSetConverter.getInstance().convert(value, context);
                 break;
             case "List":
             case "ArrayList":
             default:
-                result = ArrayListConverter.getInstance().convert(value);
+                result = ArrayListConverter.getInstance().convert(value, context);
                 break;
         }
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java
index 3c56749..506ac00 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java
@@ -45,23 +45,8 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH
     }
 
     @Override
-    public ConcurrentHashMap convert(String value) {
-        ConversionContext context = ConversionContext.current();
-        if(context!=null){
-            return CollectionConverter.convertMap(context, ConcurrentHashMap::new);
-        }
-        List<String> rawList = ItemTokenizer.split(value);
-        ConcurrentHashMap result = new ConcurrentHashMap(rawList.size());
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
-            Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class));
-            if(convValue!=null){
-                result.put(items[0], convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'.");
-            }
-        }
-        return result;
+    public ConcurrentHashMap convert(String value, ConversionContext context) {
+        return CollectionConverter.convertMap(context, ConcurrentHashMap::new);
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java
index 3e27b5d..19ecb46 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java
@@ -42,12 +42,8 @@ public class HashMapConverter implements PropertyConverter<HashMap> {
     }
 
     @Override
-    public HashMap convert(String value) {
-        ConversionContext context = ConversionContext.current();
-        if(context!=null){
-            return CollectionConverter.convertMap(context, HashMap::new);
-        }
-        return (HashMap)CollectionConverter.convertSimpleMap(value);
+    public HashMap convert(String value, ConversionContext context) {
+        return CollectionConverter.convertMap(context, HashMap::new);
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java
index b7ca65e..47a5044 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java
@@ -46,22 +46,7 @@ public class HashSetConverter implements PropertyConverter<HashSet> {
     }
 
     @Override
-    public HashSet convert(String value) {
-        ConversionContext context = ConversionContext.current();
-        if(context!=null){
-            return CollectionConverter.convertList(context, HashSet::new);
-        }
-        List<String> rawList = ItemTokenizer.split(value);
-        HashSet<Object> result = new HashSet<>();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
-            Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class));
-            if(convValue!=null){
-                result.add(convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'.");
-            }
-        }
-        return result;
+    public HashSet convert(String value, ConversionContext context) {
+        return CollectionConverter.convertList(context, HashSet::new);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java b/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
index 4267c24..7cd043b 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
@@ -46,13 +46,9 @@ final class ItemTokenizer {
      * @param value the createValue, not null.
      * @return the tokenized createValue as createList, in order of occurrence.
      */
-    public static List<String> split(String value){
-        ConversionContext ctx = ConversionContext.current();
-        if(ctx != null){
-            String itemSeparator = (String)ctx.getMeta().getOrDefault("item-separator", ",");
-            return split(value, itemSeparator);
-        }
-        return split(value, ",");
+    public static List<String> split(String value, ConversionContext ctx){
+        String itemSeparator = (String)ctx.getMeta().getOrDefault("item-separator", ",");
+        return split(value, itemSeparator);
     }
 
     /**
@@ -87,13 +83,9 @@ final class ItemTokenizer {
      * @param mapEntry the entry, not null.
      * @return an array of length 2, with the trimmed and parsed key/createValue pair.
      */
-    public static String[] splitMapEntry(String mapEntry){
-        ConversionContext ctx = ConversionContext.current();
-        if(ctx != null){
-            String entrySeparator = (String)ctx.getMeta().getOrDefault("map-entry-separator", "=");
-            return splitMapEntry(mapEntry, entrySeparator);
-        }
-        return splitMapEntry(mapEntry, "=");
+    public static String[] splitMapEntry(String mapEntry, ConversionContext ctx){
+        String entrySeparator = (String)ctx.getMeta().getOrDefault("map-entry-separator", "=");
+        return splitMapEntry(mapEntry, entrySeparator);
     }
 
     /**
@@ -132,42 +124,35 @@ final class ItemTokenizer {
      * @param value the raw String createValue.
      * @return the parsed createValue, or null.
      */
-    public static <T> T convertValue(String value, TypeLiteral<T> targetType) {
-        ConversionContext context = ConversionContext.current();
-        if (context != null) {
-            String converterClass = context.getMeta().get("item-converter");
-            List<PropertyConverter<T>> valueConverters = new ArrayList<>(1);
-            if (converterClass != null) {
+    public static <T> T convertValue(String value, TypeLiteral<T> targetType, ConversionContext context) {
+        String converterClass = context.getMeta().get("item-converter");
+        List<PropertyConverter<T>> valueConverters = new ArrayList<>(1);
+        if (converterClass != null) {
+            try {
+                valueConverters.add((PropertyConverter<T>) Class.forName(converterClass).newInstance());
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+            }
+        }
+        valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(targetType));
+        if (valueConverters.isEmpty()) {
+            if(targetType.getRawType().equals(String.class)) {
+                return (T)value;
+            }
+        } else {
+            ConversionContext newContext = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                    targetType).build();
+            T result = null;
+            for (PropertyConverter<T> conv : valueConverters) {
                 try {
-                    valueConverters.add((PropertyConverter<T>) Class.forName(converterClass).newInstance());
+                    result = conv.convert(value, newContext);
+                    if (result != null) {
+                        return result;
+                    }
                 } catch (Exception e) {
                     LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
                 }
             }
-            valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(targetType));
-            try{
-                if (valueConverters.isEmpty()) {
-                    if(targetType.getRawType().equals(String.class)) {
-                        return (T)value;
-                    }
-                } else {
-                    ConversionContext.set(new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
-                            targetType).build());
-                    T result = null;
-                    for (PropertyConverter<T> conv : valueConverters) {
-                        try {
-                            result = conv.convert(value);
-                            if (result != null) {
-                                return result;
-                            }
-                        } catch (Exception e) {
-                            LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
-                        }
-                    }
-                }
-            }finally {
-                ConversionContext.set(context);
-            }
         }
         LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '" + value + "'.");
         return null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java
index 6c3fa3d..b769ab6 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java
@@ -45,24 +45,8 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> {
     }
 
     @Override
-    public LinkedList convert(String value) {
-        ConversionContext context = ConversionContext.current();
-        if(context!=null){
-            return CollectionConverter.convertList(context, LinkedList::new);
-        }
-        List<String> rawList = ItemTokenizer.split(value);
-        LinkedList<Object> result = new LinkedList<>();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
-            Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class));
-            if(convValue!=null){
-                result.add(convValue);
-                continue;
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'.");
-            }
-        }
-        return result;
+    public LinkedList convert(String value, ConversionContext context) {
+        return CollectionConverter.convertList(context, LinkedList::new);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java
index 1a97132..769be12 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java
@@ -31,8 +31,7 @@ import java.util.function.Supplier;
 public class ListConverter implements PropertyConverter<List> {
 
     @Override
-    public List convert(String value) {
-        ConversionContext context = ConversionContext.current();
+    public List convert(String value, ConversionContext context) {
         String collectionType = "ArrayList";
         boolean readOnly = false;
         if(context!=null) {
@@ -45,12 +44,12 @@ public class ListConverter implements PropertyConverter<List> {
         List result = null;
         switch(collectionType){
             case "LinkedList":
-                result = LinkedListConverter.getInstance().convert(value);
+                result = LinkedListConverter.getInstance().convert(value, context);
                 break;
             case "List":
             case "ArrayList":
             default:
-                result = ArrayListConverter.getInstance().convert(value);
+                result = ArrayListConverter.getInstance().convert(value, context);
                 break;
         }
         if(readOnly){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java
index d7e149e..08fefff 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java
@@ -30,8 +30,7 @@ import java.util.Map;
 public class MapConverter implements PropertyConverter<Map> {
 
     @Override
-    public Map convert(String value) {
-        ConversionContext context = ConversionContext.current();
+    public Map convert(String value, ConversionContext context) {
         String collectionType = "HashMap";
         boolean readOnly = false;
         if(context!=null) {
@@ -45,15 +44,15 @@ public class MapConverter implements PropertyConverter<Map> {
         switch(collectionType){
             case "TreeMap":
             case "SortedMap":
-                result = TreeMapConverter.getInstance().convert(value);
+                result = TreeMapConverter.getInstance().convert(value, context);
                 break;
             case "ConcurrentHashMap":
-                result = ConcurrentHashMapConverter.getInstance().convert(value);
+                result = ConcurrentHashMapConverter.getInstance().convert(value, context);
                 break;
             case "Map":
             case "HashMap":
             default:
-                result = HashMapConverter.getInstance().convert(value);
+                result = HashMapConverter.getInstance().convert(value, context);
                 break;
         }
         if(readOnly){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java
index c9a70b5..b66ef5b 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java
@@ -30,8 +30,7 @@ import java.util.Set;
 public class SetConverter implements PropertyConverter<Set> {
 
     @Override
-    public Set convert(String value) {
-        ConversionContext context = ConversionContext.current();
+    public Set convert(String value, ConversionContext context) {
         String collectionType = "Set";
         boolean readOnly = false;
         if(context!=null) {
@@ -44,12 +43,12 @@ public class SetConverter implements PropertyConverter<Set> {
         Set result;
         switch(collectionType){
             case "TreeSet":
-                result = TreeSetConverter.getInstance().convert(value);
+                result = TreeSetConverter.getInstance().convert(value, context);
                 break;
             case "Set":
             case "HashSet":
             default:
-                result = HashSetConverter.getInstance().convert(value);
+                result = HashSetConverter.getInstance().convert(value, context);
                 break;
         }
         if(readOnly){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java
index 972c72c..5416e28 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.Collections;
@@ -29,7 +30,7 @@ import java.util.SortedMap;
 public class SortedMapConverter implements PropertyConverter<SortedMap> {
 
     @Override
-    public SortedMap convert(String value) {
-        return Collections.unmodifiableSortedMap(TreeMapConverter.getInstance().convert(value));
+    public SortedMap convert(String value, ConversionContext context) {
+        return Collections.unmodifiableSortedMap(TreeMapConverter.getInstance().convert(value, context));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java
index 6ae4f5b..acac96c 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java
@@ -31,7 +31,7 @@ import java.util.TreeSet;
 public class SortedSetConverter implements PropertyConverter<SortedSet> {
 
     @Override
-    public SortedSet convert(String value) {
-        return TreeSetConverter.getInstance().convert(value);
+    public SortedSet convert(String value, ConversionContext context) {
+        return TreeSetConverter.getInstance().convert(value, context);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java
index 08378a6..b287dd9 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java
@@ -46,22 +46,7 @@ public class TreeMapConverter implements PropertyConverter<TreeMap> {
     }
 
     @Override
-    public TreeMap convert(String value) {
-        ConversionContext context = ConversionContext.current();
-        if(context!=null){
-            return CollectionConverter.convertMap(context, TreeMap::new);
-        }
-        List<String> rawList = ItemTokenizer.split(value);
-        TreeMap result = new TreeMap();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
-            Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class));
-            if(convValue!=null){
-                result.put(items[0], convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'.");
-            }
-        }
-        return result;
+    public TreeMap convert(String value, ConversionContext context) {
+        return CollectionConverter.convertMap(context, TreeMap::new);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java
index 0625957..c5651f5 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java
@@ -46,19 +46,7 @@ public class TreeSetConverter implements PropertyConverter<TreeSet> {
     }
 
     @Override
-    public TreeSet convert(String value) {
-        TreeSet result = null;
-        ConversionContext context = ConversionContext.current();
-        if(context!=null) {
-            result = CollectionConverter.convertList(context, TreeSet::new);
-        }
-        else {
-            List<String> rawList = ItemTokenizer.split(value);
-            result = new TreeSet<>();
-            for (String raw : rawList) {
-                result.add(raw);
-            }
-        }
-        return result;
+    public TreeSet convert(String value, ConversionContext context) {
+        return CollectionConverter.convertList(context, TreeSet::new);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
index 221b9a1..1c95261 100644
--- a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
+++ b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.tamaya.spi.PropertyConverter;
  */
 public class MyUpperCaseConverter implements PropertyConverter<String>{
     @Override
-    public String convert(String value) {
+    public String convert(String value, ConversionContext context) {
         return "("+value.toUpperCase()+")";
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
----------------------------------------------------------------------
diff --git a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
index 2da7739..1a716d3 100644
--- a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
+++ b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
@@ -179,11 +179,6 @@ implements MutablePropertySource{
         return PropertyValue.map(this.configMap, getName(), meta);
     }
 
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
-
     /**
      * Reloads the configuration map from Hazelcast completely.
      */

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
index 5942f8c..864eb32 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
@@ -90,10 +90,8 @@ public class DateTimeConverter implements PropertyConverter<DateTime> {
     }
 
     @Override
-    public DateTime convert(String value) {
-        ConversionContext.doOptional(context -> {
-            context.addSupportedFormats(DateTimeConverter.class, PARSER_FORMATS);
-        });
+    public DateTime convert(String value, ConversionContext context) {
+        context.addSupportedFormats(DateTimeConverter.class, PARSER_FORMATS);
 
         String trimmed = Objects.requireNonNull(value).trim();
         DateTime result = null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
index ba13442..b4d4e0e 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
@@ -42,9 +42,10 @@ public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> {
     private static final Pattern IS_INTEGER_VALUE = Pattern.compile(PATTERN_REGEX);
 
     @Override
-    public DateTimeZone convert(String value) {
+    public DateTimeZone convert(String value, ConversionContext context) {
         String trimmed = requireNonNull(value).trim();
-        addSupportedFormats();
+        context.addSupportedFormats(DateTimeZoneConverter.class, "Time zone in the form [+-]hh:mm via the regex " + PATTERN_REGEX);
+        context.addSupportedFormats(DateTimeZoneConverter.class, "All time zone ids supported by Joda Time");
 
         DateTimeZone result = null;
 
@@ -63,13 +64,6 @@ public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> {
         return result;
     }
 
-    private void addSupportedFormats() {
-        ConversionContext.doOptional(context -> {
-            context.addSupportedFormats(DateTimeZoneConverter.class, "Time zone in the form [+-]hh:mm via the regex " + PATTERN_REGEX);
-            context.addSupportedFormats(DateTimeZoneConverter.class, "All time zone ids supported by Joda Time");
-        });
-    }
-
     private boolean isSingleIntegerValue(String value) {
         boolean match = IS_INTEGER_VALUE.matcher(value).matches();
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java
index 32fdc7f..efefd25 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java
@@ -43,40 +43,28 @@ public class DurationConverter implements PropertyConverter<Duration> {
     private PeriodConverter periodConverter = new PeriodConverter();
 
     @Override
-    public Duration convert(String value) {
+    public Duration convert(String value, ConversionContext context) {
         String trimmed = Objects.requireNonNull(value).trim();
-        addSupportedFormats();
+        context.addSupportedFormats(getClass(), "PTa.bS");
+        context.addSupportedFormats(getClass(), "PdDThHmMsS");
+        context.addSupportedFormats(getClass(), "ddThh:mm:ss");
         try {
             return Duration.parse(value);
         }catch(Exception e){
+            ConversionContext subContext = new ConversionContext.Builder(context.getConfiguration(), context.getKey(), context.getTargetType())
+                    .setValues(context.getValues()).build();
             Period period = null;
-            ConversionContext ctx = ConversionContext.current();
-            try {
-                ConversionContext.reset();
-                if (value.startsWith("P")) {
-                    period = periodConverter.convert("P0Y0M0W" + value.substring(1));
-                }
-                if (period == null) {
-                    period = periodConverter.convert("P0000-00-" + value);
-                }
-                if (period != null) {
-                    return period.toStandardDuration();
-                }
-            }finally{
-                if(ctx!=null){
-                    ConversionContext.set(ctx);
-                }
+            if (value.startsWith("P")) {
+                period = periodConverter.convert("P0Y0M0W" + value.substring(1), subContext);
+            }
+            if (period == null) {
+                period = periodConverter.convert("P0000-00-" + value, subContext);
+            }
+            if (period != null) {
+                return period.toStandardDuration();
             }
         }
         return null;
     }
 
-    private void addSupportedFormats() {
-        ConversionContext.doOptional(context -> {
-            context.addSupportedFormats(getClass(), "PTa.bS");
-            context.addSupportedFormats(getClass(), "PdDThHmMsS");
-            context.addSupportedFormats(getClass(), "ddThh:mm:ss");
-        });
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java
index b1d6f53..3295fbc 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java
@@ -87,10 +87,8 @@ public class InstantConverter implements PropertyConverter<Instant> {
     }
 
     @Override
-    public Instant convert(String value) {
-        ConversionContext.doOptional(context -> {
-            context.addSupportedFormats(InstantConverter.class, PARSER_FORMATS);
-        });
+    public Instant convert(String value, ConversionContext context) {
+        context.addSupportedFormats(InstantConverter.class, PARSER_FORMATS);
 
         String trimmed = Objects.requireNonNull(value).trim();
         try {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java
index d4c5cd6..0739e93 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java
@@ -66,10 +66,8 @@ public class LocalDateConverter implements PropertyConverter<LocalDate> {
     }
 
     @Override
-    public LocalDate convert(String value) {
-        ConversionContext.doOptional(context -> {
-            context.addSupportedFormats(LocalDateConverter.class, PARSER_FORMATS);
-                });
+    public LocalDate convert(String value, ConversionContext context) {
+        context.addSupportedFormats(LocalDateConverter.class, PARSER_FORMATS);
 
         String trimmed = Objects.requireNonNull(value).trim();
         LocalDate result = null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java
index 7784308..22593c0 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java
@@ -50,10 +50,8 @@ public class LocalTimeConverter implements PropertyConverter<LocalTime> {
     };
 
     @Override
-    public LocalTime convert(String value) {
-        ConversionContext.doOptional(context -> {
-                    context.addSupportedFormats(LocalTimeConverter.class, PARSER_FORMATS);
-                });
+    public LocalTime convert(String value, ConversionContext context) {
+        context.addSupportedFormats(LocalTimeConverter.class, PARSER_FORMATS);
 
         String trimmed = Objects.requireNonNull(value).trim();
         try {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
index 0b8e22d..dfe18e1 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
@@ -57,10 +57,11 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period>
     private final static Pattern ALTERNATIVE_PATTERN = Pattern.compile(ALTERNATIVE_REGEX);
 
     @Override
-    public Period convert(String value) {
+    public Period convert(String value, ConversionContext context) {
         String trimmed = Objects.requireNonNull(value).trim();
 
-        addSupportedFormats();
+        context.addSupportedFormats(PeriodConverter.class, "PyYmMwWdDThHmMsS");
+        context.addSupportedFormats(PeriodConverter.class, "Pyyyy-mm-ddThh:mm:ss");
 
         MutablePeriod result = null;
         PeriodParser format = null;
@@ -83,13 +84,6 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period>
         return result != null ? result.toPeriod() : null;
     }
 
-    private void addSupportedFormats() {
-        ConversionContext.doOptional(context -> {
-            context.addSupportedFormats(PeriodConverter.class, "PyYmMwWdDThHmMsS");
-            context.addSupportedFormats(PeriodConverter.class, "Pyyyy-mm-ddThh:mm:ss");
-        });
-    }
-
     private boolean isISOFormat(String value) {
         return ISO_PATTERN.matcher(value).matches();
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
index 7283cb2..58b4587 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
@@ -68,9 +68,9 @@ public class DateTimeConverterTest {
              {" 2007-08-31T16:47:01.123+00:00", FORMATTER.parseDateTime("2007-08-31T16:47:01.123+00:00")},
              {"2007-08-31T16:47:01+00:00 ", FORMATTER.parseDateTime("2007-08-31T16:47:01.0+00:00")},
         };
-
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build();
         for (Object[] pair : inputResultPairs) {
-            DateTime date = converter.convert((String)pair[0]);
+            DateTime date = converter.convert((String)pair[0], context);
 
             assertThat("Converter failed to convert input createValue " + pair[0], date, notNullValue());
             assertThat(date.isEqual((DateTime)pair[1]), is(true));
@@ -83,8 +83,9 @@ public class DateTimeConverterTest {
              "00:00", "a", "-", "+ :00", "+00:"
         };
 
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build();
         for (String input : inputValues) {
-            DateTime date = converter.convert(input);
+            DateTime date = converter.convert(input, context);
 
             assertThat(date, nullValue());
         }
@@ -93,18 +94,13 @@ public class DateTimeConverterTest {
     @Test
     public void allSupportedFormatsAreAddedToTheConversionContext() {
         ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build();
-        try {
-            ConversionContext.set(context);
-            converter.convert("2007-08-31T16+00:00");
-
-            assertThat(context.getSupportedFormats(), hasSize(DateTimeConverter.PARSER_FORMATS.length));
-
-            for (String format : DateTimeConverter.PARSER_FORMATS) {
-                String expected = format + " (" + DateTimeConverter.class.getSimpleName() + ")";
-                assertThat(context.getSupportedFormats(), hasItem(expected));
-            }
-        }finally {
-            ConversionContext.reset();
+        converter.convert("2007-08-31T16+00:00", context);
+
+        assertThat(context.getSupportedFormats(), hasSize(DateTimeConverter.PARSER_FORMATS.length));
+
+        for (String format : DateTimeConverter.PARSER_FORMATS) {
+            String expected = format + " (" + DateTimeConverter.class.getSimpleName() + ")";
+            assertThat(context.getSupportedFormats(), hasItem(expected));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
index 6061d29..7bc3adb 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
@@ -55,9 +55,9 @@ public class DateTimeZoneConverterTest {
              {" +00:00 ", DateTimeZone.forID("+00:00")},
              {"+04:00", DateTimeZone.forID("+04:00")},
         };
-
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTimeZone.class)).build();
         for (Object[] pair : inputResultPairs) {
-            DateTimeZone zone = converter.convert((String) pair[0]);
+            DateTimeZone zone = converter.convert((String) pair[0], context);
 
             assertThat("Converter failed to convert input createValue " + pair[0], zone, notNullValue());
             assertThat(zone, equalTo((DateTimeZone)pair[1]));
@@ -74,8 +74,9 @@ public class DateTimeZoneConverterTest {
              "2007-08-01+00:00"
         };
 
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTimeZone.class)).build();
         for (String input : inputValues) {
-            DateTimeZone date = converter.convert(input);
+            DateTimeZone date = converter.convert(input, context);
 
             assertThat(date, nullValue());
         }
@@ -87,17 +88,12 @@ public class DateTimeZoneConverterTest {
         String secondFormat = "All time zone ids supported by Joda Time (DateTimeZoneConverter)";
 
         ConversionContext context = new Builder(TypeLiteral.of(DateTimeZone.class)).build();
-        try {
-            ConversionContext.set(context);
-            DateTimeZone result = converter.convert("+01:00");
+        DateTimeZone result = converter.convert("+01:00", context);
 
-            assertThat(result, notNullValue());
-            assertThat(context.getSupportedFormats(), hasSize(2));
-            assertThat(context.getSupportedFormats(), hasItem(firstFormat));
-            assertThat(context.getSupportedFormats(), hasItem(secondFormat));
-        }finally{
-            ConversionContext.reset();
-        }
+        assertThat(result, notNullValue());
+        assertThat(context.getSupportedFormats(), hasSize(2));
+        assertThat(context.getSupportedFormats(), hasItem(firstFormat));
+        assertThat(context.getSupportedFormats(), hasItem(secondFormat));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
index 07270d1..7ddf6da 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
@@ -58,8 +58,9 @@ public class DurationConverterTest {
 
         };
 
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build();
         for (Object[] pair : inputResultPairs) {
-            Duration duration = converter.convert((String) pair[0]);
+            Duration duration = converter.convert((String) pair[0], context);
 
             assertThat("Converter failed to convert input createValue " + pair[0], duration, notNullValue());
             assertThat(duration, equalTo((Duration) pair[1]));
@@ -75,9 +76,9 @@ public class DurationConverterTest {
                 "-",
                 "fooBar",
         };
-
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build();
         for (String input : inputValues) {
-            Duration duration = converter.convert(input);
+            Duration duration = converter.convert(input, context);
 
             assertThat(duration, nullValue());
         }
@@ -88,16 +89,11 @@ public class DurationConverterTest {
         String name = DurationConverter.class.getSimpleName();
 
         ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build();
-        try {
-            ConversionContext.set(context);
-            converter.convert("P0DT0H0M0S");
-
-            assertThat(context.getSupportedFormats(), hasSize(3));
-            assertThat(context.getSupportedFormats(), hasItem("PdDThHmMsS (" + name + ")"));
-            assertThat(context.getSupportedFormats(), hasItem("ddThh:mm:ss (" + name + ")"));
-            assertThat(context.getSupportedFormats(), hasItem("PTa.bS (" + name + ")"));
-        }finally{
-            ConversionContext.reset();
-        }
+        converter.convert("P0DT0H0M0S", context);
+
+        assertThat(context.getSupportedFormats(), hasSize(3));
+        assertThat(context.getSupportedFormats(), hasItem("PdDThHmMsS (" + name + ")"));
+        assertThat(context.getSupportedFormats(), hasItem("ddThh:mm:ss (" + name + ")"));
+        assertThat(context.getSupportedFormats(), hasItem("PTa.bS (" + name + ")"));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
index 15e0018..9ed7724 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
@@ -62,8 +62,9 @@ public class PeriodConverterTest {
              {"P0002-03-00T00:00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")}
         };
 
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build();
         for (Object[] pair : inputResultPairs) {
-            Period period = converter.convert((String) pair[0]);
+            Period period = converter.convert((String) pair[0], context);
 
             assertThat("Converter failed to convert input createValue " + pair[0], period, notNullValue());
             assertThat(period, equalTo((Period)pair[1]));
@@ -78,8 +79,9 @@ public class PeriodConverterTest {
             "P0002T00:05"
         };
 
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build();
         for (String input : inputValues) {
-            Period period = converter.convert(input);
+            Period period = converter.convert(input, context);
 
             assertThat(period, nullValue());
         }
@@ -90,15 +92,10 @@ public class PeriodConverterTest {
         String name = PeriodConverter.class.getSimpleName();
 
         ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build();
-        try {
-            ConversionContext.set(context);
-            converter.convert("P7Y0M0W0DT0H0M0S");
-
-            assertThat(context.getSupportedFormats(), hasSize(2));
-            assertThat(context.getSupportedFormats(), hasItem("PyYmMwWdDThHmMsS (" + name + ")"));
-            assertThat(context.getSupportedFormats(), hasItem("Pyyyy-mm-ddThh:mm:ss (" + name + ")"));
-        }finally{
-            ConversionContext.reset();
-        }
+        converter.convert("P7Y0M0W0DT0H0M0S", context);
+
+        assertThat(context.getSupportedFormats(), hasSize(2));
+        assertThat(context.getSupportedFormats(), hasItem("PyYmMwWdDThHmMsS (" + name + ")"));
+        assertThat(context.getSupportedFormats(), hasItem("Pyyyy-mm-ddThh:mm:ss (" + name + ")"));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java
index 52e92c4..45d4b0a 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.metamodel;
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertyValue;
 
@@ -68,7 +69,7 @@ public class CachedFilter implements PropertyFilter{
     }
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         if(matches !=null){
             if(value.getKey().matches(matches)){
                 return resolveCachedEntry(value);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java
index 431b72e..b100906 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java
@@ -21,6 +21,7 @@ package org.apache.tamaya.metamodel;
 import java.util.Map;
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertyValue;
 
@@ -63,7 +64,7 @@ public class HideFilter implements PropertyFilter{
     }
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         if(matches !=null){
             if(value.getKey().matches(matches)){
                 return null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java
index 0b957a3..0a2acad 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java
@@ -56,10 +56,9 @@ public class ImmutableFilter implements PropertyFilter{
     private Map<String,PropertyValue> map = new ConcurrentHashMap<>();
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         String key = value.getKey();
-        FilterContext context = FilterContext.get();
-        if(context!=null && !context.isSinglePropertyScoped()) {
+        if(!context.isSinglePropertyScoped()) {
             key = value.getKey() + "_all";
         }
         PropertyValue val = map.get(key);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java
index f7ed5a7..9bf7d15 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.metamodel;
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertyValue;
 
@@ -83,7 +84,7 @@ public class MapFilter implements PropertyFilter{
     }
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         value = value.mutable();
         String key = value.getKey();
         if(matches !=null){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java
index cb63a25..9d356b2 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java
@@ -19,6 +19,7 @@
 package org.apache.tamaya.metamodel;
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertyValue;
 
@@ -112,7 +113,7 @@ public class MaskFilter implements PropertyFilter{
     }
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         if(matches !=null){
             if(value.getKey().matches(matches)){
                 return null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java
index bfa3672..7d41f68 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.metamodel;
 
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.metamodel.spi.ItemFactory;
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertyValue;
 
@@ -91,7 +92,7 @@ public class SecuredFilter implements PropertyFilter{
     }
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         if(matches !=null){
             if(!value.getKey().matches(matches)) {
                 return value;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
index 1fe93ff..856ef56 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java
@@ -85,18 +85,13 @@ public final class FilteredPropertySource extends BasePropertySource {
         PropertyValue value = wrapped.get(key);
         if(value != null && value.getValue()!=null){
             if(filters!=null){
-                try{
-                    FilterContext fc = new FilterContext(value, dummyContext);
-                    FilterContext.set(fc);
-                    PropertyValue filteredValue = value;
-                    for(PropertyFilter pf:filters){
-                        filteredValue = pf.filterProperty(filteredValue);
-                    }
-                    if(filteredValue!=null){
-                        return filteredValue;
-                    }
-                }finally {
-                    FilterContext.reset();
+                FilterContext fc = new FilterContext(value, dummyContext);
+                PropertyValue filteredValue = value;
+                for(PropertyFilter pf:filters){
+                    filteredValue = pf.filterProperty(filteredValue, fc);
+                }
+                if(filteredValue!=null){
+                    return filteredValue;
                 }
             }
         }
@@ -110,18 +105,13 @@ public final class FilteredPropertySource extends BasePropertySource {
             Map<String, PropertyValue> result = new HashMap<>();
             synchronized (filters) {
                 for (PropertyValue value : props.values()) {
-                    try{
-                        FilterContext fc = new FilterContext(value, dummyContext);
-                        FilterContext.set(fc);
-                        PropertyValue filteredValue = value;
-                        for (PropertyFilter pf : filters) {
-                            filteredValue = pf.filterProperty(filteredValue);
-                        }
-                        if (filteredValue != null) {
-                            result.put(filteredValue.getKey(), filteredValue);
-                        }
-                    }finally {
-                        FilterContext.reset();
+                    FilterContext fc = new FilterContext(value, dummyContext);
+                    PropertyValue filteredValue = value;
+                    for (PropertyFilter pf : filters) {
+                        filteredValue = pf.filterProperty(filteredValue, fc);
+                    }
+                    if (filteredValue != null) {
+                        result.put(filteredValue.getKey(), filteredValue);
                     }
                 }
             }
@@ -130,11 +120,6 @@ public final class FilteredPropertySource extends BasePropertySource {
         return Collections.emptyMap();
     }
 
-    @Override
-    public boolean isScannable() {
-        return wrapped.isScannable();
-    }
-
     /**
      * Adds the given filters to this property source.
      * @param filter the filters, not null.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java
index d19b3c3..038fcd2 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.metamodel.ext;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 /**
@@ -31,7 +32,7 @@ public class MyConverter implements PropertyConverter<String> {
     private String overrideValue;
 
     @Override
-    public String convert(String value) {
+    public String convert(String value, ConversionContext conversionContext) {
         return value;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java
----------------------------------------------------------------------
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java
index 938a48d..e6ab7e6 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.metamodel.ext;
 
+import org.apache.tamaya.spi.FilterContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertyValue;
 
@@ -32,7 +33,7 @@ public class MyFilter implements PropertyFilter{
     private String overrideValue;
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         return value;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java
----------------------------------------------------------------------
diff --git a/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java b/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java
index 0fb69f4..7c41aa0 100644
--- a/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java
+++ b/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java
@@ -40,9 +40,9 @@ public class UnitConverter implements PropertyConverter<Unit> {
 	private static final Pattern IS_INTEGER_VALUE = Pattern.compile(PATTERN_REGEX);
 
 	@Override
-	public Unit convert(String value) {
+	public Unit convert(String value, ConversionContext context) {
 		String trimmed = requireNonNull(value).trim();
-		addSupportedFormats();
+		context.addSupportedFormats(UnitConverter.class, "All Units supported by JSR 363");
 		UnitFormat format = ServiceProvider.current().getUnitFormatService().getUnitFormat();
 
 		Unit result = null;
@@ -58,9 +58,4 @@ public class UnitConverter implements PropertyConverter<Unit> {
 		return result;
 	}
 
-	private void addSupportedFormats() {
-		ConversionContext.doOptional(context -> {
-			context.addSupportedFormats(UnitConverter.class, "All Units supported by JSR 363");
-		});
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
----------------------------------------------------------------------
diff --git a/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java b/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
index 0afe8c9..7852693 100644
--- a/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
+++ b/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.uom;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.junit.Test;
 
 import tec.units.ri.unit.Units;
@@ -34,7 +36,8 @@ public class UnitConverterTest {
 	@Test
 	public void canConvertUnitInformation() {
 
-		Unit<?> unit = converter.convert("m");
+		ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Unit.class)).build();
+		Unit<?> unit = converter.convert("m", context);
 
 		assertThat("Converter failed to convert input createValue " + unit, notNullValue());
 		assertEquals(unit, Units.METRE);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
----------------------------------------------------------------------
diff --git a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
index 0c67354..f3811d5 100644
--- a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
+++ b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java
@@ -36,10 +36,9 @@ import java.util.logging.Filter;
 public class UsageTrackerFilter implements PropertyFilter{
 
     @Override
-    public PropertyValue filterProperty(PropertyValue value) {
+    public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
         ConfigUsageSpi tracker = ServiceContextManager.getServiceContext().getService(ConfigUsageSpi.class);
-        FilterContext context = FilterContext.get();
-        if (context == null || context.isSinglePropertyScoped()) {
+        if (context.isSinglePropertyScoped()) {
             tracker.recordSingleKeyAccess(value, context.current());
         } else {
             tracker.recordAllPropertiesAccess(context.current());