public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if (version == 0)
            {
                bool bNull;
                int iNull;
                bNull = reader.ReadBool(); //custom hues
                bNull = reader.ReadBool(); //m_Blessed
                bNull = reader.ReadBool(); //m_Bonded
                bNull = reader.ReadBool(); //m_Hued
                iNull = reader.ReadInt(); //m_BlessedPrice
                iNull = reader.ReadInt(); //m_BondedPrice
                iNull = reader.ReadInt(); //m_HuedPrice
                m_AccessLevel = (AccessLevel)reader.ReadInt();
                m_Currency = reader.ReadString();
                m_EditMode = reader.ReadBool();

                int size1 = reader.ReadInt();
                ArrayList alPrice = new ArrayList( size1 );
                for ( int i = 0; i < size1; ++i )
                {
                    int price = reader.ReadInt();
                    alPrice.Add( price );
                }

                int size4 = reader.ReadInt();
                ArrayList alNull = new ArrayList( size4 );
                for ( int i = 0; i < size4; ++i )
                {
                    int hue = reader.ReadInt();
                    alNull.Add( hue );
                }

                int size5 = reader.ReadInt();
                ArrayList alAmount = new ArrayList( size5 );
                for ( int i = 0; i < size5; ++i )
                {
                    int itemamount = reader.ReadInt();
                    alAmount.Add( itemamount );
                }

                int size2 = reader.ReadInt();
                ArrayList alItem = new ArrayList( size2 );
                for ( int i = 0; i < size2; ++i )
                {
                    string item = reader.ReadString();
                    alItem.Add( item );
                }

                int size3 = reader.ReadInt();
                ArrayList alName = new ArrayList( size3 );
                for ( int i = 0; i < size3; ++i )
                {
                    string gumpname = reader.ReadString();
                    alName.Add( gumpname );
                }

                int size6 = reader.ReadInt();
                alNull = new ArrayList( size6 );
                for ( int i = 0; i < size6; ++i )
                {
                    int hueprices = reader.ReadInt();
                    alNull.Add( hueprices );
                }
                //dispose of the not used arrays (bless.. bond...)
                alNull.Clear();
                for( int i = 0; i < alName.Count; i++ )
                {
                    VSItem v = new VSItem( alItem[i].ToString(), alName[i].ToString(), (int)alPrice[i], (int)alAmount[i], false, 0, "" );
                    ItemList.Add( v );
                }
                //dispose of the "old" arrays
                alItem.Clear();
                alName.Clear();
                alPrice.Clear();
                alAmount.Clear();
            }
            else switch( version )
            {
                case 3:
                case 2: goto case 0;
                case 1:
                {
                    bool blah = reader.ReadBool(); //for the usesledger

                    goto case 0;
                }
                case 0:
                {
                    m_AccessLevel = (AccessLevel)reader.ReadInt();
                    m_Currency = reader.ReadString();
                    m_EditMode = reader.ReadBool();

                    int size = reader.ReadInt();
                    m_ItemList = new ArrayList( size );
                    for ( int i = 0; i < size; ++i )
                    {
                        VSItem vsi = new VSItem();
                        vsi.Deserialize( reader, version );
                        m_ItemList.Add( vsi );
                    }

                    break;
                }
            }
        }