Heavy refactoring: it works !