working but needs a shitload of more tests, and also adapters