Adding an abstract model to handle initialization and validation