/// <summary>
        /// Removes stored value
        /// </summary>
        /// <param name="index">The property index</param>
        /// <param name="key">The key use to add the value</param>
        public void Remove(int index, object key)
        {
            lock (m_LockObject)
            {
                PropertyEntry entry = (PropertyEntry)m_properties[index];
                if (entry == null)
                {
                    return;
                }
                if (entry.values == null)
                {
                    return;
                }

                entry.values.Remove(key);

                // remove entry if it's empty
                if (entry.values.Count < 1)
                {
                    m_properties.Remove(index);
                    return;
                }

                entry.CalculateCachedValue();
            }
        }