Refactor:

I basically rewrote the whole things but took out all the excess stuff that
 the user should be defining.