Currently WIP - however feel free to suggest code changes!