Refactor 

This is a total refactor. It contains some braking changes, for example changes to method signatures and method names. For that reason, merge this PR should lead to a major version bump.

Major features are: 

- Object orientation instead of procedural style
- Remove unused arguments and methods