public void Insert(int index, T item)
        {
            if (IsReadOnly)
            {
                throw new NotSupportedException();
            }
            if (index < 0 || index >= Count)
            {
                throw new ArgumentOutOfRangeException("index");
            }

            bool isList;
            int  propertyIndex, indexInProperty;
            ICalendarProperty p = PropertyForIndex(index, out isList, out propertyIndex, out indexInProperty);

            if (p != null)
            {
                if (isList)
                {
                    ((IList <object>)p.Value).Insert(indexInProperty, item);
                }
                else
                {
                    ICalendarProperty newProperty = p.Copy <ICalendarProperty>();
                    newProperty.Value = item;
                    m_PropertyList.Insert(propertyIndex, newProperty);
                }
            }
        }