Implement outcome checking & REFACTOR ALL THE THINGS