WIP - Abstracting into a more generic architecture