We completely misread requirement, had to refactor dealing a lot