Added a bunch of new methods. Trying to keep it as object oriented as possible. I tried to commit everything, but some simple methods are missing commits.