Oups I did it again, yet another round of refactor