Important Notice : This is by no means a production ready library, it lacks documentation and is a bit flawed