public void LoadAndInitializeLevel()
        {
            XElement levelData = LoadLevelData();

            if (Data.Profile.PlayingRaceMode)
            {
                RaceLapCount = GetLapsForRace(levelData);
            }
            else
            {
                XElement rankFractionElement = levelData.Element(Rank_Fraction_Data_Element);
                RankACandyFraction = GetCandyFractionForRanking(rankFractionElement, "a", Rank_A_Candy_Fraction);
                RankBCandyFraction = GetCandyFractionForRanking(rankFractionElement, "b", Rank_B_Candy_Fraction);
            }

            WireUpCallElementFactoryCallbacks();

            Map = BlockFactory.CreateLevelBlockMap(levelData.Element(Terrain_Data_Element).Element(BlockFactory.Data_Group_Node_Name));

            CollectableFactory.LoadCollectables(levelData.Element(Terrain_Data_Element).Element(CollectableFactory.Data_Group_Node_Name));
            SignpostFactory.LoadSignposts(levelData.Element(Terrain_Data_Element).Element(SignpostFactory.Data_Group_Node_Name));
            FlagFactory.LoadFlags(levelData.Element(Terrain_Data_Element).Element(FlagFactory.Data_Group_Node_Name));

            Player = CharacterFactory.LoadPlayer(levelData.Element(CharacterFactory.Player_Data_Node_Name));

            FinalizeLevelSetup(levelData);
        }