// Helper method used by CopyPersonalizationState()
        private PersonalizationInfo ExtractPersonalizationState(Control control)
        {
            ITrackingPersonalizable trackingPersonalizable = control as ITrackingPersonalizable;
            IPersonalizable         customPersonalizable   = control as IPersonalizable;

            if (trackingPersonalizable != null)
            {
                trackingPersonalizable.BeginSave();
            }

            PersonalizationInfo info = new PersonalizationInfo();

            if (customPersonalizable != null)
            {
                info.CustomProperties = new PersonalizationDictionary();
                customPersonalizable.Save(info.CustomProperties);
            }
            info.Properties = BlobPersonalizationState.GetPersonalizedProperties(control, PersonalizationScope.Shared);

            if (trackingPersonalizable != null)
            {
                trackingPersonalizable.EndSave();
            }

            return(info);
        }