Rewrote API to be less reptative and more DRY.

- Learned how to use macros