/// <summary>
        /// Iterate through all the objects in ActiveObjects and call Begin
        /// </summary>
        public override void Begin()
        {
            base.Begin();

            // Do not need to check whether begun has already been called - this is guaranteed

            // Do another pass on our ObjectsToAdd to add any stragglers
            ActiveObjects.AddRange(ObjectsToAdd);
            ObjectsToAdd.Clear();

            foreach (T obj in ActiveObjects.FindAll(x => !x.IsBegun))
            {
                // Call begin on any object which has not already begun
                obj.Begin();
            }
        }