slight changes aka. complete refactoring aka. rewriting a lot of stuff