refactored into using an abstract factory that is loaded from the classpath, this could possibly become an osgi fragement