will refactor tomorrow