Move to an actual architecture, making it easier to add new features