more refactor, betters specs layout,  more tests