finish project, code refactor needed, comments needed