pass all tests but ugly! (must refactor it)