Feature/jfactory abstraction