refactor and working. 8 specs passing