lots and lots of changes. too many to list tbh, might rebase this commit later if i get bored enough.
- Refactoring