Huge huge refactoring of model - THIS IS UNSTABLE