added IExternalizable interface