/// <summary>
        /// Subscribe to start recieving Update calls
        /// </summary>
        /// <param name="obj"></param>
        public static void Subscribe(IUnityEvents obj
#if ORDERED_GENERICS
                                     , int executionOrder = 0
#endif
                                     )
        {
            if (obj == null || Contains(obj))
            {
                return;
            }

            try
            {
                obj.OnSubscribe();
            }
            catch (Exception e)
            {
                Debug.LogError(e.ToString());
            }
#if ORDERED_GENERICS
            Wrapper w = new Wrapper(obj, executionOrder);
            Add(w, s_generics);
#else
            s_generics.Add(obj);
#endif
        }
        /// <summary>
        /// Queues for Awake & Start calls before subscribing for Update calls
        /// </summary>
        /// <param name="obj"></param>
        public static void Instantiate(IUnityEvents obj
#if ORDERED_GENERICS
                                       , int executionOrder = 0
#endif
                                       )
        {
            if (obj == null || Contains(obj))
            {
                return;
            }

            obj.OnSubscribe();
#if ORDERED_GENERICS
            Wrapper w = new Wrapper(obj, executionOrder);
            Add(w, s_toInitialize);
#else
            s_toInitialize.Add(obj);
#endif
        }