**WIP:** V2.0

Rewrote it to be better.
this might read better if you return it as a function expression in the return statement