model separation: GameState, GameProgress, GamePreferences