I'll come back and edited this when I have more time.