public virtual void Initialise(IEnumerable<Type> types)
        {
            if (_performanceTimer != Guid.Empty)
                Timing.StartTimer(_performanceTimer, this.GetType().Name + " Module Initialise", "Sorting types by inheritance");
            var sortedTypes = types.GetGenerationsByContentTypeInheritance();

            if (_performanceTimer != Guid.Empty)
                Timing.MarkTimer(_performanceTimer, "Starting Content Type Sync for module " + this.GetType().Name);
            CodeFirstManager.Current.Log("Initialising content types", this);
            foreach (var generation in sortedTypes)
            {
                SyncContentTypes(generation);
            }

            if (CodeFirstManager.Current.Features.InitialisationMode == InitialisationMode.Passive)
            {
                if (_performanceTimer != Guid.Empty)
                    Timing.EndTimer(_performanceTimer, "Complete - skipped allowed children and composition sync as InitialisationMode is Passive");
                return;
            }

            if (_performanceTimer != Guid.Empty)
                Timing.MarkTimer(_performanceTimer, "Starting Allowed Children and Composition Sync");
            CodeFirstManager.Current.Log("Starting Allowed Children and Composition Sync", this);
            SyncChildrenAndCompositions(sortedTypes);

            if (_performanceTimer != Guid.Empty)
                Timing.EndTimer(_performanceTimer, "Complete");
        }