private static void UnregisterPathListener(SessionListener listener)
        {
            var pathInfo = listener.PathInfo;
            var session  = pathInfo.Rootsession;

            if (pathInfo.IsDirect)
            {
                listener.UnhookSession(session, false);
            }
            else
            {
                session.UnregisterSessionListenerOnTrait(listener);
            }
        }
        /// <summary>
        /// Rescinds the previously propogated listener.
        /// </summary>
        /// <param name="listener">Listener to be rescinded</param>
        /// <see cref="PropogateListener"/>
        void ISessionPropertyStore.RescindListener(SessionListener listener)
        {
            var value = this.Value as SessionBase;

            if (listener.PathInfo.IsTargetTrait(this))
            {
                // Unhook the change handler
                listener.UnhookSession(value, false);
            }
            else
            {
                // Unregister change listener from the next session
                value.UnregisterSessionListenerOnTrait(listener);
            }
        }