Refactor, rename some things and fix some bugs.
Refactor and improve abstraction.
Refactor and improve abstraction.