I did some refactoring and moved some methods around to make them easier
o find. I changed NO functionality, everything should still work the
same.