added more test and refactorig (breaking)